Transitive Closures
Content created by Viktor Yudov.
Created on 2024-05-25.
Last modified on 2024-05-25.
module foundation.binary-relations-transitive-closures where
Imports
open import foundation.binary-relations open import foundation.propositional-truncations open import foundation.universe-levels open import foundation-core.function-types open import foundation-core.propositions
Idea
TODO
Definition
module _ {l1 l2 : Level} {A : UU l1} where data transitive-closure (R : Relation l2 A) : Relation (l1 ⊔ l2) A where transitive-closure-base : {x y : A} → R x y → transitive-closure R x y transitive-closure-step : {x y z : A} → R x y → transitive-closure R y z → transitive-closure R x z is-transitive-transitive-closure : (R : Relation l2 A) → is-transitive (transitive-closure R) is-transitive-transitive-closure R x y z c-yz (transitive-closure-base r-xy) = transitive-closure-step r-xy c-yz is-transitive-transitive-closure R x y z c-yz (transitive-closure-step {y = u} r-xu c-uy) = transitive-closure-step r-xu ( is-transitive-transitive-closure R u y z c-yz c-uy) transitive-closure-preserves-reflexivity : (R : Relation l2 A) → is-reflexive R → is-reflexive (transitive-closure R) transitive-closure-preserves-reflexivity R is-refl x = transitive-closure-base (is-refl x) transitive-closure-preserves-symmetry : (R : Relation l2 A) → is-symmetric R → is-symmetric (transitive-closure R) transitive-closure-preserves-symmetry R is-sym x y (transitive-closure-base r) = transitive-closure-base (is-sym x y r) transitive-closure-preserves-symmetry R is-sym x y (transitive-closure-step {y = u} r-xu c-uy) = is-transitive-transitive-closure R y u x ( transitive-closure-base (is-sym x u r-xu)) ( transitive-closure-preserves-symmetry R is-sym u y c-uy)
Transitive closure of a relation valued in propositions
transitive-closure-Prop : (R : Relation-Prop l2 A) → Relation-Prop (l1 ⊔ l2) A transitive-closure-Prop R x y = trunc-Prop (transitive-closure (type-Relation-Prop R) x y) is-transitive-transitive-closure-Prop : (R : Relation-Prop l2 A) → is-transitive-Relation-Prop (transitive-closure-Prop R) is-transitive-transitive-closure-Prop R x y z c-yz c-xy = apply-twice-universal-property-trunc-Prop ( c-yz) ( c-xy) ( transitive-closure-Prop R x z) ( λ r-yz r-xy → unit-trunc-Prop ( is-transitive-transitive-closure ( type-Relation-Prop R) ( x) ( y) ( z) ( r-yz) ( r-xy))) transitive-closure-Prop-preserves-reflexivity : (R : Relation-Prop l2 A) → is-reflexive-Relation-Prop R → is-reflexive-Relation-Prop (transitive-closure-Prop R) transitive-closure-Prop-preserves-reflexivity R is-refl x = unit-trunc-Prop ( transitive-closure-preserves-reflexivity ( type-Relation-Prop R) ( is-refl) ( x)) transitive-closure-Prop-preserves-symmetry : (R : Relation-Prop l2 A) → is-symmetric-Relation-Prop R → is-symmetric-Relation-Prop (transitive-closure-Prop R) transitive-closure-Prop-preserves-symmetry R is-sym x y = map-universal-property-trunc-Prop ( transitive-closure-Prop R y x) ( λ r-xy → unit-trunc-Prop ( transitive-closure-preserves-symmetry ( type-Relation-Prop R) ( is-sym) ( x) ( y) ( r-xy)))
Recent changes
- 2024-05-25. Viktor Yudov. Refactor.