Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2017 Mario Carneiro. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro

! This file was ported from Lean 3 source module order.rel_iso.basic
! leanprover-community/mathlib commit f29120f82f6e24a6f6579896dfa2de6769fec962
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Data.FunLike.Basic
import Mathlib.Logic.Embedding.Basic
import Mathlib.Order.RelClasses

/-!
# Relation homomorphisms, embeddings, isomorphisms

This file defines relation homomorphisms, embeddings, isomorphisms and order embeddings and
isomorphisms.

## Main declarations

* `RelHom`: Relation homomorphism. A `RelHom r s` is a function `f : α → β` such that
  `r a b → s (f a) (f b)`.
* `RelEmbedding`: Relation embedding. A `RelEmbedding r s` is an embedding `f : α ↪ β` such that
  `r a b ↔ s (f a) (f b)`.
* `RelIso`: Relation isomorphism. A `RelIso r s` is an equivalence `f : α ≃ β` such that
  `r a b ↔ s (f a) (f b)`.
* `sumLexCongr`, `prodLexCongr`: Creates a relation homomorphism between two `Sum.Lex` or two
  `Prod.Lex` from relation homomorphisms between their arguments.

## Notation

* `→r`: `RelHom`
* `↪r`: `RelEmbedding`
* `≃r`: `RelIso`
-/


open Function

universe u v w

variable {
α: Type ?u.42948
α
β: Type ?u.26798
β
γ: Type ?u.42954
γ
δ: Type ?u.11
δ
:
Type _: Type (?u.26798+1)
Type _
} {
r: ααProp
r
:
α: Type ?u.631
α
α: Type ?u.631
α
Prop: Type
Prop
} {
s: ββProp
s
:
β: Type ?u.634
β
β: Type ?u.634
β
Prop: Type
Prop
} {
t: γγProp
t
:
γ: Type ?u.18178
γ
γ: Type ?u.28608
γ
Prop: Type
Prop
} {
u: δδProp
u
:
δ: Type ?u.11
δ
δ: Type ?u.640
δ
Prop: Type
Prop
} /-- A relation homomorphism with respect to a given pair of relations `r` and `s` is a function `f : α → β` such that `r a b → s (f a) (f b)`. -/ structure
RelHom: {α : Type u_1} → {β : Type u_2} → (ααProp) → (ββProp) → Type (maxu_1u_2)
RelHom
{
α: Type ?u.74
α
β: Type ?u.77
β
:
Type _: Type (?u.77+1)
Type _
} (
r: ααProp
r
:
α: Type ?u.74
α
α: Type ?u.74
α
Prop: Type
Prop
) (
s: ββProp
s
:
β: Type ?u.77
β
β: Type ?u.77
β
Prop: Type
Prop
) where /-- The underlying function of a `RelHom` -/
toFun: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → RelHom r sαβ
toFun
:
α: Type ?u.74
α
β: Type ?u.77
β
/-- A `RelHom` sends related elements to related elements -/
map_rel': ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (self : RelHom r s) {a b : α}, r a bs (RelHom.toFun self a) (RelHom.toFun self b)
map_rel'
: ∀ {
a: ?m.99
a
b: ?m.102
b
},
r: ααProp
r
a: ?m.99
a
b: ?m.102
b
s: ββProp
s
(
toFun: αβ
toFun
a: ?m.99
a
) (
toFun: αβ
toFun
b: ?m.102
b
) #align rel_hom
RelHom: {α : Type u_1} → {β : Type u_2} → (ααProp) → (ββProp) → Type (maxu_1u_2)
RelHom
/-- A relation homomorphism with respect to a given pair of relations `r` and `s` is a function `f : α → β` such that `r a b → s (f a) (f b)`. -/ infixl:25 " →r " =>
RelHom: {α : Type u_1} → {β : Type u_2} → (ααProp) → (ββProp) → Type (maxu_1u_2)
RelHom
section /-- `RelHomClass F r s` asserts that `F` is a type of functions such that all `f : F` satisfy `r a b → s (f a) (f b)`. The relations `r` and `s` are `outParam`s since figuring them out from a goal is a higher-order matching problem that Lean usually can't do unaided. -/ class
RelHomClass: {F : Type u_1} → {α : outParam (Type u_2)} → {β : outParam (Type u_3)} → {r : outParam (ααProp)} → {s : outParam (ββProp)} → [toFunLike : FunLike F α fun x => β] → (∀ (f : F) {a b : α}, r a bs (f a) (f b)) → RelHomClass F r s
RelHomClass
(
F: Type ?u.8666
F
:
Type _: Type (?u.8666+1)
Type _
) {
α: outParam (Type ?u.8670)
α
β: outParam (Type ?u.8674)
β
:
outParam: Sort ?u.8669 → Sort ?u.8669
outParam
<|
Type _: Type (?u.8670+1)
Type _
} (
r: outParam (ααProp)
r
:
outParam: Sort ?u.8677 → Sort ?u.8677
outParam
<|
α: outParam (Type ?u.8670)
α
α: outParam (Type ?u.8670)
α
Prop: Type
Prop
) (
s: outParam (ββProp)
s
:
outParam: Sort ?u.8688 → Sort ?u.8688
outParam
<|
β: outParam (Type ?u.8674)
β
β: outParam (Type ?u.8674)
β
Prop: Type
Prop
) extends
FunLike: Sort ?u.8703 → (α : outParam (Sort ?u.8702)) → outParam (αSort ?u.8701)Sort (max(max(max1?u.8703)?u.8702)?u.8701)
FunLike
F: Type ?u.8666
F
α: outParam (Type ?u.8670)
α
fun
_: ?m.8705
_
=>
β: outParam (Type ?u.8674)
β
where /-- A `RelHomClass` sends related elements to related elements -/
map_rel: ∀ {F : Type u_1} {α : outParam (Type u_2)} {β : outParam (Type u_3)} {r : outParam (ααProp)} {s : outParam (ββProp)} [self : RelHomClass F r s] (f : F) {a b : α}, r a bs (f a) (f b)
map_rel
: ∀ (
f: F
f
:
F: Type ?u.8666
F
) {
a: ?m.8716
a
b: ?m.8719
b
},
r: outParam (ααProp)
r
a: ?m.8716
a
b: ?m.8719
b
s: outParam (ββProp)
s
(
f: F
f
a: ?m.8716
a
) (
f: F
f
b: ?m.8719
b
) #align rel_hom_class
RelHomClass: Type u_1 → {α : outParam (Type u_2)} → {β : outParam (Type u_3)} → outParam (ααProp)outParam (ββProp)Type (max(maxu_1u_2)u_3)
RelHomClass
export RelHomClass (map_rel) end namespace RelHomClass variable {
F: Type ?u.9277
F
:
Type _: Type (?u.9277+1)
Type _
} protected theorem
isIrrefl: ∀ [inst : RelHomClass F r s], F∀ [inst : IsIrrefl β s], IsIrrefl α r
isIrrefl
[
RelHomClass: Type ?u.9000 → {α : outParam (Type ?u.8999)} → {β : outParam (Type ?u.8998)} → outParam (ααProp)outParam (ββProp)Type (max(max?u.9000?u.8999)?u.8998)
RelHomClass
F: Type ?u.8995
F
r: ααProp
r
s: ββProp
s
] (
f: F
f
:
F: Type ?u.8995
F
) : ∀ [
IsIrrefl: (α : Type ?u.9020) → (ααProp) → Prop
IsIrrefl
β: Type ?u.8962
β
s: ββProp
s
],
IsIrrefl: (α : Type ?u.9025) → (ααProp) → Prop
IsIrrefl
α: Type ?u.8959
α
r: ααProp
r
| ⟨
H: ∀ (a : β), ¬s a a
H
⟩ => ⟨fun
_: ?m.9077
_
h: ?m.9080
h
=>
H: ∀ (a : β), ¬s a a
H
_: β
_
(
map_rel: ∀ {F : Type ?u.9085} {α : outParam (Type ?u.9084)} {β : outParam (Type ?u.9083)} {r : outParam (ααProp)} {s : outParam (ββProp)} [self : RelHomClass F r s] (f : F) {a b : α}, r a bs (f a) (f b)
map_rel
f: F
f
h: ?m.9080
h
)⟩ #align rel_hom_class.is_irrefl
RelHomClass.isIrrefl: ∀ {α : Type u_2} {β : Type u_3} {r : ααProp} {s : ββProp} {F : Type u_1} [inst : RelHomClass F r s], F∀ [inst : IsIrrefl β s], IsIrrefl α r
RelHomClass.isIrrefl
protected theorem
isAsymm: ∀ {α : Type u_2} {β : Type u_3} {r : ααProp} {s : ββProp} {F : Type u_1} [inst : RelHomClass F r s], F∀ [inst : IsAsymm β s], IsAsymm α r
isAsymm
[
RelHomClass: Type ?u.9282 → {α : outParam (Type ?u.9281)} → {β : outParam (Type ?u.9280)} → outParam (ααProp)outParam (ββProp)Type (max(max?u.9282?u.9281)?u.9280)
RelHomClass
F: Type ?u.9277
F
r: ααProp
r
s: ββProp
s
] (
f: F
f
:
F: Type ?u.9277
F
) : ∀ [
IsAsymm: (α : Type ?u.9302) → (ααProp) → Prop
IsAsymm
β: Type ?u.9244
β
s: ββProp
s
],
IsAsymm: (α : Type ?u.9307) → (ααProp) → Prop
IsAsymm
α: Type ?u.9241
α
r: ααProp
r
| ⟨
H: ∀ (a b : β), s a b¬s b a
H
⟩ => ⟨fun
_: ?m.9375
_
_: ?m.9378
_
h₁: ?m.9381
h₁
h₂: ?m.9384
h₂
=>
H: ∀ (a b : β), s a b¬s b a
H
_: β
_
_: β
_
(
map_rel: ∀ {F : Type ?u.9390} {α : outParam (Type ?u.9389)} {β : outParam (Type ?u.9388)} {r : outParam (ααProp)} {s : outParam (ββProp)} [self : RelHomClass F r s] (f : F) {a b : α}, r a bs (f a) (f b)
map_rel
f: F
f
h₁: ?m.9381
h₁
) (
map_rel: ∀ {F : Type ?u.9449} {α : outParam (Type ?u.9448)} {β : outParam (Type ?u.9447)} {r : outParam (ααProp)} {s : outParam (ββProp)} [self : RelHomClass F r s] (f : F) {a b : α}, r a bs (f a) (f b)
map_rel
f: F
f
h₂: ?m.9384
h₂
)⟩ #align rel_hom_class.is_asymm
RelHomClass.isAsymm: ∀ {α : Type u_2} {β : Type u_3} {r : ααProp} {s : ββProp} {F : Type u_1} [inst : RelHomClass F r s], F∀ [inst : IsAsymm β s], IsAsymm α r
RelHomClass.isAsymm
protected theorem
acc: ∀ {α : Type u_2} {β : Type u_3} {r : ααProp} {s : ββProp} {F : Type u_1} [inst : RelHomClass F r s] (f : F) (a : α), Acc s (f a)Acc r a
acc
[
RelHomClass: Type ?u.9667 → {α : outParam (Type ?u.9666)} → {β : outParam (Type ?u.9665)} → outParam (ααProp)outParam (ββProp)Type (max(max?u.9667?u.9666)?u.9665)
RelHomClass
F: Type ?u.9662
F
r: ααProp
r
s: ββProp
s
] (
f: F
f
:
F: Type ?u.9662
F
) (
a: α
a
:
α: Type ?u.9626
α
) :
Acc: {α : Sort ?u.9689} → (ααProp) → αProp
Acc
s: ββProp
s
(
f: F
f
a: α
a
) →
Acc: {α : Sort ?u.9814} → (ααProp) → αProp
Acc
r: ααProp
r
a: α
a
:=

