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 Classes.interfaces.abstract_algebra.Require Import Cubical.DPath Cubical.PathSquare.Require Import Pointed.Core Pointed.pSusp.Require Import Homotopy.HSpace.Core.Require Import Homotopy.Suspension.Require Import Homotopy.Join.Core.LocalOpen Scope pointed_scope.LocalOpen Scope mc_mult_scope.(** The Cayley-Dickson Construction *)(** The Cayley-Dickson construction in homotopy type theory due to Buchholtz and Rijke https://arxiv.org/abs/1610.01134 is a method to construct an H-space structure on the join of two suspensions of a type [A]. As a special case, this gives a way to construct an H-space structure on [S^3] leading to the quarternionic Hopf fibration.The construction works by replicating the classical Cayley-Dickson construction on convolution algebras ([*]-algebras), which can produce the complex numbers, quaternions, octonions, etc. starting with the real numbers. We cannot replicate this directly in HoTT since such algebras have a contractible underlying vector space, therefore the construction here attempts to axiomatize the properties of the units of those algebras instead.This is done by postulating a structure called a "Cayley-Dickson imaginaroid" on a type [A] and showing that [Join (Susp A) (Susp A)] is an H-space. An open problem is to show that this space itself is also an imaginaroid given further, yet unspecified, coherences on [A]. *)(** ** Cayley-Dickson spheroids *)(** A Cayley-Dickson Spheroid is a pointed type X which is an H-space, with two operations called negation and conjugation, satisfying the following seven laws: 1. [--x = x] 2. [x** = x] 3. [1* = 1] 4. [(-x)* = -x*] 5. [x(-y) = -(xy)] 6. [(xy)* = y* x*] 7. [x* x = 1]Note that the above laws are written in pseudocode since we cannot define multiplication by juxtaposition in Coq, and * is used to denote conjugation. *)ClassCayleyDicksonSpheroid (X : pType) := {
cds_hspace :: IsHSpace X;
cds_negate :: Negate X;
cds_conjug :: Conjugate X;
cds_negate_inv :: Involutive cds_negate;
cds_conjug_inv :: Involutive cds_conjug;
cds_conjug_unit_pres :: IsUnitPreserving cds_conjug;
cds_conjug_left_inv :: LeftInverse (.*.) cds_conjug mon_unit;
cds_conjug_distr :: DistrOpp (.*.) cds_conjug;
cds_swapop :: SwapOp (-) cds_conjug;
cds_factorneg_r :: FactorNegRight (-) (.*.)
}.SectionCayleyDicksonSpheroid_Properties.Context {X : pType} `(CayleyDicksonSpheroid X).Local Instanceisequiv_cds_conjug : IsEquiv cds_conjug
:= isequiv_adjointify cds_conjug cds_conjug cds_conjug_inv cds_conjug_inv.
X: pType H: CayleyDicksonSpheroid X
FactorNegLeft negate sg_op
X: pType H: CayleyDicksonSpheroid X
FactorNegLeft negate sg_op
X: pType H: CayleyDicksonSpheroid X x, y: X
- x * y = - (x * y)
X: pType H: CayleyDicksonSpheroid X x, y: X
conj (- x * y) = conj (- (x * y))
X: pType H: CayleyDicksonSpheroid X x, y: X
conj y * conj (- x) = conj (- (x * y))
X: pType H: CayleyDicksonSpheroid X x, y: X
conj y * conj (- x) = - conj (x * y)
X: pType H: CayleyDicksonSpheroid X x, y: X
conj y * conj (- x) = - (conj y * conj x)
X: pType H: CayleyDicksonSpheroid X x, y: X
conj y * conj (- x) = conj y * - conj x
X: pType H: CayleyDicksonSpheroid X x, y: X
conj (- x) = - conj x
apply swapop.Defined.
X: pType H: CayleyDicksonSpheroid X
RightInverse sg_op cds_conjug 1
X: pType H: CayleyDicksonSpheroid X
RightInverse sg_op cds_conjug 1
X: pType H: CayleyDicksonSpheroid X x: X
x * cds_conjug x = 1
X: pType H: CayleyDicksonSpheroid X x: X
cds_conjug (cds_conjug x) * conj x = 1
rapply left_inverse.Defined.EndCayleyDicksonSpheroid_Properties.(** ** Negation and conjugation on suspensions *)Instanceconjugate_susp (A : Type) `(Negate A) : Conjugate (Susp A)
:= functor_susp (-).Instancenegate_susp (A : Type) `(Negate A) : Negate (Susp A)
:= susp_neg _ o conjugate_susp A (-).(** [conjugate_susp A] and [negate_susp A] commute. *)
A: Type H: Negate A
SwapOp (negate_susp A negate)
(conjugate_susp A negate)
A: Type H: Negate A
SwapOp (negate_susp A negate)
(conjugate_susp A negate)
A: Type H: Negate A x: Susp A
conj (- x) = - conj x
A: Type H: Negate A x: Susp A
- conj x = conj (- x)
napply susp_neg_natural.Defined.(** [conjugate_susp A] is involutive, since any functor applied to an involution gives an involution. *)
A: Type H: Negate A Involutive0: Involutive negate
Involutive (conjugate_susp A negate)
A: Type H: Negate A Involutive0: Involutive negate
Involutive (conjugate_susp A negate)
A: Type H: Negate A Involutive0: Involutive negate x: Susp A
conjugate_susp A negate (conjugate_susp A negate x) =
x
A: Type H: Negate A Involutive0: Involutive negate x: Susp A
functor_susp (funx : A => - - x) x = x
A: Type H: Negate A Involutive0: Involutive negate x: Susp A
functor_susp (funx : A => - - x) x =
functor_susp idmap x
A: Type H: Negate A Involutive0: Involutive negate x: Susp A
(funx : A => - - x) == idmap
exact involutive.Defined.(** [conjugate_susp A] is involutive as any composite of commuting involutions is an involution. *)
A: Type H: Negate A Involutive0: Involutive negate
Involutive (negate_susp A negate)
A: Type H: Negate A Involutive0: Involutive negate
Involutive (negate_susp A negate)
A: Type H: Negate A Involutive0: Involutive negate x: Susp A
negate_susp A negate (negate_susp A negate x) = x
A: Type H: Negate A Involutive0: Involutive negate x: Susp A
susp_neg A
(conjugate_susp A negate
(susp_neg A (conjugate_susp A negate x))) = x
A: Type H: Negate A Involutive0: Involutive negate x: Susp A
conjugate_susp A negate
(susp_neg A (conjugate_susp A negate x)) = ?Goal
A: Type H: Negate A Involutive0: Involutive negate x: Susp A
susp_neg A ?Goal = x
A: Type H: Negate A Involutive0: Involutive negate x: Susp A
susp_neg A (- conj x) = x
A: Type H: Negate A Involutive0: Involutive negate x: Susp A
conjugate_susp A negate (conj x) = x
rapply involutive.Defined.(** ** Cayley-Dickson imaginaroids *)ClassCayleyDicksonImaginaroid (A : Type) := {
cdi_negate :: Negate A;
cdi_negate_involutive :: Involutive cdi_negate;
cdi_susp_hspace :: IsHSpace (psusp A);
cdi_susp_factorneg_r :: FactorNegRight (negate_susp A cdi_negate) hspace_op;
cdi_susp_conjug_left_inv :: LeftInverse hspace_op (conjugate_susp A cdi_negate) mon_unit;
cdi_susp_conjug_distr :: DistrOpp hspace_op (conjugate_susp A cdi_negate);
}.Instanceisunitpreserving_conjugate_susp {A} `(CayleyDicksonImaginaroid A)
: @IsUnitPreserving _ _ pt pt (conjugate_susp A cdi_negate)
:= idpath.(** Every suspension of a Cayley-Dickson imaginaroid gives a Cayley-Dickson spheroid. *)Instancecds_susp_cdi {A} `(CayleyDicksonImaginaroid A)
: CayleyDicksonSpheroid (psusp A) := {}.
A: Type H: CayleyDicksonImaginaroid A
LeftInverse hspace_op (conjugate_susp A cdi_negate) 1
A: Type H: CayleyDicksonImaginaroid A
LeftInverse hspace_op (conjugate_susp A cdi_negate) 1
exact cds_conjug_left_inv.Defined.
A: Type H: CayleyDicksonImaginaroid A
RightInverse hspace_op (conjugate_susp A cdi_negate) 1
A: Type H: CayleyDicksonImaginaroid A
RightInverse hspace_op (conjugate_susp A cdi_negate) 1
stapply cds_conjug_right_inv.Defined.Instancecdi_susp_left_identity {A} `(CayleyDicksonImaginaroid A)
: LeftIdentity hspace_op mon_unit
:= _.Instancecdi_susp_right_identity {A} `(CayleyDicksonImaginaroid A)
: RightIdentity hspace_op mon_unit
:= _.
A: Type H: CayleyDicksonImaginaroid A
FactorNegLeft (negate_susp A cdi_negate) hspace_op
A: Type H: CayleyDicksonImaginaroid A
FactorNegLeft (negate_susp A cdi_negate) hspace_op
stapply cds_factorneg_l.Defined.(** A Cayley-Dickson imaginaroid [A] whose multiplication on the suspension is associative gives rise to an H-space structure on the join of the suspension of [A] with itself. *)SectionImaginaroidHSpace.(** Let [A] be a Cayley-Dickson imaginaroid with associative H-space multiplication on [Susp A]. *)Context {A} `(CayleyDicksonImaginaroid A) `(!Associative hspace_op).(** Declaring these as local instances so that they can be found *)Local Instancehspace_op' : SgOp (Susp A) := hspace_op.Local Instancehspace_unit' : MonUnit (Susp A) := hspace_mon_unit.(** First we make some observations with the context we have. *)SectionLemmata.Context (abcd : Susp A).Local Definitionf := (funx => a * (c * -x)).Local Definitiong := (funy => c * (y * b)).
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
f (- (1)) = a * c
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
f (- (1)) = a * c
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
c * - - (1) = c
exact (hspace_right_identity c).Defined.
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
f (conj c * conj a * d * conj b) = - d * conj b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
f (conj c * conj a * d * conj b) = - d * conj b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
a * (c * - (conj c * conj a * d * conj b)) =
- d * conj b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
- (a * (c * (conj c * conj a * d * conj b))) =
- d * conj b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
- (a * c * (conj c * conj a) * d * conj b) =
- d * conj b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
- (a * c * conj (a * c) * d * conj b) = - d * conj b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
- (1 * d * conj b) = - d * conj b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
- (d * conj b) = - d * conj b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
- d * conj b = - (d * conj b)
apply factorneg_l.Defined.
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
g 1 = c * b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
g 1 = c * b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
1 * b = b
apply left_identity.Defined.
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
g (conj c * conj a * d * conj b) = conj a * d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
g (conj c * conj a * d * conj b) = conj a * d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
c * (conj c * conj a * d * conj b * b) = conj a * d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
c * (conj c * conj a * d) * conj b * b = conj a * d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
c * (conj c * conj a * d) * (conj b * b) = conj a * d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
c * (conj c * conj a * d) * 1 = conj a * d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
c * (conj c * conj a * d) = conj a * d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
c * conj c * conj a * d = conj a * d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
1 * conj a * d = conj a * d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: Susp A
1 * (conj a * d) = conj a * d
apply left_identity.Defined.EndLemmata.Arguments f {_ _}.Arguments g {_ _}.(** Here is the multiplication map in algebraic form: [(a,b) * (c,d) = (a * c - d * b*, a* * d + c * b)]. The following is the spherical form. *)
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
SgOp (pjoin (psusp A) (psusp A))
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
SgOp (pjoin (psusp A) (psusp A))
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
psusp A -> psusp A -> pjoin (psusp A) (psusp A)
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
psusp A -> psusp A -> pjoin (psusp A) (psusp A)
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
psusp A -> psusp A -> pjoin (psusp A) (psusp A)
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
psusp A -> psusp A -> pjoin (psusp A) (psusp A)
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallacd : psusp A, ?P_AC a c = ?P_AD a d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallbcd : psusp A, ?P_BC b c = ?P_BD b d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallcab : psusp A, ?P_AC a c = ?P_BC b c
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
foralldab : psusp A, ?P_AD a d = ?P_BD b d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallabcd : psusp A,
?P_gAx a c d @ ?P_gxD d a b =
?P_gxC c a b @ ?P_gBx b c d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
psusp A -> psusp A -> pjoin (psusp A) (psusp A)
exact (funab => joinl (a * b)).
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
psusp A -> psusp A -> pjoin (psusp A) (psusp A)
exact (funab => joinr (conj a * b)).
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
psusp A -> psusp A -> pjoin (psusp A) (psusp A)
exact (funab => joinr (b * a)).
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
psusp A -> psusp A -> pjoin (psusp A) (psusp A)
exact (funab => joinl ((- b) * conj a)).
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallacd : psusp A,
(funa0b : psusp A => joinl (a0 * b)) a c =
(funa0b : psusp A => joinr (conj a0 * b)) a d
intros; apply jglue.
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallbcd : psusp A,
(funab0 : psusp A => joinr (b0 * a)) b c =
(funab0 : psusp A => joinl (- b0 * conj a)) b d
intros; symmetry; apply jglue.
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallcab : psusp A,
(funa0b0 : psusp A => joinl (a0 * b0)) a c =
(funa0b0 : psusp A => joinr (b0 * a0)) b c
intros; apply jglue.
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
foralldab : psusp A,
(funa0b0 : psusp A => joinr (conj a0 * b0)) a d =
(funa0b0 : psusp A => joinl (- b0 * conj a0)) b d
intros; symmetry; apply jglue.
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallabcd : psusp A,
(funa0c0d0 : psusp A =>
jglue (a0 * c0) (conj a0 * d0)) a c d @
(fund0a0b0 : psusp A =>
(jglue (- d0 * conj b0) (conj a0 * d0))^) d a b =
(func0a0b0 : psusp A => jglue (a0 * c0) (c0 * b0))
c a b @
(funb0c0d0 : psusp A =>
(jglue (- d0 * conj b0) (c0 * b0))^) b c d
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
jglue (a * c) (conj a * d) @
(jglue (- d * conj b) (conj a * d))^ =
jglue (a * c) (c * b) @
(jglue (- d * conj b) (c * b))^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
jglue (a * c) (c * b) @
(jglue (- d * conj b) (c * b))^ =
jglue (a * c) (conj a * d) @
(jglue (- d * conj b) (conj a * d))^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare (jglue (a * c) (c * b))
(jglue (- d * conj b) (conj a * d))^
(jglue (a * c) (conj a * d))
(jglue (- d * conj b) (c * b))^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare (jglue (f (- (1))) (c * b))
(jglue (- d * conj b) (conj a * d))^
(jglue (f (- (1))) (conj a * d))
(jglue (- d * conj b) (c * b))^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare (jglue (f (- (1))) (c * b))
(jglue (f (conj c * conj a * d * conj b))
(conj a * d))^ (jglue (f (- (1))) (conj a * d))
(jglue (f (conj c * conj a * d * conj b)) (c * b))^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare (jglue (f (- (1))) (g 1))
(jglue (f (conj c * conj a * d * conj b))
(conj a * d))^ (jglue (f (- (1))) (conj a * d))
(jglue (f (conj c * conj a * d * conj b))
(g mon_unit))^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare (jglue (f (- (1))) (g 1))
(jglue (f (conj c * conj a * d * conj b))
(g (conj c * conj a * d * conj b)))^
(jglue (f (- (1)))
(g (conj c * conj a * d * conj b)))
(jglue (f (conj c * conj a * d * conj b))
(g mon_unit))^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
?Goal = jglue (f (- (1))) (g 1)
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
?Goal0 =
(jglue (f (conj c * conj a * d * conj b))
(g (conj c * conj a * d * conj b)))^%path
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
?Goal1 =
jglue (f (- (1))) (g (conj c * conj a * d * conj b))
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
?Goal2 =
(jglue (f (conj c * conj a * d * conj b)) (g mon_unit))^%path
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare ?Goal?Goal0?Goal1?Goal2
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
?Goal = jglue (f (- (1))) (g 1)
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
?x =
jglue (f (conj c * conj a * d * conj b))
(g (conj c * conj a * d * conj b))
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
?x0 = jglue (f (conj c * conj a * d * conj b)) (g 1)
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
?Goal0 =
jglue (f (- (1))) (g (conj c * conj a * d * conj b))
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare ?Goal?x^ ?Goal0?x0^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (- (1)) 1))
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (conj c * conj a * d * conj b)
(conj c * conj a * d * conj b)))^
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (- (1)) (conj c * conj a * d * conj b)))
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (conj c * conj a * d * conj b) mon_unit))^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
?Goal =
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (conj c * conj a * d * conj b)
(conj c * conj a * d * conj b)))^%path
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
?Goal0 =
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (conj c * conj a * d * conj b) mon_unit))^%path
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (- (1)) 1))
?Goal
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (- (1)) (conj c * conj a * d * conj b)))
?Goal0
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (- (1)) 1))
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (conj c * conj a * d * conj b)
(conj c * conj a * d * conj b))^)
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (- (1)) (conj c * conj a * d * conj b)))
(ap
(Join_rec (funa0 : Susp A => joinl (f a0))
(funb0 : Susp A => joinr (g b0))
(funa0b0 : Susp A => jglue (f a0) (g b0)))
(jglue (conj c * conj a * d * conj b) mon_unit)^)
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare (jglue (- (1)) 1)
(jglue (conj c * conj a * d * conj b)
(conj c * conj a * d * conj b))^
(jglue (- (1)) (conj c * conj a * d * conj b))
(jglue (conj c * conj a * d * conj b) mon_unit)^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
PathSquare (jglue (- (1)) 1)
(jglue (conj c * conj a * d * conj b)
(conj c * conj a * d * conj b))^
(jglue (- (1)) (conj c * conj a * d * conj b))
(jglue (conj c * conj a * d * conj b) mon_unit)^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b, c, d: psusp A
forallp : psusp A,
PathSquare (jglue (- (1)) 1) (jglue p p)^
(jglue (- (1)) p) (jglue p mon_unit)^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallp : psusp A,
PathSquare (jglue (- (1)) 1) (jglue p p)^
(jglue (- (1)) p) (jglue p mon_unit)^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
foralls : Susp A, Diamond (- (1)) s 1 s
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
PathSquare (jglue (- (1)) 1) (jglue North North)^
(jglue (- (1)) North) (jglue North mon_unit)^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
PathSquare (jglue (- (1)) 1)
(jglue South South)^
(jglue (- (1)) South)
(jglue South mon_unit)^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallx : A,
transport (funy : Susp A => Diamond (- (1)) y 1 y)
(merid x) ?Goal = ?Goal0
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
PathSquare (jglue (- (1)) 1) (jglue South South)^
(jglue (- (1)) South) (jglue South mon_unit)^
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallx : A,
transport (funy : Susp A => Diamond (- (1)) y 1 y)
(merid x) (diamond_v_sq (- (1)) North 1) =
?Goal
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallx : A,
transport (funy : Susp A => Diamond (- (1)) y 1 y)
(merid x) (diamond_v_sq (- (1)) North 1) =
diamond_h_sq 1 South 1
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a: A
transport (funy : Susp A => Diamond (- (1)) y 1 y)
(merid a) (diamond_v_sq (- (1)) North 1) =
diamond_h_sq 1 South 1
apply diamond_twist.Defined.
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
LeftIdentity cd_op pt
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
LeftIdentity cd_op pt
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
foralla : psusp A, cd_op pt (joinl a) = joinl a
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallb : psusp A, cd_op pt (joinr b) = joinr b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallab : psusp A,
ap (cd_op pt) (jglue a b) @ ?Hr b = ?Hl a @ jglue a b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallab : psusp A,
ap (cd_op pt) (jglue a b) @
(funb0 : psusp A =>
ap joinr (hspace_left_identity b0)) b =
(funa0 : psusp A =>
ap joinl (hspace_left_identity a0)) a @ jglue a b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b: psusp A
ap (cd_op pt) (jglue a b) @
(funb : psusp A => ap joinr (hspace_left_identity b))
b =
(funa : psusp A => ap joinl (hspace_left_identity a))
a @ jglue a b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b: psusp A
ap (cd_op pt) (jglue a b) = ?Goal
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b: psusp A
?Goal @ ap joinr (hspace_left_identity b) =
ap joinl (hspace_left_identity a) @ jglue a b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b: psusp A
jglue (pt * a) (conj pt * b) @
ap joinr (hspace_left_identity b) =
ap joinl (hspace_left_identity a) @ jglue a b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b: psusp A
ap joinl (hspace_left_identity a) @ jglue a b =
jglue (pt * a) (conj pt * b) @
ap joinr (hspace_left_identity b)
apply join_natsq.Defined.
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
RightIdentity cd_op pt
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
RightIdentity cd_op pt
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
foralla : psusp A,
(funx : Join (psusp A) (psusp A) => cd_op x pt)
(joinl a) = joinl a
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallb : psusp A,
(funx : Join (psusp A) (psusp A) => cd_op x pt)
(joinr b) = joinr b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallab : psusp A,
ap (funx : Join (psusp A) (psusp A) => cd_op x pt)
(jglue a b) @ ?Hr b =
?Hl a @ jglue a b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallb : psusp A,
(funx : Join (psusp A) (psusp A) => cd_op x pt)
(joinr b) = joinr b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallab : psusp A,
ap (funx : Join (psusp A) (psusp A) => cd_op x pt)
(jglue a b) @ ?Hr b =
(funa0 : psusp A =>
ap joinl (hspace_right_identity a0)) a @
jglue a b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op
forallab : psusp A,
ap (funx : Join (psusp A) (psusp A) => cd_op x pt)
(jglue a b) @
(funb0 : psusp A =>
ap joinr (hspace_left_identity b0)) b =
(funa0 : psusp A =>
ap joinl (hspace_right_identity a0)) a @ jglue a b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b: psusp A
ap (funx : Join (psusp A) (psusp A) => cd_op x pt)
(jglue a b) @
(funb : psusp A => ap joinr (hspace_left_identity b))
b =
(funa : psusp A => ap joinl (hspace_right_identity a))
a @ jglue a b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b: psusp A
ap (funx : Join (psusp A) (psusp A) => cd_op x pt)
(jglue a b) = ?Goal
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b: psusp A
?Goal @ ap joinr (hspace_left_identity b) =
ap joinl (hspace_right_identity a) @ jglue a b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b: psusp A
Join_ind_FlFr
(funx : Join (psusp A) (psusp A) =>
(funa : psusp A =>
Join_rec
((funa0b : psusp A => joinl (a0 * b)) a)
((funa0b : psusp A => joinr (conj a0 * b)) a)
((funa0cd : psusp A =>
jglue (a0 * c) (conj a0 * d)) a) x) a)
(funx : Join (psusp A) (psusp A) =>
(funb : psusp A =>
Join_rec
((funab0 : psusp A => joinr (b0 * a)) b)
((funab0 : psusp A => joinl (- b0 * conj a)) b)
((funb0cd : psusp A =>
(jglue (- d * conj b0) (c * b0))^) b) x) b)
(func : psusp A =>
(func0ab : psusp A => jglue (a * c0) (c0 * b)) c
a b)
(fund : psusp A =>
(fund0ab : psusp A =>
(jglue (- d0 * conj b) (conj a * d0))^) d a b)
(funcd : psusp A =>
whiskerR
(Join_rec_beta_jglue
((funab : psusp A => joinl (a * b)) a)
((funab : psusp A => joinr (conj a * b)) a)
((funac0d0 : psusp A =>
jglue (a * c0) (conj a * d0)) a) c d)
((fund0ab : psusp A =>
(jglue (- d0 * conj b) (conj a * d0))^) d a b) @
((funabc0d0 : psusp A =>
(letX := equiv_isequiv sq_path inletX0 := sq_path^-1in
X0
(internal_paths_rew
(funs : Susp A =>
PathSquare (jglue s (c0 * b))
(jglue (- d0 * conj b) (conj a * d0))^
(jglue s (conj a * d0))
(jglue (- d0 * conj b) (c0 * b))^)
(internal_paths_rew
(funs : Susp A =>
PathSquare (jglue (...) (...))
(jglue s (...))^ (jglue (...) (...))
(jglue s (...))^)
(internal_paths_rew
(funs : ... =>
PathSquare (...) (...)^ (...) (...)^)
(internal_paths_rew (... => ...)
(sq_GGGG ... ... ... ... ...)
(lemma4 a b c0 d0)) (lemma3 b c0))
(lemma2 a b c0 d0)) (lemma1 a c0)))^
:
(funa0c1d1 : psusp A =>
jglue (a0 * c1) (conj a0 * d1)) a c0 d0 @
(fund1a0b0 : psusp A =>
(jglue (- d1 * conj b0) (conj a0 * d1))^) d0 a b =
(func1a0b0 : psusp A =>
jglue (a0 * c1) (c1 * b0)) c0 a b @
(funb0c1d1 : psusp A =>
(jglue (- d1 * conj b0) (c1 * b0))^) b c0 d0) a
b c d @
(whiskerL
((func0ab : psusp A =>
jglue (a * c0) (c0 * b)) c a b)
(Join_rec_beta_jglue
((funab : psusp A => joinr (b * a)) b)
((funab : psusp A => joinl (- b * conj a))
b)
((funbc0d0 : psusp A =>
(jglue (- d0 * conj b) (c0 * b))^) b) c d))^)
:
ap
(funx : Join (psusp A) (psusp A) =>
(funa : psusp A =>
Join_rec
((funa0b : psusp A => joinl (a0 * b)) a)
((funa0b : psusp A => joinr (conj a0 * b))
a)
((funa0c0d0 : psusp A =>
jglue (a0 * c0) (conj a0 * d0)) a) x) a)
(jglue c d) @
(fund0 : psusp A =>
(fund1ab : psusp A =>
(jglue (- d1 * conj b) (conj a * d1))^) d0 a b) d =
(func0 : psusp A =>
(func1ab : psusp A => jglue (a * c1) (c1 * b))
c0 a b) c @
ap
(funx : Join (psusp A) (psusp A) =>
(funb : psusp A =>
Join_rec
((funab0 : psusp A => joinr (b0 * a)) b)
((funab0 : psusp A => joinl (- b0 * conj a))
b)
((funb0c0d0 : psusp A =>
(jglue (- d0 * conj b0) (c0 * b0))^) b) x)
b) (jglue c d)) pt @
ap joinr (hspace_left_identity b) =
ap joinl (hspace_right_identity a) @ jglue a b
A: Type H: CayleyDicksonImaginaroid A Associative0: Associative hspace_op a, b: psusp A
ap joinl (hspace_right_identity a) @ jglue a b =
jglue (a * pt) (pt * b) @
ap joinr (hspace_left_identity b)