Library zoo.common.relations
From stdpp Require Export
relations.
From zoo Require Import
prelude.
From zoo Require Import
options.
Section relation.
Context {A} (R : relation A).
Lemma transitive_tc `{!Transitive R} x1 x2 :
tc R x1 x2 ↔
R x1 x2.
Lemma preorder_rtc `{!Reflexive R} `{!Transitive R} x1 x2 :
rtc R x1 x2 ↔
R x1 x2.
#[global] Instance transitive_tc_antisymm `{!Transitive R} `{!AntiSymm R' R} :
AntiSymm R' (tc R).
#[global] Instance preorder_rtc_antisymm `{!Reflexive R} `{!Transitive R} `{!AntiSymm R' R} :
AntiSymm R' (rtc R).
Lemma rtc_equivalence_antisymm R' `{!Equivalence R'} `{!AntiSymm (=) (rtc R)} :
AntiSymm R' (rtc R).
End relation.
Class Initial {A} (R : relation A) :=
{ initial : A
; initial_lb a :
R initial a
}.
#[global] Arguments Build_Initial {_ _} _ _ : assert.
#[global] Arguments initial {_ _ _} : assert.
#[global] Program Instance rtc_initial `(R : relation A) `{!Initial R} : Initial (rtc R) :=
{| initial := initial |}.
relations.
From zoo Require Import
prelude.
From zoo Require Import
options.
Section relation.
Context {A} (R : relation A).
Lemma transitive_tc `{!Transitive R} x1 x2 :
tc R x1 x2 ↔
R x1 x2.
Lemma preorder_rtc `{!Reflexive R} `{!Transitive R} x1 x2 :
rtc R x1 x2 ↔
R x1 x2.
#[global] Instance transitive_tc_antisymm `{!Transitive R} `{!AntiSymm R' R} :
AntiSymm R' (tc R).
#[global] Instance preorder_rtc_antisymm `{!Reflexive R} `{!Transitive R} `{!AntiSymm R' R} :
AntiSymm R' (rtc R).
Lemma rtc_equivalence_antisymm R' `{!Equivalence R'} `{!AntiSymm (=) (rtc R)} :
AntiSymm R' (rtc R).
End relation.
Class Initial {A} (R : relation A) :=
{ initial : A
; initial_lb a :
R initial a
}.
#[global] Arguments Build_Initial {_ _} _ _ : assert.
#[global] Arguments initial {_ _ _} : assert.
#[global] Program Instance rtc_initial `(R : relation A) `{!Initial R} : Initial (rtc R) :=
{| initial := initial |}.