Goals accomplished! 🐙
α: Type u_2

β: Type u_3

γ: Type ?u.9632

δ: Type ?u.9635

r: ααProp

s: ββProp

t: γγProp

u: δδProp

F: Type u_1

inst✝: RelHomClass F r s

f: F

a: α


Acc s (f a)Acc r a
α: Type u_2

β: Type u_3

γ: Type ?u.9632

δ: Type ?u.9635

r: ααProp

s: ββProp

t: γγProp

u: δδProp

F: Type u_1

inst✝: RelHomClass F r s

f: F

a: α

b: β

h: f a = b


Acc s bAcc r a
α: Type u_2

β: Type u_3

γ: Type ?u.9632

δ: Type ?u.9635

r: ααProp

s: ββProp

t: γγProp

u: δδProp

F: Type u_1

inst✝: RelHomClass F r s

f: F

a: α


Acc s (f a)Acc r a
α: Type u_2

β: Type u_3

γ: Type ?u.9632

δ: Type ?u.9635

r: ααProp

s: ββProp

t: γγProp

u: δδProp

F: Type u_1

inst✝: RelHomClass F r s

f: F

a: α

b: β

h: f a = b

ac: Acc s b


Acc r a
α: Type u_2

β: Type u_3

γ: Type ?u.9632

δ: Type ?u.9635

r: ααProp

s: ββProp

t: γγProp

u: δδProp

F: Type u_1

inst✝: RelHomClass F r s

f: F

a: α


Acc s (f a)Acc r a
α: Type u_2

β: Type u_3

γ: Type ?u.9632

δ: Type ?u.9635

r: ααProp

s: ββProp

t: γγProp

u: δδProp

F: Type u_1

inst✝: RelHomClass F r s

f: F

a✝: α

b: β

h✝: f a✝ = b

x✝: β

H: ∀ (y : β), s y x✝Acc s y

IH: ∀ (y : β), s y x✝∀ (a : α), f a = yAcc r a

a: α

h: f a = x✝


intro
Acc r a
α: Type u_2

β: Type u_3

γ: Type ?u.9632

δ: Type ?u.9635

r: ααProp

s: ββProp

t: γγProp

u: δδProp

F: Type u_1

inst✝: RelHomClass F r s

f: F

a: α


Acc s (f a)Acc r a
α: Type u_2

β: Type u_3

γ: Type ?u.9632

δ: Type ?u.9635

r: ααProp

s: ββProp

t: γγProp

u: δδProp

F: Type u_1

inst✝: RelHomClass F r s

f: F

a✝: α

b: β

h: f a✝ = b

a: α

H: ∀ (y : β), s y (f a)Acc s y

IH: ∀ (y : β), s y (f a)∀ (a : α), f a = yAcc r a


intro
Acc r a
α: Type u_2

β: Type u_3

γ: Type ?u.9632

δ: Type ?u.9635

r: ααProp

s: ββProp

t: γγProp

u: δδProp

F: Type u_1

inst✝: RelHomClass F r s

f: F

a: α


Acc s (f a)Acc r a

Goals accomplished! 🐙
#align rel_hom_class.acc
RelHomClass.acc: ∀ {α : Type u_2} {β : Type u_3} {r : ααProp} {s : ββProp} {F : Type u_1} [inst : RelHomClass F r s] (f : F) (a : α), Acc s (f a)Acc r a
RelHomClass.acc
protected theorem
wellFounded: ∀ {α : Type u_2} {β : Type u_3} {r : ααProp} {s : ββProp} {F : Type u_1} [inst : RelHomClass F r s], FWellFounded sWellFounded r
wellFounded
[
RelHomClass: Type ?u.10279 → {α : outParam (Type ?u.10278)} → {β : outParam (Type ?u.10277)} → outParam (ααProp)outParam (ββProp)Type (max(max?u.10279?u.10278)?u.10277)
RelHomClass
F: Type ?u.10274
F
r: ααProp
r
s: ββProp
s
] (
f: F
f
:
F: Type ?u.10274
F
) : ∀ _ :
WellFounded: {α : Sort ?u.10299} → (ααProp) → Prop
WellFounded
s: ββProp
s
,
WellFounded: {α : Sort ?u.10309} → (ααProp) → Prop
WellFounded
r: ααProp
r
| ⟨
H: ∀ (a : β), Acc s a
H
⟩ => ⟨fun
_: ?m.10365
_
=>
RelHomClass.acc: ∀ {α : Type ?u.10368} {β : Type ?u.10369} {r : ααProp} {s : ββProp} {F : Type ?u.10367} [inst : RelHomClass F r s] (f : F) (a : α), Acc s (f a)Acc r a
RelHomClass.acc
f: F
f
_: ?m.10370
_
(
H: ∀ (a : β), Acc s a
H
_: β
_
)⟩ #align rel_hom_class.well_founded
RelHomClass.wellFounded: ∀ {α : Type u_2} {β : Type u_3} {r : ααProp} {s : ββProp} {F : Type u_1} [inst : RelHomClass F r s], FWellFounded sWellFounded r
RelHomClass.wellFounded
end RelHomClass namespace RelHom
instance: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → RelHomClass (r →r s) r s
instance
:
RelHomClass: Type ?u.10546 → {α : outParam (Type ?u.10545)} → {β : outParam (Type ?u.10544)} → outParam (ααProp)outParam (ββProp)Type (max(max?u.10546?u.10545)?u.10544)
RelHomClass
(
r: ααProp
r
→r
s: ββProp
s
)
r: ααProp
r
s: ββProp
s
where coe
o: ?m.10613
o
:=
o: ?m.10613
o
.
toFun: {α : Type ?u.10616} → {β : Type ?u.10615} → {r : ααProp} → {s : ββProp} → r →r sαβ
toFun
coe_injective'
f: ?m.10640
f
g: ?m.10643
g
h: ?m.10646
h
:=

Goals accomplished! 🐙
α: Type ?u.10508

β: Type ?u.10511

γ: Type ?u.10514

δ: Type ?u.10517

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f, g: r →r s

h: (fun o => o.toFun) f = (fun o => o.toFun) g


f = g
α: Type ?u.10508

β: Type ?u.10511

γ: Type ?u.10514

δ: Type ?u.10517

r: ααProp

s: ββProp

t: γγProp

u: δδProp

g: r →r s

toFun✝: αβ

map_rel'✝: ∀ {a b : α}, r a bs (toFun✝ a) (toFun✝ b)

h: (fun o => o.toFun) { toFun := toFun✝, map_rel' := map_rel'✝ } = (fun o => o.toFun) g


mk
{ toFun := toFun✝, map_rel' := map_rel'✝ } = g
α: Type ?u.10508

β: Type ?u.10511

γ: Type ?u.10514

δ: Type ?u.10517

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f, g: r →r s

h: (fun o => o.toFun) f = (fun o => o.toFun) g


f = g
α: Type ?u.10508

β: Type ?u.10511

γ: Type ?u.10514

δ: Type ?u.10517

r: ααProp

s: ββProp

t: γγProp

u: δδProp

toFun✝¹: αβ

map_rel'✝¹: ∀ {a b : α}, r a bs (toFun✝¹ a) (toFun✝¹ b)

toFun✝: αβ

map_rel'✝: ∀ {a b : α}, r a bs (toFun✝ a) (toFun✝ b)

h: (fun o => o.toFun) { toFun := toFun✝¹, map_rel' := map_rel'✝¹ } = (fun o => o.toFun) { toFun := toFun✝, map_rel' := map_rel'✝ }


mk.mk
{ toFun := toFun✝¹, map_rel' := map_rel'✝¹ } = { toFun := toFun✝, map_rel' := map_rel'✝ }
α: Type ?u.10508

β: Type ?u.10511

γ: Type ?u.10514

δ: Type ?u.10517

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f, g: r →r s

h: (fun o => o.toFun) f = (fun o => o.toFun) g


f = g

