Built with Alectryon. 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.
From HoTT Require Import Basics Types.From HoTT Require Import Basics Types.Require Import Join.Core Join.JoinAssoc Suspension Spaces.Spheres.From HoTT.WildCat Require Import Core UniverseEquiv.Require Import Spaces.Nat.Core.Require Import Pointed.Core Pointed.pEquiv Pointed.pSusp.LocalOpen Scope pointed_scope.(** * [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 =>
match
a0 as b0 return susp_to_join A (join_to_susp A (joinl b0)) = joinl b0
with
| true => 1
| false => 1end) 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 =>
match
a0 as b0 return susp_to_join A (join_to_susp A (joinl b0)) = joinl b0
with
| true => 1
| false => 1end) 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 =
match
b as b0 return susp_to_join A (join_to_susp A (joinl b0)) = joinl b0
with
| true => 1
| false => 1end @ 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 =
match
b as b0 return susp_to_join A (join_to_susp A (joinl b0)) = joinl b0
with
| true => 1
| false => 1end @ jglue b a
A: Type b: Bool a: A
ap (susp_to_join A)
(match b as b0 return A -> (if b0 then North else South) = South with
| true => funa0 : A => merid a0
| false => fun_ : A => 1end a) @
jglue false a =
match
b as b0 return susp_to_join A (join_to_susp A (joinl b0)) = joinl b0
with
| true => 1
| false => 1end @ 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.
Join (bool_pow n) (bool_pow m) <~> Sphere (n + m)%nat.-1
n, m: nat
Join (bool_pow n) (bool_pow m) <~> bool_pow (n + m)
apply join_join_power.Defined.(** A pointed version of [equiv_join_sphere], starting in dimension 0. *)Definitionpequiv_pjoin_sphere (nm : nat)
: pjoin (psphere n) (Sphere m) <~>* psphere (n + m.+1)%nat
:= Build_pEquiv' (equiv_join_sphere n.+1 m.+1) 1.(** The suspension of a join is the join with one factor suspended. *)Definitionequiv_susp_join (AB : Type)
: Susp (Join A B) <~> Join (Susp A) B
:= equiv_functor_join (equiv_join_susp A) equiv_idmap
oE join_assoc Bool A B
oE (equiv_join_susp (Join A B))^-1%equiv.Definitionpequiv_psusp_join (AB : Type)
: psusp (Join A B) <~>* pjoin (psusp A) B
:= Build_pEquiv' (equiv_susp_join A B) 1.(** * Diamonds in the self-join of a suspension *)(** This is used in CayleyDickson.v. *)
A: Type t: Susp A
diamond South t North t
A: Type t: Susp A
diamond South t North t
A: Type
diamond South North North North
A: Type
diamond South South North South
A: Type
forallx : A,
transport (funy : Susp A => diamond South y North y) (merid x) ?Goal =
?Goal0
A: Type
diamond South North North North
exact (diamond_v South North 1).
A: Type
diamond South South North South
exact (diamond_h North South 1).
A: Type
forallx : A,
transport (funy : Susp A => diamond South y North y)
(merid x) (diamond_v South North 1) =
diamond_h North South 1
A: Type a: A
transport (funy : Susp A => diamond South y North y)
(merid a) (diamond_v South North 1) =
diamond_h North South 1