mirror of https://github.com/nmvdw/HITs-Examples
76 lines
1.9 KiB
Coq
76 lines
1.9 KiB
Coq
(* Logical disjunction in HoTT (see ch. 3 of the book) *)
|
||
Require Import HoTT.
|
||
|
||
Definition lor (X Y : hProp) : hProp := BuildhProp (Trunc (-1) (sum X Y)).
|
||
|
||
Delimit Scope logic_scope with L.
|
||
Notation "A ∨ B" := (lor A B) (at level 20, right associativity) : logic_scope.
|
||
Arguments lor _%L _%L.
|
||
Open Scope logic_scope.
|
||
|
||
Section lor_props.
|
||
Variable X Y Z : hProp.
|
||
Context `{Univalence}.
|
||
|
||
Theorem lor_assoc : X ∨ Y ∨ Z = (X ∨ Y) ∨ Z.
|
||
Proof.
|
||
apply path_iff_hprop ; cbn.
|
||
* simple refine (Trunc_ind _ _).
|
||
intros [x | yz] ; cbn.
|
||
+ apply (tr (inl (tr (inl x)))).
|
||
+ simple refine (Trunc_ind _ _ yz).
|
||
intros [y | z].
|
||
++ apply (tr (inl (tr (inr y)))).
|
||
++ apply (tr (inr z)).
|
||
* simple refine (Trunc_ind _ _).
|
||
intros [xy | z] ; cbn.
|
||
+ simple refine (Trunc_ind _ _ xy).
|
||
intros [x | y].
|
||
++ apply (tr (inl x)).
|
||
++ apply (tr (inr (tr (inl y)))).
|
||
+ apply (tr (inr (tr (inr z)))).
|
||
Defined.
|
||
|
||
Theorem lor_comm : X ∨ Y = Y ∨ X.
|
||
Proof.
|
||
apply path_iff_hprop ; cbn.
|
||
* simple refine (Trunc_ind _ _).
|
||
intros [x | y].
|
||
+ apply (tr (inr x)).
|
||
+ apply (tr (inl y)).
|
||
* simple refine (Trunc_ind _ _).
|
||
intros [y | x].
|
||
+ apply (tr (inr y)).
|
||
+ apply (tr (inl x)).
|
||
Defined.
|
||
|
||
Theorem lor_nl : False_hp ∨ X = X.
|
||
Proof.
|
||
apply path_iff_hprop ; cbn.
|
||
* simple refine (Trunc_ind _ _).
|
||
intros [ | x].
|
||
+ apply Empty_rec.
|
||
+ apply x.
|
||
* apply (fun x => tr (inr x)).
|
||
Defined.
|
||
|
||
Theorem lor_nr : X ∨ False_hp = X.
|
||
Proof.
|
||
apply path_iff_hprop ; cbn.
|
||
* simple refine (Trunc_ind _ _).
|
||
intros [x | ].
|
||
+ apply x.
|
||
+ apply Empty_rec.
|
||
* apply (fun x => tr (inl x)).
|
||
Defined.
|
||
|
||
Theorem lor_idem : X ∨ X = X.
|
||
Proof.
|
||
apply path_iff_hprop ; cbn.
|
||
- simple refine (Trunc_ind _ _).
|
||
intros [x | x] ; apply x.
|
||
- apply (fun x => tr (inl x)).
|
||
Defined.
|
||
|
||
End lor_props.
|