Goals accomplished! 🐙
map_rel :=
map_rel': ∀ {α : Type ?u.10659} {β : Type ?u.10658} {r : ααProp} {s : ββProp} (self : r →r s) {a b : α}, r a bs (toFun self a) (toFun self b)
map_rel'
initialize_simps_projections
RelHom: {α : Type u_1} → {β : Type u_2} → (ααProp) → (ββProp) → Type (maxu_1u_2)
RelHom
(
toFun: {α : Type u_1} → {β : Type u_2} → (r : ααProp) → (s : ββProp) → r →r sαβ
toFun
apply: {α : Type u_1} → {β : Type u_2} → (r : ααProp) → (s : ββProp) → r →r sαβ
apply
) protected theorem
map_rel: ∀ (f : r →r s) {a b : α}, r a bs (f a) (f b)
map_rel
(
f: r →r s
f
:
r: ααProp
r
→r
s: ββProp
s
) {
a: α
a
b: ?m.11582
b
} :
r: ααProp
r
a: ?m.11579
a
b: ?m.11582
b
s: ββProp
s
(
f: r →r s
f
a: ?m.11579
a
) (
f: r →r s
f
b: ?m.11582
b
) :=
f: r →r s
f
.
map_rel': ∀ {α : Type ?u.11839} {β : Type ?u.11838} {r : ααProp} {s : ββProp} (self : r →r s) {a b : α}, r a bs (toFun self a) (toFun self b)
map_rel'
#align rel_hom.map_rel
RelHom.map_rel: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r →r s) {a b : α}, r a bs (f a) (f b)
RelHom.map_rel
@[simp] theorem
coe_fn_toFun: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r →r s), f.toFun = f
coe_fn_toFun
(
f: r →r s
f
:
r: ααProp
r
→r
s: ββProp
s
) :
f: r →r s
f
.
toFun: {α : Type ?u.11933} → {β : Type ?u.11932} → {r : ααProp} → {s : ββProp} → r →r sαβ
toFun
= (
f: r →r s
f
:
α: Type ?u.11877
α
β: Type ?u.11880
β
) :=
rfl: ∀ {α : Sort ?u.12102} {a : α}, a = a
rfl
#align rel_hom.coe_fn_to_fun
RelHom.coe_fn_toFun: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r →r s), f.toFun = f
RelHom.coe_fn_toFun
/-- The map `coe_fn : (r →r s) → (α → β)` is injective. -/ theorem
coe_fn_injective: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, Injective fun f => f
coe_fn_injective
:
Injective: {α : Sort ?u.12167} → {β : Sort ?u.12166} → (αβ) → Prop
Injective
fun (
f: r →r s
f
:
r: ααProp
r
→r
s: ββProp
s
) => (
f: r →r s
f
:
α: Type ?u.12130
α
β: Type ?u.12133
β
) :=
FunLike.coe_injective: ∀ {F : Sort ?u.12345} {α : Sort ?u.12346} {β : αSort ?u.12347} [i : FunLike F α β], Injective fun f => f
FunLike.coe_injective
#align rel_hom.coe_fn_injective
RelHom.coe_fn_injective: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, Injective fun f => f
RelHom.coe_fn_injective
@[ext] theorem
ext: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} ⦃f g : r →r s⦄, (∀ (x : α), f x = g x) → f = g
ext
f: r →r s
f
g: r →r s
g
:
r: ααProp
r
→r
s: ββProp
s
⦄ (
h: ∀ (x : α), f x = g x
h
: ∀
x: ?m.12561
x
,
f: r →r s
f
x: ?m.12561
x
=
g: r →r s
g
x: ?m.12561
x
) :
f: r →r s
f
=
g: r →r s
g
:=
FunLike.ext: ∀ {F : Sort ?u.12823} {α : Sort ?u.12824} {β : αSort ?u.12822} [i : FunLike F α β] (f g : F), (∀ (x : α), f x = g x) → f = g
FunLike.ext
f: r →r s
f
g: r →r s
g
h: ∀ (x : α), f x = g x
h
#align rel_hom.ext
RelHom.ext: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} ⦃f g : r →r s⦄, (∀ (x : α), f x = g x) → f = g
RelHom.ext
theorem
ext_iff: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f g : r →r s}, f = g ∀ (x : α), f x = g x
ext_iff
{
f: r →r s
f
g: r →r s
g
:
r: ααProp
r
→r
s: ββProp
s
} :
f: r →r s
f
=
g: r →r s
g
↔ ∀
x: ?m.13061
x
,
f: r →r s
f
x: ?m.13061
x
=
g: r →r s
g
x: ?m.13061
x
:=
FunLike.ext_iff: ∀ {F : Sort ?u.13310} {α : Sort ?u.13312} {β : αSort ?u.13311} [i : FunLike F α β] {f g : F}, f = g ∀ (x : α), f x = g x
FunLike.ext_iff
#align rel_hom.ext_iff
RelHom.ext_iff: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f g : r →r s}, f = g ∀ (x : α), f x = g x
RelHom.ext_iff
/-- Identity map is a relation homomorphism. -/ @[refl,
simps: ∀ {α : Type u_1} (r : ααProp) (x : α), ↑(RelHom.id r) x = x
simps
] protected def
id: {α : Type u_1} → (r : ααProp) → r →r r
id
(
r: ααProp
r
:
α: Type ?u.13460
α
α: Type ?u.13460
α
Prop: Type
Prop
) :
r: ααProp
r
→r
r: ααProp
r
:= ⟨fun
x: ?m.13545
x
=>
x: ?m.13545
x
, fun
x: ?m.13552
x
=>
x: ?m.13552
x
#align rel_hom.id
RelHom.id: {α : Type u_1} → (r : ααProp) → r →r r
RelHom.id
#align rel_hom.id_apply
RelHom.id_apply: ∀ {α : Type u_1} (r : ααProp) (x : α), ↑(RelHom.id r) x = x
RelHom.id_apply
/-- Composition of two relation homomorphisms is a relation homomorphism. -/ @[
simps: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (g : s →r t) (f : r →r s) (x : α), ↑(RelHom.comp g f) x = g (f x)
simps
] protected def
comp: s →r tr →r sr →r t
comp
(
g: s →r t
g
:
s: ββProp
s
→r
t: γγProp
t
) (
f: r →r s
f
:
r: ααProp
r
→r
s: ββProp
s
) :
r: ααProp
r
→r
t: γγProp
t
:= ⟨fun
x: ?m.13794
x
=>
g: s →r t
g
(
f: r →r s
f
x: ?m.13794
x
), fun
h: ?m.14079
h
=>
g: s →r t
g
.
2: ∀ {α : Type ?u.14082} {β : Type ?u.14081} {r : ααProp} {s : ββProp} (self : r →r s) {a b : α}, r a bs (toFun self a) (toFun self b)
2
(
f: r →r s
f
.
2: ∀ {α : Type ?u.14116} {β : Type ?u.14115} {r : ααProp} {s : ββProp} (self : r →r s) {a b : α}, r a bs (toFun self a) (toFun self b)
2
h: ?m.14079
h
)⟩ #align rel_hom.comp
RelHom.comp: {α : Type u_1} → {β : Type u_2} → {γ : Type u_3} → {r : ααProp} → {s : ββProp} → {t : γγProp} → s →r tr →r sr →r t
RelHom.comp
#align rel_hom.comp_apply
RelHom.comp_apply: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (g : s →r t) (f : r →r s) (x : α), ↑(RelHom.comp g f) x = g (f x)
RelHom.comp_apply
/-- A relation homomorphism is also a relation homomorphism between dual relations. -/ protected def
swap: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → r →r sswap r →r swap s
swap
(
f: r →r s
f
:
r: ααProp
r
→r
s: ββProp
s
) :
swap: {α : Sort ?u.14528} → {β : Sort ?u.14527} → {φ : αβSort ?u.14526} → ((x : α) → (y : β) → φ x y) → (y : β) → (x : α) → φ x y
swap
r: ααProp
r
→r
swap: {α : Sort ?u.14554} → {β : Sort ?u.14553} → {φ : αβSort ?u.14552} → ((x : α) → (y : β) → φ x y) → (y : β) → (x : α) → φ x y
swap
s: ββProp
s
:= ⟨
f: r →r s
f
,
f: r →r s
f
.
map_rel: ∀ {α : Type ?u.14747} {β : Type ?u.14748} {r : ααProp} {s : ββProp} (f : r →r s) {a b : α}, r a bs (f a) (f b)
map_rel
#align rel_hom.swap
RelHom.swap: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → r →r sswap r →r swap s
RelHom.swap
/-- A function is a relation homomorphism from the preimage relation of `s` to `s`. -/ def
preimage: (f : αβ) → (s : ββProp) → f ⁻¹'o s →r s
preimage
(
f: αβ
f
:
α: Type ?u.14948
α
β: Type ?u.14951
β
) (
s: ββProp
s
:
β: Type ?u.14951
β
β: Type ?u.14951
β
Prop: Type
Prop
) :
f: αβ
f
⁻¹'o
s: ββProp
s
→r
s: ββProp
s
:= ⟨
f: αβ
f
,
id: ∀ {α : Sort ?u.15059}, αα
id
#align rel_hom.preimage
RelHom.preimage: {α : Type u_1} → {β : Type u_2} → (f : αβ) → (s : ββProp) → f ⁻¹'o s →r s
RelHom.preimage
end RelHom /-- An increasing function is injective -/ theorem
injective_of_increasing: ∀ {α : Type u_1} {β : Type u_2} (r : ααProp) (s : ββProp) [inst : IsTrichotomous α r] [inst : IsIrrefl β s] (f : αβ), (∀ {x y : α}, r x ys (f x) (f y)) → Injective f
injective_of_increasing
(
r: ααProp
r
:
α: Type ?u.15156
α
α: Type ?u.15156
α
Prop: Type
Prop
) (
s: ββProp
s
:
β: Type ?u.15159
β
β: Type ?u.15159
β
Prop: Type
Prop
) [
IsTrichotomous: (α : Type ?u.15204) → (ααProp) → Prop
IsTrichotomous
α: Type ?u.15156
α
r: ααProp
r
] [
IsIrrefl: (α : Type ?u.15209) → (ααProp) → Prop
IsIrrefl
β: Type ?u.15159
β
s: ββProp
s
] (
f: αβ
f
:
α: Type ?u.15156
α
β: Type ?u.15159
β
) (
hf: ∀ {x y : α}, r x ys (f x) (f y)
hf
: ∀ {
x: ?m.15219
x
y: ?m.15222
y
},
r: ααProp
r
x: ?m.15219
x
y: ?m.15222
y
s: ββProp
s
(
f: αβ
f
x: ?m.15219
x
) (
f: αβ
f
y: ?m.15222
y
)) :
Injective: {α : Sort ?u.15230} → {β : Sort ?u.15229} → (αβ) → Prop
Injective
f: αβ
f
:=

