Relation closures #
This file defines the reflexive, transitive, reflexive transitive and equivalence closures of relations and proves some basic results on them.
Note that this is about unbundled relations, that is terms of types of the form α → β → Prop. For
the bundled version, see Rel.
Definitions #
Relation.ReflGen: Reflexive closure.ReflGen rrelates everythingrrelated, plus for allait relatesawith itself. SoReflGen r a b ↔ r a b ∨ a = b.Relation.TransGen: Transitive closure.TransGen rrelates everythingrrelated transitively. SoTransGen r a b ↔ ∃ x₀ ... xₙ, r a x₀ ∧ r x₀ x₁ ∧ ... ∧ r xₙ b.Relation.ReflTransGen: Reflexive transitive closure.ReflTransGen rrelates everythingrrelated transitively, plus for allait relatesawith itself. SoReflTransGen r a b ↔ (∃ x₀ ... xₙ, r a x₀ ∧ r x₀ x₁ ∧ ... ∧ r xₙ b) ∨ a = b. It is the same as the reflexive closure of the transitive closure, or the transitive closure of the reflexive closure. In terms of rewriting systems, this means thatacan be rewritten tobin a number of rewrites.Relation.EqvGen: Equivalence closure.EqvGen rrelates everythingReflTransGen rrelates, plus for all related pairs it relates them in the opposite order.Relation.Comp: Relation composition. We provide notation∘r. Forr : α → β → Propands : β → γ → Prop,r ∘r srelatesa : αandc : γiff there existsb : βthat's related to both.Relation.Map: Image of a relation under a pair of maps. Forr : α → β → Prop,f : α → γ,g : β → δ,Map r f gis the relationγ → δ → Proprelatingf aandg bfor alla,brelated byr.Relation.Join: Join of a relation. Forr : α → α → Prop,Join r a b ↔ ∃ c, r a c ∧ r b c. In terms of rewriting systems, this means thataandbcan be rewritten to the same term.
If a reflexive relation r : α → α → Prop holds over x y : α,
then it holds whether or not x ≠ y. Unlike Reflexive.ne_imp_iff, this uses [IsRefl α r].
A function f : α → β is a fibration between the relation rα and rβ if for all
a : α and b : β, whenever b : β and f a are related by rβ, b is the image
of some a' : α under f, and a' and a are related by rα.
Equations
Instances For
If f : α → β is a fibration between relations rα and rβ, and a : α is
accessible under rα, then f a is accessible under rβ.
The map of a relation r through a pair of functions pushes the
relation to the codomains of the functions. The resulting relation is
defined by having pairs of terms related if they have preimages
related by r.
Instances For
ReflTransGen r: reflexive transitive closure of r
- refl {α : Type u_1} {r : α → α → Prop} {a : α} : ReflTransGen r a a
- tail {α : Type u_1} {r : α → α → Prop} {a b c : α} : ReflTransGen r a b → r b c → ReflTransGen r a c
Instances For
EqvGen r: equivalence closure of r.
- rel {α : Type u_1} {r : α → α → Prop} (x y : α) : r x y → EqvGen r x y
- refl {α : Type u_1} {r : α → α → Prop} (x : α) : EqvGen r x x
- symm {α : Type u_1} {r : α → α → Prop} (x y : α) : EqvGen r x y → EqvGen r y x
- trans {α : Type u_1} {r : α → α → Prop} (x y z : α) : EqvGen r x y → EqvGen r y z → EqvGen r x z
Instances For
Equations
- Relation.instTransTransGenReflTransGen = { trans := ⋯ }
Equations
- Relation.instTransReflTransGenTransGen = { trans := ⋯ }
Equations
- Relation.instTransReflTransGen = { trans := ⋯ }
Equations
- Relation.instTransReflTransGen_1 = { trans := ⋯ }
EqvGen.setoid r is the setoid generated by a relation r.
The motivation for this definition is that Quot r behaves like Quotient (EqvGen.setoid r),
see for example Quot.eqvGen_exact and Quot.eqvGen_sound.
Equations
- Relation.EqvGen.setoid r = { r := Relation.EqvGen r, iseqv := ⋯ }
Instances For
The join of a relation on a single type is a new relation for which
pairs of terms are related if there is a third term they are both
related to. For example, if r is a relation representing rewrites
in a term rewriting system, then confluence is the property that if
a rewrites to both b and c, then join r relates b and c
(see Relation.church_rosser).
Instances For
A sufficient condition for the Church-Rosser property.