Library TAPL.Props.RelationProp
Definition relation (X Y: Type) := X → Y → Prop.
Definition deterministic {X Y: Type} (R: relation X Y): Prop :=
∀ x y1 y2, R x y1 → R x y2 → y1 = y2.
Definition normal_form {X Y : Type}
(R : relation X Y) (t : X) : Prop :=
¬ ∃ t', R t t'.
Inductive multi {X: Type} (R : relation X X):relation X X :=
| multi_refl : ∀ (x : X), multi R x x
| multi_step : ∀ (x y z : X), R x y → multi R y z → multi R x z.
Theorem multi_R : ∀ (X : Type) (R : relation X X) (x y : X),
R x y → (multi R) x y.
Proof.
intros X R x y H.
apply multi_step with (y := y).
- exact H.
- apply multi_refl.
Qed.
Theorem multi_trans :
∀ (X : Type) (R : relation X X) (x y z : X),
(multi R) x y → (multi R) y z → (multi R) x z.
Proof.
intros X R x y z Hxy Hyz.
induction Hxy.
- exact Hyz.
- apply IHHxy in Hyz.
apply multi_step with (y := y).
+ exact H.
+ exact Hyz.
Qed.
Theorem R_is_multiR:
∀ (X : Type) (R : relation X X) (x y : X),
R x y → (multi R) x y.
Proof.
intros X R x y H.
apply multi_step with (y := y).
- exact H.
- apply multi_refl.
Qed.
Definition deterministic {X Y: Type} (R: relation X Y): Prop :=
∀ x y1 y2, R x y1 → R x y2 → y1 = y2.
Definition normal_form {X Y : Type}
(R : relation X Y) (t : X) : Prop :=
¬ ∃ t', R t t'.
Inductive multi {X: Type} (R : relation X X):relation X X :=
| multi_refl : ∀ (x : X), multi R x x
| multi_step : ∀ (x y z : X), R x y → multi R y z → multi R x z.
Theorem multi_R : ∀ (X : Type) (R : relation X X) (x y : X),
R x y → (multi R) x y.
Proof.
intros X R x y H.
apply multi_step with (y := y).
- exact H.
- apply multi_refl.
Qed.
Theorem multi_trans :
∀ (X : Type) (R : relation X X) (x y z : X),
(multi R) x y → (multi R) y z → (multi R) x z.
Proof.
intros X R x y z Hxy Hyz.
induction Hxy.
- exact Hyz.
- apply IHHxy in Hyz.
apply multi_step with (y := y).
+ exact H.
+ exact Hyz.
Qed.
Theorem R_is_multiR:
∀ (X : Type) (R : relation X X) (x y : X),
R x y → (multi R) x y.
Proof.
intros X R x y H.
apply multi_step with (y := y).
- exact H.
- apply multi_refl.
Qed.