Goals accomplished! 🐙
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)


α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y


x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)


α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y


inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: x = y


inr.inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x


inr.inr
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)


α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y


inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y


inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: x = y


inr.inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x


inr.inr
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y

this: s (f x) (f y)


inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y


inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y

this: s (f x) (f y)


inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y

this: s (f y) (f y)


inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y

this: s (f y) (f y)


inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y

this: s (f y) (f y)


inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y


inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y

this: s (f y) (f y)


inl.h
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r x y


inl
x = y

Goals accomplished! 🐙
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)


α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: x = y


inr.inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: x = y


inr.inl
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x


inr.inr
x = y

Goals accomplished! 🐙
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)


α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x


inr.inr
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x


inr.inr
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x

this: s (f y) (f x)


inr.inr
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x


inr.inr
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x

this: s (f y) (f x)


inr.inr
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x

this: s (f y) (f y)


inr.inr
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x

this: s (f y) (f y)


inr.inr
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x

this: s (f y) (f y)


inr.inr
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x


inr.inr
x = y
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x

this: s (f y) (f y)


inr.inr.h
α: Type u_1

β: Type u_2

γ: Type ?u.15162

δ: Type ?u.15165

r✝: ααProp

s✝: ββProp

t: γγProp

u: δδProp

r: ααProp

s: ββProp

inst✝¹: IsTrichotomous α r

inst✝: IsIrrefl β s

f: αβ

hf: ∀ {x y : α}, r x ys (f x) (f y)

x, y: α

hxy: f x = f y

h: r y x


inr.inr
x = y

Goals accomplished! 🐙
#align injective_of_increasing
injective_of_increasing: ∀ {α : Type u_1} {β : Type u_2} (r : ααProp) (s : ββProp) [inst : IsTrichotomous α r] [inst : IsIrrefl β s] (f : αβ), (∀ {x y : α}, r x ys (f x) (f y)) → Injective f
injective_of_increasing
/-- An increasing function is injective -/ theorem
RelHom.injective_of_increasing: ∀ [inst : IsTrichotomous α r] [inst : IsIrrefl β s] (f : r →r s), Injective f
RelHom.injective_of_increasing
[
IsTrichotomous: (α : Type ?u.15512) → (ααProp) → Prop
IsTrichotomous
α: Type ?u.15476
α
r: ααProp
r
] [
IsIrrefl: (α : Type ?u.15517) → (ααProp) → Prop
IsIrrefl
β: Type ?u.15479
β
s: ββProp
s
] (
f: r →r s
f
:
r: ααProp
r
→r
s: ββProp
s
) :
Injective: {α : Sort ?u.15541} → {β : Sort ?u.15540} → (αβ) → Prop
Injective
f: r →r s
f
:=
_root_.injective_of_increasing: ∀ {α : Type ?u.15700} {β : Type ?u.15701} (r : ααProp) (s : ββProp) [inst : IsTrichotomous α r] [inst : IsIrrefl β s] (f : αβ), (∀ {x y : α}, r x ys (f x) (f y)) → Injective f
_root_.injective_of_increasing
r: ααProp
r
s: ββProp
s
f: r →r s
f
f: r →r s
f
.
map_rel: ∀ {α : Type ?u.15886} {β : Type ?u.15887} {r : ααProp} {s : ββProp} (f : r →r s) {a b : α}, r a bs (f a) (f b)
map_rel
#align rel_hom.injective_of_increasing
RelHom.injective_of_increasing: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [inst : IsTrichotomous α r] [inst : IsIrrefl β s] (f : r →r s), Injective f
RelHom.injective_of_increasing
-- TODO: define a `RelIffClass` so we don't have to do all the `convert` trickery? theorem
Surjective.wellFounded_iff: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f : αβ}, Surjective f(∀ {a b : α}, r a b s (f a) (f b)) → (WellFounded r WellFounded s)
Surjective.wellFounded_iff
{
f: αβ
f
:
α: Type ?u.15942
α
β: Type ?u.15945
β
} (hf :
Surjective: {α : Sort ?u.15983} → {β : Sort ?u.15982} → (αβ) → Prop
Surjective
f: αβ
f
) (
o: ∀ {a b : α}, r a b s (f a) (f b)
o
: ∀ {
a: ?m.15993
a
b: ?m.15996
b
},
r: ααProp
r
a: ?m.15993
a
b: ?m.15996
b
s: ββProp
s
(
f: αβ
f
a: ?m.15993
a
) (
f: αβ
f
b: ?m.15996
b
)) :
WellFounded: {α : Sort ?u.16001} → (ααProp) → Prop
WellFounded
r: ααProp
r
WellFounded: {α : Sort ?u.16009} → (ααProp) → Prop
WellFounded
s: ββProp
s
:=
Iff.intro: ∀ {a b : Prop}, (ab) → (ba) → (a b)
Iff.intro
(

Goals accomplished! 🐙
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)


α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)


refine_1
βα
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)


refine_2
∀ {a b : β}, s a br (?refine_1 a) (?refine_1 b)
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)


α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)


refine_1
βα
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)


refine_1
βα
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)


refine_2
∀ {a b : β}, s a br (?refine_1 a) (?refine_1 b)

Goals accomplished! 🐙
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)


α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)

a, b: β

h: s a b


refine_2
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)


α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)

a, b: β

h: s a b


refine_2
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)


α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)

a, b: β

h: s a b


h.e'_1
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)

a, b: β

h: s a b


h.e'_2
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)


α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)

a, b: β

h: s a b


h.e'_1
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)

a, b: β

h: s a b


h.e'_2
α: Type u_1

β: Type u_2

γ: Type ?u.15948

δ: Type ?u.15951

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: αβ

hf: Surjective f

o: ∀ {a b : α}, r a b s (f a) (f b)

a, b: β

h: s a b


