2015-04-07 01:01:08 +00:00
|
|
|
|
/-
|
|
|
|
|
Copyright (c) 2015 Floris van Doorn. All rights reserved.
|
|
|
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
|
Authors: Floris van Doorn
|
|
|
|
|
|
|
|
|
|
Declaration of the n-spheres
|
|
|
|
|
-/
|
|
|
|
|
|
2015-06-17 19:58:58 +00:00
|
|
|
|
import .susp types.trunc
|
2015-04-07 01:01:08 +00:00
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
open eq nat susp bool is_trunc unit pointed algebra equiv
|
2015-04-07 01:01:08 +00:00
|
|
|
|
|
2015-04-19 21:56:24 +00:00
|
|
|
|
/-
|
|
|
|
|
We can define spheres with the following possible indices:
|
|
|
|
|
- trunc_index (defining S^-2 = S^-1 = empty)
|
2015-09-13 18:58:11 +00:00
|
|
|
|
- nat (forgetting that S^-1 = empty)
|
2015-04-19 21:56:24 +00:00
|
|
|
|
- nat, but counting wrong (S^0 = empty, S^1 = bool, ...)
|
|
|
|
|
- some new type "integers >= -1"
|
2017-07-20 14:01:40 +00:00
|
|
|
|
We choose the second option here.
|
2015-04-07 01:01:08 +00:00
|
|
|
|
-/
|
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition sphere (n : ℕ) : Type* := iterate_susp n pbool
|
2015-04-07 01:01:08 +00:00
|
|
|
|
|
|
|
|
|
namespace sphere
|
2015-06-04 01:41:21 +00:00
|
|
|
|
|
2015-04-07 01:01:08 +00:00
|
|
|
|
namespace ops
|
2015-06-04 05:09:26 +00:00
|
|
|
|
abbreviation S := sphere
|
2015-04-07 01:01:08 +00:00
|
|
|
|
end ops
|
2015-06-04 01:41:21 +00:00
|
|
|
|
open sphere.ops
|
2015-04-07 01:01:08 +00:00
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition sphere_succ [unfold_full] (n : ℕ) : S (n+1) = susp (S n) := idp
|
|
|
|
|
definition sphere_eq_iterate_susp (n : ℕ) : S n = iterate_susp n pbool := idp
|
2016-04-22 19:12:25 +00:00
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition equator [constructor] (n : ℕ) : S n →* Ω (S (succ n)) :=
|
|
|
|
|
loop_susp_unit (S n)
|
2015-06-04 05:09:26 +00:00
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition surf {n : ℕ} : Ω[n] (S n) :=
|
2016-09-18 05:44:19 +00:00
|
|
|
|
begin
|
|
|
|
|
induction n with n s,
|
2017-07-20 14:01:40 +00:00
|
|
|
|
{ exact tt },
|
2018-09-07 14:30:58 +00:00
|
|
|
|
{ exact (loopn_succ_in n (S (succ n)))⁻¹ᵉ* (apn n (equator n) s) }
|
2016-09-18 05:44:19 +00:00
|
|
|
|
end
|
2015-06-04 05:09:26 +00:00
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition sphere_equiv_bool [constructor] : S 0 ≃ bool := by reflexivity
|
2016-09-18 05:44:19 +00:00
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition sphere_pequiv_pbool [constructor] : S 0 ≃* pbool := by reflexivity
|
2015-06-04 01:41:21 +00:00
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition sphere_pequiv_iterate_susp (n : ℕ) : sphere n ≃* iterate_susp n pbool :=
|
|
|
|
|
by reflexivity
|
2017-06-02 16:13:20 +00:00
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition sphere_pmap_pequiv' (A : Type*) (n : ℕ) : ppmap (S n) A ≃* Ω[n] A :=
|
2015-06-04 01:41:21 +00:00
|
|
|
|
begin
|
2016-11-23 22:59:13 +00:00
|
|
|
|
revert A, induction n with n IH: intro A,
|
2017-07-20 14:01:40 +00:00
|
|
|
|
{ refine !ppmap_pbool_pequiv },
|
|
|
|
|
{ refine susp_adjoint_loop (S n) A ⬝e* IH (Ω A) ⬝e* !loopn_succ_in⁻¹ᵉ* }
|
2015-11-13 22:17:02 +00:00
|
|
|
|
end
|
2015-06-04 01:41:21 +00:00
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition sphere_pmap_pequiv (A : Type*) (n : ℕ) : ppmap (S n) A ≃* Ω[n] A :=
|
2016-11-23 22:59:13 +00:00
|
|
|
|
begin
|
|
|
|
|
fapply pequiv_change_fun,
|
2017-07-20 14:01:40 +00:00
|
|
|
|
{ exact sphere_pmap_pequiv' A n },
|
2016-11-23 22:59:13 +00:00
|
|
|
|
{ exact papn_fun A surf },
|
|
|
|
|
{ revert A, induction n with n IH: intro A,
|
|
|
|
|
{ reflexivity },
|
|
|
|
|
{ intro f, refine ap !loopn_succ_in⁻¹ᵉ* (IH (Ω A) _ ⬝ !apn_pcompose _) ⬝ _,
|
|
|
|
|
exact !loopn_succ_in_inv_natural⁻¹* _ }}
|
|
|
|
|
end
|
2016-09-18 05:44:19 +00:00
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
protected definition elim {n : ℕ} {P : Type*} (p : Ω[n] P) : S n →* P :=
|
|
|
|
|
!sphere_pmap_pequiv⁻¹ᵉ* p
|
2015-06-04 05:09:26 +00:00
|
|
|
|
|
2016-02-15 23:23:28 +00:00
|
|
|
|
-- definition elim_surf {n : ℕ} {P : Type*} (p : Ω[n] P) : apn n (sphere.elim p) surf = p :=
|
2015-06-23 16:47:52 +00:00
|
|
|
|
-- begin
|
|
|
|
|
-- induction n with n IH,
|
2017-07-20 14:01:40 +00:00
|
|
|
|
-- { esimp [apn,surf,sphere.elim,sphere_pmap_equiv], apply sorry},
|
2015-06-23 16:47:52 +00:00
|
|
|
|
-- { apply sorry}
|
|
|
|
|
-- end
|
2015-06-04 05:09:26 +00:00
|
|
|
|
|
2015-04-07 01:01:08 +00:00
|
|
|
|
end sphere
|
2015-06-04 01:41:21 +00:00
|
|
|
|
|
2016-02-08 11:07:53 +00:00
|
|
|
|
namespace sphere
|
2017-07-20 14:01:40 +00:00
|
|
|
|
open is_conn trunc_index sphere.ops
|
2016-02-08 11:07:53 +00:00
|
|
|
|
|
|
|
|
|
-- Corollary 8.2.2
|
2017-07-20 14:01:40 +00:00
|
|
|
|
theorem is_conn_sphere [instance] (n : ℕ) : is_conn (n.-1) (S n) :=
|
2016-02-08 11:07:53 +00:00
|
|
|
|
begin
|
|
|
|
|
induction n with n IH,
|
2017-07-20 14:01:40 +00:00
|
|
|
|
{ apply is_conn_minus_one_pointed },
|
|
|
|
|
{ apply is_conn_susp, exact IH }
|
2016-02-08 11:07:53 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end sphere
|
|
|
|
|
|
2015-06-04 01:41:21 +00:00
|
|
|
|
open sphere sphere.ops
|
|
|
|
|
|
2015-06-17 19:58:58 +00:00
|
|
|
|
namespace is_trunc
|
2015-06-04 01:41:21 +00:00
|
|
|
|
open trunc_index
|
2015-06-04 05:09:26 +00:00
|
|
|
|
variables {n : ℕ} {A : Type}
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition is_trunc_of_sphere_pmap_equiv_constant
|
|
|
|
|
(H : Π(a : A) (f : S n →* pointed.Mk a) (x : S n), f x = f pt) : is_trunc (n.-2.+1) A :=
|
2015-06-04 01:41:21 +00:00
|
|
|
|
begin
|
|
|
|
|
apply iff.elim_right !is_trunc_iff_is_contr_loop,
|
|
|
|
|
intro a,
|
2017-07-20 14:01:40 +00:00
|
|
|
|
apply is_trunc_equiv_closed, exact !sphere_pmap_pequiv,
|
2015-06-04 01:41:21 +00:00
|
|
|
|
fapply is_contr.mk,
|
2015-06-17 19:58:58 +00:00
|
|
|
|
{ exact pmap.mk (λx, a) idp},
|
2017-07-21 12:35:23 +00:00
|
|
|
|
{ intro f, apply eq_of_phomotopy, fapply phomotopy.mk,
|
2015-06-04 01:41:21 +00:00
|
|
|
|
{ intro x, esimp, refine !respect_pt⁻¹ ⬝ (!H ⬝ !H⁻¹)},
|
|
|
|
|
{ rewrite [▸*,con.right_inv,▸*,con.left_inv]}}
|
|
|
|
|
end
|
|
|
|
|
|
2015-06-04 05:09:26 +00:00
|
|
|
|
definition is_trunc_iff_map_sphere_constant
|
2017-07-20 14:01:40 +00:00
|
|
|
|
(H : Π(f : S n → A) (x : S n), f x = f pt) : is_trunc (n.-2.+1) A :=
|
2015-06-04 01:41:21 +00:00
|
|
|
|
begin
|
2017-07-20 14:01:40 +00:00
|
|
|
|
apply is_trunc_of_sphere_pmap_equiv_constant,
|
2015-06-04 01:41:21 +00:00
|
|
|
|
intros, cases f with f p, esimp at *, apply H
|
|
|
|
|
end
|
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition sphere_pmap_equiv_constant_of_is_trunc' [H : is_trunc (n.-2.+1) A]
|
|
|
|
|
(a : A) (f : S n →* pointed.Mk a) (x : S n) : f x = f pt :=
|
2015-06-04 05:09:26 +00:00
|
|
|
|
begin
|
|
|
|
|
let H' := iff.elim_left (is_trunc_iff_is_contr_loop n A) H a,
|
2017-07-21 12:35:23 +00:00
|
|
|
|
have H'' : is_contr (S n →* pointed.Mk a), from
|
|
|
|
|
@is_trunc_equiv_closed_rev _ _ _ !sphere_pmap_pequiv H',
|
2017-07-20 14:01:40 +00:00
|
|
|
|
have p : f = pmap.mk (λx, f pt) (respect_pt f),
|
2017-07-21 12:35:23 +00:00
|
|
|
|
from !is_prop.elim,
|
2016-02-15 19:40:25 +00:00
|
|
|
|
exact ap10 (ap pmap.to_fun p) x
|
2015-06-04 05:09:26 +00:00
|
|
|
|
end
|
|
|
|
|
|
2017-07-20 14:01:40 +00:00
|
|
|
|
definition sphere_pmap_equiv_constant_of_is_trunc [H : is_trunc (n.-2.+1) A]
|
|
|
|
|
(a : A) (f : S n →* pointed.Mk a) (x y : S n) : f x = f y :=
|
|
|
|
|
let H := sphere_pmap_equiv_constant_of_is_trunc' a f in !H ⬝ !H⁻¹
|
2015-06-17 19:58:58 +00:00
|
|
|
|
|
2015-06-04 05:09:26 +00:00
|
|
|
|
definition map_sphere_constant_of_is_trunc [H : is_trunc (n.-2.+1) A]
|
2015-06-17 19:58:58 +00:00
|
|
|
|
(f : S n → A) (x y : S n) : f x = f y :=
|
2017-07-20 14:01:40 +00:00
|
|
|
|
sphere_pmap_equiv_constant_of_is_trunc (f pt) (pmap.mk f idp) x y
|
2015-06-17 19:58:58 +00:00
|
|
|
|
|
|
|
|
|
definition map_sphere_constant_of_is_trunc_self [H : is_trunc (n.-2.+1) A]
|
|
|
|
|
(f : S n → A) (x : S n) : map_sphere_constant_of_is_trunc f x x = idp :=
|
|
|
|
|
!con.right_inv
|
2015-06-04 05:09:26 +00:00
|
|
|
|
|
2015-06-17 19:58:58 +00:00
|
|
|
|
end is_trunc
|