Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Join.Core Join.JoinAssoc Suspension Spaces.Spheres.Require Import WildCat.Require Import Spaces.Nat.Core.(** * [Join Bool A] is equivalent to [Susp A] We give a direct proof of this fact. It is also possible to give a proof using [opyon_equiv_0gpd]; see PR#1769. *)
A: Type
Join Bool A -> Susp A
A: Type
Join Bool A -> Susp A
A: Type
Bool -> Susp A
A: Type
A -> Susp A
A: Type
forall (a : Bool) (b : A), ?P_A a = ?P_B b
A: Type
Bool -> Susp A
exact (funb => if b then North else South).
A: Type
A -> Susp A
exact (funa => South).
A: Type
forall (a : Bool) (b : A),
(funb0 : Bool => if b0 then North else South) a =
(fun_ : A => South) b
A: Type a: A
North = South
A: Type a: A
South = South
A: Type a: A
North = South
exact (merid a).
A: Type a: A
South = South
reflexivity.Defined.
A: Type
Susp A -> Join Bool A
A: Type
Susp A -> Join Bool A
A: Type
A -> joinl true = joinl false
exact (zigzag true false).Defined.
A: Type
IsEquiv (join_to_susp A)
A: Type
IsEquiv (join_to_susp A)
A: Type
join_to_susp A o susp_to_join A == idmap
A: Type
susp_to_join A o join_to_susp A == idmap
A: Type
join_to_susp A o susp_to_join A == idmap
A: Type
(funy : Susp A =>
(join_to_susp A o susp_to_join A) y = idmap y) North
A: Type
(funy : Susp A =>
(join_to_susp A o susp_to_join A) y = idmap y) South
A: Type
forallx : A,
transport
(funy : Susp A =>
(join_to_susp A o susp_to_join A) y = idmap y)
(merid x) ?H_N = ?H_S
A: Type
forallx : A,
transport
(funy : Susp A =>
(join_to_susp A o susp_to_join A) y = idmap y)
(merid x) 1 = 1
A: Type a: A
transport
(funy : Susp A =>
join_to_susp A (susp_to_join A y) = y) (merid a) 1 =
1
A: Type a: A
ap (join_to_susp A) (ap (susp_to_join A) (merid a)) @
1 = 1 @ merid a
A: Type a: A
ap (join_to_susp A) (ap (susp_to_join A) (merid a)) =
merid a
A: Type a: A
ap (join_to_susp A) (zigzag true false a) = merid a
A: Type a: A
merid a @ 1^ = merid a
apply concat_p1.
A: Type
susp_to_join A o join_to_susp A == idmap
A: Type
foralla : Bool,
susp_to_join A (join_to_susp A (joinl a)) = joinl a
A: Type
forallb : A,
susp_to_join A (join_to_susp A (joinr b)) = joinr b
A: Type
forall (a : Bool) (b : A),
ap (susp_to_join A) (ap (join_to_susp A) (jglue a b)) @
?Goal0 b = ?Goal a @ jglue a b
A: Type
forallb : A,
susp_to_join A (join_to_susp A (joinr b)) = joinr b
A: Type
forall (a : Bool) (b : A),
ap (susp_to_join A) (ap (join_to_susp A) (jglue a b)) @
?Goal b =
(funa0 : Bool =>
if a0 as b0
return
(susp_to_join A (join_to_susp A (joinl b0)) =
joinl b0)
then1else1) a @ jglue a b
A: Type
forall (a : Bool) (b : A),
ap (susp_to_join A) (ap (join_to_susp A) (jglue a b)) @
(funa0 : A => jglue false a0) b =
(funa0 : Bool =>
if a0 as b0
return
(susp_to_join A (join_to_susp A (joinl b0)) =
joinl b0)
then1else1) a @ jglue a b
A: Type b: Bool a: A
ap (susp_to_join A) (ap (join_to_susp A) (jglue b a)) @
jglue false a =
(if b as b
return
(susp_to_join A (join_to_susp A (joinl b)) =
joinl b)
then1else1) @ jglue b a
A: Type b: Bool a: A
ap (join_to_susp A) (jglue b a) = ?Goal
A: Type b: Bool a: A
ap (susp_to_join A) ?Goal @ jglue false a =
(if b as b
return
(susp_to_join A (join_to_susp A (joinl b)) =
joinl b)
then1else1) @ jglue b a
A: Type b: Bool a: A
ap (susp_to_join A)
((if b as b
return
(A -> (if b then North else South) = South)
thenfuna : A => merid a
elsefun_ : A => 1) a) @ jglue false a =
(if b as b
return
(susp_to_join A (join_to_susp A (joinl b)) =
joinl b)
then1else1) @ jglue b a
A: Type a: A
ap (susp_to_join A) (merid a) @ jglue false a =
1 @ jglue true a
A: Type a: A
ap (susp_to_join A) 1 @ jglue false a =
1 @ jglue false a
A: Type a: A
ap (susp_to_join A) (merid a) @ jglue false a =
1 @ jglue true a
A: Type a: A
ap (susp_to_join A) (merid a) @ jglue false a =
jglue true a
A: Type a: A
zigzag true false a @ jglue false a = jglue true a
apply concat_pV_p.
A: Type a: A
ap (susp_to_join A) 1 @ jglue false a =
1 @ jglue false a
reflexivity.Defined.Definitionequiv_join_susp (A : Type) : Join Bool A <~> Susp A
:= Build_Equiv _ _ (join_to_susp A) _.(** It follows that the join powers of [Bool] are spheres. These are sometimes a convenient alternative to working with spheres, so we give them a name. *)Definitionbool_pow (n : nat) := join_power Bool n.