h.e'_2
) (
RelHomClass.wellFounded: ∀ {α : Type ?u.16028} {β : Type ?u.16029} {r : ααProp} {s : ββProp} {F : Type ?u.16027} [inst : RelHomClass F r s], FWellFounded sWellFounded r
RelHomClass.wellFounded
(⟨
f: αβ
f
,
o: ∀ {a b : α}, r a b s (f a) (f b)
o
.
1: ∀ {a b : Prop}, (a b) → ab
1
⟩ :
r: ααProp
r
→r
s: ββProp
s
)) #align surjective.well_founded_iff
Surjective.wellFounded_iff: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f : αβ}, Surjective f(∀ {a b : α}, r a b s (f a) (f b)) → (WellFounded r WellFounded s)
Surjective.wellFounded_iff
/-- A relation embedding with respect to a given pair of relations `r` and `s` is an embedding `f : α ↪ β` such that `r a b ↔ s (f a) (f b)`. -/ structure
RelEmbedding: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → (toEmbedding : α β) → (∀ {a b : α}, s (toEmbedding a) (toEmbedding b) r a b) → RelEmbedding r s
RelEmbedding
{
α: Type ?u.17327
α
β: Type ?u.17330
β
:
Type _: Type (?u.17327+1)
Type _
} (
r: ααProp
r
:
α: Type ?u.17327
α
α: Type ?u.17327
α
Prop: Type
Prop
) (
s: ββProp
s
:
β: Type ?u.17330
β
β: Type ?u.17330
β
Prop: Type
Prop
) extends
α: Type ?u.17327
α
β: Type ?u.17330
β
where /-- Elements are related iff they are related after apply a `RelEmbedding` -/
map_rel_iff': ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (self : RelEmbedding r s) {a b : α}, s (self.toEmbedding a) (self.toEmbedding b) r a b
map_rel_iff'
: ∀ {
a: ?m.17354
a
b: ?m.17357
b
},
s: ββProp
s
(
toEmbedding: α β
toEmbedding
a: ?m.17354
a
) (
toEmbedding: α β
toEmbedding
b: ?m.17357
b
) ↔
r: ααProp
r
a: ?m.17354
a
b: ?m.17357
b
#align rel_embedding
RelEmbedding: {α : Type u_1} → {β : Type u_2} → (ααProp) → (ββProp) → Type (maxu_1u_2)
RelEmbedding
/-- A relation embedding with respect to a given pair of relations `r` and `s` is an embedding `f : α ↪ β` such that `r a b ↔ s (f a) (f b)`. -/ infixl:25 " ↪r " =>
RelEmbedding: {α : Type u_1} → {β : Type u_2} → (ααProp) → (ββProp) → Type (maxu_1u_2)
RelEmbedding
/-- The induced relation on a subtype is an embedding under the natural inclusion. -/ def
Subtype.relEmbedding: {X : Type ?u.26060} → (r : XXProp) → (p : XProp) → val ⁻¹'o r ↪r r
Subtype.relEmbedding
{
X: Type ?u.26060
X
:
Type _: Type (?u.26060+1)
Type _
} (
r: XXProp
r
:
X: Type ?u.26060
X
X: Type ?u.26060
X
Prop: Type
Prop
) (
p: XProp
p
:
X: Type ?u.26060
X
Prop: Type
Prop
) : (
Subtype.val: {α : Sort ?u.26093} → {p : αProp} → Subtype pα
Subtype.val
:
Subtype: {α : Sort ?u.26087} → (αProp) → Sort (max1?u.26087)
Subtype
p: XProp
p
X: Type ?u.26060
X
) ⁻¹'o
r: XXProp
r
↪r
r: XXProp
r
:= ⟨
Embedding.subtype: {α : Sort ?u.26150} → (p : αProp) → Subtype p α
Embedding.subtype
p: XProp
p
,
Iff.rfl: ∀ {a : Prop}, a a
Iff.rfl
#align subtype.rel_embedding
Subtype.relEmbedding: {X : Type u_1} → (r : XXProp) → (p : XProp) → Subtype.val ⁻¹'o r ↪r r
Subtype.relEmbedding
theorem
preimage_equivalence: ∀ {α : Sort u_1} {β : Sort u_2} (f : αβ) {s : ββProp}, Equivalence sEquivalence (f ⁻¹'o s)
preimage_equivalence
{
α: ?m.26329
α
β: Sort u_2
β
} (
f: αβ
f
:
α: ?m.26329
α
β: ?m.26332
β
) {
s: ββProp
s
:
β: ?m.26332
β
β: ?m.26332
β
Prop: Type
Prop
} (hs :
Equivalence: {α : Sort ?u.26345} → (ααProp) → Prop
Equivalence
s: ββProp
s
) :
Equivalence: {α : Sort ?u.26355} → (ααProp) → Prop
Equivalence
(
f: αβ
f
⁻¹'o
s: ββProp
s
) := ⟨fun
_: ?m.26401
_
=> hs.
1: ∀ {α : Sort ?u.26403} {r : ααProp}, Equivalence r∀ (x : α), r x x
1
_: ?m.26404
_
, fun
h: ?m.26420
h
=> hs.
2: ∀ {α : Sort ?u.26422} {r : ααProp}, Equivalence r∀ {x y : α}, r x yr y x
2
h: ?m.26420
h
, fun
h₁: ?m.26441
h₁
h₂: ?m.26444
h₂
=> hs.
3: ∀ {α : Sort ?u.26446} {r : ααProp}, Equivalence r∀ {x y z : α}, r x yr y zr x z
3
h₁: ?m.26441
h₁
h₂: ?m.26444
h₂
#align preimage_equivalence
preimage_equivalence: ∀ {α : Sort u_1} {β : Sort u_2} (f : αβ) {s : ββProp}, Equivalence sEquivalence (f ⁻¹'o s)
preimage_equivalence
namespace RelEmbedding /-- A relation embedding is also a relation homomorphism -/ def
toRelHom: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → r ↪r sr →r s
toRelHom
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) :
r: ααProp
r
→r
s: ββProp
s
where toFun :=
f: r ↪r s
f
.
toEmbedding: {α : Type ?u.26577} → {β : Type ?u.26576} → {r : ααProp} → {s : ββProp} → r ↪r sα β
toEmbedding
.
toFun: {α : Sort ?u.26595} → {β : Sort ?u.26594} → (α β) → αβ
toFun
map_rel' := (
map_rel_iff': ∀ {α : Type ?u.26606} {β : Type ?u.26605} {r : ααProp} {s : ββProp} (self : r ↪r s) {a b : α}, s (self.toEmbedding a) (self.toEmbedding b) r a b
map_rel_iff'
f: r ↪r s
f
).
mpr: ∀ {a b : Prop}, (a b) → ba
mpr
#align rel_embedding.to_rel_hom
RelEmbedding.toRelHom: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → r ↪r sr →r s
RelEmbedding.toRelHom
instance: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → Coe (r ↪r s) (r →r s)
instance
:
Coe: semiOutParam (Sort ?u.26832)Sort ?u.26831 → Sort (max(max1?u.26832)?u.26831)
Coe
(
r: ααProp
r
↪r
s: ββProp
s
) (
r: ααProp
r
→r
s: ββProp
s
) := ⟨
toRelHom: {α : Type ?u.26876} → {β : Type ?u.26875} → {r : ααProp} → {s : ββProp} → r ↪r sr →r s
toRelHom
⟩ --Porting note: removed -- see Note [function coercion] -- instance : CoeFun (r ↪r s) fun _ => α → β := -- ⟨fun o => o.toEmbedding⟩ -- TODO: define and instantiate a `RelEmbeddingClass` when `EmbeddingLike` is defined
instance: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → RelHomClass (r ↪r s) r s
instance
:
RelHomClass: Type ?u.27108 → {α : outParam (Type ?u.27107)} → {β : outParam (Type ?u.27106)} → outParam (ααProp)outParam (ββProp)Type (max(max?u.27108?u.27107)?u.27106)
RelHomClass
(
r: ααProp
r
↪r
s: ββProp
s
)
r: ααProp
r
s: ββProp
s
where coe := fun
x: ?m.27175
x
=>
x: ?m.27175
x
.
toFun: {α : Sort ?u.27196} → {β : Sort ?u.27195} → (α β) → αβ
toFun
coe_injective'
f: ?m.27208
f
g: ?m.27211
g
h: ?m.27214
h
:=

Goals accomplished! 🐙
α: Type ?u.27070

β: Type ?u.27073

γ: Type ?u.27076

δ: Type ?u.27079

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f, g: r ↪r s

h: (fun x => x.toFun) f = (fun x => x.toFun) g


f = g
α: Type ?u.27070

β: Type ?u.27073

γ: Type ?u.27076

δ: Type ?u.27079

r: ααProp

s: ββProp

t: γγProp

u: δδProp

g: r ↪r s

toFun✝: αβ

inj'✝: Injective toFun✝

map_rel_iff'✝: ∀ {a b : α}, s ({ toFun := toFun✝, inj' := inj'✝ } a) ({ toFun := toFun✝, inj' := inj'✝ } b) r a b

h: (fun x => x.toFun) { toEmbedding := { toFun := toFun✝, inj' := inj'✝ }, map_rel_iff' := map_rel_iff'✝ } = (fun x => x.toFun) g


mk.mk
{ toEmbedding := { toFun := toFun✝, inj' := inj'✝ }, map_rel_iff' := map_rel_iff'✝ } = g
α: Type ?u.27070

β: Type ?u.27073

γ: Type ?u.27076

δ: Type ?u.27079

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f, g: r ↪r s

h: (fun x => x.toFun) f = (fun x => x.toFun) g


f = g
α: Type ?u.27070

β: Type ?u.27073

γ: Type ?u.27076

δ: Type ?u.27079

r: ααProp

s: ββProp

t: γγProp

u: δδProp

toFun✝¹: αβ

inj'✝¹: Injective toFun✝¹

map_rel_iff'✝¹: ∀ {a b : α}, s ({ toFun := toFun✝¹, inj' := inj'✝¹ } a) ({ toFun := toFun✝¹, inj' := inj'✝¹ } b) r a b

toFun✝: αβ

inj'✝: Injective toFun✝

map_rel_iff'✝: ∀ {a b : α}, s ({ toFun := toFun✝, inj' := inj'✝ } a) ({ toFun := toFun✝, inj' := inj'✝ } b) r a b

h: (fun x => x.toFun) { toEmbedding := { toFun := toFun✝¹, inj' := inj'✝¹ }, map_rel_iff' := map_rel_iff'✝¹ } = (fun x => x.toFun) { toEmbedding := { toFun := toFun✝, inj' := inj'✝ }, map_rel_iff' := map_rel_iff'✝ }


mk.mk.mk.mk
{ toEmbedding := { toFun := toFun✝¹, inj' := inj'✝¹ }, map_rel_iff' := map_rel_iff'✝¹ } = { toEmbedding := { toFun := toFun✝, inj' := inj'✝ }, map_rel_iff' := map_rel_iff'✝ }
α: Type ?u.27070

β: Type ?u.27073

γ: Type ?u.27076

δ: Type ?u.27079

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f, g: r ↪r s

h: (fun x => x.toFun) f = (fun x => x.toFun) g


f = g

