Built with Alectryon, running Coq+SerAPI v8.10.0+0.7.0. Coq sources are in this panel; goals and messages will appear in the other. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus.
(************************************************************************)
(* * The Coq Proof Assistant / The Coq Development Team *)
(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
(* // * This file is distributed under the terms of the *)
(* * GNU Lesser General Public License Version 2.1 *)
(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
(************************************************************************)
(************************************************************************)
(************************************************************************) Require Import Relation_Definitions. Require Import Relation_Operators. Section Properties. Arguments clos_refl [A] R x _. Arguments clos_refl_trans [A] R x _. Arguments clos_refl_trans_1n [A] R x _. Arguments clos_refl_trans_n1 [A] R x _. Arguments clos_refl_sym_trans [A] R _ _. Arguments clos_refl_sym_trans_1n [A] R x _. Arguments clos_refl_sym_trans_n1 [A] R x _. Arguments clos_trans [A] R x _. Arguments clos_trans_1n [A] R x _. Arguments clos_trans_n1 [A] R x _. Arguments inclusion [A] R1 R2. Arguments preorder [A] R. Variable A : Type. Variable R : relation A. Section Clos_Refl_Trans. Local Notation "R *" := (clos_refl_trans R) (at level 8, no associativity, format "R *").
Correctness of the reflexive-transitive closure operator
A:TypeR:relation Apreorder R*A:TypeR:relation Apreorder R*A:TypeR:relation Areflexive A R*A:TypeR:relation Atransitive A R*exact (rt_refl A R).A:TypeR:relation Areflexive A R*exact (rt_trans A R). Qed.A:TypeR:relation Atransitive A R*
Idempotency of the reflexive-transitive closure operator
A:TypeR:relation Ainclusion (R*)* R*A:TypeR:relation Ainclusion (R*)* R*A:TypeR:relation Aforall x y : A, (R*)* x y -> R* x yA:TypeR:relation Ax, y, z:AH:(R*)* x yH0:(R*)* y zIHclos_refl_trans1:R* x yIHclos_refl_trans2:R* y zR* x zapply rt_trans with y; auto with sets. Qed. End Clos_Refl_Trans. Section Clos_Refl_Sym_Trans.A:TypeR:relation Ax, y, z:AH:(R*)* x yH0:(R*)* y zIHclos_refl_trans1:R* x yIHclos_refl_trans2:R* y zR* x z
Reflexive-transitive closure is included in the
reflexive-symmetric-transitive closure
A:TypeR:relation Ainclusion (clos_refl_trans R) (clos_refl_sym_trans R)A:TypeR:relation Ainclusion (clos_refl_trans R) (clos_refl_sym_trans R)A:TypeR:relation Aforall x y : A, clos_refl_trans R x y -> clos_refl_sym_trans R x yapply rst_trans with y; auto with sets. Qed.A:TypeR:relation Ax, y, z:AH:clos_refl_trans R x yH0:clos_refl_trans R y zIHclos_refl_trans1:clos_refl_sym_trans R x yIHclos_refl_trans2:clos_refl_sym_trans R y zclos_refl_sym_trans R x z
Reflexive closure is included in the
reflexive-transitive closure
A:TypeR:relation Ainclusion (clos_refl R) (clos_refl_trans R)A:TypeR:relation Ainclusion (clos_refl R) (clos_refl_trans R)A:TypeR:relation Ax, y:AH:R x yclos_refl_trans R x yA:TypeR:relation Ax:Aclos_refl_trans R x xconstructor; auto.A:TypeR:relation Ax, y:AH:R x yclos_refl_trans R x yconstructor 2. Qed.A:TypeR:relation Ax:Aclos_refl_trans R x xA:TypeR:relation Aforall x y z : A, clos_refl_trans R x y -> clos_trans R y z -> clos_trans R x zA:TypeR:relation Aforall x y z : A, clos_refl_trans R x y -> clos_trans R y z -> clos_trans R x zA:TypeR:relation Az, b, d:AH1:R b dclos_trans R d z -> clos_trans R b zA:TypeR:relation Az, b, d:AH1:R b dH:clos_trans R d zclos_trans R b zA:TypeR:relation Az, b, d:AH1:R b dH:clos_trans R d zclos_trans R b dauto. Qed.A:TypeR:relation Az, b, d:AH1:R b dH:clos_trans R d zR b d
Correctness of the reflexive-symmetric-transitive closure
A:TypeR:relation Aequivalence A (clos_refl_sym_trans R)A:TypeR:relation Aequivalence A (clos_refl_sym_trans R)A:TypeR:relation Areflexive A (clos_refl_sym_trans R)A:TypeR:relation Atransitive A (clos_refl_sym_trans R)A:TypeR:relation Asymmetric A (clos_refl_sym_trans R)exact (rst_refl A R).A:TypeR:relation Areflexive A (clos_refl_sym_trans R)exact (rst_trans A R).A:TypeR:relation Atransitive A (clos_refl_sym_trans R)exact (rst_sym A R). Qed.A:TypeR:relation Asymmetric A (clos_refl_sym_trans R)
Idempotency of the reflexive-symmetric-transitive closure operator
A:TypeR:relation Ainclusion (clos_refl_sym_trans (clos_refl_sym_trans R)) (clos_refl_sym_trans R)A:TypeR:relation Ainclusion (clos_refl_sym_trans (clos_refl_sym_trans R)) (clos_refl_sym_trans R)A:TypeR:relation Aforall x y : A, clos_refl_sym_trans (clos_refl_sym_trans R) x y -> clos_refl_sym_trans R x yapply rst_trans with y; auto with sets. Qed. End Clos_Refl_Sym_Trans. Section Equivalences.A:TypeR:relation Ax, y, z:AH:clos_refl_sym_trans (clos_refl_sym_trans R) x yH0:clos_refl_sym_trans (clos_refl_sym_trans R) y zIHclos_refl_sym_trans1:clos_refl_sym_trans R x yIHclos_refl_sym_trans2:clos_refl_sym_trans R y zclos_refl_sym_trans R x z
Direct transitive closure vs left-step extension
A:TypeR:relation Aforall x y : A, clos_trans_1n R x y -> clos_trans R x yA:TypeR:relation Aforall x y : A, clos_trans_1n R x y -> clos_trans R x yA:TypeR:relation Ax, y:AH:R x yclos_trans R x yA:TypeR:relation Ax, y, z:AH:R x yH0:clos_trans_1n R y zIHclos_trans_1n:clos_trans R y zclos_trans R x zleft; assumption.A:TypeR:relation Ax, y:AH:R x yclos_trans R x yA:TypeR:relation Ax, y, z:AH:R x yH0:clos_trans_1n R y zIHclos_trans_1n:clos_trans R y zclos_trans R x zleft; auto. Qed.A:TypeR:relation Ax, y, z:AH:R x yH0:clos_trans_1n R y zIHclos_trans_1n:clos_trans R y zclos_trans R x yA:TypeR:relation Aforall x y : A, clos_trans R x y -> clos_trans_1n R x yA:TypeR:relation Aforall x y : A, clos_trans R x y -> clos_trans_1n R x yA:TypeR:relation Ax, y:AH:R x yclos_trans_1n R x yA:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_1n R x yIHclos_trans2:clos_trans_1n R y zclos_trans_1n R x zleft; assumption.A:TypeR:relation Ax, y:AH:R x yclos_trans_1n R x yA:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_1n R x yIHclos_trans2:clos_trans_1n R y zclos_trans_1n R x zA:TypeR:relation Az, x, y:AH:clos_trans R x yH0:clos_trans R y zH1:R x yclos_trans_1n R y z -> clos_trans_1n R x zA:TypeR:relation Az, x, z0:AH:clos_trans R x z0H0:clos_trans R z0 zy:AH1:R x yIHclos_trans1:clos_trans_1n R y z0IHIHclos_trans1:clos_trans R y z0 -> clos_trans R z0 z -> clos_trans_1n R z0 z -> clos_trans_1n R y zclos_trans_1n R z0 z -> clos_trans_1n R x zright with y; auto.A:TypeR:relation Az, x, y:AH:clos_trans R x yH0:clos_trans R y zH1:R x yclos_trans_1n R y z -> clos_trans_1n R x zA:TypeR:relation Az, x, z0:AH:clos_trans R x z0H0:clos_trans R z0 zy:AH1:R x yIHclos_trans1:clos_trans_1n R y z0IHIHclos_trans1:clos_trans R y z0 -> clos_trans R z0 z -> clos_trans_1n R z0 z -> clos_trans_1n R y zclos_trans_1n R z0 z -> clos_trans_1n R x zA:TypeR:relation Az, x, z0:AH:clos_trans R x z0H0:clos_trans R z0 zy:AH1:R x yIHclos_trans1:clos_trans_1n R y z0IHIHclos_trans1:clos_trans R y z0 -> clos_trans R z0 z -> clos_trans_1n R z0 z -> clos_trans_1n R y zIHclos_trans2:clos_trans_1n R z0 zclos_trans_1n R y zapply clos_t1n_trans; auto. Qed.A:TypeR:relation Az, x, z0:AH:clos_trans R x z0H0:clos_trans R z0 zy:AH1:R x yIHclos_trans1:clos_trans_1n R y z0IHIHclos_trans1:clos_trans R y z0 -> clos_trans R z0 z -> clos_trans_1n R z0 z -> clos_trans_1n R y zIHclos_trans2:clos_trans_1n R z0 zclos_trans R y z0A:TypeR:relation Aforall x y : A, clos_trans R x y <-> clos_trans_1n R x yA:TypeR:relation Aforall x y : A, clos_trans R x y <-> clos_trans_1n R x yA:TypeR:relation Ax, y:Aclos_trans R x y -> clos_trans_1n R x yA:TypeR:relation Ax, y:Aclos_trans_1n R x y -> clos_trans R x yapply clos_trans_t1n.A:TypeR:relation Ax, y:Aclos_trans R x y -> clos_trans_1n R x yapply clos_t1n_trans. Qed.A:TypeR:relation Ax, y:Aclos_trans_1n R x y -> clos_trans R x y
Direct transitive closure vs right-step extension
A:TypeR:relation Aforall x y : A, clos_trans_n1 R x y -> clos_trans R x yA:TypeR:relation Aforall x y : A, clos_trans_n1 R x y -> clos_trans R x yA:TypeR:relation Ax, y:AH:R x yclos_trans R x yA:TypeR:relation Ax, y, z:AH:R y zH0:clos_trans_n1 R x yIHclos_trans_n1:clos_trans R x yclos_trans R x zleft; assumption.A:TypeR:relation Ax, y:AH:R x yclos_trans R x yA:TypeR:relation Ax, y, z:AH:R y zH0:clos_trans_n1 R x yIHclos_trans_n1:clos_trans R x yclos_trans R x zleft; assumption. Qed.A:TypeR:relation Ax, y, z:AH:R y zH0:clos_trans_n1 R x yIHclos_trans_n1:clos_trans R x yclos_trans R y zA:TypeR:relation Aforall x y : A, clos_trans R x y -> clos_trans_n1 R x yA:TypeR:relation Aforall x y : A, clos_trans R x y -> clos_trans_n1 R x yA:TypeR:relation Ax, y:AH:R x yclos_trans_n1 R x yA:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_n1 R x yIHclos_trans2:clos_trans_n1 R y zclos_trans_n1 R x zleft; assumption.A:TypeR:relation Ax, y:AH:R x yclos_trans_n1 R x yA:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_n1 R x yIHclos_trans2:clos_trans_n1 R y zclos_trans_n1 R x zA:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_n1 R x yIHclos_trans2:clos_trans_n1 R y zforall y0 : A, R y y0 -> clos_trans_n1 R x y0A:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_n1 R x yIHclos_trans2:clos_trans_n1 R y zforall y0 z0 : A, R y0 z0 -> clos_trans_n1 R y y0 -> clos_trans_n1 R x y0 -> clos_trans_n1 R x z0A:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_n1 R x yIHclos_trans2:clos_trans_n1 R y zforall y0 : A, R y y0 -> clos_trans_n1 R x y0A:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_n1 R x yIHclos_trans2:clos_trans_n1 R y zy0:AH1:R y y0R y y0A:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_n1 R x yIHclos_trans2:clos_trans_n1 R y zy0:AH1:R y y0clos_trans_n1 R x yauto.A:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_n1 R x yIHclos_trans2:clos_trans_n1 R y zy0:AH1:R y y0R y y0auto.A:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_n1 R x yIHclos_trans2:clos_trans_n1 R y zy0:AH1:R y y0clos_trans_n1 R x yA:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_n1 R x yIHclos_trans2:clos_trans_n1 R y zforall y0 z0 : A, R y0 z0 -> clos_trans_n1 R y y0 -> clos_trans_n1 R x y0 -> clos_trans_n1 R x z0right with y0; auto. Qed.A:TypeR:relation Ax, y, z:AH:clos_trans R x yH0:clos_trans R y zIHclos_trans1:clos_trans_n1 R x yIHclos_trans2:clos_trans_n1 R y zy0, z0:AH1:R y0 z0H2:clos_trans_n1 R y y0H3:clos_trans_n1 R x y0clos_trans_n1 R x z0A:TypeR:relation Aforall x y : A, clos_trans R x y <-> clos_trans_n1 R x yA:TypeR:relation Aforall x y : A, clos_trans R x y <-> clos_trans_n1 R x yA:TypeR:relation Ax, y:Aclos_trans R x y -> clos_trans_n1 R x yA:TypeR:relation Ax, y:Aclos_trans_n1 R x y -> clos_trans R x yapply clos_trans_tn1.A:TypeR:relation Ax, y:Aclos_trans R x y -> clos_trans_n1 R x yapply clos_tn1_trans. Qed.A:TypeR:relation Ax, y:Aclos_trans_n1 R x y -> clos_trans R x y
Direct reflexive-transitive closure is equivalent to
transitivity by left-step extension
A:TypeR:relation Aforall x y : A, R x y -> clos_refl_trans_1n R x yA:TypeR:relation Aforall x y : A, R x y -> clos_refl_trans_1n R x yright with y;[assumption|left]. Qed.A:TypeR:relation Ax, y:AH:R x yclos_refl_trans_1n R x yA:TypeR:relation Aforall x y : A, R x y -> clos_refl_trans_n1 R x yA:TypeR:relation Aforall x y : A, R x y -> clos_refl_trans_n1 R x yright with x;[assumption|left]. Qed.A:TypeR:relation Ax, y:AH:R x yclos_refl_trans_n1 R x yA:TypeR:relation Aforall x y : A, clos_refl_trans_1n R x y -> clos_refl_trans R x yA:TypeR:relation Aforall x y : A, clos_refl_trans_1n R x y -> clos_refl_trans R x yA:TypeR:relation Ax:Aclos_refl_trans R x xA:TypeR:relation Ax, y, z:AH:R x yH0:clos_refl_trans_1n R y zIHclos_refl_trans_1n:clos_refl_trans R y zclos_refl_trans R x zconstructor 2.A:TypeR:relation Ax:Aclos_refl_trans R x xA:TypeR:relation Ax, y, z:AH:R x yH0:clos_refl_trans_1n R y zIHclos_refl_trans_1n:clos_refl_trans R y zclos_refl_trans R x zconstructor 1; auto. Qed.A:TypeR:relation Ax, y, z:AH:R x yH0:clos_refl_trans_1n R y zIHclos_refl_trans_1n:clos_refl_trans R y zclos_refl_trans R x yA:TypeR:relation Aforall x y : A, clos_refl_trans R x y -> clos_refl_trans_1n R x yA:TypeR:relation Aforall x y : A, clos_refl_trans R x y -> clos_refl_trans_1n R x yA:TypeR:relation Ax, y:AH:R x yclos_refl_trans_1n R x yA:TypeR:relation Ax:Aclos_refl_trans_1n R x xA:TypeR:relation Ax, y, z:AH:clos_refl_trans R x yH0:clos_refl_trans R y zIHclos_refl_trans1:clos_refl_trans_1n R x yIHclos_refl_trans2:clos_refl_trans_1n R y zclos_refl_trans_1n R x zapply clos_rt1n_step; assumption.A:TypeR:relation Ax, y:AH:R x yclos_refl_trans_1n R x yleft.A:TypeR:relation Ax:Aclos_refl_trans_1n R x xA:TypeR:relation Ax, y, z:AH:clos_refl_trans R x yH0:clos_refl_trans R y zIHclos_refl_trans1:clos_refl_trans_1n R x yIHclos_refl_trans2:clos_refl_trans_1n R y zclos_refl_trans_1n R x zA:TypeR:relation Az, x, z0:AH:clos_refl_trans R x z0H0:clos_refl_trans R z0 zy:AH1:R x yIHclos_refl_trans1:clos_refl_trans_1n R y z0IHIHclos_refl_trans1:clos_refl_trans R y z0 -> clos_refl_trans R z0 z -> clos_refl_trans_1n R z0 z -> clos_refl_trans_1n R y zclos_refl_trans_1n R z0 z -> clos_refl_trans_1n R x zA:TypeR:relation Az, x, z0:AH:clos_refl_trans R x z0H0:clos_refl_trans R z0 zy:AH1:R x yIHclos_refl_trans1:clos_refl_trans_1n R y z0IHIHclos_refl_trans1:clos_refl_trans R y z0 -> clos_refl_trans R z0 z -> clos_refl_trans_1n R z0 z -> clos_refl_trans_1n R y zIHclos_refl_trans2:clos_refl_trans_1n R z0 zclos_refl_trans_1n R y zapply clos_rt1n_rt; auto. Qed.A:TypeR:relation Az, x, z0:AH:clos_refl_trans R x z0H0:clos_refl_trans R z0 zy:AH1:R x yIHclos_refl_trans1:clos_refl_trans_1n R y z0IHIHclos_refl_trans1:clos_refl_trans R y z0 -> clos_refl_trans R z0 z -> clos_refl_trans_1n R z0 z -> clos_refl_trans_1n R y zIHclos_refl_trans2:clos_refl_trans_1n R z0 zclos_refl_trans R y z0A:TypeR:relation Aforall x y : A, clos_refl_trans R x y <-> clos_refl_trans_1n R x yA:TypeR:relation Aforall x y : A, clos_refl_trans R x y <-> clos_refl_trans_1n R x yA:TypeR:relation Ax, y:Aclos_refl_trans R x y -> clos_refl_trans_1n R x yA:TypeR:relation Ax, y:Aclos_refl_trans_1n R x y -> clos_refl_trans R x yapply clos_rt_rt1n.A:TypeR:relation Ax, y:Aclos_refl_trans R x y -> clos_refl_trans_1n R x yapply clos_rt1n_rt. Qed.A:TypeR:relation Ax, y:Aclos_refl_trans_1n R x y -> clos_refl_trans R x y
Direct reflexive-transitive closure is equivalent to
transitivity by right-step extension
A:TypeR:relation Aforall x y : A, clos_refl_trans_n1 R x y -> clos_refl_trans R x yA:TypeR:relation Aforall x y : A, clos_refl_trans_n1 R x y -> clos_refl_trans R x yA:TypeR:relation Ax:Aclos_refl_trans R x xA:TypeR:relation Ax, y, z:AH:R y zH0:clos_refl_trans_n1 R x yIHclos_refl_trans_n1:clos_refl_trans R x yclos_refl_trans R x zconstructor 2.A:TypeR:relation Ax:Aclos_refl_trans R x xA:TypeR:relation Ax, y, z:AH:R y zH0:clos_refl_trans_n1 R x yIHclos_refl_trans_n1:clos_refl_trans R x yclos_refl_trans R x zconstructor 1; assumption. Qed.A:TypeR:relation Ax, y, z:AH:R y zH0:clos_refl_trans_n1 R x yIHclos_refl_trans_n1:clos_refl_trans R x yclos_refl_trans R y zA:TypeR:relation Aforall x y : A, clos_refl_trans R x y -> clos_refl_trans_n1 R x yA:TypeR:relation Aforall x y : A, clos_refl_trans R x y -> clos_refl_trans_n1 R x yA:TypeR:relation Ax, y:AH:R x yclos_refl_trans_n1 R x yA:TypeR:relation Ax:Aclos_refl_trans_n1 R x xA:TypeR:relation Ax, y, z:AH:clos_refl_trans R x yH0:clos_refl_trans R y zIHclos_refl_trans1:clos_refl_trans_n1 R x yIHclos_refl_trans2:clos_refl_trans_n1 R y zclos_refl_trans_n1 R x zapply clos_rtn1_step; auto.A:TypeR:relation Ax, y:AH:R x yclos_refl_trans_n1 R x yleft.A:TypeR:relation Ax:Aclos_refl_trans_n1 R x xA:TypeR:relation Ax, y, z:AH:clos_refl_trans R x yH0:clos_refl_trans R y zIHclos_refl_trans1:clos_refl_trans_n1 R x yIHclos_refl_trans2:clos_refl_trans_n1 R y zclos_refl_trans_n1 R x zA:TypeR:relation Ax, y, z:AH:clos_refl_trans R x yH0:clos_refl_trans R y zIHclos_refl_trans1:clos_refl_trans_n1 R x yIHclos_refl_trans2:clos_refl_trans_n1 R y zforall y0 z0 : A, R y0 z0 -> clos_refl_trans_n1 R y y0 -> clos_refl_trans_n1 R x y0 -> clos_refl_trans_n1 R x z0right with y0; auto. Qed.A:TypeR:relation Ax, y, z:AH:clos_refl_trans R x yH0:clos_refl_trans R y zIHclos_refl_trans1:clos_refl_trans_n1 R x yIHclos_refl_trans2:clos_refl_trans_n1 R y zy0, z0:AH1:R y0 z0H2:clos_refl_trans_n1 R y y0H3:clos_refl_trans_n1 R x y0clos_refl_trans_n1 R x z0A:TypeR:relation Aforall x y : A, clos_refl_trans R x y <-> clos_refl_trans_n1 R x yA:TypeR:relation Aforall x y : A, clos_refl_trans R x y <-> clos_refl_trans_n1 R x yA:TypeR:relation Ax, y:Aclos_refl_trans R x y -> clos_refl_trans_n1 R x yA:TypeR:relation Ax, y:Aclos_refl_trans_n1 R x y -> clos_refl_trans R x yapply clos_rt_rtn1.A:TypeR:relation Ax, y:Aclos_refl_trans R x y -> clos_refl_trans_n1 R x yapply clos_rtn1_rt. Qed.A:TypeR:relation Ax, y:Aclos_refl_trans_n1 R x y -> clos_refl_trans R x y
Induction on the left transitive step
A:TypeR:relation Aforall (x : A) (P : A -> Prop), P x -> (forall y z : A, clos_refl_trans R x y -> P y -> R y z -> P z) -> forall z : A, clos_refl_trans R x z -> P zA:TypeR:relation Aforall (x : A) (P : A -> Prop), P x -> (forall y z : A, clos_refl_trans R x y -> P y -> R y z -> P z) -> forall z : A, clos_refl_trans R x z -> P zA:TypeR:relation Ax:AP:A -> PropH:P xH0:forall y z0 : A, clos_refl_trans R x y -> P y -> R y z0 -> P z0z:AH1:clos_refl_trans R x zP zA:TypeR:relation Ax:AP:A -> Propz:AH1:clos_refl_trans R x zP x -> (forall y z0 : A, clos_refl_trans R x y -> P y -> R y z0 -> P z0) -> P zA:TypeR:relation AP:A -> Propx, y:AH:R x yH0:P xH1:forall y0 z : A, clos_refl_trans R x y0 -> P y0 -> R y0 z -> P zP yA:TypeR:relation AP:A -> Propx, y, z:AH1_:clos_refl_trans R x yH1_0:clos_refl_trans R y zIHclos_refl_trans1:P x -> (forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0) -> P yIHclos_refl_trans2:P y -> (forall y0 z0 : A, clos_refl_trans R y y0 -> P y0 -> R y0 z0 -> P z0) -> P zH:P xH0:forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0P zapply H1 with x; auto with sets.A:TypeR:relation AP:A -> Propx, y:AH:R x yH0:P xH1:forall y0 z : A, clos_refl_trans R x y0 -> P y0 -> R y0 z -> P zP yA:TypeR:relation AP:A -> Propx, y, z:AH1_:clos_refl_trans R x yH1_0:clos_refl_trans R y zIHclos_refl_trans1:P x -> (forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0) -> P yIHclos_refl_trans2:P y -> (forall y0 z0 : A, clos_refl_trans R y y0 -> P y0 -> R y0 z0 -> P z0) -> P zH:P xH0:forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0P zA:TypeR:relation AP:A -> Propx, y, z:AH1_:clos_refl_trans R x yH1_0:clos_refl_trans R y zIHclos_refl_trans1:P x -> (forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0) -> P yIHclos_refl_trans2:P y -> (forall y0 z0 : A, clos_refl_trans R y y0 -> P y0 -> R y0 z0 -> P z0) -> P zH:P xH0:forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0P yA:TypeR:relation AP:A -> Propx, y, z:AH1_:clos_refl_trans R x yH1_0:clos_refl_trans R y zIHclos_refl_trans1:P x -> (forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0) -> P yIHclos_refl_trans2:P y -> (forall y0 z0 : A, clos_refl_trans R y y0 -> P y0 -> R y0 z0 -> P z0) -> P zH:P xH0:forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0forall y0 z0 : A, clos_refl_trans R y y0 -> P y0 -> R y0 z0 -> P z0apply IHclos_refl_trans1; auto with sets.A:TypeR:relation AP:A -> Propx, y, z:AH1_:clos_refl_trans R x yH1_0:clos_refl_trans R y zIHclos_refl_trans1:P x -> (forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0) -> P yIHclos_refl_trans2:P y -> (forall y0 z0 : A, clos_refl_trans R y y0 -> P y0 -> R y0 z0 -> P z0) -> P zH:P xH0:forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0P yA:TypeR:relation AP:A -> Propx, y, z:AH1_:clos_refl_trans R x yH1_0:clos_refl_trans R y zIHclos_refl_trans1:P x -> (forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0) -> P yIHclos_refl_trans2:P y -> (forall y0 z0 : A, clos_refl_trans R y y0 -> P y0 -> R y0 z0 -> P z0) -> P zH:P xH0:forall y0 z0 : A, clos_refl_trans R x y0 -> P y0 -> R y0 z0 -> P z0forall y0 z0 : A, clos_refl_trans R y y0 -> P y0 -> R y0 z0 -> P z0A:TypeR:relation AP:A -> Propx, y, z:AH1_:clos_refl_trans R x yH1_0:clos_refl_trans R y zIHclos_refl_trans1:P x -> (forall y1 z1 : A, clos_refl_trans R x y1 -> P y1 -> R y1 z1 -> P z1) -> P yIHclos_refl_trans2:P y -> (forall y1 z1 : A, clos_refl_trans R y y1 -> P y1 -> R y1 z1 -> P z1) -> P zH:P xH0:forall y1 z1 : A, clos_refl_trans R x y1 -> P y1 -> R y1 z1 -> P z1y0, z0:AH1:clos_refl_trans R y y0H2:P y0H3:R y0 z0P z0apply rt_trans with y; auto with sets. Qed.A:TypeR:relation AP:A -> Propx, y, z:AH1_:clos_refl_trans R x yH1_0:clos_refl_trans R y zIHclos_refl_trans1:P x -> (forall y1 z1 : A, clos_refl_trans R x y1 -> P y1 -> R y1 z1 -> P z1) -> P yIHclos_refl_trans2:P y -> (forall y1 z1 : A, clos_refl_trans R y y1 -> P y1 -> R y1 z1 -> P z1) -> P zH:P xH0:forall y1 z1 : A, clos_refl_trans R x y1 -> P y1 -> R y1 z1 -> P z1y0, z0:AH1:clos_refl_trans R y y0H2:P y0H3:R y0 z0clos_refl_trans R x y0
Induction on the right transitive step
A:TypeR:relation Aforall (P : A -> Prop) (z : A), P z -> (forall x y : A, R x y -> clos_refl_trans_1n R y z -> P y -> P x) -> forall x : A, clos_refl_trans_1n R x z -> P xapply H0 with y; auto. Qed.A:TypeR:relation AP:A -> Propz:AH:P zH0:forall x0 y0 : A, R x0 y0 -> clos_refl_trans_1n R y0 z -> P y0 -> P x0x, y:AH1:R x yH2:clos_refl_trans_1n R y zIHclos_refl_trans_1n:P z -> (forall x0 y0 : A, R x0 y0 -> clos_refl_trans_1n R y0 z -> P y0 -> P x0) -> P yP xA:TypeR:relation Aforall (P : A -> Prop) (z : A), P z -> (forall x y : A, R x y -> P y -> clos_refl_trans R y z -> P x) -> forall x : A, clos_refl_trans R x z -> P xA:TypeR:relation AP:A -> Propz:AHz:P zIH:forall x0 y : A, R x0 y -> P y -> clos_refl_trans R y z -> P x0x:AHxz:clos_refl_trans R x zP xA:TypeR:relation AP:A -> Propz:AHz:P zIH:forall x0 y : A, R x0 y -> P y -> clos_refl_trans R y z -> P x0x:AHxz:clos_refl_trans_1n R x zP xA:TypeR:relation AP:A -> Propz:AHz:P zIH:forall x0 y : A, R x0 y -> P y -> clos_refl_trans R y z -> P x0x:AHxz:clos_refl_trans_1n R x zforall x0 y : A, R x0 y -> clos_refl_trans_1n R y z -> P y -> P x0A:TypeR:relation AP:A -> Propz:AHz:P zIH:forall x y : A, R x y -> P y -> clos_refl_trans R y z -> P xforall x y : A, R x y -> clos_refl_trans_1n R y z -> P y -> P xA:TypeR:relation AP:A -> Propz:AHz:P zIH:forall x0 y0 : A, R x0 y0 -> P y0 -> clos_refl_trans R y0 z -> P x0x, y:AHxy:R x yHyz:clos_refl_trans_1n R y zHy:P yP xeauto. Qed.A:TypeR:relation AP:A -> Propz:AHz:P zIH:forall x0 y0 : A, R x0 y0 -> P y0 -> clos_refl_trans R y0 z -> P x0x, y:AHxy:R x yHyz:clos_refl_trans R y zHy:P yP x
Direct reflexive-symmetric-transitive closure is equivalent to
transitivity by symmetric left-step extension
A:TypeR:relation Aforall x y : A, clos_refl_sym_trans_1n R x y -> clos_refl_sym_trans R x yA:TypeR:relation Aforall x y : A, clos_refl_sym_trans_1n R x y -> clos_refl_sym_trans R x yA:TypeR:relation Ax:Aclos_refl_sym_trans R x xA:TypeR:relation Ax, y, z:AH:R x y \/ R y xH0:clos_refl_sym_trans_1n R y zIHclos_refl_sym_trans_1n:clos_refl_sym_trans R y zclos_refl_sym_trans R x zconstructor 2.A:TypeR:relation Ax:Aclos_refl_sym_trans R x xA:TypeR:relation Ax, y, z:AH:R x y \/ R y xH0:clos_refl_sym_trans_1n R y zIHclos_refl_sym_trans_1n:clos_refl_sym_trans R y zclos_refl_sym_trans R x zcase H;[constructor 1|constructor 3; constructor 1]; auto. Qed.A:TypeR:relation Ax, y, z:AH:R x y \/ R y xH0:clos_refl_sym_trans_1n R y zIHclos_refl_sym_trans_1n:clos_refl_sym_trans R y zclos_refl_sym_trans R x yA:TypeR:relation Aforall x y z : A, clos_refl_sym_trans_1n R x y -> clos_refl_sym_trans_1n R y z -> clos_refl_sym_trans_1n R x zA:TypeR:relation Az, x:Aclos_refl_sym_trans_1n R x z -> clos_refl_sym_trans_1n R x zA:TypeR:relation Az, x, y, z0:AH:R x y \/ R y xH0:clos_refl_sym_trans_1n R y z0IHclos_refl_sym_trans_1n:clos_refl_sym_trans_1n R z0 z -> clos_refl_sym_trans_1n R y zclos_refl_sym_trans_1n R z0 z -> clos_refl_sym_trans_1n R x zauto.A:TypeR:relation Az, x:Aclos_refl_sym_trans_1n R x z -> clos_refl_sym_trans_1n R x zintros; right with y; eauto. Qed.A:TypeR:relation Az, x, y, z0:AH:R x y \/ R y xH0:clos_refl_sym_trans_1n R y z0IHclos_refl_sym_trans_1n:clos_refl_sym_trans_1n R z0 z -> clos_refl_sym_trans_1n R y zclos_refl_sym_trans_1n R z0 z -> clos_refl_sym_trans_1n R x zA:TypeR:relation Aforall x y : A, clos_refl_sym_trans_1n R x y -> clos_refl_sym_trans_1n R y xA:TypeR:relation Aforall x y : A, clos_refl_sym_trans_1n R x y -> clos_refl_sym_trans_1n R y xA:TypeR:relation Ax, y:AH:clos_refl_sym_trans_1n R x yforall x0 : A, clos_refl_sym_trans_1n R x0 x0A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_1n R x yforall x0 y0 z : A, R x0 y0 \/ R y0 x0 -> clos_refl_sym_trans_1n R y0 z -> clos_refl_sym_trans_1n R z y0 -> clos_refl_sym_trans_1n R z x0constructor 1.A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_1n R x yforall x0 : A, clos_refl_sym_trans_1n R x0 x0A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_1n R x yforall x0 y0 z : A, R x0 y0 \/ R y0 x0 -> clos_refl_sym_trans_1n R y0 z -> clos_refl_sym_trans_1n R z y0 -> clos_refl_sym_trans_1n R z x0A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_1n R x yx0, y0, z:AD:R x0 y0 \/ R y0 x0H0:clos_refl_sym_trans_1n R y0 zH1:clos_refl_sym_trans_1n R z y0clos_refl_sym_trans_1n R y0 x0A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_1n R x yx0, y0, z:AD:R x0 y0 \/ R y0 x0H0:clos_refl_sym_trans_1n R y0 zH1:clos_refl_sym_trans_1n R z y0R y0 x0 \/ R x0 y0A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_1n R x yx0, y0, z:AD:R x0 y0 \/ R y0 x0H0:clos_refl_sym_trans_1n R y0 zH1:clos_refl_sym_trans_1n R z y0clos_refl_sym_trans_1n R x0 x0tauto.A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_1n R x yx0, y0, z:AD:R x0 y0 \/ R y0 x0H0:clos_refl_sym_trans_1n R y0 zH1:clos_refl_sym_trans_1n R z y0R y0 x0 \/ R x0 y0left. Qed.A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_1n R x yx0, y0, z:AD:R x0 y0 \/ R y0 x0H0:clos_refl_sym_trans_1n R y0 zH1:clos_refl_sym_trans_1n R z y0clos_refl_sym_trans_1n R x0 x0A:TypeR:relation Aforall x y : A, clos_refl_sym_trans R x y -> clos_refl_sym_trans_1n R x yA:TypeR:relation Ax, y:AH:R x yclos_refl_sym_trans_1n R x yA:TypeR:relation Ax:Aclos_refl_sym_trans_1n R x xA:TypeR:relation Ax, y:AH:clos_refl_sym_trans R x yIHclos_refl_sym_trans:clos_refl_sym_trans_1n R x yclos_refl_sym_trans_1n R y xA:TypeR:relation Ax, y, z:AH:clos_refl_sym_trans R x yH0:clos_refl_sym_trans R y zIHclos_refl_sym_trans1:clos_refl_sym_trans_1n R x yIHclos_refl_sym_trans2:clos_refl_sym_trans_1n R y zclos_refl_sym_trans_1n R x zA:TypeR:relation Ax, y:AH:R x yclos_refl_sym_trans_1n R x yconstructor 1.A:TypeR:relation Ax, y:AH:R x yclos_refl_sym_trans_1n R y yconstructor 1.A:TypeR:relation Ax:Aclos_refl_sym_trans_1n R x xapply clos_rst1n_sym; auto.A:TypeR:relation Ax, y:AH:clos_refl_sym_trans R x yIHclos_refl_sym_trans:clos_refl_sym_trans_1n R x yclos_refl_sym_trans_1n R y xeapply clos_rst1n_trans; eauto. Qed.A:TypeR:relation Ax, y, z:AH:clos_refl_sym_trans R x yH0:clos_refl_sym_trans R y zIHclos_refl_sym_trans1:clos_refl_sym_trans_1n R x yIHclos_refl_sym_trans2:clos_refl_sym_trans_1n R y zclos_refl_sym_trans_1n R x zA:TypeR:relation Aforall x y : A, clos_refl_sym_trans R x y <-> clos_refl_sym_trans_1n R x yA:TypeR:relation Aforall x y : A, clos_refl_sym_trans R x y <-> clos_refl_sym_trans_1n R x yA:TypeR:relation Ax, y:Aclos_refl_sym_trans R x y -> clos_refl_sym_trans_1n R x yA:TypeR:relation Ax, y:Aclos_refl_sym_trans_1n R x y -> clos_refl_sym_trans R x yapply clos_rst_rst1n.A:TypeR:relation Ax, y:Aclos_refl_sym_trans R x y -> clos_refl_sym_trans_1n R x yapply clos_rst1n_rst. Qed.A:TypeR:relation Ax, y:Aclos_refl_sym_trans_1n R x y -> clos_refl_sym_trans R x y
Direct reflexive-symmetric-transitive closure is equivalent to
transitivity by symmetric right-step extension
A:TypeR:relation Aforall x y : A, clos_refl_sym_trans_n1 R x y -> clos_refl_sym_trans R x yA:TypeR:relation Aforall x y : A, clos_refl_sym_trans_n1 R x y -> clos_refl_sym_trans R x yA:TypeR:relation Ax:Aclos_refl_sym_trans R x xA:TypeR:relation Ax, y, z:AH:R y z \/ R z yH0:clos_refl_sym_trans_n1 R x yIHclos_refl_sym_trans_n1:clos_refl_sym_trans R x yclos_refl_sym_trans R x zconstructor 2.A:TypeR:relation Ax:Aclos_refl_sym_trans R x xA:TypeR:relation Ax, y, z:AH:R y z \/ R z yH0:clos_refl_sym_trans_n1 R x yIHclos_refl_sym_trans_n1:clos_refl_sym_trans R x yclos_refl_sym_trans R x zcase H;[constructor 1|constructor 3; constructor 1]; auto. Qed.A:TypeR:relation Ax, y, z:AH:R y z \/ R z yH0:clos_refl_sym_trans_n1 R x yIHclos_refl_sym_trans_n1:clos_refl_sym_trans R x yclos_refl_sym_trans R y zA:TypeR:relation Aforall x y z : A, clos_refl_sym_trans_n1 R x y -> clos_refl_sym_trans_n1 R y z -> clos_refl_sym_trans_n1 R x zA:TypeR:relation Aforall x y z : A, clos_refl_sym_trans_n1 R x y -> clos_refl_sym_trans_n1 R y z -> clos_refl_sym_trans_n1 R x zA:TypeR:relation Ax, y, z:AH1:clos_refl_sym_trans_n1 R x yH2:clos_refl_sym_trans_n1 R y zclos_refl_sym_trans_n1 R x zA:TypeR:relation Ax, y:AH1:clos_refl_sym_trans_n1 R x yclos_refl_sym_trans_n1 R x yA:TypeR:relation Ax, y:AH1:clos_refl_sym_trans_n1 R x yy0, z:AH:R y0 z \/ R z y0H2:clos_refl_sym_trans_n1 R y y0IHclos_refl_sym_trans_n1:clos_refl_sym_trans_n1 R x y0clos_refl_sym_trans_n1 R x zauto.A:TypeR:relation Ax, y:AH1:clos_refl_sym_trans_n1 R x yclos_refl_sym_trans_n1 R x yA:TypeR:relation Ax, y:AH1:clos_refl_sym_trans_n1 R x yy0, z:AH:R y0 z \/ R z y0H2:clos_refl_sym_trans_n1 R y y0IHclos_refl_sym_trans_n1:clos_refl_sym_trans_n1 R x y0clos_refl_sym_trans_n1 R x zright with y0; eauto. Qed.A:TypeR:relation Ax, y:AH1:clos_refl_sym_trans_n1 R x yy0, z:AH:R y0 z \/ R z y0H2:clos_refl_sym_trans_n1 R y y0IHclos_refl_sym_trans_n1:clos_refl_sym_trans_n1 R x y0clos_refl_sym_trans_n1 R x zA:TypeR:relation Aforall x y : A, clos_refl_sym_trans_n1 R x y -> clos_refl_sym_trans_n1 R y xA:TypeR:relation Aforall x y : A, clos_refl_sym_trans_n1 R x y -> clos_refl_sym_trans_n1 R y xA:TypeR:relation Ax, y:AH:clos_refl_sym_trans_n1 R x yclos_refl_sym_trans_n1 R x xA:TypeR:relation Ax, y:AH:clos_refl_sym_trans_n1 R x yforall y0 z : A, R y0 z \/ R z y0 -> clos_refl_sym_trans_n1 R x y0 -> clos_refl_sym_trans_n1 R y0 x -> clos_refl_sym_trans_n1 R z xconstructor 1.A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_n1 R x yclos_refl_sym_trans_n1 R x xA:TypeR:relation Ax, y:AH:clos_refl_sym_trans_n1 R x yforall y0 z : A, R y0 z \/ R z y0 -> clos_refl_sym_trans_n1 R x y0 -> clos_refl_sym_trans_n1 R y0 x -> clos_refl_sym_trans_n1 R z xA:TypeR:relation Ax, y:AH:clos_refl_sym_trans_n1 R x yy0, z:AD:R y0 z \/ R z y0H0:clos_refl_sym_trans_n1 R x y0H1:clos_refl_sym_trans_n1 R y0 xclos_refl_sym_trans_n1 R z xA:TypeR:relation Ax, y:AH:clos_refl_sym_trans_n1 R x yy0, z:AD:R y0 z \/ R z y0H0:clos_refl_sym_trans_n1 R x y0H1:clos_refl_sym_trans_n1 R y0 xclos_refl_sym_trans_n1 R z y0A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_n1 R x yy0, z:AD:R y0 z \/ R z y0H0:clos_refl_sym_trans_n1 R x y0H1:clos_refl_sym_trans_n1 R y0 xR z y0 \/ R y0 zA:TypeR:relation Ax, y:AH:clos_refl_sym_trans_n1 R x yy0, z:AD:R y0 z \/ R z y0H0:clos_refl_sym_trans_n1 R x y0H1:clos_refl_sym_trans_n1 R y0 xclos_refl_sym_trans_n1 R z ztauto.A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_n1 R x yy0, z:AD:R y0 z \/ R z y0H0:clos_refl_sym_trans_n1 R x y0H1:clos_refl_sym_trans_n1 R y0 xR z y0 \/ R y0 zleft. Qed.A:TypeR:relation Ax, y:AH:clos_refl_sym_trans_n1 R x yy0, z:AD:R y0 z \/ R z y0H0:clos_refl_sym_trans_n1 R x y0H1:clos_refl_sym_trans_n1 R y0 xclos_refl_sym_trans_n1 R z zA:TypeR:relation Aforall x y : A, clos_refl_sym_trans R x y -> clos_refl_sym_trans_n1 R x yA:TypeR:relation Aforall x y : A, clos_refl_sym_trans R x y -> clos_refl_sym_trans_n1 R x yA:TypeR:relation Ax, y:AH:R x yclos_refl_sym_trans_n1 R x yA:TypeR:relation Ax:Aclos_refl_sym_trans_n1 R x xA:TypeR:relation Ax, y:AH:clos_refl_sym_trans R x yIHclos_refl_sym_trans:clos_refl_sym_trans_n1 R x yclos_refl_sym_trans_n1 R y xA:TypeR:relation Ax, y, z:AH:clos_refl_sym_trans R x yH0:clos_refl_sym_trans R y zIHclos_refl_sym_trans1:clos_refl_sym_trans_n1 R x yIHclos_refl_sym_trans2:clos_refl_sym_trans_n1 R y zclos_refl_sym_trans_n1 R x zA:TypeR:relation Ax, y:AH:R x yclos_refl_sym_trans_n1 R x yconstructor 1.A:TypeR:relation Ax, y:AH:R x yclos_refl_sym_trans_n1 R x xconstructor 1.A:TypeR:relation Ax:Aclos_refl_sym_trans_n1 R x xapply clos_rstn1_sym; auto.A:TypeR:relation Ax, y:AH:clos_refl_sym_trans R x yIHclos_refl_sym_trans:clos_refl_sym_trans_n1 R x yclos_refl_sym_trans_n1 R y xeapply clos_rstn1_trans; eauto. Qed.A:TypeR:relation Ax, y, z:AH:clos_refl_sym_trans R x yH0:clos_refl_sym_trans R y zIHclos_refl_sym_trans1:clos_refl_sym_trans_n1 R x yIHclos_refl_sym_trans2:clos_refl_sym_trans_n1 R y zclos_refl_sym_trans_n1 R x zA:TypeR:relation Aforall x y : A, clos_refl_sym_trans R x y <-> clos_refl_sym_trans_n1 R x yA:TypeR:relation Aforall x y : A, clos_refl_sym_trans R x y <-> clos_refl_sym_trans_n1 R x yA:TypeR:relation Ax, y:Aclos_refl_sym_trans R x y -> clos_refl_sym_trans_n1 R x yA:TypeR:relation Ax, y:Aclos_refl_sym_trans_n1 R x y -> clos_refl_sym_trans R x yapply clos_rst_rstn1.A:TypeR:relation Ax, y:Aclos_refl_sym_trans R x y -> clos_refl_sym_trans_n1 R x yapply clos_rstn1_rst. Qed. End Equivalences.A:TypeR:relation Ax, y:Aclos_refl_sym_trans_n1 R x y -> clos_refl_sym_trans R x yA:TypeR:relation Aforall x y : A, transp A (clos_trans R) x y <-> clos_trans (transp A R) x ysplit; induction 1; (apply t_step; assumption) || eapply t_trans; eassumption. Qed. End Properties. (* begin hide *) (* Compatibility *) Notation trans_tn1 := clos_trans_tn1 (only parsing). Notation tn1_trans := clos_tn1_trans (only parsing). Notation tn1_trans_equiv := clos_trans_tn1_iff (only parsing). Notation trans_t1n := clos_trans_t1n (only parsing). Notation t1n_trans := clos_t1n_trans (only parsing). Notation t1n_trans_equiv := clos_trans_t1n_iff (only parsing). Notation R_rtn1 := clos_rtn1_step (only parsing). Notation trans_rt1n := clos_rt_rt1n (only parsing). Notation rt1n_trans := clos_rt1n_rt (only parsing). Notation rt1n_trans_equiv := clos_rt_rt1n_iff (only parsing). Notation R_rt1n := clos_rt1n_step (only parsing). Notation trans_rtn1 := clos_rt_rtn1 (only parsing). Notation rtn1_trans := clos_rtn1_rt (only parsing). Notation rtn1_trans_equiv := clos_rt_rtn1_iff (only parsing). Notation rts1n_rts := clos_rst1n_rst (only parsing). Notation rts_1n_trans := clos_rst1n_trans (only parsing). Notation rts1n_sym := clos_rst1n_sym (only parsing). Notation rts_rts1n := clos_rst_rst1n (only parsing). Notation rts_rts1n_equiv := clos_rst_rst1n_iff (only parsing). Notation rtsn1_rts := clos_rstn1_rst (only parsing). Notation rtsn1_trans := clos_rstn1_trans (only parsing). Notation rtsn1_sym := clos_rstn1_sym (only parsing). Notation rts_rtsn1 := clos_rst_rstn1 (only parsing). Notation rts_rtsn1_equiv := clos_rst_rstn1_iff (only parsing). (* end hide *)A:TypeR:relation Aforall x y : A, transp A (clos_trans R) x y <-> clos_trans (transp A R) x y