Local Open Scope path_scope. (** * Theorems about the 2-sphere [S^2]. *) (* ** Definition of the 2-sphere. *) Module Export TwoSphere. Private Inductive TwoSphere : Type0 := | base : TwoSphere. Axiom surf : idpath base = idpath base. Definition TwoSphere_ind (P : TwoSphere -> Type) (b : P base) (s : idpath b = transport2 P surf b) : forall (x : TwoSphere), P x := fun x => match x with base => fun _ => b end s. Axiom TwoSphere_ind_beta_surf : forall (P : TwoSphere -> Type) (b : P base) (s : idpath b = transport2 P surf b), apD02 (TwoSphere_ind P b s) surf = s @ (concat_p1 _)^. End TwoSphere. (* ** The non-dependent eliminator *) Definition TwoSphere_rec (P : Type) (b : P) (s : idpath b = idpath b) : TwoSphere -> P := TwoSphere_ind (fun _ => P) b (s @ (transport2_const surf b) @ (concat_p1 _)).P: Type
b: P
s: 1 = 1ap02 (TwoSphere_rec P b s) surf = sP: Type
b: P
s: 1 = 1ap02 (TwoSphere_rec P b s) surf = sP: Type
b: P
s: 1 = 1transport2_const surf b @@ ap02 (TwoSphere_rec P b s) surf = transport2_const surf b @@ sP: Type
b: P
s: 1 = 1apD_const (TwoSphere_rec P b s) 1 @ (transport2_const surf b @@ ap02 (TwoSphere_rec P b s) surf) = apD_const (TwoSphere_rec P b s) 1 @ (transport2_const surf b @@ s)P: Type
b: P
s: 1 = 1(apD_const (TwoSphere_rec P b s) 1 @ (transport2_const surf b @@ ap02 (TwoSphere_rec P b s) surf)) @ (concat_p_pp (transport2 (fun _ : TwoSphere => P) surf b) (transport_const 1 b) (ap (TwoSphere_rec P b s) 1))^ = (apD_const (TwoSphere_rec P b s) 1 @ (transport2_const surf b @@ s)) @ (concat_p_pp (transport2 (fun _ : TwoSphere => P) surf b) (transport_const 1 b) (ap (TwoSphere_rec P b s) 1))^P: Type
b: P
s: 1 = 1((apD_const (TwoSphere_rec P b s) 1 @ (transport2_const surf b @@ ap02 (TwoSphere_rec P b s) surf)) @ (concat_p_pp (transport2 (fun _ : TwoSphere => P) surf b) (transport_const 1 b) (ap (TwoSphere_rec P b s) 1))^) @ whiskerL (transport2 (fun _ : TwoSphere => P) surf b) (apD_const (fun _ : TwoSphere => b) 1)^ = ((apD_const (TwoSphere_rec P b s) 1 @ (transport2_const surf b @@ s)) @ (concat_p_pp (transport2 (fun _ : TwoSphere => P) surf b) (transport_const 1 b) (ap (TwoSphere_rec P b s) 1))^) @ whiskerL (transport2 (fun _ : TwoSphere => P) surf b) (apD_const (fun _ : TwoSphere => b) 1)^P: Type
b: P
s: 1 = 1apD02 (TwoSphere_rec P b s) surf = ((apD_const (TwoSphere_rec P b s) 1 @ (transport2_const surf b @@ s)) @ (concat_p_pp (transport2 (fun _ : TwoSphere => P) surf b) (transport_const 1 b) (ap (TwoSphere_rec P b s) 1))^) @ whiskerL (transport2 (fun _ : TwoSphere => P) surf b) (apD_const (fun _ : TwoSphere => b) 1)^P: Type
b: P
s: 1 = 1((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))^ = ((apD_const (TwoSphere_rec P b s) 1 @ (transport2_const surf b @@ s)) @ (concat_p_pp (transport2 (fun _ : TwoSphere => P) surf b) (transport_const 1 b) (ap (TwoSphere_rec P b s) 1))^) @ whiskerL (transport2 (fun _ : TwoSphere => P) surf b) (apD_const (fun _ : TwoSphere => b) 1)^P: Type
b: P
s: 1 = 1((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))^ = ((apD_const (TwoSphere_rec P b s) 1 @ (transport2_const surf b @@ s)) @ (concat_p_pp (transport2 (fun _ : TwoSphere => P) surf b) (transport_const 1 b) (ap (TwoSphere_rec P b s) 1))^) @ (concat_p_pp (transport2 (fun _ : TwoSphere => P) surf b) 1 (apD (TwoSphere_ind (fun _ : TwoSphere => P) b ((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))) 1) @ whiskerR (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) (apD (TwoSphere_ind (fun _ : TwoSphere => P) b ((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))) 1))P: Type
b: P
s: 1 = 1((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))^ = ((1 @ (transport2_const surf b @@ s)) @ match transport2 (fun _ : TwoSphere => P) surf b as p in (_ = a) return (p @ 1 = (p @ 1) @ 1) with | 1 => 1 end^) @ (match transport2 (fun _ : TwoSphere => P) surf b as p in (_ = a) return (p @ 1 = (p @ 1) @ 1) with | 1 => 1 end @ whiskerR (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) 1)P: Type
b: P
s: 1 = 1((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))^ = ((transport2_const surf b @@ s) @ match transport2 (fun _ : TwoSphere => P) surf b as p in (_ = a) return (p @ 1 = (p @ 1) @ 1) with | 1 => 1 end^) @ (match transport2 (fun _ : TwoSphere => P) surf b as p in (_ = a) return (p @ 1 = (p @ 1) @ 1) with | 1 => 1 end @ whiskerR (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) 1)P: Type
b: P
s: 1 = 1((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))^ = (transport2_const surf b @@ s) @ (match transport2 (fun _ : TwoSphere => P) surf b as p in (_ = a) return (p @ 1 = (p @ 1) @ 1) with | 1 => 1 end^ @ (match transport2 (fun _ : TwoSphere => P) surf b as p in (_ = a) return (p @ 1 = (p @ 1) @ 1) with | 1 => 1 end @ whiskerR (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) 1))P: Type
b: P
s: 1 = 1((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))^ = (transport2_const surf b @@ s) @ ((match transport2 (fun _ : TwoSphere => P) surf b as p in (_ = a) return (p @ 1 = (p @ 1) @ 1) with | 1 => 1 end^ @ match transport2 (fun _ : TwoSphere => P) surf b as p in (_ = a) return (p @ 1 = (p @ 1) @ 1) with | 1 => 1 end) @ whiskerR (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) 1)P: Type
b: P
s: 1 = 1((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))^ = (transport2_const surf b @@ s) @ (1 @ whiskerR (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) 1)P: Type
b: P
s: 1 = 1((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))^ = (transport2_const surf b @@ s) @ ((concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1))^) @ whiskerR (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) 1)P: Type
b: P
s: 1 = 1((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))^ = (transport2_const surf b @@ s) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1) @ ((concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1))^ @ whiskerR (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) 1))P: Type
b: P
s: 1 = 1((s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) @ (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))^ = ((transport2_const surf b @@ s) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1)) @ ((concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1))^ @ whiskerR (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) 1)P: Type
b: P
s: 1 = 1(s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b) = (((transport2_const surf b @@ s) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1)) @ ((concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1))^ @ whiskerR (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) 1)) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)P: Type
b: P
s: 1 = 1(s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b) = ((transport2_const surf b @@ s) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1)) @ (((concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1))^ @ whiskerR (concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)) 1) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b))P: Type
b: P
s: 1 = 1(s @ transport2_const surf b) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b) = ((transport2_const surf b @@ s) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1)) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b)P: Type
b: P
s: 1 = 1s @ transport2_const surf b = (transport2_const surf b @@ s) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1)P: Type
b: P
s: 1 = 1whiskerL 1 s @ transport2_const surf b = (transport2_const surf b @@ s) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1)P: Type
b: P
s: 1 = 1whiskerL 1 s @ (((concat_p1 (1 @ 1))^ @ whiskerR (transport2_const surf b) 1) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1)) = (transport2_const surf b @@ s) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1)P: Type
b: P
s: 1 = 1whiskerL 1 s @ ((1 @ whiskerR (transport2_const surf b) 1) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1)) = (transport2_const surf b @@ s) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1)P: Type
b: P
s: 1 = 1(whiskerL 1 s @ (1 @ whiskerR (transport2_const surf b) 1)) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1) = (transport2_const surf b @@ s) @ concat_p1 (transport2 (fun _ : TwoSphere => P) surf b @ 1)P: Type
b: P
s: 1 = 1whiskerL 1 s @ (1 @ whiskerR (transport2_const surf b) 1) = transport2_const surf b @@ sP: Type
b: P
s: 1 = 1whiskerL 1 s @ whiskerR (transport2_const surf b) 1 = transport2_const surf b @@ sP: Type
b: P
s: 1 = 1whiskerR (transport2_const surf b) 1 @ whiskerL (transport2 (fun _ : TwoSphere => P) surf b @ transport_const 1 b) s = transport2_const surf b @@ sP: Type
b: P
s: 1 = 1transport2_const surf b @@ s = whiskerR (transport2_const surf b) 1 @ whiskerL (transport2 (fun _ : TwoSphere => P) surf b @ transport_const 1 b) sP: Type
b: P
s: 1 = 1(transport2_const surf b @ 1) @@ s = whiskerR (transport2_const surf b) 1 @ whiskerL (transport2 (fun _ : TwoSphere => P) surf b @ transport_const 1 b) sP: Type
b: P
s: 1 = 1(transport2_const surf (transport (fun _ : TwoSphere => P) 1 b) @ 1) @@ (1 @ s) = whiskerR (transport2_const surf b) 1 @ whiskerL (transport2 (fun _ : TwoSphere => P) surf b @ transport_const 1 b) sf_ap. Defined.P: Type
b: P
s: 1 = 1(transport2_const surf (transport (fun _ : TwoSphere => P) 1 b) @@ 1) @ (1 @@ s) = whiskerR (transport2_const surf b) 1 @ whiskerL (transport2 (fun _ : TwoSphere => P) surf b @ transport_const 1 b) s