Goals accomplished! 🐙
map_rel
f: ?m.27227
f
a: ?m.27230
a
b: ?m.27233
b
:=
Iff.mpr: ∀ {a b : Prop}, (a b) → ba
Iff.mpr
(
map_rel_iff': ∀ {α : Type ?u.27240} {β : Type ?u.27239} {r : ααProp} {s : ββProp} (self : r ↪r s) {a b : α}, s (self.toEmbedding a) (self.toEmbedding b) r a b
map_rel_iff'
f: ?m.27227
f
) /-- See Note [custom simps projection]. We specify this explicitly because we have a coercion not given by the `FunLike` instance. Todo: remove that instance? -/ def
Simps.apply: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → r ↪r sαβ
Simps.apply
(
h: r ↪r s
h
:
r: ααProp
r
↪r
s: ββProp
s
) :
α: Type ?u.28062
α
β: Type ?u.28065
β
:=
h: r ↪r s
h
initialize_simps_projections
RelEmbedding: {α : Type u_1} → {β : Type u_2} → (ααProp) → (ββProp) → Type (maxu_1u_2)
RelEmbedding
(
toFun: {α : Type u_1} → {β : Type u_2} → (r : ααProp) → (s : ββProp) → r ↪r sαβ
toFun
apply: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → r ↪r sαβ
apply
) @[simp] theorem
coe_toEmbedding: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f : r ↪r s}, f.toEmbedding = f
coe_toEmbedding
: ((
f: ?m.28660
f
:
r: ααProp
r
↪r
s: ββProp
s
).
toEmbedding: {α : Type ?u.28693} → {β : Type ?u.28692} → {r : ααProp} → {s : ββProp} → r ↪r sα β
toEmbedding
:
α: Type ?u.28602
α
β: Type ?u.28605
β
) =
f: ?m.28660
f
:=
rfl: ∀ {α : Sort ?u.29211} {a : α}, a = a
rfl
#align rel_embedding.coe_fn_to_embedding
RelEmbedding.coe_toEmbedding: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f : r ↪r s}, f.toEmbedding = f
RelEmbedding.coe_toEmbedding
@[simp] theorem
coe_toRelHom: ∀ {f : r ↪r s}, ↑(toRelHom f) = f
coe_toRelHom
: ((
f: ?m.29309
f
:
r: ααProp
r
↪r
s: ββProp
s
).
toRelHom: {α : Type ?u.29342} → {β : Type ?u.29341} → {r : ααProp} → {s : ββProp} → r ↪r sr →r s
toRelHom
:
α: Type ?u.29251
α
β: Type ?u.29254
β
) =
f: ?m.29309
f
:=
rfl: ∀ {α : Sort ?u.29882} {a : α}, a = a
rfl
theorem
injective: ∀ (f : r ↪r s), Injective f
injective
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) :
Injective: {α : Sort ?u.29992} → {β : Sort ?u.29991} → (αβ) → Prop
Injective
f: r ↪r s
f
:=
f: r ↪r s
f
.
inj': ∀ {α : Sort ?u.30166} {β : Sort ?u.30165} (self : α β), Injective self.toFun
inj'
#align rel_embedding.injective
RelEmbedding.injective: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ↪r s), Injective f
RelEmbedding.injective
theorem
inj: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ↪r s) {a b : α}, f a = f b a = b
inj
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) {
a: α
a
b: α
b
} :
f: r ↪r s
f
a: ?m.30239
a
=
f: r ↪r s
f
b: ?m.30242
b
a: ?m.30239
a
=
b: ?m.30242
b
:=
f: r ↪r s
f
.
injective: ∀ {α : Type ?u.30501} {β : Type ?u.30502} {r : ααProp} {s : ββProp} (f : r ↪r s), Injective f
injective
.
eq_iff: ∀ {α : Sort ?u.30519} {β : Sort ?u.30520} {f : αβ}, Injective f∀ {a b : α}, f a = f b a = b
eq_iff
#align rel_embedding.inj
RelEmbedding.inj: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ↪r s) {a b : α}, f a = f b a = b
RelEmbedding.inj
theorem
map_rel_iff: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ↪r s) {a b : α}, s (f a) (f b) r a b
map_rel_iff
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) {
a: α
a
b: α
b
} :
s: ββProp
s
(
f: r ↪r s
f
a: ?m.30621
a
) (
f: r ↪r s
f
b: ?m.30624
b
) ↔
r: ααProp
r
a: ?m.30621
a
b: ?m.30624
b
:=
f: r ↪r s
f
.
map_rel_iff': ∀ {α : Type ?u.30879} {β : Type ?u.30878} {r : ααProp} {s : ββProp} (self : r ↪r s) {a b : α}, s (self.toEmbedding a) (self.toEmbedding b) r a b
map_rel_iff'
#align rel_embedding.map_rel_iff
RelEmbedding.map_rel_iff: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ↪r s) {a b : α}, s (f a) (f b) r a b
RelEmbedding.map_rel_iff
@[simp] theorem
coe_mk: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f : α β} {h : ∀ {a b : α}, s (f a) (f b) r a b}, { toEmbedding := f, map_rel_iff' := h } = f
coe_mk
: ⇑(⟨
f: ?m.31007
f
,
h: ?m.31049
h
⟩ :
r: ααProp
r
↪r
s: ββProp
s
) =
f: ?m.31007
f
:=
rfl: ∀ {α : Sort ?u.31583} {a : α}, a = a
rfl
#align rel_embedding.coe_fn_mk
RelEmbedding.coe_mk: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f : α β} {h : ∀ {a b : α}, s (f a) (f b) r a b}, { toEmbedding := f, map_rel_iff' := h } = f
RelEmbedding.coe_mk
/-- The map `coe_fn : (r ↪r s) → (α → β)` is injective. -/ theorem
coe_fn_injective: Injective fun f => f
coe_fn_injective
:
Injective: {α : Sort ?u.31685} → {β : Sort ?u.31684} → (αβ) → Prop
Injective
fun
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
=> (
f: r ↪r s
f
:
α: Type ?u.31648
α
β: Type ?u.31651
β
) :=
FunLike.coe_injective: ∀ {F : Sort ?u.31863} {α : Sort ?u.31864} {β : αSort ?u.31865} [i : FunLike F α β], Injective fun f => f
FunLike.coe_injective
#align rel_embedding.coe_fn_injective
RelEmbedding.coe_fn_injective: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, Injective fun f => f
RelEmbedding.coe_fn_injective
@[ext] theorem
ext: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} ⦃f g : r ↪r s⦄, (∀ (x : α), f x = g x) → f = g
ext
f: r ↪r s
f
g: r ↪r s
g
:
r: ααProp
r
↪r
s: ββProp
s
⦄ (
h: ∀ (x : α), f x = g x
h
: ∀
x: ?m.32079
x
,
f: r ↪r s
f
x: ?m.32079
x
=
g: r ↪r s
g
x: ?m.32079
x
) :
f: r ↪r s
f
=
g: r ↪r s
g
:=
FunLike.ext: ∀ {F : Sort ?u.32341} {α : Sort ?u.32342} {β : αSort ?u.32340} [i : FunLike F α β] (f g : F), (∀ (x : α), f x = g x) → f = g
FunLike.ext
_: ?m.32343
_
_: ?m.32343
_
h: ∀ (x : α), f x = g x
h
#align rel_embedding.ext
RelEmbedding.ext: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} ⦃f g : r ↪r s⦄, (∀ (x : α), f x = g x) → f = g
RelEmbedding.ext
theorem
ext_iff: ∀ {f g : r ↪r s}, f = g ∀ (x : α), f x = g x
ext_iff
{
f: r ↪r s
f
g: r ↪r s
g
:
r: ααProp
r
↪r
s: ββProp
s
} :
f: r ↪r s
f
=
g: r ↪r s
g
↔ ∀
x: ?m.32593
x
,
f: r ↪r s
f
x: ?m.32593
x
=
g: r ↪r s
g
x: ?m.32593
x
:=
FunLike.ext_iff: ∀ {F : Sort ?u.32842} {α : Sort ?u.32844} {β : αSort ?u.32843} [i : FunLike F α β] {f g : F}, f = g ∀ (x : α), f x = g x
FunLike.ext_iff
#align rel_embedding.ext_iff
RelEmbedding.ext_iff: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f g : r ↪r s}, f = g ∀ (x : α), f x = g x
RelEmbedding.ext_iff
/-- Identity map is a relation embedding. -/ @[refl, simps!] protected def
refl: (r : ααProp) → r ↪r r
refl
(
r: ααProp
r
:
α: Type ?u.32992
α
α: Type ?u.32992
α
Prop: Type
Prop
) :
r: ααProp
r
↪r
r: ααProp
r
:= ⟨
Embedding.refl: (α : Sort ?u.33076) → α α
Embedding.refl
_: Sort ?u.33076
_
,
Iff.rfl: ∀ {a : Prop}, a a
Iff.rfl
#align rel_embedding.refl
RelEmbedding.refl: {α : Type u_1} → (r : ααProp) → r ↪r r
RelEmbedding.refl
#align rel_embedding.refl_apply
RelEmbedding.refl_apply: ∀ {α : Type u_1} (r : ααProp) (a : α), ↑(RelEmbedding.refl r) a = a
RelEmbedding.refl_apply
/-- Composition of two relation embeddings is a relation embedding. -/ protected def
trans: {α : Type u_1} → {β : Type u_2} → {γ : Type u_3} → {r : ααProp} → {s : ββProp} → {t : γγProp} → r ↪r ss ↪r tr ↪r t
trans
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) (
g: s ↪r t
g
:
s: ββProp
s
↪r
t: γγProp
t
) :
r: ααProp
r
↪r
t: γγProp
t
:= ⟨
f: r ↪r s
f
.
1: {α : Type ?u.33321} → {β : Type ?u.33320} → {r : ααProp} → {s : ββProp} → r ↪r sα β
1
.
trans: {α : Sort ?u.33340} → {β : Sort ?u.33339} → {γ : Sort ?u.33338} → (α β) → (β γ) → α γ
trans
g: s ↪r t
g
.
1: {α : Type ?u.33354} → {β : Type ?u.33353} → {r : ααProp} → {s : ββProp} → r ↪r sα β
1
,

Goals accomplished! 🐙
α: Type ?u.33205

β: Type ?u.33208

γ: Type ?u.33211

δ: Type ?u.33214

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: r ↪r s

g: s ↪r t


∀ {a b : α}, t (↑(Embedding.trans f.toEmbedding g.toEmbedding) a) (↑(Embedding.trans f.toEmbedding g.toEmbedding) b) r a b

