Relation homomorphisms, embeddings, isomorphisms #
This file defines relation homomorphisms, embeddings, isomorphisms and order embeddings and isomorphisms.
Main declarations #
RelHom: Relation homomorphism. ARelHom r sis a functionf : α → βsuch thatr a b → s (f a) (f b).RelEmbedding: Relation embedding. ARelEmbedding r sis an embeddingf : α ↪ βsuch thatr a b ↔ s (f a) (f b).RelIso: Relation isomorphism. ARelIso r sis an equivalencef : α ≃ βsuch thatr a b ↔ s (f a) (f b).sumLexCongr,prodLexCongr: Creates a relation homomorphism between twoSum.Lexor twoProd.Lexfrom relation homomorphisms between their arguments.
Notation #
→r:RelHom↪r:RelEmbedding≃r:RelIso
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).
Equations
- «term_→r_» = Lean.ParserDescr.trailingNode `«term_→r_» 25 25 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " →r ") (Lean.ParserDescr.cat `term 26))
Instances For
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 outParams since figuring them out from a goal is a higher-order
matching problem that Lean usually can't do unaided.
- map_rel (f : F) {a b : α} : r a b → s (f a) (f b)
A
RelHomClasssends related elements to related elements
Instances
The map coe_fn : (r →r s) → (α → β) is injective.
An increasing function is injective
An increasing function is injective
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).
- toFun : α → β
Elements are related iff they are related after apply a
RelEmbedding
Instances For
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).
Equations
- «term_↪r_» = Lean.ParserDescr.trailingNode `«term_↪r_» 25 25 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ↪r ") (Lean.ParserDescr.cat `term 26))
Instances For
Equations
The map coe_fn : (r ↪r s) → (α → β) is injective.
Identity map is a relation embedding.
Equations
- RelEmbedding.refl r = { toEmbedding := Function.Embedding.refl α, map_rel_iff' := ⋯ }
Instances For
Equations
- RelEmbedding.instInhabited r = { default := RelEmbedding.refl r }
The induced relation on a subtype is an embedding under the natural inclusion.
Equations
- Subtype.relEmbedding r p = { toEmbedding := Function.Embedding.subtype p, map_rel_iff' := ⋯ }
Instances For
Quotient.mk as a relation homomorphism between the relation and the lift of a relation.
Equations
- Quotient.mkRelHom H = { toFun := Quotient.mk x✝, map_rel' := ⋯ }
Instances For
Quotient.out as a relation embedding between the lift of a relation and the relation.
Equations
- Quotient.outRelEmbedding H = { toEmbedding := Function.Embedding.quotientOut α, map_rel_iff' := ⋯ }
Instances For
Alias of the reverse direction of wellFounded_lift₂_iff.
A relation is well founded iff its lift to a quotient is.
Alias of the forward direction of wellFounded_lift₂_iff.
A relation is well founded iff its lift to a quotient is.
Alias of the reverse direction of wellFounded_liftOn₂'_iff.
Alias of the forward direction of wellFounded_liftOn₂'_iff.
To define a relation embedding from an antisymmetric relation r to a reflexive relation s
it suffices to give a function together with a proof that it satisfies s (f a) (f b) ↔ r a b.
Equations
- RelEmbedding.ofMapRelIff f hf = { toFun := f, inj' := ⋯, map_rel_iff' := ⋯ }
Instances For
It suffices to prove f is monotone between strict relations
to show it is a relation embedding.
Equations
- RelEmbedding.ofMonotone f H = { toFun := f, inj' := ⋯, map_rel_iff' := ⋯ }
Instances For
A relation embedding from an empty type.
Equations
- RelEmbedding.ofIsEmpty r s = { toEmbedding := Function.Embedding.ofIsEmpty, map_rel_iff' := ⋯ }
Instances For
Sum.inl as a relation embedding into Sum.LiftRel r s.
Equations
- RelEmbedding.sumLiftRelInl r s = { toFun := Sum.inl, inj' := ⋯, map_rel_iff' := ⋯ }
Instances For
Sum.inr as a relation embedding into Sum.LiftRel r s.
Equations
- RelEmbedding.sumLiftRelInr r s = { toFun := Sum.inr, inj' := ⋯, map_rel_iff' := ⋯ }
Instances For
Sum.map as a relation embedding between Sum.LiftRel relations.
Equations
- f.sumLiftRelMap g = { toFun := Sum.map ⇑f ⇑g, inj' := ⋯, map_rel_iff' := ⋯ }
Instances For
Prod.map as a relation embedding.
Equations
- f.prodLexMap g = { toFun := Prod.map ⇑f ⇑g, inj' := ⋯, map_rel_iff' := ⋯ }
Instances For
A relation isomorphism is an equivalence that is also a relation embedding.
- toFun : α → β
- invFun : β → α
- left_inv : Function.LeftInverse self.invFun self.toFun
- right_inv : Function.RightInverse self.invFun self.toFun
Elements are related iff they are related after apply a
RelIso
Instances For
A relation isomorphism is an equivalence that is also a relation embedding.
Equations
- «term_≃r_» = Lean.ParserDescr.trailingNode `«term_≃r_» 25 25 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ≃r ") (Lean.ParserDescr.cat `term 26))
Instances For
Convert a RelIso to a RelEmbedding. This function is also available as a coercion
but often it is easier to write f.toRelEmbedding than to write explicitly r and s
in the target type.
Equations
- f.toRelEmbedding = { toEmbedding := f.toEmbedding, map_rel_iff' := ⋯ }
Instances For
Equations
Equations
- RelIso.instFunLike = { coe := fun (x : r ≃r s) => ⇑x.toRelEmbedding, coe_injective' := ⋯ }
The map DFunLike.coe : (r ≃r s) → (α → β) is injective.
See Note [custom simps projection]. We need to specify this projection explicitly in this case,
because RelIso defines custom coercions other than the ones given by DFunLike.
Equations
- RelIso.Simps.apply h = ⇑h
Instances For
See Note [custom simps projection].
Equations
- RelIso.Simps.symm_apply h = ⇑h.symm
Instances For
Identity map is a relation isomorphism.
Equations
- RelIso.refl r = { toEquiv := Equiv.refl α, map_rel_iff' := ⋯ }
Instances For
Equations
- RelIso.instInhabited r = { default := RelIso.refl r }
A relation isomorphism between equal relations on equal types.
Equations
- RelIso.cast h₁ h₂ = { toEquiv := Equiv.cast h₁, map_rel_iff' := ⋯ }
Instances For
A surjective relation embedding is a relation isomorphism.
Equations
- RelIso.ofSurjective f H = { toEquiv := Equiv.ofBijective ⇑f ⋯, map_rel_iff' := ⋯ }
Instances For
Transport a RelHom across a pair of RelIsos, by pre- and post-composition.
This is Equiv.arrowCongr for RelHom.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given relation isomorphisms r₁ ≃r s₁ and r₂ ≃r s₂, construct a relation isomorphism for the
lexicographic orders on the sum.
Instances For
Given relation isomorphisms r₁ ≃r s₁ and r₂ ≃r s₂, construct a relation isomorphism for the
lexicographic orders on the product.
Instances For
Two relations on empty types are isomorphic.
Equations
- RelIso.relIsoOfIsEmpty r s = { toEquiv := Equiv.equivOfIsEmpty α β, map_rel_iff' := ⋯ }
Instances For
The lexicographic sum of r plus an empty relation is isomorphic to r.
Equations
- RelIso.sumLexEmpty r s = { toEquiv := Equiv.sumEmpty α β, map_rel_iff' := ⋯ }
Instances For
The lexicographic sum of an empty relation plus s is isomorphic to s.
Equations
- RelIso.emptySumLex r s = { toEquiv := Equiv.emptySum α β, map_rel_iff' := ⋯ }
Instances For
Two irreflexive relations on a unique type are isomorphic.
Equations
- RelIso.ofUniqueOfIrrefl r s = { toEquiv := Equiv.ofUnique α β, map_rel_iff' := ⋯ }
Instances For
Two reflexive relations on a unique type are isomorphic.
Equations
- RelIso.ofUniqueOfRefl r s = { toEquiv := Equiv.ofUnique α β, map_rel_iff' := ⋯ }