lean2/hott/hit/suspension.hlean

97 lines
2.9 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/-
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
Declaration of suspension and spheres
-/
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)
(Pmerid : Π(a : A), merid a ▹ PN = PS) (x : suspension A) : P x :=
begin
fapply (pushout.rec_on _ _ x),
{ 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
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