Goals accomplished! 🐙
#align rel_embedding.trans
RelEmbedding.trans: {α : Type u_1} → {β : Type u_2} → {γ : Type u_3} → {r : ααProp} → {s : ββProp} → {t : γγProp} → r ↪r ss ↪r tr ↪r t
RelEmbedding.trans
instance: {α : Type u_1} → (r : ααProp) → Inhabited (r ↪r r)
instance
(
r: ααProp
r
:
α: Type ?u.34885
α
α: Type ?u.34885
α
Prop: Type
Prop
) :
Inhabited: Sort ?u.34927 → Sort (max1?u.34927)
Inhabited
(
r: ααProp
r
↪r
r: ααProp
r
) := ⟨
RelEmbedding.refl: {α : Type ?u.34951} → (r : ααProp) → r ↪r r
RelEmbedding.refl
_: ?m.34952?m.34952Prop
_
theorem
trans_apply: ∀ (f : r ↪r s) (g : s ↪r t) (a : α), ↑(RelEmbedding.trans f g) a = g (f a)
trans_apply
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) (
g: s ↪r t
g
:
s: ββProp
s
↪r
t: γγProp
t
) (
a: α
a
:
α: Type ?u.35056
α
) : (
f: r ↪r s
f
.
trans: {α : Type ?u.35133} → {β : Type ?u.35132} → {γ : Type ?u.35131} → {r : ααProp} → {s : ββProp} → {t : γγProp} → r ↪r ss ↪r tr ↪r t
trans
g: s ↪r t
g
)
a: α
a
=
g: s ↪r t
g
(
f: r ↪r s
f
a: α
a
) :=
rfl: ∀ {α : Sort ?u.35609} {a : α}, a = a
rfl
#align rel_embedding.trans_apply
RelEmbedding.trans_apply: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ↪r s) (g : s ↪r t) (a : α), ↑(RelEmbedding.trans f g) a = g (f a)
RelEmbedding.trans_apply
@[simp] theorem
coe_trans: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ↪r s) (g : s ↪r t), ↑(RelEmbedding.trans f g) = g f
coe_trans
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) (
g: s ↪r t
g
:
s: ββProp
s
↪r
t: γγProp
t
) : (
f: r ↪r s
f
.
trans: {α : Type ?u.35710} → {β : Type ?u.35709} → {γ : Type ?u.35708} → {r : ααProp} → {s : ββProp} → {t : γγProp} → r ↪r ss ↪r tr ↪r t
trans
g: s ↪r t
g
) =
g: s ↪r t
g
f: r ↪r s
f
:=
rfl: ∀ {α : Sort ?u.36637} {a : α}, a = a
rfl
#align rel_embedding.coe_trans
RelEmbedding.coe_trans: ∀ {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ↪r s) (g : s ↪r t), ↑(RelEmbedding.trans f g) = g f
RelEmbedding.coe_trans
/-- A relation embedding is also a relation embedding between dual relations. -/ protected def
swap: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → r ↪r sswap r ↪r swap s
swap
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) :
swap: {α : Sort ?u.36772} → {β : Sort ?u.36771} → {φ : αβSort ?u.36770} → ((x : α) → (y : β) → φ x y) → (y : β) → (x : α) → φ x y
swap
r: ααProp
r
↪r
swap: {α : Sort ?u.36798} → {β : Sort ?u.36797} → {φ : αβSort ?u.36796} → ((x : α) → (y : β) → φ x y) → (y : β) → (x : α) → φ x y
swap
s: ββProp
s
:= ⟨
f: r ↪r s
f
.
toEmbedding: {α : Type ?u.36849} → {β : Type ?u.36848} → {r : ααProp} → {s : ββProp} → r ↪r sα β
toEmbedding
,
f: r ↪r s
f
.
map_rel_iff: ∀ {α : Type ?u.36862} {β : Type ?u.36863} {r : ααProp} {s : ββProp} (f : r ↪r s) {a b : α}, s (f a) (f b) r a b
map_rel_iff
#align rel_embedding.swap
RelEmbedding.swap: {α : Type u_1} → {β : Type u_2} → {r : ααProp} → {s : ββProp} → r ↪r sswap r ↪r swap s
RelEmbedding.swap
/-- If `f` is injective, then it is a relation embedding from the preimage relation of `s` to `s`. -/ def
preimage: {α : Type u_1} → {β : Type u_2} → (f : α β) → (s : ββProp) → f ⁻¹'o s ↪r s
preimage
(
f: α β
f
:
α: Type ?u.37053
α
β: Type ?u.37056
β
) (
s: ββProp
s
:
β: Type ?u.37056
β
β: Type ?u.37056
β
Prop: Type
Prop
) :
f: α β
f
⁻¹'o
s: ββProp
s
↪r
s: ββProp
s
:= ⟨
f: α β
f
,
Iff.rfl: ∀ {a : Prop}, a a
Iff.rfl
#align rel_embedding.preimage
RelEmbedding.preimage: {α : Type u_1} → {β : Type u_2} → (f : α β) → (s : ββProp) → f ⁻¹'o s ↪r s
RelEmbedding.preimage
theorem
eq_preimage: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ↪r s), r = f ⁻¹'o s
eq_preimage
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) :
r: ααProp
r
=
f: r ↪r s
f
⁻¹'o
s: ββProp
s
:=

Goals accomplished! 🐙
α: Type u_1

β: Type u_2

γ: Type ?u.37374

δ: Type ?u.37377

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: r ↪r s


r = f ⁻¹'o s
α: Type u_1

β: Type u_2

γ: Type ?u.37374

δ: Type ?u.37377

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: r ↪r s

a, b: α


