start on torus = S^1 x S^1

This commit is contained in:
Floris van Doorn 2017-01-07 14:05:14 +01:00
parent db72ff0a66
commit cb3fac2fb3
2 changed files with 80 additions and 5 deletions

80
homotopy/torus.hlean Normal file
View file

@ -0,0 +1,80 @@
import homotopy.torus
open eq circle prod prod.ops function
namespace torus
definition S1xS1_of_torus [unfold 1] (x : T²) : S¹ × S¹ :=
begin
induction x,
{ exact (circle.base, circle.base) },
{ exact prod_eq loop idp },
{ exact prod_eq idp loop },
{ apply square_of_eq,
exact !prod_eq_concat ⬝ ap011 prod_eq !idp_con⁻¹ !idp_con ⬝ !prod_eq_concat⁻¹ }
end
definition torus_of_S1xS1 [unfold 1] (x : S¹ × S¹) : T² :=
begin
induction x with x y, induction x,
{ induction y,
{ exact base },
{ exact loop2 }},
{ induction y,
{ exact loop1 },
{ apply eq_pathover, refine !elim_loop ⬝ph surf ⬝hp !elim_loop⁻¹ }}
end
definition to_from_base_left [unfold 1] (y : S¹) :
S1xS1_of_torus (torus_of_S1xS1 (circle.base, y)) = (circle.base, y) :=
begin
induction y,
{ reflexivity },
{ apply eq_pathover, apply hdeg_square,
refine ap_compose S1xS1_of_torus _ _ ⬝ ap02 _ !elim_loop ⬝ _ ⬝ !ap_prod_mk_right⁻¹,
apply elim_loop2 }
end
definition from_to_loop1
: pathover (λa, torus_of_S1xS1 (S1xS1_of_torus a) = a) proof idp qed loop1 proof idp qed :=
begin
apply eq_pathover, apply hdeg_square,
refine ap_compose torus_of_S1xS1 _ _ ⬝ ap02 _ !elim_loop1 ⬝ _ ⬝ !ap_id⁻¹,
refine !ap_prod_elim ⬝ !idp_con ⬝ !elim_loop
end
definition from_to_loop2
: pathover (λa, torus_of_S1xS1 (S1xS1_of_torus a) = a) proof idp qed loop2 proof idp qed :=
begin
apply eq_pathover, apply hdeg_square,
refine ap_compose torus_of_S1xS1 _ _ ⬝ ap02 _ !elim_loop2 ⬝ _ ⬝ !ap_id⁻¹,
refine !ap_prod_elim ⬝ !elim_loop
end
definition torus_equiv_S1xS1 : T² ≃ S¹ × S¹ :=
begin
fapply equiv.MK,
{ exact S1xS1_of_torus },
{ exact torus_of_S1xS1 },
{ intro x, induction x with x y, induction x,
{ exact to_from_base_left y },
{ apply eq_pathover,
refine ap_compose (S1xS1_of_torus ∘ torus_of_S1xS1) _ _ ⬝ph _,
refine ap02 _ !ap_prod_mk_left ⬝ph _ ⬝hp !ap_prod_mk_left⁻¹,
refine !ap_compose ⬝ ap02 _ (!ap_prod_elim ⬝ !idp_con) ⬝ph _,
refine ap02 _ !elim_loop ⬝ph _,
induction y,
{ apply hdeg_square, apply elim_loop1 },
{ apply square_pathover, exact sorry }
-- apply square_of_eq, induction y,
-- { refine !idp_con ⬝ !elim_loop1⁻¹ },
-- { apply eq_pathover_dep, }
}},
{ intro x, induction x,
{ reflexivity },
{ exact from_to_loop1 },
{ exact from_to_loop2 },
{ exact sorry }}
end
end torus

View file

@ -192,11 +192,6 @@ end is_equiv
namespace prod
definition ap_prod_elim {A B C : Type} {a a' : A} {b b' : B} (m : A → B → C)
(p : a = a') (q : b = b') : ap (prod.rec m) (prod_eq p q)
= (ap (m a) q) ⬝ (ap (λx : A, m x b') p) :=
by cases p; cases q; constructor
open prod.ops
definition prod_pathover_equiv {A : Type} {B C : A → Type} {a a' : A} (p : a = a')
(x : B a × C a) (x' : B a' × C a') : x =[p] x' ≃ x.1 =[p] x'.1 × x.2 =[p] x'.2 :=