2015-04-04 04:20:19 +00:00
|
|
|
|
/-
|
|
|
|
|
Copyright (c) 2015 Floris van Doorn. All rights reserved.
|
|
|
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
|
|
|
|
|
|
Module: hit.suspension
|
|
|
|
|
Authors: Floris van Doorn
|
|
|
|
|
|
2015-04-05 05:46:44 +00:00
|
|
|
|
Declaration of suspension and spheres
|
2015-04-04 04:20:19 +00:00
|
|
|
|
-/
|
|
|
|
|
|
|
|
|
|
import .pushout
|
|
|
|
|
|
|
|
|
|
open pushout unit eq
|
|
|
|
|
|
|
|
|
|
definition suspension (A : Type) : Type := pushout (λ(a : A), star) (λ(a : A), star)
|
|
|
|
|
|
|
|
|
|
namespace suspension
|
|
|
|
|
|
|
|
|
|
definition north (A : Type) : suspension A :=
|
|
|
|
|
inl _ _ star
|
|
|
|
|
|
|
|
|
|
definition south (A : Type) : suspension A :=
|
|
|
|
|
inr _ _ star
|
|
|
|
|
|
|
|
|
|
definition merid {A : Type} (a : A) : north A = south A :=
|
|
|
|
|
glue _ _ a
|
|
|
|
|
|
|
|
|
|
protected definition rec {A : Type} {P : suspension A → Type} (PN : P !north) (PS : P !south)
|
2015-04-05 05:46:44 +00:00
|
|
|
|
(Pmerid : Π(a : A), merid a ▹ PN = PS) (x : suspension A) : P x :=
|
2015-04-04 04:20:19 +00:00
|
|
|
|
begin
|
2015-04-05 05:46:44 +00:00
|
|
|
|
fapply (pushout.rec_on _ _ x),
|
2015-04-04 04:20:19 +00:00
|
|
|
|
{ intro u, cases u, exact PN},
|
|
|
|
|
{ intro u, cases u, exact PS},
|
|
|
|
|
{ exact Pmerid},
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
protected definition rec_on {A : Type} {P : suspension A → Type} (y : suspension A)
|
|
|
|
|
(PN : P !north) (PS : P !south) (Pmerid : Π(a : A), merid a ▹ PN = PS) : P y :=
|
|
|
|
|
rec PN PS Pmerid y
|
|
|
|
|
|
|
|
|
|
end suspension
|
2015-04-05 05:46:44 +00:00
|
|
|
|
|
|
|
|
|
open nat suspension bool
|
|
|
|
|
|
|
|
|
|
definition sphere (n : ℕ) := nat.rec_on n bool (λk Sk, suspension Sk)
|
|
|
|
|
definition circle [reducible] := sphere 1
|
|
|
|
|
|
|
|
|
|
namespace circle
|
|
|
|
|
|
|
|
|
|
definition base : circle := !north
|
|
|
|
|
definition loop : base = base := merid tt ⬝ (merid ff)⁻¹
|
|
|
|
|
|
|
|
|
|
protected definition rec2 {P : circle → Type} (PN : P !north) (PS : P !south)
|
|
|
|
|
(Pff : merid ff ▹ PN = PS) (Ptt : merid tt ▹ PN = PS) (x : circle) : P x :=
|
|
|
|
|
begin
|
|
|
|
|
fapply (suspension.rec_on x),
|
|
|
|
|
{ exact PN},
|
|
|
|
|
{ exact PS},
|
|
|
|
|
{ intro b, cases b, exact Pff, exact Ptt},
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
protected definition rec2_on {P : circle → Type} (x : circle) (PN : P !north) (PS : P !south)
|
|
|
|
|
(Pff : merid ff ▹ PN = PS) (Ptt : merid tt ▹ PN = PS) : P x :=
|
|
|
|
|
circle.rec2 PN PS Pff Ptt x
|
|
|
|
|
|
|
|
|
|
protected definition rec {P : circle → Type} (Pbase : P base) (Ploop : loop ▹ Pbase = Pbase)
|
|
|
|
|
(x : circle) : P x :=
|
|
|
|
|
begin
|
|
|
|
|
fapply (rec2_on x),
|
|
|
|
|
{ exact Pbase},
|
|
|
|
|
{ sexact (merid ff ▹ Pbase)},
|
|
|
|
|
{ apply idp},
|
|
|
|
|
{ apply eq_tr_of_inv_tr_eq, rewrite -tr_con, apply Ploop},
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
protected definition rec_on {P : circle → Type} (x : circle) (Pbase : P base)
|
|
|
|
|
(Ploop : loop ▹ Pbase = Pbase) : P x :=
|
|
|
|
|
circle.rec Pbase Ploop x
|
|
|
|
|
|
|
|
|
|
protected definition rec_constant {P : Type} (Pbase : P) (Ploop : Pbase = Pbase)
|
|
|
|
|
(x : circle) : P :=
|
|
|
|
|
circle.rec Pbase (tr_constant loop Pbase ⬝ Ploop) x
|
|
|
|
|
|
|
|
|
|
definition comp_loop {P : circle → Type} (Pbase : P base) (Ploop : loop ▹ Pbase = Pbase) :
|
|
|
|
|
ap (circle.rec Pbase Ploop) loop = sorry ⬝ Ploop ⬝ sorry :=
|
|
|
|
|
sorry
|
|
|
|
|
|
|
|
|
|
definition comp_constant_loop {P : Type} (Pbase : P) (Ploop : Pbase = Pbase) :
|
|
|
|
|
ap (circle.rec_constant Pbase Ploop) loop = sorry ⬝ Ploop ⬝ sorry :=
|
|
|
|
|
sorry
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected definition rec_on_constant {P : Type} (x : circle) (Pbase : P) (Ploop : Pbase = Pbase)
|
|
|
|
|
: P :=
|
|
|
|
|
rec_constant Pbase Ploop x
|
|
|
|
|
|
|
|
|
|
end circle
|