h.h.a
r a b (f ⁻¹'o s) a b
α: Type u_1

β: Type u_2

γ: Type ?u.37374

δ: Type ?u.37377

r: ααProp

s: ββProp

t: γγProp

u: δδProp

f: r ↪r s


r = f ⁻¹'o s

Goals accomplished! 🐙
#align rel_embedding.eq_preimage
RelEmbedding.eq_preimage: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ↪r s), r = f ⁻¹'o s
RelEmbedding.eq_preimage
protected theorem
isIrrefl: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsIrrefl β s], IsIrrefl α r
isIrrefl
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) [
IsIrrefl: (α : Type ?u.37787) → (ααProp) → Prop
IsIrrefl
β: Type ?u.37736
β
s: ββProp
s
] :
IsIrrefl: (α : Type ?u.37792) → (ααProp) → Prop
IsIrrefl
α: Type ?u.37733
α
r: ααProp
r
:= ⟨fun
a: ?m.37812
a
=>
mt: ∀ {a b : Prop}, (ab) → ¬b¬a
mt
f: r ↪r s
f
.
map_rel_iff: ∀ {α : Type ?u.37818} {β : Type ?u.37819} {r : ααProp} {s : ββProp} (f : r ↪r s) {a b : α}, s (f a) (f b) r a b
map_rel_iff
.
2: ∀ {a b : Prop}, (a b) → ba
2
(
irrefl: ∀ {α : Type ?u.37847} {r : ααProp} [inst : IsIrrefl α r] (a : α), ¬r a a
irrefl
(
f: r ↪r s
f
a: ?m.37812
a
))⟩ #align rel_embedding.is_irrefl
RelEmbedding.isIrrefl: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsIrrefl β s], IsIrrefl α r
RelEmbedding.isIrrefl
protected theorem
isRefl: r ↪r s∀ [inst : IsRefl β s], IsRefl α r
isRefl
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) [
IsRefl: (α : Type ?u.38088) → (ααProp) → Prop
IsRefl
β: Type ?u.38037
β
s: ββProp
s
] :
IsRefl: (α : Type ?u.38093) → (ααProp) → Prop
IsRefl
α: Type ?u.38034
α
r: ααProp
r
:= ⟨fun
_: ?m.38112
_
=>
f: r ↪r s
f
.
map_rel_iff: ∀ {α : Type ?u.38114} {β : Type ?u.38115} {r : ααProp} {s : ββProp} (f : r ↪r s) {a b : α}, s (f a) (f b) r a b
map_rel_iff
.
1: ∀ {a b : Prop}, (a b) → ab
1
<|
refl: ∀ {α : Type ?u.38140} {r : ααProp} [inst : IsRefl α r] (a : α), r a a
refl
_: ?m.38141
_
#align rel_embedding.is_refl
RelEmbedding.isRefl: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsRefl β s], IsRefl α r
RelEmbedding.isRefl
protected theorem
isSymm: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsSymm β s], IsSymm α r
isSymm
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) [
IsSymm: (α : Type ?u.38247) → (ααProp) → Prop
IsSymm
β: Type ?u.38196
β
s: ββProp
s
] :
IsSymm: (α : Type ?u.38252) → (ααProp) → Prop
IsSymm
α: Type ?u.38193
α
r: ααProp
r
:= ⟨fun
_: ?m.38271
_
_: ?m.38274
_
=>
imp_imp_imp: ∀ {a b c d : Prop}, (ca) → (bd) → (ab) → cd
imp_imp_imp
f: r ↪r s
f
.
map_rel_iff: ∀ {α : Type ?u.38282} {β : Type ?u.38283} {r : ααProp} {s : ββProp} (f : r ↪r s) {a b : α}, s (f a) (f b) r a b
map_rel_iff
.
2: ∀ {a b : Prop}, (a b) → ba
2
f: r ↪r s
f
.
map_rel_iff: ∀ {α : Type ?u.38311} {β : Type ?u.38312} {r : ααProp} {s : ββProp} (f : r ↪r s) {a b : α}, s (f a) (f b) r a b
map_rel_iff
.
1: ∀ {a b : Prop}, (a b) → ab
1
symm: ∀ {α : Type ?u.38328} {r : ααProp} [inst : IsSymm α r] {a b : α}, r a br b a
symm
#align rel_embedding.is_symm
RelEmbedding.isSymm: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsSymm β s], IsSymm α r
RelEmbedding.isSymm
protected theorem
isAsymm: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsAsymm β s], IsAsymm α r
isAsymm
(
f: r ↪r s
f
:
r: ααProp
r
↪r
s: ββProp
s
) [
IsAsymm: (α : Type ?u.38433) → (ααProp) → Prop
IsAsymm
β: Type ?u.38382
β
s: ββProp
s
] :
IsAsymm: (α : Type ?u.38438) → (ααProp) → Prop
IsAsymm
α: Type ?u.38379
α
r: ααProp
r
:= ⟨fun
_: ?m.38460
_
_: ?m.38463
_
h₁: ?m.38466
h₁
h₂: ?m.38469
h₂
=>
asymm: ∀ {α : Type ?u.38471} {r : ααProp} [inst : IsAsymm α r] {a b : α}, r a b¬r b a
asymm
(
f: r ↪r s
f
.
map_rel_iff: ∀ {α : Type ?u.38477} {β : Type ?u.38478} {r : ααProp} {s : ββProp} (f : r ↪r s) {a b : α}, s (f a) (f b) r a b
map_rel_iff
.
2: ∀ {a b : Prop}, (a b) → ba
2
h₁: ?m.38466
h₁
) (
f: r ↪r s
f
.
map_rel_iff: ∀ {α : Type ?u.38518} {β : Type ?u.38519} {r : ααProp} {s : ββProp} (f : r ↪r s) {a b : α}, s (f a) (f b) r a b
map_rel_iff
.
2: ∀ {a b : Prop}, (a b) → ba
2
h₂: ?m.38469
h₂
)⟩ #align rel_embedding.is_asymm
RelEmbedding.isAsymm: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsAsymm β s], IsAsymm α r
RelEmbedding.isAsymm
protected theorem
isAntisymm: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsAntisymm β s], IsAntisymm α r
isAntisymm
: ∀ (
_: r ↪r s
_
:
r: ααProp
r
↪r
s: ββProp
s
) [
IsAntisymm: (α : Type ?u.38621) → (ααProp) → Prop
IsAntisymm
β: Type ?u.38569
β
s: ββProp
s
],
IsAntisymm: (α : Type ?u.38626) → (ααProp) → Prop
IsAntisymm
α: Type ?u.38566
α
r: ααProp
r
| ⟨
f: α β
f
,
o: ∀ {a b : α}, s (f a) (f b) r a b
o
⟩, ⟨
H: ∀ (a b : β), s a bs b aa = b
H
⟩ => ⟨fun
_: ?m.38749
_
_: ?m.38752
_
h₁: ?m.38755
h₁
h₂: ?m.38758
h₂
=>
f: α β
f
.
inj': ∀ {α : Sort ?u.38761} {β : Sort ?u.38760} (self : α β), Injective self.toFun
inj'
(
H: ∀ (a b : β), s a bs b aa = b
H
_: β
_
_: β
_
(
o: ∀ {a b : α}, s (f a) (f b) r a b
o
.
2: ∀ {a b : Prop}, (a b) → ba
2
h₁: ?m.38755
h₁
) (
o: ∀ {a b : α}, s (f a) (f b) r a b
o
.
2: ∀ {a b : Prop}, (a b) → ba
2
h₂: ?m.38758
h₂
))⟩ #align rel_embedding.is_antisymm
RelEmbedding.isAntisymm: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsAntisymm β s], IsAntisymm α r
RelEmbedding.isAntisymm
protected theorem
isTrans: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsTrans β s], IsTrans α r
isTrans
: ∀ (
_: r ↪r s
_
:
r: ααProp
r
↪r
s: ββProp
s
) [
IsTrans: (α : Type ?u.39026) → (ααProp) → Prop
IsTrans
β: Type ?u.38974
β
s: ββProp
s
],
IsTrans: (α : Type ?u.39031) → (ααProp) → Prop
IsTrans
α: Type ?u.38971
α
r: ααProp
r
| ⟨_,
o: ∀ {a b : α}, s (toEmbedding✝ a) (toEmbedding✝ b) r a b
o
⟩, ⟨
H: ∀ (a b c : β), s a bs b cs a c
H
⟩ => ⟨fun
_: ?m.39165
_
_: ?m.39168
_
_: ?m.39171
_
h₁: ?m.39174
h₁
h₂: ?m.39177
h₂
=>
o: ∀ {a b : α}, s (toEmbedding✝ a) (toEmbedding✝ b) r a b
o
.
1: ∀ {a b : Prop}, (a b) → ab
1
(
H: ∀ (a b c : β), s a bs b cs a c
H
_: β
_
_: β
_
_: β
_
(
o: ∀ {a b : α}, s (toEmbedding✝ a) (toEmbedding✝ b) r a b
o
.
2: ∀ {a b : Prop}, (a b) → ba
2
h₁: ?m.39174
h₁
) (
o: ∀ {a b : α}, s (toEmbedding✝ a) (toEmbedding✝ b) r a b
o
.
2: ∀ {a b : Prop}, (a b) → ba
2
h₂: ?m.39177
h₂
))⟩ #align rel_embedding.is_trans
RelEmbedding.isTrans: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsTrans β s], IsTrans α r
RelEmbedding.isTrans
protected theorem
isTotal: r ↪r s∀ [inst : IsTotal β s], IsTotal α r
isTotal
: ∀ (
_: r ↪r s
_
:
r: ααProp
r
↪r
s: ββProp
s
) [
IsTotal: (α : Type ?u.39454) → (ααProp) → Prop
IsTotal
β: Type ?u.39402
β
s: ββProp
s
],
IsTotal: (α : Type ?u.39459) → (ααProp) → Prop
IsTotal
α: Type ?u.39399
α
r: ααProp
r
| ⟨_,
o: ∀ {a b : α}, s (toEmbedding✝ a) (toEmbedding✝ b) r a b
o
⟩, ⟨
H: ∀ (a b : β), s a b s b a
H
⟩ => ⟨fun
_: ?m.39586
_
_: ?m.39589
_
=> (
or_congr: ∀ {a c b d : Prop}, (a c) → (b d) → (a b c d)
or_congr
o: ∀ {a b : α}, s (toEmbedding✝ a) (toEmbedding✝ b) r a b
o
o: ∀ {a b : α}, s (toEmbedding✝ a) (toEmbedding✝ b) r a b
o
).
1: ∀ {a b : Prop}, (a b) → ab
1
(
H: ∀ (a b : β), s a b s b a
H
_: β
_
_: β
_
)⟩ #align rel_embedding.is_total
RelEmbedding.isTotal: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsTotal β s], IsTotal α r
RelEmbedding.isTotal
protected theorem
isPreorder: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsPreorder β s], IsPreorder α r
isPreorder
: ∀ (
_: r ↪r s
_
:
r: ααProp
r
↪r
s: ββProp
s
) [
IsPreorder: (α : Type ?u.39834) → (ααProp) → Prop
IsPreorder
β: Type ?u.39782
β
s: ββProp
s
],
IsPreorder: (α : Type ?u.39839) → (ααProp) → Prop
IsPreorder
α: Type ?u.39779
α
r: ααProp
r
|
f: r ↪r s
f
, _ =>
{ f.isRefl, f.isTrans with }: IsPreorder ?m.40049 ?m.40050
{
f: r ↪r s
f
{ f.isRefl, f.isTrans with }: IsPreorder ?m.40049 ?m.40050
.
isRefl: ∀ {α : Type ?u.39867} {β : Type ?u.39868} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsRefl β s], IsRefl α r
isRefl
{ f.isRefl, f.isTrans with }: IsPreorder ?m.40049 ?m.40050
,
f: r ↪r s
f
{ f.isRefl, f.isTrans with }: IsPreorder ?m.40049 ?m.40050
.
isTrans: ∀ {α : Type ?u.39926} {β : Type ?u.39927} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsTrans β s], IsTrans α r
isTrans
{ f.isRefl, f.isTrans with }: IsPreorder ?m.40049 ?m.40050
{ f.isRefl, f.isTrans with }: IsPreorder ?m.40049 ?m.40050
with
{ f.isRefl, f.isTrans with }: IsPreorder ?m.40049 ?m.40050
}
#align rel_embedding.is_preorder
RelEmbedding.isPreorder: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsPreorder β s], IsPreorder α r
RelEmbedding.isPreorder
protected theorem
isPartialOrder: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsPartialOrder β s], IsPartialOrder α r
isPartialOrder
: ∀ (
_: r ↪r s
_
:
r: ααProp
r
↪r
s: ββProp
s
) [
IsPartialOrder: (α : Type ?u.40226) → (ααProp) → Prop
IsPartialOrder
β: Type ?u.40174
β
s: ββProp
s
],
IsPartialOrder: (α : Type ?u.40231) → (ααProp) → Prop
IsPartialOrder
α: Type ?u.40171
α
r: ααProp
r
|
f: r ↪r s
f
, _ =>
{ f.isPreorder, f.isAntisymm with }: IsPartialOrder ?m.40361 ?m.40362
{
f: r ↪r s
f
{ f.isPreorder, f.isAntisymm with }: IsPartialOrder ?m.40361 ?m.40362
.
isPreorder: ∀ {α : Type ?u.40259} {β : Type ?u.40260} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsPreorder β s], IsPreorder α r
isPreorder
{ f.isPreorder, f.isAntisymm with }: IsPartialOrder ?m.40361 ?m.40362
,
f: r ↪r s
f
{ f.isPreorder, f.isAntisymm with }: IsPartialOrder ?m.40361 ?m.40362
.
isAntisymm: ∀ {α : Type ?u.40322} {β : Type ?u.40323} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsAntisymm β s], IsAntisymm α r
isAntisymm
{ f.isPreorder, f.isAntisymm with }: IsPartialOrder ?m.40361 ?m.40362
{ f.isPreorder, f.isAntisymm with }: IsPartialOrder ?m.40361 ?m.40362
with
{ f.isPreorder, f.isAntisymm with }: IsPartialOrder ?m.40361 ?m.40362
}
#align rel_embedding.is_partial_order
RelEmbedding.isPartialOrder: ∀ {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp}, r ↪r s∀ [inst : IsPartialOrder β s], IsPartialOrder α r
RelEmbedding.isPartialOrder
protected theorem
isLinearOrder: r ↪r s∀ [inst : IsLinearOrder β s], IsLinearOrder α r
isLinearOrder
: ∀ (
_: r ↪r s
_
:
r: ααProp
r
↪r
s: ββProp
s
) [
IsLinearOrder: (α : Type ?u.40548) → (ααProp) → Prop
IsLinearOrder
β: Type ?u.40496
β
s: ββProp
s
],
IsLinearOrder: (α : Type ?u.40553) → (ααProp) → Prop
IsLinearOrder
α: Type ?u.40493
α
r: ααProp
r
|
f: r ↪r s
f
, _ =>
{ f.isPartialOrder, f.isTotal wit