aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jason Gross <jagro@google.com>2016-07-29 10:57:47 -0700
committerGravatar Jason Gross <jagro@google.com>2016-07-29 10:57:47 -0700
commit11d0b7ad0da0b7aeb37411059150a2baf0bf68fc (patch)
tree3836abd17ce2c280bd79965556f705f8a28e9114 /src
parent0b0728b5a447d6f7ff5fdf80c87d66ac714c3151 (diff)
Add some lemmas to Util.Sigma
Diffstat (limited to 'src')
-rw-r--r--src/Util/Sigma.v38
1 files changed, 36 insertions, 2 deletions
diff --git a/src/Util/Sigma.v b/src/Util/Sigma.v
index 9b1ff2c96..901b2f915 100644
--- a/src/Util/Sigma.v
+++ b/src/Util/Sigma.v
@@ -1,6 +1,12 @@
Require Import Crypto.Util.Equality.
Require Import Crypto.Util.GlobalSettings.
+Local Arguments projT1 {_ _} _.
+Local Arguments projT2 {_ _} _.
+Local Arguments proj1_sig {_ _} _.
+Local Arguments proj1_sig {_ _} _.
+Local Arguments f_equal {_ _} _ {_ _} _.
+
Section sigT.
Definition pr1_path {A} {P : A -> Type} {u v : sigT P} (p : u = v)
: projT1 u = projT1 v
@@ -27,6 +33,17 @@ Section sigT.
: u = v
:= path_sigT_uncurried u v (existT _ p q).
+ Definition path_sigT_hprop {A P} (P_hprop : forall (x : A) (p q : P x), p = q)
+ (u v : @sigT A P)
+ (p : projT1 u = projT1 v)
+ : u = v
+ := path_sigT u v p (P_hprop _ _ _).
+
+ Definition path_sigT_hprop_iff {A P} (P_hprop : forall (x : A) (p q : P x), p = q)
+ (u v : @sigT A P)
+ : u = v <-> (projT1 u = projT1 v)
+ := conj (f_equal projT1) (path_sigT_hprop P_hprop u v).
+
Definition path_sigT_nondep {A B : Type} (u v : @sigT A (fun _ => B))
(p : projT1 u = projT1 v) (q : projT2 u = projT2 v)
: u = v
@@ -66,11 +83,22 @@ Section sig.
destruct p; reflexivity.
Defined.
- Definition path_sig {A : Type} (P : A -> Prop) (u v : sig P)
+ Definition path_sig {A : Type} {P : A -> Prop} (u v : sig P)
(p : proj1_sig u = proj1_sig v) (q : eq_rect _ _ (proj2_sig u) _ p = proj2_sig v)
: u = v
:= path_sig_uncurried u v (exist _ p q).
+ Definition path_sig_hprop {A} {P : A -> Prop} (P_hprop : forall (x : A) (p q : P x), p = q)
+ (u v : @sig A P)
+ (p : proj1_sig u = proj1_sig v)
+ : u = v
+ := path_sig u v p (P_hprop _ _ _).
+
+ Definition path_sig_hprop_iff {A} {P : A -> Prop} (P_hprop : forall (x : A) (p q : P x), p = q)
+ (u v : @sig A P)
+ : u = v <-> (proj1_sig u = proj1_sig v)
+ := conj (f_equal proj1_sig) (path_sig_hprop P_hprop u v).
+
Lemma eq_rect_sig {A x} {P : A -> Type} (Q : forall a, P a -> Prop) (u : sig (Q x)) {y} (H : x = y)
: eq_rect x (fun a => sig (Q a)) u y H
= exist
@@ -94,11 +122,17 @@ Section ex.
destruct p; reflexivity.
Defined.
- Definition path_ex' {A : Type} (P : A -> Prop) (u1 v1 : A) (u2 : P u1) (v2 : P v1)
+ Definition path_ex' {A : Type} {P : A -> Prop} (u1 v1 : A) (u2 : P u1) (v2 : P v1)
(p : u1 = v1) (q : eq_rect _ _ u2 _ p = v2)
: ex_intro P u1 u2 = ex_intro P v1 v2
:= path_ex_uncurried' P (ex_intro _ p q).
+ Definition path_ex'_hprop {A} {P : A -> Prop} (P_hprop : forall (x : A) (p q : P x), p = q)
+ (u1 v1 : A) (u2 : P u1) (v2 : P v1)
+ (p : u1 = v1)
+ : ex_intro P u1 u2 = ex_intro P v1 v2
+ := path_ex' u1 v1 u2 v2 p (P_hprop _ _ _).
+
Lemma eq_rect_ex {A x} {P : A -> Type} (Q : forall a, P a -> Prop) (u : ex (Q x)) {y} (H : x = y)
: eq_rect x (fun a => ex (Q a)) u y H
= match u with