refactor(library/data/quotient): make proofs more robust
This commit is contained in:
parent
c9f3b766f8
commit
d2e64d30e8
2 changed files with 8 additions and 8 deletions
|
@ -208,7 +208,7 @@ theorem fun_image_def {A B : Type} (f : A → B) (a : A) :
|
||||||
fun_image f a = tag (f a) (exists.intro a rfl) := rfl
|
fun_image f a = tag (f a) (exists.intro a rfl) := rfl
|
||||||
|
|
||||||
theorem elt_of_fun_image {A B : Type} (f : A → B) (a : A) : elt_of (fun_image f a) = f a :=
|
theorem elt_of_fun_image {A B : Type} (f : A → B) (a : A) : elt_of (fun_image f a) = f a :=
|
||||||
elt_of.tag _ _
|
by esimp
|
||||||
|
|
||||||
theorem image_elt_of {A B : Type} {f : A → B} (u : image f) : ∃a, f a = elt_of u :=
|
theorem image_elt_of {A B : Type} {f : A → B} (u : image f) : ∃a, f a = elt_of u :=
|
||||||
has_property u
|
has_property u
|
||||||
|
@ -230,13 +230,13 @@ theorem fun_image_eq {A B : Type} (f : A → B) (a a' : A)
|
||||||
iff.intro
|
iff.intro
|
||||||
(assume H : f a = f a', tag_eq H)
|
(assume H : f a = f a', tag_eq H)
|
||||||
(assume H : fun_image f a = fun_image f a',
|
(assume H : fun_image f a = fun_image f a',
|
||||||
(congr_arg elt_of H ▸ elt_of_fun_image f a) ▸ elt_of_fun_image f a')
|
by injection H; assumption)
|
||||||
|
|
||||||
theorem idempotent_image_elt_of {A : Type} {f : A → A} (H : ∀a, f (f a) = f a) (u : image f)
|
theorem idempotent_image_elt_of {A : Type} {f : A → A} (H : ∀a, f (f a) = f a) (u : image f)
|
||||||
: fun_image f (elt_of u) = u :=
|
: fun_image f (elt_of u) = u :=
|
||||||
obtain (a : A) (Ha : fun_image f a = u), from fun_image_surj u,
|
obtain (a : A) (Ha : fun_image f a = u), from fun_image_surj u,
|
||||||
calc
|
calc
|
||||||
fun_image f (elt_of u) = fun_image f (elt_of (fun_image f a)) : {Ha⁻¹}
|
fun_image f (elt_of u) = fun_image f (elt_of (fun_image f a)) : by rewrite Ha
|
||||||
... = fun_image f (f a) : {elt_of_fun_image f a}
|
... = fun_image f (f a) : {elt_of_fun_image f a}
|
||||||
... = fun_image f a : {iff.elim_left (fun_image_eq f (f a) a) (H a)}
|
... = fun_image f a : {iff.elim_left (fun_image_eq f (f a) a) (H a)}
|
||||||
... = u : Ha
|
... = u : Ha
|
||||||
|
|
|
@ -48,10 +48,10 @@ namespace quotient
|
||||||
(pr1.mk a a') ▸ (pr2.mk a a') ▸ rfl
|
(pr1.mk a a') ▸ (pr2.mk a a') ▸ rfl
|
||||||
|
|
||||||
theorem map_pair_pr1 (f : A → B) (a : A × A) : pr1 (map_pair f a) = f (pr1 a) :=
|
theorem map_pair_pr1 (f : A → B) (a : A × A) : pr1 (map_pair f a) = f (pr1 a) :=
|
||||||
!pr1.mk
|
by esimp
|
||||||
|
|
||||||
theorem map_pair_pr2 (f : A → B) (a : A × A) : pr2 (map_pair f a) = f (pr2 a) :=
|
theorem map_pair_pr2 (f : A → B) (a : A × A) : pr2 (map_pair f a) = f (pr2 a) :=
|
||||||
!pr2.mk
|
by esimp
|
||||||
|
|
||||||
/- coordinatewise binary maps -/
|
/- coordinatewise binary maps -/
|
||||||
|
|
||||||
|
@ -72,10 +72,10 @@ namespace quotient
|
||||||
... = pair (f a b) (f a' b') : {pr1.mk a a'}
|
... = pair (f a b) (f a' b') : {pr1.mk a a'}
|
||||||
|
|
||||||
theorem map_pair2_pr1 {A B C : Type} (f : A → B → C) (a : A × A) (b : B × B) :
|
theorem map_pair2_pr1 {A B C : Type} (f : A → B → C) (a : A × A) (b : B × B) :
|
||||||
pr1 (map_pair2 f a b) = f (pr1 a) (pr1 b) := !pr1.mk
|
pr1 (map_pair2 f a b) = f (pr1 a) (pr1 b) := by esimp
|
||||||
|
|
||||||
theorem map_pair2_pr2 {A B C : Type} (f : A → B → C) (a : A × A) (b : B × B) :
|
theorem map_pair2_pr2 {A B C : Type} (f : A → B → C) (a : A × A) (b : B × B) :
|
||||||
pr2 (map_pair2 f a b) = f (pr2 a) (pr2 b) := !pr2.mk
|
pr2 (map_pair2 f a b) = f (pr2 a) (pr2 b) := by esimp
|
||||||
|
|
||||||
theorem map_pair2_flip {A B C : Type} (f : A → B → C) (a : A × A) (b : B × B) :
|
theorem map_pair2_flip {A B C : Type} (f : A → B → C) (a : A × A) (b : B × B) :
|
||||||
flip (map_pair2 f a b) = map_pair2 f (flip a) (flip b) :=
|
flip (map_pair2 f a b) = map_pair2 f (flip a) (flip b) :=
|
||||||
|
@ -123,7 +123,7 @@ have Hx : pr1 (map_pair2 f (map_pair2 f u v) w) =
|
||||||
= f (pr1 (map_pair2 f u v)) (pr1 w) : map_pair2_pr1 f _ _
|
= f (pr1 (map_pair2 f u v)) (pr1 w) : map_pair2_pr1 f _ _
|
||||||
... = f (f (pr1 u) (pr1 v)) (pr1 w) : {map_pair2_pr1 f _ _}
|
... = f (f (pr1 u) (pr1 v)) (pr1 w) : {map_pair2_pr1 f _ _}
|
||||||
... = f (pr1 u) (f (pr1 v) (pr1 w)) : Hassoc (pr1 u) (pr1 v) (pr1 w)
|
... = f (pr1 u) (f (pr1 v) (pr1 w)) : Hassoc (pr1 u) (pr1 v) (pr1 w)
|
||||||
... = f (pr1 u) (pr1 (map_pair2 f v w)) : {(map_pair2_pr1 f _ _)⁻¹}
|
... = f (pr1 u) (pr1 (map_pair2 f v w)) : by rewrite [map_pair2_pr1 f]
|
||||||
... = pr1 (map_pair2 f u (map_pair2 f v w)) : (map_pair2_pr1 f _ _)⁻¹,
|
... = pr1 (map_pair2 f u (map_pair2 f v w)) : (map_pair2_pr1 f _ _)⁻¹,
|
||||||
have Hy : pr2 (map_pair2 f (map_pair2 f u v) w) =
|
have Hy : pr2 (map_pair2 f (map_pair2 f u v) w) =
|
||||||
pr2 (map_pair2 f u (map_pair2 f v w)), from
|
pr2 (map_pair2 f u (map_pair2 f v w)), from
|
||||||
|
|
Loading…
Reference in a new issue