Theory PseudonaturalTransformation
section "Pseudonatural Transformations"
theory PseudonaturalTransformation
imports InternalEquivalence InternalAdjunction Pseudofunctor
begin
subsection "Definition of Pseudonatural Transformation"
text ‹
Pseudonatural transformations are a generalization of natural transformations that is
appropriate for pseudofunctors. The ``components'' of a pseudonatural transformation ‹τ›
from a pseudofunctor ‹F› to a pseudofunctor ‹G› (both from bicategory ‹C› to ‹D›),
are 1-cells ‹«τ⇩0 a : F⇩0 a →⇩D G⇩0 a»› associated with the objects of ‹C›. Instead of
``naturality squares'' that commute on-the-nose, a pseudonatural transformation associates
an invertible 2-cell ‹«τ⇩1 f : G f ⋆⇩D τ⇩0 a ⇒⇩D τ⇩0 a' ⋆⇩D F f»› with each 1-cell ‹«f : a →⇩C a'»›
of ‹C›. The 1-cells ‹τ⇩0 a› and 2-cells ‹τ⇩1 f› are subject to coherence conditions which
express that they transform naturally across 2-cells of ‹C› and behave sensibly with
respect to objects and horizontal composition.
In formalizing ordinary natural transformations, we found it convenient to treat them
similarly to functors in that a natural transformation ‹τ : C → D› maps arrows of ‹C›
to arrows of ‹D›; the components ‹τ a› at objects ‹a› being merely special cases.
However, it is not possible to take the same approach for pseudofunctors, because it is
not possible to treat the components ‹τ⇩0 a› at objects ‹a› as a special case of the
components ‹τ⇩1 f› at 1-cells ‹f›. So we have to regard a pseudonatural transformation ‹τ›
as consisting of two separate mappings: a mapping ‹τ⇩0› from objects of ‹C› to 1-cells
of ‹D› and a mapping ‹τ⇩1› from 1-cells of ‹C› to invertible 2-cells of ‹D›.
Pseudonatural transformations are themselves a special case of the more general notion
of ``lax natural transformations'' between pseudofunctors. For a lax natural transformation
‹τ›, the 2-cells ‹τ⇩1 f› are not required to be invertible. This means that there is a
distinction between a lax natural transformation with ‹«τ⇩1 f : G f ⋆⇩D τ⇩0 a ⇒⇩D τ⇩0 a' ⋆⇩D F f»›
and an ``op-lax'' natural transformation with ‹«τ⇩1 f : τ⇩0 a' ⋆⇩D F f ⇒⇩D G f ⋆⇩D τ⇩0 a»›.
There is some variation in the literature on which direction is considered ``lax'' and
which is ``op-lax'' and this variation extends as well to the special case of pseudofunctors,
though in that case it does not result in any essential difference in the notion,
due to the assumed invertibility. We have chosen the direction that agrees with
Leinster \<^cite>‹"leinster-basic-bicategories"›, and with the ``nLab'' article
\<^cite>‹"nlab-lax-natural-transformation"› on lax natural transformations, but note that the
``nLab'' article \<^cite>‹"nlab-pseudonatural-transformation"› on pseudonatural transformations
seems to make the opposite choice.
›
locale pseudonatural_transformation =
C: bicategory V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C +
D: bicategory V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D +
F: pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F +
G: pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G
for V⇩C :: "'c comp" (infixr ‹⋅⇩C› 55)
and H⇩C :: "'c comp" (infixr ‹⋆⇩C› 53)
and 𝖺⇩C :: "'c ⇒ 'c ⇒ 'c ⇒ 'c" (‹𝖺⇩C[_, _, _]›)
and 𝗂⇩C :: "'c ⇒ 'c" (‹𝗂⇩C[_]›)
and src⇩C :: "'c ⇒ 'c"
and trg⇩C :: "'c ⇒ 'c"
and V⇩D :: "'d comp" (infixr ‹⋅⇩D› 55)
and H⇩D :: "'d comp" (infixr ‹⋆⇩D› 53)
and 𝖺⇩D :: "'d ⇒ 'd ⇒ 'd ⇒ 'd" (‹𝖺⇩D[_, _, _]›)
and 𝗂⇩D :: "'d ⇒ 'd" (‹𝗂⇩D[_]›)
and src⇩D :: "'d ⇒ 'd"
and trg⇩D :: "'d ⇒ 'd"
and F :: "'c ⇒ 'd"
and Φ⇩F :: "'c * 'c ⇒ 'd"
and G :: "'c ⇒ 'd"
and Φ⇩G :: "'c * 'c ⇒ 'd"
and τ⇩0 :: "'c ⇒ 'd"
and τ⇩1 :: "'c ⇒ 'd" +
assumes map⇩0_in_hhom: "C.obj a ⟹ «τ⇩0 a : src⇩D (F a) →⇩D src⇩D (G a)»"
and map⇩1_in_vhom: "C.ide f ⟹ «τ⇩1 f : G f ⋆⇩D τ⇩0 (src⇩C f) ⇒⇩D τ⇩0 (trg⇩C f) ⋆⇩D F f»"
and ide_map⇩0_obj: "C.obj a ⟹ D.ide (τ⇩0 a)"
and iso_map⇩1_ide: "C.ide f ⟹ D.iso (τ⇩1 f)"
and naturality: "C.arr μ ⟹
τ⇩1 (C.cod μ) ⋅⇩D (G μ ⋆⇩D τ⇩0 (src⇩C μ)) = (τ⇩0 (trg⇩C μ) ⋆⇩D F μ) ⋅⇩D τ⇩1 (C.dom μ)"
and respects_unit: "C.obj a ⟹
(τ⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0 a] ⋅⇩D 𝗅⇩D[τ⇩0 a] = τ⇩1 a ⋅⇩D (G.unit a ⋆⇩D τ⇩0 a)"
and respects_hcomp:
"⟦ C.ide f; C.ide g; src⇩C g = trg⇩C f ⟧ ⟹
(τ⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 (trg⇩C g), F g, F f] ⋅⇩D (τ⇩1 g ⋆⇩D F f) ⋅⇩D
D.inv 𝖺⇩D[G g, τ⇩0 (src⇩C g), F f] ⋅⇩D (G g ⋆⇩D τ⇩1 f) ⋅⇩D 𝖺⇩D[G g, G f, τ⇩0 (src⇩C f)]
= τ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D τ⇩0 (src⇩C f))"
begin
lemma map⇩0_in_hom [intro]:
assumes "C.obj a"
shows "«τ⇩0 a : F.map⇩0 a →⇩D G.map⇩0 a»"
and "«τ⇩0 a : τ⇩0 a ⇒⇩D τ⇩0 a»"
using assms map⇩0_in_hhom [of a]
apply fastforce
using assms ide_map⇩0_obj [of a] by fast
lemma map⇩0_simps [simp]:
assumes "C.obj a"
shows "D.ide (τ⇩0 a)"
and "src⇩D (τ⇩0 a) = F.map⇩0 a" and "trg⇩D (τ⇩0 a) = G.map⇩0 a"
using assms map⇩0_in_hom iso_map⇩1_ide ide_map⇩0_obj by auto
lemma map⇩1_in_hom [intro]:
assumes "C.ide f"
shows "«τ⇩1 f : F.map⇩0 (src⇩C f) →⇩D G.map⇩0 (trg⇩C f)»"
and "«τ⇩1 f : G f ⋆⇩D τ⇩0 (src⇩C f) ⇒⇩D τ⇩0 (trg⇩C f) ⋆⇩D F f»"
using assms map⇩1_in_vhom [of f] D.vconn_implies_hpar(1-2) by auto
lemma map⇩1_simps [simp]:
assumes "C.ide f"
shows "D.arr (τ⇩1 f)"
and "src⇩D (τ⇩1 f) = F.map⇩0 (src⇩C f)"
and "trg⇩D (τ⇩1 f) = G.map⇩0 (trg⇩C f)"
and "D.dom (τ⇩1 f) = G f ⋆⇩D τ⇩0 (src⇩C f)"
and "D.cod (τ⇩1 f) = τ⇩0 (trg⇩C f) ⋆⇩D F f"
using assms map⇩1_in_hom iso_map⇩1_ide by auto
lemma inv_naturality:
assumes "C.arr μ"
shows "(G μ ⋆⇩D τ⇩0 (src⇩C μ)) ⋅⇩D D.inv (τ⇩1 (C.dom μ)) =
D.inv (τ⇩1 (C.cod μ)) ⋅⇩D (τ⇩0 (trg⇩C μ) ⋆⇩D F μ)"
using assms naturality iso_map⇩1_ide D.invert_opposite_sides_of_square by simp
end
subsection "Identity Pseudonatural Transformation"
locale identity_pseudonatural_transformation =
C: bicategory V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C +
D: bicategory V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D +
F: pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F
for V⇩C :: "'c comp" (infixr ‹⋅⇩C› 55)
and H⇩C :: "'c comp" (infixr ‹⋆⇩C› 53)
and 𝖺⇩C :: "'c ⇒ 'c ⇒ 'c ⇒ 'c" (‹𝖺⇩C[_, _, _]›)
and 𝗂⇩C :: "'c ⇒ 'c" (‹𝗂⇩C[_]›)
and src⇩C :: "'c ⇒ 'c"
and trg⇩C :: "'c ⇒ 'c"
and V⇩D :: "'d comp" (infixr ‹⋅⇩D› 55)
and H⇩D :: "'d comp" (infixr ‹⋆⇩D› 53)
and 𝖺⇩D :: "'d ⇒ 'd ⇒ 'd ⇒ 'd" (‹𝖺⇩D[_, _, _]›)
and 𝗂⇩D :: "'d ⇒ 'd" (‹𝗂⇩D[_]›)
and src⇩D :: "'d ⇒ 'd"
and trg⇩D :: "'d ⇒ 'd"
and F :: "'c ⇒ 'd"
and Φ⇩F :: "'c * 'c ⇒ 'd"
begin
abbreviation (input) map⇩0
where "map⇩0 a ≡ F.map⇩0 a"
abbreviation (input) map⇩1
where "map⇩1 f ≡ 𝗅⇩D⇧-⇧1[F f] ⋅⇩D 𝗋⇩D[F f]"
sublocale pseudonatural_transformation
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F F Φ⇩F map⇩0 map⇩1
proof
show 1: "⋀a. C.obj a ⟹ D.ide (F.map⇩0 a)"
using F.map⇩0_simps(1) by blast
show "⋀f. C.ide f ⟹ D.iso (map⇩1 f)"
by auto
show "⋀a. C.obj a ⟹ «F.map⇩0 a : src⇩D (F a) →⇩D src⇩D (F a)»"
by (metis C.obj_def' D.in_hhomI D.src.preserves_arr F.map⇩0_def F.map⇩0_simps(2)
F.map⇩0_simps(3) F.preserves_reflects_arr)
show "⋀f. C.ide f ⟹ «map⇩1 f : F f ⋆⇩D F.map⇩0 (src⇩C f) ⇒⇩D F.map⇩0 (trg⇩C f) ⋆⇩D F f»"
by simp
show "⋀μ. C.arr μ ⟹
(map⇩1 (C.cod μ)) ⋅⇩D (F μ ⋆⇩D F.map⇩0 (src⇩C μ))
= (F.map⇩0 (trg⇩C μ) ⋆⇩D F μ) ⋅⇩D map⇩1 (C.dom μ)"
by (metis D.comp_assoc D.lunit'_naturality D.runit_naturality F.preserves_arr
F.preserves_cod F.preserves_dom F.preserves_src F.preserves_trg)
show "⋀f g. ⟦C.ide f; C.ide g; src⇩C g = trg⇩C f⟧ ⟹
(F.map⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[F.map⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋅⇩D 𝗋⇩D[F g] ⋆⇩D F f) ⋅⇩D
D.inv 𝖺⇩D[F g, F.map⇩0 (src⇩C g), F f] ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋅⇩D 𝗋⇩D[F f]) ⋅⇩D
𝖺⇩D[F g, F f, F.map⇩0 (src⇩C f)]
= (𝗅⇩D⇧-⇧1[F (g ⋆⇩C f)] ⋅⇩D 𝗋⇩D[F (g ⋆⇩C f)]) ⋅⇩D (Φ⇩F (g, f) ⋆⇩D F.map⇩0 (src⇩C f))"
proof -
fix f g
assume f: "C.ide f" and g: "C.ide g" and fg: "src⇩C g = trg⇩C f"
have "(F.map⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[F.map⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋅⇩D 𝗋⇩D[F g] ⋆⇩D F f) ⋅⇩D
D.inv 𝖺⇩D[F g, F.map⇩0 (src⇩C g), F f] ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋅⇩D 𝗋⇩D[F f]) ⋅⇩D
𝖺⇩D[F g, F f, F.map⇩0 (src⇩C f)]
= (F.map⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
(𝖺⇩D[F.map⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f)) ⋅⇩D
(𝗋⇩D[F g] ⋆⇩D F f) ⋅⇩D
(D.inv 𝖺⇩D[F g, F.map⇩0 (src⇩C g), F f] ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f])) ⋅⇩D
(F g ⋆⇩D 𝗋⇩D[F f]) ⋅⇩D
𝖺⇩D[F g, F f, F.map⇩0 (src⇩C f)]"
using f g fg D.whisker_right [of "F f"] D.whisker_left [of "F g"] D.comp_assoc
by simp
also have "... = (F.map⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋅⇩D
((𝗋⇩D[F g] ⋆⇩D F f) ⋅⇩D
(𝗋⇩D⇧-⇧1[F g] ⋆⇩D F f)) ⋅⇩D
𝗋⇩D[F g ⋆⇩D F f]"
proof -
have "D.inv 𝖺⇩D[F g, F.map⇩0 (src⇩C g), F f] ⋅⇩D (F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f]) = 𝗋⇩D⇧-⇧1[F g] ⋆⇩D F f"
proof -
have "D.inv 𝖺⇩D[F g, F.map⇩0 (src⇩C g), F f] ⋅⇩D (F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f]) =
D.inv ((F g ⋆⇩D 𝗅⇩D[F f]) ⋅⇩D 𝖺⇩D[F g, F.map⇩0 (src⇩C g), F f])"
using f g fg 1 D.inv_comp by auto
also have "... = D.inv (𝗋⇩D[F g] ⋆⇩D F f)"
using f g fg D.triangle [of "F f" "F g"] by simp
also have "... = 𝗋⇩D⇧-⇧1[F g] ⋆⇩D F f"
using f g fg by simp
finally show ?thesis by blast
qed
moreover have "(F g ⋆⇩D 𝗋⇩D[F f]) ⋅⇩D 𝖺⇩D[F g, F f, F.map⇩0 (src⇩C f)] = 𝗋⇩D[F g ⋆⇩D F f]"
using f g fg D.runit_hcomp(1) by simp
moreover have "𝖺⇩D[F.map⇩0 (trg⇩C g), F g, F f] ⋅⇩D (𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f)
= 𝗅⇩D⇧-⇧1[F g ⋆⇩D F f]"
using f g fg D.lunit_hcomp(4) by simp
ultimately show ?thesis
using D.comp_assoc by simp
qed
also have "... = ((F.map⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝗅⇩D⇧-⇧1[F g ⋆⇩D F f]) ⋅⇩D 𝗋⇩D[F g ⋆⇩D F f]"
proof -
have "((𝗋⇩D[F g] ⋆⇩D F f) ⋅⇩D (𝗋⇩D⇧-⇧1[F g] ⋆⇩D F f)) ⋅⇩D 𝗋⇩D[F g ⋆⇩D F f] = 𝗋⇩D[F g ⋆⇩D F f]"
proof -
have "((𝗋⇩D[F g] ⋆⇩D F f) ⋅⇩D (𝗋⇩D⇧-⇧1[F g] ⋆⇩D F f)) ⋅⇩D 𝗋⇩D[F g ⋆⇩D F f] =
(𝗋⇩D[F g] ⋅⇩D 𝗋⇩D⇧-⇧1[F g] ⋆⇩D F f) ⋅⇩D 𝗋⇩D[F g ⋆⇩D F f]"
using f g fg D.whisker_right by simp
also have "... = (F g ⋆⇩D F f) ⋅⇩D 𝗋⇩D[F g ⋆⇩D F f]"
using f g fg D.comp_arr_inv' by simp
also have "... = 𝗋⇩D[F g ⋆⇩D F f]"
using f g fg D.comp_cod_arr by simp
finally show ?thesis by blast
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝗅⇩D⇧-⇧1[F (g ⋆⇩C f)] ⋅⇩D Φ⇩F (g, f) ⋅⇩D 𝗋⇩D[F g ⋆⇩D F f]"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C F.FF_def
D.lunit'_naturality [of "Φ⇩F (g, f)"] D.comp_assoc
by simp
also have "... = (𝗅⇩D⇧-⇧1[F (g ⋆⇩C f)] ⋅⇩D 𝗋⇩D[F (g ⋆⇩C f)]) ⋅⇩D (Φ⇩F (g, f) ⋆⇩D F.map⇩0 (src⇩C f))"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C F.FF_def
D.runit_naturality [of "Φ⇩F (g, f)"] D.comp_assoc
by simp
finally show "(F.map⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[F.map⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋅⇩D 𝗋⇩D[F g] ⋆⇩D F f) ⋅⇩D
D.inv 𝖺⇩D[F g, F.map⇩0 (src⇩C g), F f] ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋅⇩D 𝗋⇩D[F f]) ⋅⇩D
𝖺⇩D[F g, F f, F.map⇩0 (src⇩C f)]
= (𝗅⇩D⇧-⇧1[F (g ⋆⇩C f)] ⋅⇩D 𝗋⇩D[F (g ⋆⇩C f)]) ⋅⇩D (Φ⇩F (g, f) ⋆⇩D F.map⇩0 (src⇩C f))"
by simp
qed
show "⋀a. C.obj a ⟹
(F.map⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[F.map⇩0 a] ⋅⇩D 𝗅⇩D[F.map⇩0 a] =
map⇩1 a ⋅⇩D (F.unit a ⋆⇩D F.map⇩0 a)"
proof -
fix a
assume a: "C.obj a"
have "(F.map⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[F.map⇩0 a] ⋅⇩D 𝗅⇩D[F.map⇩0 a] =
(F.map⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗅⇩D⇧-⇧1[F.map⇩0 a] ⋅⇩D 𝗋⇩D[F.map⇩0 a]"
using a 1 D.unitor_coincidence by simp
also have "... = ((F.map⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗅⇩D⇧-⇧1[F.map⇩0 a]) ⋅⇩D 𝗋⇩D[F.map⇩0 a]"
using D.comp_assoc by simp
also have "... = 𝗅⇩D⇧-⇧1[F a] ⋅⇩D F.unit a ⋅⇩D 𝗋⇩D[F.map⇩0 a]"
using a 1 D.lunit'_naturality [of "F.unit a"] D.comp_assoc by simp
also have "... = map⇩1 a ⋅⇩D (F.unit a ⋆⇩D F.map⇩0 a)"
using a 1 D.runit_naturality [of "F.unit a"] D.comp_assoc by simp
finally show "(F.map⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[F.map⇩0 a] ⋅⇩D 𝗅⇩D[F.map⇩0 a] =
map⇩1 a ⋅⇩D (F.unit a ⋆⇩D F.map⇩0 a)"
by blast
qed
qed
lemma is_pseudonatural_transformation:
shows "pseudonatural_transformation
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F F Φ⇩F map⇩0 map⇩1"
..
end
subsection "Composite Pseudonatural Transformation"
text ‹
A pseudonatural transformation ‹σ› from ‹F› to ‹G› and a pseudonatural transformation ‹ρ›
from ‹G› to ‹H› can be composed to obtain a pseudonatural transformation ‹τ› from
‹F› to ‹H›. The components at objects are composed via horizontal composition.
Composing the components at 1-cells is straightforward, but is formally complicated by
the need for associativities. The additional complexity leads to somewhat lengthy
proofs of the coherence conditions. This issue only gets worse as we consider additional
constructions on pseudonatural transformations.
›
locale composite_pseudonatural_transformation =
C: bicategory V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C +
D: bicategory V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D +
F: pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F +
G: pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G +
H: pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D H Φ⇩H +
σ: pseudonatural_transformation
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F G Φ⇩G σ⇩0 σ⇩1 +
ρ: pseudonatural_transformation
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G H Φ⇩H ρ⇩0 ρ⇩1
for V⇩C :: "'c comp" (infixr ‹⋅⇩C› 55)
and H⇩C :: "'c comp" (infixr ‹⋆⇩C› 53)
and 𝖺⇩C :: "'c ⇒ 'c ⇒ 'c ⇒ 'c" (‹𝖺⇩C[_, _, _]›)
and 𝗂⇩C :: "'c ⇒ 'c" (‹𝗂⇩C[_]›)
and src⇩C :: "'c ⇒ 'c"
and trg⇩C :: "'c ⇒ 'c"
and V⇩D :: "'d comp" (infixr ‹⋅⇩D› 55)
and H⇩D :: "'d comp" (infixr ‹⋆⇩D› 53)
and 𝖺⇩D :: "'d ⇒ 'd ⇒ 'd ⇒ 'd" (‹𝖺⇩D[_, _, _]›)
and 𝗂⇩D :: "'d ⇒ 'd" (‹𝗂⇩D[_]›)
and src⇩D :: "'d ⇒ 'd"
and trg⇩D :: "'d ⇒ 'd"
and F :: "'c ⇒ 'd"
and Φ⇩F :: "'c * 'c ⇒ 'd"
and G :: "'c ⇒ 'd"
and Φ⇩G :: "'c * 'c ⇒ 'd"
and H :: "'c ⇒ 'd"
and Φ⇩H :: "'c * 'c ⇒ 'd"
and σ⇩0 :: "'c ⇒ 'd"
and σ⇩1 :: "'c ⇒ 'd"
and ρ⇩0 :: "'c ⇒ 'd"
and ρ⇩1 :: "'c ⇒ 'd"
begin
definition map⇩0
where "map⇩0 a = ρ⇩0 a ⋆⇩D σ⇩0 a"
definition map⇩1
where "map⇩1 f = 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C f), σ⇩0 (trg⇩C f), F f] ⋅⇩D
(ρ⇩0 (trg⇩C f) ⋆⇩D σ⇩1 f) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)] ⋅⇩D
(ρ⇩1 f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]"
sublocale pseudonatural_transformation
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F H Φ⇩H map⇩0 map⇩1
proof
show "⋀a. C.obj a ⟹ D.ide (map⇩0 a)"
unfolding map⇩0_def by fastforce
show "⋀a. C.obj a ⟹ «map⇩0 a : src⇩D (F a) →⇩D src⇩D (H a)»"
unfolding map⇩0_def
using ρ.map⇩0_in_hhom σ.map⇩0_in_hhom by blast
show "⋀f. C.ide f ⟹ «map⇩1 f : H f ⋆⇩D map⇩0 (src⇩C f) ⇒⇩D map⇩0 (trg⇩C f) ⋆⇩D F f»"
by (unfold map⇩1_def map⇩0_def, intro D.comp_in_homI) auto
show "⋀f. C.ide f ⟹ D.iso (map⇩1 f)"
unfolding map⇩1_def
using ρ.ide_map⇩0_obj ρ.iso_map⇩1_ide σ.ide_map⇩0_obj σ.iso_map⇩1_ide
by (intro D.isos_compose) auto
show "⋀μ. C.arr μ ⟹ map⇩1 (C.cod μ) ⋅⇩D (H μ ⋆⇩D map⇩0 (src⇩C μ))
= (map⇩0 (trg⇩C μ) ⋆⇩D F μ) ⋅⇩D map⇩1 (C.dom μ)"
proof -
fix μ
assume μ: "C.arr μ"
have "map⇩1 (C.cod μ) ⋅⇩D (H μ ⋆⇩D map⇩0 (src⇩C μ))
= 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C μ), σ⇩0 (trg⇩C μ), F (C.cod μ)] ⋅⇩D
(ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩1 (C.cod μ)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C μ), G (C.cod μ), σ⇩0 (src⇩C μ)] ⋅⇩D
(ρ⇩1 (C.cod μ) ⋆⇩D σ⇩0 (src⇩C μ)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (C.cod μ), ρ⇩0 (src⇩C μ), σ⇩0 (src⇩C μ)] ⋅⇩D
(H μ ⋆⇩D ρ⇩0 (src⇩C μ) ⋆⇩D σ⇩0 (src⇩C μ))"
unfolding map⇩1_def map⇩0_def
using μ D.comp_assoc by simp
also have "... = 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C μ), σ⇩0 (trg⇩C μ), F (C.cod μ)] ⋅⇩D
(ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩1 (C.cod μ)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C μ), G (C.cod μ), σ⇩0 (src⇩C μ)] ⋅⇩D
((ρ⇩1 (C.cod μ) ⋆⇩D σ⇩0 (src⇩C μ)) ⋅⇩D
((H μ ⋆⇩D ρ⇩0 (src⇩C μ)) ⋆⇩D σ⇩0 (src⇩C μ))) ⋅⇩D
𝖺⇩D⇧-⇧1[H (C.dom μ), ρ⇩0 (src⇩C μ), σ⇩0 (src⇩C μ)]"
using μ D.assoc'_naturality [of "H μ" "ρ⇩0 (src⇩C μ)" "σ⇩0 (src⇩C μ)"] D.comp_assoc by simp
also have "... = 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C μ), σ⇩0 (trg⇩C μ), F (C.cod μ)] ⋅⇩D
(ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩1 (C.cod μ)) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C μ), G (C.cod μ), σ⇩0 (src⇩C μ)] ⋅⇩D
((ρ⇩0 (trg⇩C μ) ⋆⇩D G μ) ⋆⇩D σ⇩0 (src⇩C μ))) ⋅⇩D
(ρ⇩1 (C.dom μ) ⋆⇩D σ⇩0 (src⇩C μ)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (C.dom μ), ρ⇩0 (src⇩C μ), σ⇩0 (src⇩C μ)]"
proof -
have "(ρ⇩1 (C.cod μ) ⋆⇩D σ⇩0 (src⇩C μ)) ⋅⇩D ((H μ ⋆⇩D ρ⇩0 (src⇩C μ)) ⋆⇩D σ⇩0 (src⇩C μ)) =
ρ⇩1 (C.cod μ) ⋅⇩D (H μ ⋆⇩D ρ⇩0 (src⇩C μ)) ⋆⇩D σ⇩0 (src⇩C μ)"
using μ D.whisker_right by simp
also have "... = (ρ⇩0 (trg⇩C μ) ⋆⇩D G μ) ⋅⇩D ρ⇩1 (C.dom μ) ⋆⇩D σ⇩0 (src⇩C μ)"
using μ ρ.naturality by simp
also have "... = ((ρ⇩0 (trg⇩C μ) ⋆⇩D G μ) ⋆⇩D σ⇩0 (src⇩C μ)) ⋅⇩D
(ρ⇩1 (C.dom μ) ⋆⇩D σ⇩0 (src⇩C μ))"
using μ D.whisker_right by simp
finally have
"(ρ⇩1 (C.cod μ) ⋆⇩D σ⇩0 (src⇩C μ)) ⋅⇩D ((H μ ⋆⇩D ρ⇩0 (src⇩C μ)) ⋆⇩D σ⇩0 (src⇩C μ)) =
((ρ⇩0 (trg⇩C μ) ⋆⇩D G μ) ⋆⇩D σ⇩0 (src⇩C μ)) ⋅⇩D (ρ⇩1 (C.dom μ) ⋆⇩D σ⇩0 (src⇩C μ))"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C μ), σ⇩0 (trg⇩C μ), F (C.cod μ)] ⋅⇩D
((ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩1 (C.cod μ)) ⋅⇩D
(ρ⇩0 (trg⇩C μ) ⋆⇩D G μ ⋆⇩D σ⇩0 (src⇩C μ))) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C μ), G (C.dom μ), σ⇩0 (src⇩C μ)] ⋅⇩D
(ρ⇩1 (C.dom μ) ⋆⇩D σ⇩0 (src⇩C μ)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (C.dom μ), ρ⇩0 (src⇩C μ), σ⇩0 (src⇩C μ)]"
using μ D.assoc_naturality [of "ρ⇩0 (trg⇩C μ)" "G μ" "σ⇩0 (src⇩C μ)"] D.comp_assoc
by simp
also have "... = (𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C μ), σ⇩0 (trg⇩C μ), F (C.cod μ)] ⋅⇩D
(ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩0 (trg⇩C μ) ⋆⇩D F μ)) ⋅⇩D
(ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩1 (C.dom μ)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C μ), G (C.dom μ), σ⇩0 (src⇩C μ)] ⋅⇩D
(ρ⇩1 (C.dom μ) ⋆⇩D σ⇩0 (src⇩C μ)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (C.dom μ), ρ⇩0 (src⇩C μ), σ⇩0 (src⇩C μ)]"
proof -
have "(ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩1 (C.cod μ)) ⋅⇩D (ρ⇩0 (trg⇩C μ) ⋆⇩D G μ ⋆⇩D σ⇩0 (src⇩C μ)) =
ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩1 (C.cod μ) ⋅⇩D (G μ ⋆⇩D σ⇩0 (src⇩C μ))"
using μ D.whisker_left by simp
also have "... = ρ⇩0 (trg⇩C μ) ⋆⇩D (σ⇩0 (trg⇩C μ) ⋆⇩D F μ) ⋅⇩D σ⇩1 (C.dom μ)"
using μ σ.naturality by simp
also have "... = (ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩0 (trg⇩C μ) ⋆⇩D F μ) ⋅⇩D (ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩1 (C.dom μ))"
using μ D.whisker_left by simp
finally have "(ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩1 (C.cod μ)) ⋅⇩D (ρ⇩0 (trg⇩C μ) ⋆⇩D G μ ⋆⇩D σ⇩0 (src⇩C μ)) =
(ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩0 (trg⇩C μ) ⋆⇩D F μ) ⋅⇩D (ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩1 (C.dom μ))"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩0 (trg⇩C μ)) ⋆⇩D F μ) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C μ), σ⇩0 (trg⇩C μ), F (C.dom μ)] ⋅⇩D
(ρ⇩0 (trg⇩C μ) ⋆⇩D σ⇩1 (C.dom μ)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C μ), G (C.dom μ), σ⇩0 (src⇩C μ)] ⋅⇩D
(ρ⇩1 (C.dom μ) ⋆⇩D σ⇩0 (src⇩C μ)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (C.dom μ), ρ⇩0 (src⇩C μ), σ⇩0 (src⇩C μ)]"
using μ D.assoc'_naturality [of "ρ⇩0 (trg⇩C μ)" "σ⇩0 (trg⇩C μ)" "F μ"] D.comp_assoc
by simp
also have "... = (map⇩0 (trg⇩C μ) ⋆⇩D F μ) ⋅⇩D map⇩1 (C.dom μ)"
unfolding map⇩1_def map⇩0_def
using μ by simp
finally show "map⇩1 (C.cod μ) ⋅⇩D (H μ ⋆⇩D map⇩0 (src⇩C μ)) =
(map⇩0 (trg⇩C μ) ⋆⇩D F μ) ⋅⇩D map⇩1 (C.dom μ)"
by blast
qed
show "⋀a. C.obj a ⟹ (map⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[map⇩0 a] ⋅⇩D 𝗅⇩D[map⇩0 a]
= map⇩1 a ⋅⇩D (H.unit a ⋆⇩D map⇩0 a)"
proof -
fix a
assume a: "C.obj a"
have "map⇩1 a ⋅⇩D (H.unit a ⋆⇩D map⇩0 a)
= 𝖺⇩D⇧-⇧1[ρ⇩0 a, σ⇩0 a, F a] ⋅⇩D
(ρ⇩0 a ⋆⇩D σ⇩1 a) ⋅⇩D
𝖺⇩D[ρ⇩0 a, G a, σ⇩0 a] ⋅⇩D
(ρ⇩1 a ⋆⇩D σ⇩0 a) ⋅⇩D
𝖺⇩D⇧-⇧1[H a, ρ⇩0 a, σ⇩0 a] ⋅⇩D
(H.unit a ⋆⇩D ρ⇩0 a ⋆⇩D σ⇩0 a)"
unfolding map⇩1_def map⇩0_def
using a C.obj_simps D.comp_assoc by simp
also have "... = 𝖺⇩D⇧-⇧1[ρ⇩0 a, σ⇩0 a, F a] ⋅⇩D
(ρ⇩0 a ⋆⇩D σ⇩1 a) ⋅⇩D
𝖺⇩D[ρ⇩0 a, G a, σ⇩0 a] ⋅⇩D
((ρ⇩1 a ⋆⇩D σ⇩0 a) ⋅⇩D
((H.unit a ⋆⇩D ρ⇩0 a) ⋆⇩D σ⇩0 a)) ⋅⇩D
𝖺⇩D⇧-⇧1[H.map⇩0 a, ρ⇩0 a, σ⇩0 a]"
using a C.obj_simps D.assoc'_naturality [of "H.unit a" "ρ⇩0 a" "σ⇩0 a"] D.comp_assoc
by auto
also have "... = 𝖺⇩D⇧-⇧1[ρ⇩0 a, σ⇩0 a, F a] ⋅⇩D
(ρ⇩0 a ⋆⇩D σ⇩1 a) ⋅⇩D
(𝖺⇩D[ρ⇩0 a, G a, σ⇩0 a] ⋅⇩D
((ρ⇩0 a ⋆⇩D G.unit a) ⋆⇩D σ⇩0 a)) ⋅⇩D
(𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋅⇩D 𝗅⇩D[ρ⇩0 a] ⋆⇩D σ⇩0 a) ⋅⇩D
𝖺⇩D⇧-⇧1[H.map⇩0 a, ρ⇩0 a, σ⇩0 a]"
proof -
have "(ρ⇩1 a ⋆⇩D σ⇩0 a) ⋅⇩D ((H.unit a ⋆⇩D ρ⇩0 a) ⋆⇩D σ⇩0 a)
= ρ⇩1 a ⋅⇩D (H.unit a ⋆⇩D ρ⇩0 a) ⋆⇩D σ⇩0 a"
using a C.obj_simps D.whisker_right
by (metis C.objE D.hcomp_simps(4) D.hseqI' D.ideD(1) D.ideD(3) D.seqI
H.unit_simps(1) H.unit_simps(2) H.unit_simps(5)
ρ.ide_map⇩0_obj ρ.map⇩0_simps(3) ρ.map⇩1_simps(1) ρ.map⇩1_simps(4) σ.ide_map⇩0_obj)
also have "... = (ρ⇩0 a ⋆⇩D G.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋅⇩D 𝗅⇩D[ρ⇩0 a] ⋆⇩D σ⇩0 a"
using a C.obj_simps ρ.respects_unit D.comp_assoc by simp
also have "... = ((ρ⇩0 a ⋆⇩D G.unit a) ⋆⇩D σ⇩0 a) ⋅⇩D (𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋅⇩D 𝗅⇩D[ρ⇩0 a] ⋆⇩D σ⇩0 a)"
using a C.obj_simps D.whisker_right
by (metis C.objE D.hcomp_simps(4) D.hseqI' D.ideD(1) D.ideD(3) D.seqI D.trg_cod
H.unit_simps(1-2,5) H.𝗂_simps(3,5) ρ.ide_map⇩0_obj ρ.map⇩0_simps(3)
ρ.map⇩1_simps(1,4) ρ.respects_unit σ.ide_map⇩0_obj)
finally have "(ρ⇩1 a ⋆⇩D σ⇩0 a) ⋅⇩D ((H.unit a ⋆⇩D ρ⇩0 a) ⋆⇩D σ⇩0 a) =
((ρ⇩0 a ⋆⇩D G.unit a) ⋆⇩D σ⇩0 a) ⋅⇩D (𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋅⇩D 𝗅⇩D[ρ⇩0 a] ⋆⇩D σ⇩0 a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝖺⇩D⇧-⇧1[ρ⇩0 a, σ⇩0 a, F a] ⋅⇩D
((ρ⇩0 a ⋆⇩D σ⇩1 a) ⋅⇩D
(ρ⇩0 a ⋆⇩D G.unit a ⋆⇩D σ⇩0 a)) ⋅⇩D
𝖺⇩D[ρ⇩0 a, G.map⇩0 a, σ⇩0 a] ⋅⇩D
(𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋅⇩D 𝗅⇩D[ρ⇩0 a] ⋆⇩D σ⇩0 a) ⋅⇩D
𝖺⇩D⇧-⇧1[H.map⇩0 a, ρ⇩0 a, σ⇩0 a]"
using a D.assoc_naturality [of "ρ⇩0 a" "G.unit a" "σ⇩0 a"] D.comp_assoc by auto
also have "... = (𝖺⇩D⇧-⇧1[ρ⇩0 a, σ⇩0 a, F a] ⋅⇩D
(ρ⇩0 a ⋆⇩D σ⇩0 a ⋆⇩D F.unit a)) ⋅⇩D
(ρ⇩0 a ⋆⇩D 𝗋⇩D⇧-⇧1[σ⇩0 a] ⋅⇩D 𝗅⇩D[σ⇩0 a]) ⋅⇩D
𝖺⇩D[ρ⇩0 a, G.map⇩0 a, σ⇩0 a] ⋅⇩D
(𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋅⇩D 𝗅⇩D[ρ⇩0 a] ⋆⇩D σ⇩0 a) ⋅⇩D
𝖺⇩D⇧-⇧1[H.map⇩0 a, ρ⇩0 a, σ⇩0 a]"
proof -
have "(ρ⇩0 a ⋆⇩D σ⇩1 a) ⋅⇩D (ρ⇩0 a ⋆⇩D G.unit a ⋆⇩D σ⇩0 a)
= ρ⇩0 a ⋆⇩D σ⇩1 a ⋅⇩D (G.unit a ⋆⇩D σ⇩0 a)"
using a D.whisker_left [of "ρ⇩0 a" "σ⇩1 a" "G.unit a ⋆⇩D σ⇩0 a"] by force
also have "... = ρ⇩0 a ⋆⇩D (σ⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[σ⇩0 a] ⋅⇩D 𝗅⇩D[σ⇩0 a]"
using a σ.respects_unit by simp
also have "... = (ρ⇩0 a ⋆⇩D σ⇩0 a ⋆⇩D F.unit a) ⋅⇩D (ρ⇩0 a ⋆⇩D 𝗋⇩D⇧-⇧1[σ⇩0 a] ⋅⇩D 𝗅⇩D[σ⇩0 a])"
using a D.whisker_left C.obj_simps by fastforce
finally have "(ρ⇩0 a ⋆⇩D σ⇩1 a) ⋅⇩D (ρ⇩0 a ⋆⇩D G.unit a ⋆⇩D σ⇩0 a) =
(ρ⇩0 a ⋆⇩D σ⇩0 a ⋆⇩D F.unit a) ⋅⇩D (ρ⇩0 a ⋆⇩D 𝗋⇩D⇧-⇧1[σ⇩0 a] ⋅⇩D 𝗅⇩D[σ⇩0 a])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((ρ⇩0 a ⋆⇩D σ⇩0 a) ⋆⇩D F.unit a) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 a, σ⇩0 a, F.map⇩0 a] ⋅⇩D
(ρ⇩0 a ⋆⇩D 𝗋⇩D⇧-⇧1[σ⇩0 a] ⋅⇩D 𝗅⇩D[σ⇩0 a]) ⋅⇩D
𝖺⇩D[ρ⇩0 a, G.map⇩0 a, σ⇩0 a] ⋅⇩D
(𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋅⇩D 𝗅⇩D[ρ⇩0 a] ⋆⇩D σ⇩0 a) ⋅⇩D
𝖺⇩D⇧-⇧1[H.map⇩0 a, ρ⇩0 a, σ⇩0 a]"
using a D.assoc'_naturality [of "ρ⇩0 a" "σ⇩0 a" "F.unit a"] D.comp_assoc
by fastforce
also have "... = ((ρ⇩0 a ⋆⇩D σ⇩0 a) ⋆⇩D F.unit a) ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 a, σ⇩0 a, F.map⇩0 a] ⋅⇩D
(ρ⇩0 a ⋆⇩D 𝗋⇩D⇧-⇧1[σ⇩0 a])) ⋅⇩D
(ρ⇩0 a ⋆⇩D 𝗅⇩D[σ⇩0 a]) ⋅⇩D
𝖺⇩D[ρ⇩0 a, G.map⇩0 a, σ⇩0 a] ⋅⇩D
(𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋆⇩D σ⇩0 a) ⋅⇩D
(𝗅⇩D[ρ⇩0 a] ⋆⇩D σ⇩0 a) ⋅⇩D
𝖺⇩D⇧-⇧1[H.map⇩0 a, ρ⇩0 a, σ⇩0 a]"
using a D.whisker_left D.whisker_right D.comp_assoc by simp
also have "... = ((ρ⇩0 a ⋆⇩D σ⇩0 a) ⋆⇩D F.unit a) ⋅⇩D
𝗋⇩D⇧-⇧1[ρ⇩0 a ⋆⇩D σ⇩0 a] ⋅⇩D
(𝗋⇩D[ρ⇩0 a] ⋆⇩D σ⇩0 a) ⋅⇩D
((𝖺⇩D⇧-⇧1[ρ⇩0 a, G.map⇩0 a, σ⇩0 a] ⋅⇩D
𝖺⇩D[ρ⇩0 a, G.map⇩0 a, σ⇩0 a]) ⋅⇩D
(𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋆⇩D σ⇩0 a)) ⋅⇩D
𝗅⇩D[ρ⇩0 a ⋆⇩D σ⇩0 a]"
using a D.lunit_hcomp(3) [of "ρ⇩0 a" "σ⇩0 a"] D.runit_hcomp(2) [of "ρ⇩0 a" "σ⇩0 a"]
D.triangle' [of "ρ⇩0 a" "σ⇩0 a"] D.comp_assoc
by auto
also have "... = ((ρ⇩0 a ⋆⇩D σ⇩0 a) ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[ρ⇩0 a ⋆⇩D σ⇩0 a] ⋅⇩D 𝗅⇩D[ρ⇩0 a ⋆⇩D σ⇩0 a]"
proof -
have "𝖺⇩D⇧-⇧1[ρ⇩0 a, G.map⇩0 a, σ⇩0 a] ⋅⇩D 𝖺⇩D[ρ⇩0 a, G.map⇩0 a, σ⇩0 a]
= (ρ⇩0 a ⋆⇩D G.map⇩0 a) ⋆⇩D σ⇩0 a"
using a D.comp_inv_arr'
by (metis C.obj_def' D.comp_assoc_assoc'(2) G.map⇩0_def G.map⇩0_simps(1)
G.preserves_trg G.weak_arrow_of_homs_axioms ρ.ide_map⇩0_obj ρ.map⇩0_simps(2)
σ.ide_map⇩0_obj σ.map⇩0_simps(3) horizontal_homs.objE weak_arrow_of_homs_def)
moreover have "((ρ⇩0 a ⋆⇩D G.map⇩0 a) ⋆⇩D σ⇩0 a) ⋅⇩D (𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋆⇩D σ⇩0 a)
= (𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋆⇩D σ⇩0 a)"
using a D.comp_cod_arr D.whisker_right
by (metis D.runit'_simps(1) D.runit'_simps(5) G.map⇩0_def ρ.ide_map⇩0_obj
ρ.map⇩0_simps(2) σ.ide_map⇩0_obj)
moreover have "(𝗋⇩D[ρ⇩0 a] ⋆⇩D σ⇩0 a) ⋅⇩D (𝗋⇩D⇧-⇧1[ρ⇩0 a] ⋆⇩D σ⇩0 a) = ρ⇩0 a ⋆⇩D σ⇩0 a"
using a D.whisker_right D.comp_arr_inv' D.R.as_nat_iso.components_are_iso
by (metis D.ideD(1) D.iso_runit D.runit_simps(5) ρ.ide_map⇩0_obj σ.ide_map⇩0_obj)
moreover have "(ρ⇩0 a ⋆⇩D σ⇩0 a) ⋅⇩D 𝗅⇩D[ρ⇩0 a ⋆⇩D σ⇩0 a] = 𝗅⇩D[ρ⇩0 a ⋆⇩D σ⇩0 a]"
using a D.comp_cod_arr ‹⋀a. C.obj a ⟹ D.ide (map⇩0 a)› map⇩0_def by auto
ultimately show ?thesis
using D.comp_assoc by metis
qed
also have "... = (map⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[map⇩0 a] ⋅⇩D 𝗅⇩D[map⇩0 a]"
unfolding map⇩0_def by simp
finally show "(map⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[map⇩0 a] ⋅⇩D 𝗅⇩D[map⇩0 a]
= map⇩1 a ⋅⇩D (H.unit a ⋆⇩D map⇩0 a)"
by simp
qed
show "⋀f g. ⟦C.ide f; C.ide g; src⇩C g = trg⇩C f⟧ ⟹
(map⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[map⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(map⇩1 g ⋆⇩D F f) ⋅⇩D
D.inv 𝖺⇩D[H g, map⇩0 (src⇩C g), F f] ⋅⇩D
(H g ⋆⇩D map⇩1 f) ⋅⇩D 𝖺⇩D[H g, H f, map⇩0 (src⇩C f)]
= map⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩H (g, f) ⋆⇩D map⇩0 (src⇩C f))"
proof -
fix f g
assume f: "C.ide f" and g: "C.ide g" and fg: "src⇩C g = trg⇩C f"
have "(map⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[map⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(map⇩1 g ⋆⇩D F f) ⋅⇩D
D.inv 𝖺⇩D[H g, map⇩0 (src⇩C g), F f] ⋅⇩D
(H g ⋆⇩D map⇩1 f) ⋅⇩D 𝖺⇩D[H g, H f, map⇩0 (src⇩C f)]
= ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋅⇩D
(ρ⇩1 g ⋆⇩D σ⇩0 (src⇩C g)) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g)]
⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g) ⋆⇩D σ⇩0 (src⇩C g), F f] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C f), σ⇩0 (trg⇩C f), F f] ⋅⇩D
(ρ⇩0 (trg⇩C f) ⋆⇩D σ⇩1 f) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)] ⋅⇩D
(ρ⇩1 f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"
unfolding map⇩0_def map⇩1_def
using f g fg by simp
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
((ρ⇩1 g ⋆⇩D σ⇩0 (src⇩C g)) ⋆⇩D F f) ⋅⇩D
((𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g) ⋆⇩D σ⇩0 (src⇩C g), F f]) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C f), σ⇩0 (trg⇩C f), F f]) ⋅⇩D
(H g ⋆⇩D ρ⇩0 (trg⇩C f) ⋆⇩D σ⇩1 f) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)]) ⋅⇩D
(H g ⋆⇩D ρ⇩1 f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"
using f g fg D.whisker_left D.whisker_right D.comp_assoc by fastforce
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
(((ρ⇩1 g ⋆⇩D σ⇩0 (src⇩C g)) ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[H g ⋆⇩D ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f]) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g) ⋆⇩D F f] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f]) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C f), σ⇩0 (trg⇩C f), F f]) ⋅⇩D
(H g ⋆⇩D ρ⇩0 (trg⇩C f) ⋆⇩D σ⇩1 f) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)]) ⋅⇩D
(H g ⋆⇩D ρ⇩1 f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"
using f g fg D.pentagon' D.comp_assoc
D.invert_side_of_triangle(2)
[of "𝖺⇩D⇧-⇧1[H g ⋆⇩D ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f] ⋅⇩D
𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g) ⋆⇩D F f]"
"(𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g) ⋆⇩D σ⇩0 (src⇩C g), F f]"
"H g ⋆⇩D 𝖺⇩D⇧-⇧1[ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f]"]
by force
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f] ⋅⇩D
(ρ⇩1 g ⋆⇩D σ⇩0 (src⇩C g) ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g) ⋆⇩D F f] ⋅⇩D
(((H g ⋆⇩D 𝖺⇩D[ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f]) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C f), σ⇩0 (trg⇩C f), F f])) ⋅⇩D
(H g ⋆⇩D ρ⇩0 (trg⇩C f) ⋆⇩D σ⇩1 f)) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)]) ⋅⇩D
(H g ⋆⇩D ρ⇩1 f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"
proof -
have "((ρ⇩1 g ⋆⇩D σ⇩0 (src⇩C g)) ⋆⇩D F f) ⋅⇩D 𝖺⇩D⇧-⇧1[H g ⋆⇩D ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f]
= 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f] ⋅⇩D (ρ⇩1 g ⋆⇩D σ⇩0 (src⇩C g) ⋆⇩D F f)"
using f g fg D.assoc'_naturality [of "ρ⇩1 g" "σ⇩0 (src⇩C g)" "F f"] by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f] ⋅⇩D
(ρ⇩1 g ⋆⇩D σ⇩0 (src⇩C g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g) ⋆⇩D F f] ⋅⇩D
(H g ⋆⇩D ρ⇩0 (trg⇩C f) ⋆⇩D σ⇩1 f)) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)]) ⋅⇩D
(H g ⋆⇩D ρ⇩1 f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"
proof -
have "((H g ⋆⇩D 𝖺⇩D[ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f]) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C f), σ⇩0 (trg⇩C f), F f])) ⋅⇩D
(H g ⋆⇩D ρ⇩0 (trg⇩C f) ⋆⇩D σ⇩1 f)
= H g ⋆⇩D ρ⇩0 (trg⇩C f) ⋆⇩D σ⇩1 f"
proof -
have "(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f]) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f])
= H g ⋆⇩D ρ⇩0 (src⇩C g) ⋆⇩D σ⇩0 (src⇩C g) ⋆⇩D F f"
proof -
have "(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f]) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f])
= H g ⋆⇩D 𝖺⇩D[ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f] ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (src⇩C g), σ⇩0 (src⇩C g), F f]"
using f g fg D.whisker_left by simp
also have "... = H g ⋆⇩D ρ⇩0 (src⇩C g) ⋆⇩D σ⇩0 (src⇩C g) ⋆⇩D F f"
using f g fg D.comp_arr_inv' by simp
finally show ?thesis by simp
qed
moreover have "(H g ⋆⇩D ρ⇩0 (src⇩C g) ⋆⇩D σ⇩0 (src⇩C g) ⋆⇩D F f) ⋅⇩D
(H g ⋆⇩D ρ⇩0 (trg⇩C f) ⋆⇩D σ⇩1 f)
= (H g ⋆⇩D ρ⇩0 (trg⇩C f) ⋆⇩D σ⇩1 f)"
using f g fg D.comp_cod_arr by simp
ultimately show ?thesis
using fg by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f] ⋅⇩D
((ρ⇩1 g ⋆⇩D σ⇩0 (src⇩C g) ⋆⇩D F f) ⋅⇩D
((H g ⋆⇩D ρ⇩0 (trg⇩C f)) ⋆⇩D σ⇩1 f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)]) ⋅⇩D
(H g ⋆⇩D ρ⇩1 f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"
using f g fg D.assoc'_naturality [of "H g" "ρ⇩0 (src⇩C g)" "σ⇩1 f"] D.comp_assoc by simp
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f] ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D G g) ⋆⇩D σ⇩1 f) ⋅⇩D
(ρ⇩1 g ⋆⇩D G f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)])) ⋅⇩D
(H g ⋆⇩D ρ⇩1 f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"
proof -
have "(ρ⇩1 g ⋆⇩D σ⇩0 (src⇩C g) ⋆⇩D F f) ⋅⇩D ((H g ⋆⇩D ρ⇩0 (trg⇩C f)) ⋆⇩D σ⇩1 f) =
((ρ⇩0 (trg⇩C g) ⋆⇩D G g) ⋆⇩D σ⇩1 f) ⋅⇩D (ρ⇩1 g ⋆⇩D G f ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg D.interchange D.comp_arr_dom D.comp_cod_arr
by (metis C.ideD(1) ρ.map⇩1_simps(1,5) ρ.naturality σ.map⇩1_simps(1,4)
σ.naturality C.ideD(2,3))
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f] ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D G g) ⋆⇩D σ⇩1 f) ⋅⇩D
(ρ⇩1 g ⋆⇩D G f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)])) ⋅⇩D
𝖺⇩D[H g, ρ⇩0 (trg⇩C f) ⋆⇩D G f, σ⇩0 (src⇩C f)]) ⋅⇩D
((H g ⋆⇩D ρ⇩1 f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, H f ⋆⇩D ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"
using f g fg D.comp_assoc D.hcomp_reassoc(2) by simp
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f] ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D G g) ⋆⇩D σ⇩1 f) ⋅⇩D
((ρ⇩1 g ⋆⇩D G f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D[H g ⋆⇩D ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)]) ⋅⇩D
(𝖺⇩D⇧-⇧1[H g, ρ⇩0 (trg⇩C f), G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((H g ⋆⇩D ρ⇩1 f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, H f ⋆⇩D ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"
proof -
have "(𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)])) ⋅⇩D
𝖺⇩D[H g, ρ⇩0 (trg⇩C f) ⋆⇩D G f, σ⇩0 (src⇩C f)]
= 𝖺⇩D[H g ⋆⇩D ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D⇧-⇧1[H g, ρ⇩0 (trg⇩C f), G f] ⋆⇩D σ⇩0 (src⇩C f))"
proof -
have "((H g ⋆⇩D 𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, ρ⇩0 (trg⇩C f) ⋆⇩D G f, σ⇩0 (src⇩C f)]) ⋅⇩D
(𝖺⇩D[H g, ρ⇩0 (trg⇩C f), G f] ⋆⇩D σ⇩0 (src⇩C f))
= 𝖺⇩D[H g, ρ⇩0 (trg⇩C f), G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
𝖺⇩D[H g ⋆⇩D ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)]"
using f g fg D.pentagon D.comp_assoc by simp
moreover have "D.seq 𝖺⇩D[H g, ρ⇩0 (trg⇩C f), G f ⋆⇩D σ⇩0 (src⇩C f)]
𝖺⇩D[H g ⋆⇩D ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)]"
using f g fg
by (intro D.seqI) auto
ultimately show ?thesis
using f g fg D.comp_assoc
D.invert_opposite_sides_of_square
[of "𝖺⇩D[H g, ρ⇩0 (trg⇩C f), G f ⋆⇩D σ⇩0 (src⇩C f)]"
"𝖺⇩D[H g ⋆⇩D ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)]"
"(H g ⋆⇩D 𝖺⇩D[ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, ρ⇩0 (trg⇩C f) ⋆⇩D G f, σ⇩0 (src⇩C f)]"
"𝖺⇩D[H g, ρ⇩0 (trg⇩C f), G f] ⋆⇩D σ⇩0 (src⇩C f)"]
by fastforce
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f] ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D G g) ⋆⇩D σ⇩1 f) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D
(((ρ⇩1 g ⋆⇩D G f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(𝖺⇩D⇧-⇧1[H g, ρ⇩0 (trg⇩C f), G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((H g ⋆⇩D ρ⇩1 f) ⋆⇩D σ⇩0 (src⇩C f))) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, H f ⋆⇩D ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"
proof -
have "(ρ⇩1 g ⋆⇩D G f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D 𝖺⇩D[H g ⋆⇩D ρ⇩0 (trg⇩C f), G f, σ⇩0 (src⇩C f)] =
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D ((ρ⇩1 g ⋆⇩D G f) ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg D.assoc_naturality [of "ρ⇩1 g" "G f" "σ⇩0 (src⇩C f)"] by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f] ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D G g) ⋆⇩D σ⇩1 f) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f)) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, H f ⋆⇩D ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)])"
proof -
have "((ρ⇩1 g ⋆⇩D G f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(𝖺⇩D⇧-⇧1[H g, ρ⇩0 (trg⇩C f), G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((H g ⋆⇩D ρ⇩1 f) ⋆⇩D σ⇩0 (src⇩C f)) =
(ρ⇩1 g ⋆⇩D G f) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, ρ⇩0 (trg⇩C f), G f] ⋅⇩D (H g ⋆⇩D ρ⇩1 f) ⋆⇩D σ⇩0 (src⇩C f)"
using f g fg D.whisker_right by simp
also have "... = 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋅⇩D (ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋅⇩D
ρ⇩1 (g ⋆⇩C f) ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f)) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)]
⋆⇩D σ⇩0 (src⇩C f)"
proof -
have "((ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f)) ⋅⇩D 𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f] ⋅⇩D
((ρ⇩1 g ⋆⇩D G f) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), G f] ⋅⇩D (H g ⋆⇩D ρ⇩1 f))) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f)]
= ρ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f))"
using f g fg ρ.respects_hcomp D.comp_assoc by simp
moreover have "D.seq (ρ⇩1 (g ⋆⇩C f)) (Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f))"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C by auto
ultimately
have "(ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f)) ⋅⇩D 𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f] ⋅⇩D
((ρ⇩1 g ⋆⇩D G f) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), G f] ⋅⇩D (H g ⋆⇩D ρ⇩1 f))
= (ρ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f))) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)]"
using f g fg D.invert_side_of_triangle(2) by simp
moreover have "D.seq (ρ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f)))
𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)]"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C H.FF_def by auto
ultimately
have "𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f] ⋅⇩D
((ρ⇩1 g ⋆⇩D G f) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), G f] ⋅⇩D (H g ⋆⇩D ρ⇩1 f))
= (ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f))) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)]"
using f g fg
D.invert_side_of_triangle(1)
[of "(ρ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f))) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)]"
"ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f)"
"𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f] ⋅⇩D ((ρ⇩1 g ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), G f] ⋅⇩D (H g ⋆⇩D ρ⇩1 f))"]
by simp
hence "(ρ⇩1 g ⋆⇩D G f) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), G f] ⋅⇩D (H g ⋆⇩D ρ⇩1 f)
= 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋅⇩D (ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f))) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)]"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C H.FF_def
D.invert_side_of_triangle(1)
by simp
hence "(ρ⇩1 g ⋆⇩D G f) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, ρ⇩0 (src⇩C g), G f] ⋅⇩D (H g ⋆⇩D ρ⇩1 f)
= 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋅⇩D (ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋅⇩D
ρ⇩1 (g ⋆⇩C f) ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f)) ⋅⇩D 𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)]"
using D.comp_assoc by simp
thus ?thesis
using fg by simp
qed
also have "... = (𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f)) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)] ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg D.whisker_right C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C
H.FF_def G.FF_def
by force
finally have "((ρ⇩1 g ⋆⇩D G f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(𝖺⇩D⇧-⇧1[H g, ρ⇩0 (trg⇩C f), G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((H g ⋆⇩D ρ⇩1 f) ⋆⇩D σ⇩0 (src⇩C f))
= (𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f)) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)] ⋆⇩D σ⇩0 (src⇩C f))"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f] ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D G g) ⋆⇩D σ⇩1 f) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f)) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H g ⋆⇩D H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]"
proof -
have "((𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, H f ⋆⇩D ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)])) ⋅⇩D
𝖺⇩D[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]
= 𝖺⇩D⇧-⇧1[H g ⋆⇩D H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]"
proof -
have "(𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, H f ⋆⇩D ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)])
= 𝖺⇩D⇧-⇧1[H g ⋆⇩D H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"
using f g fg D.pentagon' D.comp_assoc by simp
moreover have "D.seq (𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)] ⋆⇩D σ⇩0 (src⇩C f))
(𝖺⇩D⇧-⇧1[H g, H f ⋆⇩D ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]))"
using f g fg by auto
ultimately show ?thesis
using f g fg D.comp_assoc
D.invert_side_of_triangle(2)
[of "(𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f)] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H g, H f ⋆⇩D ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(H g ⋆⇩D 𝖺⇩D⇧-⇧1[H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)])"
"𝖺⇩D⇧-⇧1[H g ⋆⇩D H f, ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)]"
"𝖺⇩D⇧-⇧1[H g, H f, ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f)]"]
by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g) ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f] ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D G g) ⋆⇩D σ⇩1 f) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (g ⋆⇩C f), ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg D.assoc'_naturality [of "Φ⇩H (g, f)" "ρ⇩0 (src⇩C f)" "σ⇩0 (src⇩C f)"]
by fastforce
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g) ⋆⇩D F g, F f] ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g ⋆⇩D F f) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g ⋆⇩D σ⇩0 (src⇩C g), F f] ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f]) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D G g) ⋆⇩D σ⇩1 f) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (g ⋆⇩C f), ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg D.hcomp_reassoc(1) D.comp_assoc by simp
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g) ⋆⇩D F g, F f] ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g ⋆⇩D F f) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[G g, σ⇩0 (src⇩C g), F f]) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g) ⋆⇩D F f] ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D G g) ⋆⇩D σ⇩1 f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (g ⋆⇩C f), ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg D.comp_assoc D.pentagon
D.invert_opposite_sides_of_square
[of "ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D[G g, σ⇩0 (src⇩C g), F f]"
"𝖺⇩D[ρ⇩0 (trg⇩C g), G g ⋆⇩D σ⇩0 (src⇩C g), F f] ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g)] ⋆⇩D F f)"
"𝖺⇩D[ρ⇩0 (trg⇩C g), G g, σ⇩0 (src⇩C g) ⋆⇩D F f]"
"𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, σ⇩0 (src⇩C g), F f]"]
by simp
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g) ⋆⇩D F g, F f] ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g ⋆⇩D F f) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[G g, σ⇩0 (src⇩C g), F f]) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D G g ⋆⇩D σ⇩1 f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (g ⋆⇩C f), ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg D.assoc_naturality [of "ρ⇩0 (trg⇩C g)" "G g" "σ⇩1 f"] D.comp_assoc by simp
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g) ⋆⇩D F g, F f] ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[σ⇩0 (trg⇩C g), F g, F f])) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩F (g, f))) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 (g ⋆⇩C f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (g ⋆⇩C f), ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f))"
proof -
have "(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g ⋆⇩D F f) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[G g, σ⇩0 (src⇩C g), F f]) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D G g ⋆⇩D σ⇩1 f)
= ρ⇩0 (trg⇩C g) ⋆⇩D (σ⇩1 g ⋆⇩D F f) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, σ⇩0 (src⇩C g), F f] ⋅⇩D (G g ⋆⇩D σ⇩1 f)"
using f g fg D.whisker_left by simp
also have "... = ρ⇩0 (trg⇩C g) ⋆⇩D
𝖺⇩D⇧-⇧1[σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(σ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩F (g, f))) ⋅⇩D
σ⇩1 (g ⋆⇩C f) ⋅⇩D
(Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)]"
proof -
have "((σ⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(σ⇩1 g ⋆⇩D F f) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, σ⇩0 (src⇩C g), F f] ⋅⇩D (G g ⋆⇩D σ⇩1 f)) ⋅⇩D
𝖺⇩D[G g, G f, σ⇩0 (src⇩C f)]
= σ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg σ.respects_hcomp D.comp_assoc by simp
hence "(σ⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(σ⇩1 g ⋆⇩D F f) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, σ⇩0 (src⇩C g), F f] ⋅⇩D (G g ⋆⇩D σ⇩1 f)
= (σ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f))) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)]"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C D.invert_side_of_triangle(2)
by simp
hence "𝖺⇩D[σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(σ⇩1 g ⋆⇩D F f) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, σ⇩0 (src⇩C g), F f] ⋅⇩D (G g ⋆⇩D σ⇩1 f)
= (σ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩F (g, f))) ⋅⇩D
(σ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f))) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)]"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C G.FF_def
D.invert_side_of_triangle(1)
[of "(σ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f))) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)]"
"σ⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)"
"𝖺⇩D[σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D (σ⇩1 g ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[G g, σ⇩0 (src⇩C g), F f] ⋅⇩D (G g ⋆⇩D σ⇩1 f)"]
by simp
hence "(σ⇩1 g ⋆⇩D F f) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, σ⇩0 (src⇩C g), F f] ⋅⇩D (G g ⋆⇩D σ⇩1 f)
= 𝖺⇩D⇧-⇧1[σ⇩0 (trg⇩C g), F g, F f] ⋅⇩D (σ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩F (g, f))) ⋅⇩D
(σ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f))) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)]"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C G.FF_def F.FF_def
D.invert_side_of_triangle(1)
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[σ⇩0 (trg⇩C g), F g, F f]) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩F (g, f))) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 (g ⋆⇩C f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)])"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C F.FF_def G.FF_def
D.whisker_left
by force
finally have "(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 g ⋆⇩D F f) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[G g, σ⇩0 (src⇩C g), F f]) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D G g ⋆⇩D σ⇩1 f)
= (ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[σ⇩0 (trg⇩C g), F g, F f]) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩F (g, f))) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 (g ⋆⇩C f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g ⋆⇩D F f] ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩F (g, f)))) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 (g ⋆⇩C f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (g ⋆⇩C f), ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg D.pentagon' D.comp_assoc
D.invert_side_of_triangle(1)
[of "(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g] ⋆⇩D F f) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g) ⋆⇩D F g, F f] ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[σ⇩0 (trg⇩C g), F g, F f])"
"𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g), F g, F f]"
"𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F g ⋆⇩D F f]" ]
by simp
also have "... = ((((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D D.inv (Φ⇩F (g, f)))) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F (g ⋆⇩C f)]) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 (g ⋆⇩C f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (g ⋆⇩C f), ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg D.assoc'_naturality [of "ρ⇩0 (trg⇩C g)" "σ⇩0 (trg⇩C g)" "D.inv (Φ⇩F (g, f))"]
D.comp_assoc
by simp
also have "... = 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F (g ⋆⇩C f)] ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 (g ⋆⇩C f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f))) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (g ⋆⇩C f), ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f))"
proof -
have "(((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D D.inv (Φ⇩F (g, f)))) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F (g ⋆⇩C f)]
= 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F (g ⋆⇩C f)]"
proof -
have "((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D D.inv (Φ⇩F (g, f)))
= (ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f) ⋅⇩D D.inv (Φ⇩F (g, f))"
using f g fg D.whisker_left C.VV.arr_char⇩S⇩b⇩C by simp
also have "... = (ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D F (g ⋆⇩C f)"
using f g fg D.comp_arr_inv' F.cmp_components_are_iso by simp
finally have "((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D D.inv (Φ⇩F (g, f)))
= (ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D F (g ⋆⇩C f)"
by blast
moreover have "((ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩0 (trg⇩C g)) ⋆⇩D F (g ⋆⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F (g ⋆⇩C f)]
= 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F (g ⋆⇩C f)]"
using f g fg D.comp_cod_arr by simp
ultimately show ?thesis by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F (g ⋆⇩C f)] ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 (g ⋆⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g), G g ⋆⇩D G f, σ⇩0 (src⇩C f)]) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (g ⋆⇩C f), ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg D.pentagon D.comp_assoc
D.invert_side_of_triangle(1)
[of "𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)]"
"ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D[G g, G f, σ⇩0 (src⇩C f)]"
"𝖺⇩D[ρ⇩0 (trg⇩C g), G g ⋆⇩D G f, σ⇩0 (src⇩C f)] ⋅⇩D
(𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f))"]
D.invert_side_of_triangle(2)
[of "(ρ⇩0 (trg⇩C g) ⋆⇩D 𝖺⇩D⇧-⇧1[G g, G f, σ⇩0 (src⇩C f)]) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f ⋆⇩D σ⇩0 (src⇩C f)] ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g) ⋆⇩D G g, G f, σ⇩0 (src⇩C f)]"
"𝖺⇩D[ρ⇩0 (trg⇩C g), G g ⋆⇩D G f, σ⇩0 (src⇩C f)]"
"𝖺⇩D[ρ⇩0 (trg⇩C g), G g, G f] ⋆⇩D σ⇩0 (src⇩C f)"]
by simp
also have "... = 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F (g ⋆⇩C f)] ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 (g ⋆⇩C f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g), G (g ⋆⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
((((ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f)) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f))) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f))) ⋅⇩D
𝖺⇩D⇧-⇧1[H (g ⋆⇩C f), ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f))"
proof -
have "(ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g), G g ⋆⇩D G f, σ⇩0 (src⇩C f)]
= 𝖺⇩D[ρ⇩0 (trg⇩C g), G (g ⋆⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f)) ⋆⇩D σ⇩0 (src⇩C f))"
using f g fg D.assoc_naturality [of "ρ⇩0 (trg⇩C g)" "Φ⇩G (g, f)" "σ⇩0 (src⇩C f)"]
by fastforce
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝖺⇩D⇧-⇧1[ρ⇩0 (trg⇩C g), σ⇩0 (trg⇩C g), F (g ⋆⇩C f)] ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D σ⇩1 (g ⋆⇩C f)) ⋅⇩D
𝖺⇩D[ρ⇩0 (trg⇩C g), G (g ⋆⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (g ⋆⇩C f), ρ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(Φ⇩H (g, f) ⋆⇩D ρ⇩0 (src⇩C f) ⋆⇩D σ⇩0 (src⇩C f))"
proof -
have "(((ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f)) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f))) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f))
= ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)"
proof -
have "((ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f)) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f))
= (ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
(ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f)))
⋆⇩D σ⇩0 (src⇩C f)"
using f g fg C.VV.arr_char⇩S⇩b⇩C D.whisker_right by simp
also have "... = (ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f) ⋅⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f)"
using f g fg C.VV.arr_char⇩S⇩b⇩C D.whisker_left [of "ρ⇩0 (trg⇩C g)"] by simp
also have "... = (ρ⇩0 (trg⇩C g) ⋆⇩D G (g ⋆⇩C f)) ⋆⇩D σ⇩0 (src⇩C f)"
using f g fg D.comp_arr_inv' G.cmp_components_are_iso G.cmp_simps(5) by auto
finally have "((ρ⇩0 (trg⇩C g) ⋆⇩D Φ⇩G (g, f)) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
((ρ⇩0 (trg⇩C g) ⋆⇩D D.inv (Φ⇩G (g, f))) ⋆⇩D σ⇩0 (src⇩C f))
= (ρ⇩0 (trg⇩C g) ⋆⇩D G (g ⋆⇩C f)) ⋆⇩D σ⇩0 (src⇩C f)"
by blast
moreover have "((ρ⇩0 (trg⇩C g) ⋆⇩D G (g ⋆⇩C f)) ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
(ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f))
= ρ⇩1 (g ⋆⇩C f) ⋆⇩D σ⇩0 (src⇩C f)"
using f g fg D.comp_cod_arr by simp
ultimately show ?thesis by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = map⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩H (g, f) ⋆⇩D map⇩0 (src⇩C f))"
unfolding map⇩0_def map⇩1_def
using f g fg D.comp_assoc by simp
finally show "(map⇩0 (trg⇩C g) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D
𝖺⇩D[map⇩0 (trg⇩C g), F g, F f] ⋅⇩D
(map⇩1 g ⋆⇩D F f) ⋅⇩D
D.inv 𝖺⇩D[H g, map⇩0 (src⇩C g), F f] ⋅⇩D
(H g ⋆⇩D map⇩1 f) ⋅⇩D
𝖺⇩D[H g, H f, map⇩0 (src⇩C f)]
= map⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩H (g, f) ⋆⇩D map⇩0 (src⇩C f))"
using D.comp_assoc by simp
qed
qed
lemma is_pseudonatural_transformation:
shows "pseudonatural_transformation
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F H Φ⇩H map⇩0 map⇩1"
..
end
subsection "Whiskering of Pseudonatural Transformations"
text ‹
Similarly to ordinary natural transformations, pseudonatural transformations can be whiskered
with pseudofunctors on the left and the right.
›
locale pseudonatural_transformation_whisker_right =
B: bicategory V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B +
C: bicategory V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C +
D: bicategory V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D +
τ.F: pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F +
τ.G: pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G +
H: pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C H Φ⇩H +
τ: pseudonatural_transformation
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
for V⇩B :: "'b comp" (infixr ‹⋅⇩B› 55)
and H⇩B :: "'b comp" (infixr ‹⋆⇩B› 53)
and 𝖺⇩B :: "'b ⇒ 'b ⇒ 'b ⇒ 'b" (‹𝖺⇩B[_, _, _]›)
and 𝗂⇩B :: "'b ⇒ 'b" (‹𝗂⇩B[_]›)
and src⇩B :: "'b ⇒ 'b"
and trg⇩B :: "'b ⇒ 'b"
and V⇩C :: "'c comp" (infixr ‹⋅⇩C› 55)
and H⇩C :: "'c comp" (infixr ‹⋆⇩C› 53)
and 𝖺⇩C :: "'c ⇒ 'c ⇒ 'c ⇒ 'c" (‹𝖺⇩C[_, _, _]›)
and 𝗂⇩C :: "'c ⇒ 'c" (‹𝗂⇩C[_]›)
and src⇩C :: "'c ⇒ 'c"
and trg⇩C :: "'c ⇒ 'c"
and V⇩D :: "'d comp" (infixr ‹⋅⇩D› 55)
and H⇩D :: "'d comp" (infixr ‹⋆⇩D› 53)
and 𝖺⇩D :: "'d ⇒ 'd ⇒ 'd ⇒ 'd" (‹𝖺⇩D[_, _, _]›)
and 𝗂⇩D :: "'d ⇒ 'd" (‹𝗂⇩D[_]›)
and src⇩D :: "'d ⇒ 'd"
and trg⇩D :: "'d ⇒ 'd"
and F :: "'c ⇒ 'd"
and Φ⇩F :: "'c * 'c ⇒ 'd"
and G :: "'c ⇒ 'd"
and Φ⇩G :: "'c * 'c ⇒ 'd"
and H :: "'b ⇒ 'c"
and Φ⇩H :: "'b * 'b ⇒ 'c"
and τ⇩0 :: "'c ⇒ 'd"
and τ⇩1 :: "'c ⇒ 'd"
begin
interpretation FoH: composite_pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D H Φ⇩H F Φ⇩F
..
interpretation GoH: composite_pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D H Φ⇩H G Φ⇩G
..
definition map⇩0
where "map⇩0 a = τ⇩0 (H.map⇩0 a)"
definition map⇩1
where "map⇩1 f = τ⇩1 (H f)"
sublocale pseudonatural_transformation V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
‹F o H› FoH.cmp ‹G o H› GoH.cmp map⇩0 map⇩1
proof
show "⋀a. B.obj a ⟹ D.ide (map⇩0 a)"
using map⇩0_def by simp
show "⋀a. B.obj a ⟹ «map⇩0 a : src⇩D ((F ∘ H) a) →⇩D src⇩D ((G ∘ H) a)»"
using map⇩0_def τ.map⇩0_in_hhom B.obj_simps C.obj_simps by simp
show "⋀f. B.ide f ⟹ D.iso (map⇩1 f)"
using map⇩1_def τ.iso_map⇩1_ide by simp
show "⋀f. B.ide f ⟹
«map⇩1 f : (G ∘ H) f ⋆⇩D map⇩0 (src⇩B f) ⇒⇩D map⇩0 (trg⇩B f) ⋆⇩D (F ∘ H) f»"
using map⇩0_def map⇩1_def by auto
show "⋀μ. B.arr μ ⟹
map⇩1 (B.cod μ) ⋅⇩D ((G ∘ H) μ ⋆⇩D map⇩0 (src⇩B μ)) =
(map⇩0 (trg⇩B μ) ⋆⇩D (F ∘ H) μ) ⋅⇩D map⇩1 (B.dom μ)"
unfolding map⇩0_def map⇩1_def
using τ.naturality by force
show "⋀a. B.obj a ⟹
(map⇩0 a ⋆⇩D FoH.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[map⇩0 a] ⋅⇩D 𝗅⇩D[map⇩0 a]
= map⇩1 a ⋅⇩D (GoH.unit a ⋆⇩D map⇩0 a)"
proof -
fix a
assume a: "B.obj a"
have "map⇩1 a ⋅⇩D (GoH.unit a ⋆⇩D map⇩0 a) =
τ⇩1 (H a) ⋅⇩D (G (H.unit a) ⋅⇩D τ.G.unit (H.map⇩0 a) ⋆⇩D τ⇩0 (H.map⇩0 a))"
unfolding map⇩0_def map⇩1_def
using a GoH.unit_char' by simp
also have "... = (τ⇩1 (H a) ⋅⇩D (G (H.unit a) ⋆⇩D τ⇩0 (H.map⇩0 a))) ⋅⇩D
(τ.G.unit (H.map⇩0 a) ⋆⇩D τ⇩0 (H.map⇩0 a))"
using a D.whisker_right D.comp_assoc by simp
also have "... = (τ⇩0 (H.map⇩0 a) ⋆⇩D F (H.unit a)) ⋅⇩D τ⇩1 (H.map⇩0 a) ⋅⇩D
(τ.G.unit (H.map⇩0 a) ⋆⇩D τ⇩0 (H.map⇩0 a))"
using a τ.naturality [of "H.unit a"] D.comp_assoc by simp
also have "... = ((τ⇩0 (H.map⇩0 a) ⋆⇩D F (H.unit a)) ⋅⇩D
(τ⇩0 (H.map⇩0 a) ⋆⇩D τ.F.unit (H.map⇩0 a))) ⋅⇩D
𝗋⇩D⇧-⇧1[τ⇩0 (H.map⇩0 a)] ⋅⇩D 𝗅⇩D[τ⇩0 (H.map⇩0 a)]"
using a τ.respects_unit D.comp_assoc by simp
also have "... = (τ⇩0 (H.map⇩0 a) ⋆⇩D F (H.unit a) ⋅⇩D τ.F.unit (H.map⇩0 a)) ⋅⇩D
𝗋⇩D⇧-⇧1[τ⇩0 (H.map⇩0 a)] ⋅⇩D 𝗅⇩D[τ⇩0 (H.map⇩0 a)]"
using a D.whisker_left by simp
also have "... = (map⇩0 a ⋆⇩D FoH.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[map⇩0 a] ⋅⇩D 𝗅⇩D[map⇩0 a]"
unfolding map⇩0_def map⇩1_def
using a FoH.unit_char' by simp
finally show "(map⇩0 a ⋆⇩D FoH.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[map⇩0 a] ⋅⇩D 𝗅⇩D[map⇩0 a]
= map⇩1 a ⋅⇩D (GoH.unit a ⋆⇩D map⇩0 a)"
by simp
qed
show "⋀f g. ⟦B.ide f; B.ide g; src⇩B g = trg⇩B f⟧ ⟹
(map⇩0 (trg⇩B g) ⋆⇩D FoH.cmp (g, f)) ⋅⇩D
𝖺⇩D[map⇩0 (trg⇩B g), (F ∘ H) g, (F ∘ H) f] ⋅⇩D
(map⇩1 g ⋆⇩D (F ∘ H) f) ⋅⇩D
D.inv 𝖺⇩D[(G ∘ H) g, map⇩0 (src⇩B g), (F ∘ H) f] ⋅⇩D
((G ∘ H) g ⋆⇩D map⇩1 f) ⋅⇩D
𝖺⇩D[(G ∘ H) g, (G ∘ H) f, map⇩0 (src⇩B f)]
= map⇩1 (g ⋆⇩B f) ⋅⇩D (GoH.cmp (g, f) ⋆⇩D map⇩0 (src⇩B f))"
proof -
fix f g
assume f: "B.ide f" and g: "B.ide g" and fg: "src⇩B g = trg⇩B f"
have "map⇩1 (g ⋆⇩B f) ⋅⇩D (GoH.cmp (g, f) ⋆⇩D map⇩0 (src⇩B f))
= τ⇩1 (H (g ⋆⇩B f)) ⋅⇩D
(G (H (g ⋆⇩B f)) ⋅⇩D G (Φ⇩H (g, f)) ⋅⇩D Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f)))"
unfolding map⇩0_def map⇩1_def
using f g fg GoH.cmp_def B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C by simp
also have "... = (τ⇩1 (H (g ⋆⇩B f)) ⋅⇩D
(G (H (g ⋆⇩B f)) ⋆⇩D τ⇩0 (src⇩C (H f)))) ⋅⇩D
(G (Φ⇩H (g, f)) ⋆⇩D τ⇩0 (src⇩C (H f))) ⋅⇩D
(Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f)))"
using f g fg B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C H.FF_def
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C D.whisker_right
D.comp_assoc
by simp
also have "... = (τ⇩0 (trg⇩C (H g)) ⋆⇩D F (H (g ⋆⇩B f))) ⋅⇩D
(τ⇩1 (H (g ⋆⇩B f)) ⋅⇩D
(G (Φ⇩H (g, f)) ⋆⇩D τ⇩0 (src⇩C (H f)))) ⋅⇩D
(Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f)))"
using f g fg τ.naturality [of "H (g ⋆⇩B f)"] D.comp_assoc by auto
also have "... = (τ⇩0 (trg⇩C (H g)) ⋆⇩D F (H (g ⋆⇩B f))) ⋅⇩D
(τ⇩0 (trg⇩C (H g)) ⋆⇩D F (Φ⇩H (g, f))) ⋅⇩D
τ⇩1 (H g ⋆⇩C H f) ⋅⇩D
(Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f)))"
using f g fg τ.naturality [of "Φ⇩H (g, f)"] D.comp_assoc by fastforce
also have "... = (τ⇩0 (trg⇩C (H g)) ⋆⇩D F (H (g ⋆⇩B f))) ⋅⇩D
(τ⇩0 (trg⇩C (H g)) ⋆⇩D F (Φ⇩H (g, f))) ⋅⇩D
(τ⇩0 (trg⇩C (H g)) ⋆⇩D Φ⇩F (H g, H f)) ⋅⇩D
𝖺⇩D[τ⇩0 (trg⇩C (H g)), F (H g), F (H f)] ⋅⇩D
(τ⇩1 (H g) ⋆⇩D F (H f)) ⋅⇩D
D.inv 𝖺⇩D[G (H g), τ⇩0 (src⇩C (H g)), F (H f)] ⋅⇩D
(G (H g) ⋆⇩D τ⇩1 (H f)) ⋅⇩D
𝖺⇩D[G (H g), G (H f), τ⇩0 (src⇩C (H f))] ⋅⇩D
(D.inv (Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f))) ⋅⇩D
(Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f))))"
proof -
have "τ⇩1 (H g ⋆⇩C H f) = (τ⇩0 (trg⇩C (H g)) ⋆⇩D Φ⇩F (H g, H f)) ⋅⇩D
𝖺⇩D[τ⇩0 (trg⇩C (H g)), F (H g), F (H f)] ⋅⇩D
(τ⇩1 (H g) ⋆⇩D F (H f)) ⋅⇩D
D.inv 𝖺⇩D[G (H g), τ⇩0 (src⇩C (H g)), F (H f)] ⋅⇩D
(G (H g) ⋆⇩D τ⇩1 (H f)) ⋅⇩D
𝖺⇩D[G (H g), G (H f), τ⇩0 (src⇩C (H f))] ⋅⇩D
D.inv (Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f)))"
proof -
have "τ⇩1 (H g ⋆⇩C H f) ⋅⇩D (Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f)))
= (τ⇩0 (trg⇩C (H g)) ⋆⇩D Φ⇩F (H g, H f)) ⋅⇩D
𝖺⇩D[τ⇩0 (trg⇩C (H g)), F (H g), F (H f)] ⋅⇩D
(τ⇩1 (H g) ⋆⇩D F (H f)) ⋅⇩D
D.inv 𝖺⇩D[G (H g), τ⇩0 (src⇩C (H g)), F (H f)] ⋅⇩D
(G (H g) ⋆⇩D τ⇩1 (H f)) ⋅⇩D
𝖺⇩D[G (H g), G (H f), τ⇩0 (src⇩C (H f))]"
using f g fg τ.respects_hcomp [of "H f" "H g"] by simp
moreover have "D.seq (τ⇩0 (trg⇩C (H g)) ⋆⇩D Φ⇩F (H g, H f))
(𝖺⇩D[τ⇩0 (trg⇩C (H g)), F (H g), F (H f)] ⋅⇩D
(τ⇩1 (H g) ⋆⇩D F (H f)) ⋅⇩D
D.inv 𝖺⇩D[G (H g), τ⇩0 (src⇩C (H g)), F (H f)] ⋅⇩D
(G (H g) ⋆⇩D τ⇩1 (H f)) ⋅⇩D
𝖺⇩D[G (H g), G (H f), τ⇩0 (src⇩C (H f))])"
using f g fg C.obj_simps C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C τ.F.FF_def
by simp
moreover have "D.iso (Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f)))"
using f g fg τ.G.cmp_components_are_iso [of "H g" "H f"] by simp
ultimately
have "τ⇩1 (H g ⋆⇩C H f) = ((τ⇩0 (trg⇩C (H g)) ⋆⇩D Φ⇩F (H g, H f)) ⋅⇩D
𝖺⇩D[τ⇩0 (trg⇩C (H g)), F (H g), F (H f)] ⋅⇩D
(τ⇩1 (H g) ⋆⇩D F (H f)) ⋅⇩D
D.inv 𝖺⇩D[G (H g), τ⇩0 (src⇩C (H g)), F (H f)] ⋅⇩D
(G (H g) ⋆⇩D τ⇩1 (H f)) ⋅⇩D
𝖺⇩D[G (H g), G (H f), τ⇩0 (src⇩C (H f))]) ⋅⇩D
D.inv (Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f)))"
using D.invert_side_of_triangle(2) by blast
thus ?thesis
using D.comp_assoc by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0 (trg⇩C (H g)) ⋆⇩D F (H (g ⋆⇩B f))) ⋅⇩D
(τ⇩0 (trg⇩C (H g)) ⋆⇩D F (Φ⇩H (g, f))) ⋅⇩D
(τ⇩0 (trg⇩C (H g)) ⋆⇩D Φ⇩F (H g, H f)) ⋅⇩D
𝖺⇩D[τ⇩0 (trg⇩C (H g)), F (H g), F (H f)] ⋅⇩D
(τ⇩1 (H g) ⋆⇩D F (H f)) ⋅⇩D
D.inv 𝖺⇩D[G (H g), τ⇩0 (src⇩C (H g)), F (H f)] ⋅⇩D
(G (H g) ⋆⇩D τ⇩1 (H f)) ⋅⇩D
𝖺⇩D[G (H g), G (H f), τ⇩0 (src⇩C (H f))]"
proof -
have "(D.inv (Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f))) ⋅⇩D
(Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f))))
= (G (H g) ⋆⇩D G (H f)) ⋆⇩D τ⇩0 (src⇩C (H f))"
proof -
have "(D.inv (Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f))) ⋅⇩D
(Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f))))
= (D.inv (Φ⇩G (H g, H f)) ⋆⇩D τ⇩0 (src⇩C (H f))) ⋅⇩D
(Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f)))"
using f g fg by simp
also have "... = D.inv (Φ⇩G (H g, H f)) ⋅⇩D Φ⇩G (H g, H f) ⋆⇩D τ⇩0 (src⇩C (H f))"
using f g fg D.whisker_right C.VV.arr_char⇩S⇩b⇩C by simp
also have "... = (G (H g) ⋆⇩D G (H f)) ⋆⇩D τ⇩0 (src⇩C (H f))"
using f g fg D.comp_inv_arr' τ.G.cmp_components_are_iso by simp
finally show ?thesis by blast
qed
moreover have "𝖺⇩D[G (H g), G (H f), τ⇩0 (src⇩C (H f))] ⋅⇩D ...
= 𝖺⇩D[G (H g), G (H f), τ⇩0 (src⇩C (H f))]"
using f g fg D.comp_arr_dom by simp
ultimately show ?thesis by simp
qed
also have "... = (τ⇩0 (trg⇩C (H g)) ⋆⇩D F (H (g ⋆⇩B f)) ⋅⇩D
F (Φ⇩H (g, f)) ⋅⇩D
Φ⇩F (H g, H f)) ⋅⇩D
𝖺⇩D[τ⇩0 (trg⇩C (H g)), F (H g), F (H f)] ⋅⇩D
(τ⇩1 (H g) ⋆⇩D F (H f)) ⋅⇩D
D.inv 𝖺⇩D[G (H g), τ⇩0 (src⇩C (H g)), F (H f)] ⋅⇩D
(G (H g) ⋆⇩D τ⇩1 (H f)) ⋅⇩D
𝖺⇩D[G (H g), G (H f), τ⇩0 (src⇩C (H f))]"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C
B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C H.FF_def
D.whisker_left C.VV.arr_char⇩S⇩b⇩C B.VV.arr_char⇩S⇩b⇩C D.comp_assoc
by auto
also have "... = (map⇩0 (trg⇩B g) ⋆⇩D FoH.cmp (g, f)) ⋅⇩D
𝖺⇩D[map⇩0 (trg⇩B g), (F ∘ H) g, (F ∘ H) f] ⋅⇩D
(map⇩1 g ⋆⇩D (F ∘ H) f) ⋅⇩D
D.inv 𝖺⇩D[(G ∘ H) g, map⇩0 (src⇩B g), (F ∘ H) f] ⋅⇩D
((G ∘ H) g ⋆⇩D map⇩1 f) ⋅⇩D
𝖺⇩D[(G ∘ H) g, (G ∘ H) f, map⇩0 (src⇩B f)]"
unfolding map⇩0_def map⇩1_def
using f g fg FoH.cmp_def B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C by simp
finally show "(map⇩0 (trg⇩B g) ⋆⇩D FoH.cmp (g, f)) ⋅⇩D
𝖺⇩D[map⇩0 (trg⇩B g), (F ∘ H) g, (F ∘ H) f] ⋅⇩D
(map⇩1 g ⋆⇩D (F ∘ H) f) ⋅⇩D
D.inv 𝖺⇩D[(G ∘ H) g, map⇩0 (src⇩B g), (F ∘ H) f] ⋅⇩D
((G ∘ H) g ⋆⇩D map⇩1 f) ⋅⇩D
𝖺⇩D[(G ∘ H) g, (G ∘ H) f, map⇩0 (src⇩B f)]
= map⇩1 (g ⋆⇩B f) ⋅⇩D (GoH.cmp (g, f) ⋆⇩D map⇩0 (src⇩B f))"
by simp
qed
qed
lemma is_pseudonatural_transformation:
shows "pseudonatural_transformation V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
(F o H) FoH.cmp (G o H) GoH.cmp map⇩0 map⇩1"
..
end
locale pseudonatural_transformation_whisker_left =
B: bicategory V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B +
C: bicategory V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C +
D: bicategory V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D +
τ.F: pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F +
τ.G: pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C G Φ⇩G +
H: pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D H Φ⇩H +
τ: pseudonatural_transformation
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
for V⇩B :: "'b comp" (infixr ‹⋅⇩B› 55)
and H⇩B :: "'b comp" (infixr ‹⋆⇩B› 53)
and 𝖺⇩B :: "'b ⇒ 'b ⇒ 'b ⇒ 'b" (‹𝖺⇩B[_, _, _]›)
and 𝗂⇩B :: "'b ⇒ 'b" (‹𝗂⇩B[_]›)
and src⇩B :: "'b ⇒ 'b"
and trg⇩B :: "'b ⇒ 'b"
and V⇩C :: "'c comp" (infixr ‹⋅⇩C› 55)
and H⇩C :: "'c comp" (infixr ‹⋆⇩C› 53)
and 𝖺⇩C :: "'c ⇒ 'c ⇒ 'c ⇒ 'c" (‹𝖺⇩C[_, _, _]›)
and 𝗂⇩C :: "'c ⇒ 'c" (‹𝗂⇩C[_]›)
and src⇩C :: "'c ⇒ 'c"
and trg⇩C :: "'c ⇒ 'c"
and V⇩D :: "'d comp" (infixr ‹⋅⇩D› 55)
and H⇩D :: "'d comp" (infixr ‹⋆⇩D› 53)
and 𝖺⇩D :: "'d ⇒ 'd ⇒ 'd ⇒ 'd" (‹𝖺⇩D[_, _, _]›)
and 𝗂⇩D :: "'d ⇒ 'd" (‹𝗂⇩D[_]›)
and src⇩D :: "'d ⇒ 'd"
and trg⇩D :: "'d ⇒ 'd"
and F :: "'b ⇒ 'c"
and Φ⇩F :: "'b * 'b ⇒ 'c"
and G :: "'b ⇒ 'c"
and Φ⇩G :: "'b * 'b ⇒ 'c"
and H :: "'c ⇒ 'd"
and Φ⇩H :: "'c * 'c ⇒ 'd"
and τ⇩0 :: "'b ⇒ 'c"
and τ⇩1 :: "'b ⇒ 'c"
begin
interpretation HoF: composite_pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F H Φ⇩H
..
interpretation HoG: composite_pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G H Φ⇩H
..
definition map⇩0
where "map⇩0 a = H (τ⇩0 a)"
definition map⇩1
where "map⇩1 f = D.inv (Φ⇩H (τ⇩0 (trg⇩B f), F f)) ⋅⇩D H (τ⇩1 f) ⋅⇩D Φ⇩H (G f, τ⇩0 (src⇩B f))"
sublocale pseudonatural_transformation V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
HoF.map HoF.cmp HoG.map HoG.cmp map⇩0 map⇩1
proof
show "⋀a. B.obj a ⟹ D.ide (map⇩0 a)"
using map⇩0_def by simp
show "⋀f. B.ide f ⟹ D.iso (map⇩1 f)"
proof -
fix f
assume f: "B.ide f"
have "D.seq (H (τ⇩1 f)) (Φ⇩H (G f, τ⇩0 (src⇩B f)))"
using f by (intro D.seqI) auto
moreover have "D.seq (D.inv (Φ⇩H (τ⇩0 (trg⇩B f), F f)))
(H (τ⇩1 f) ⋅⇩D Φ⇩H (G f, τ⇩0 (src⇩B f)))"
using f τ.map⇩1_in_hom [of f] calculation by (intro D.seqI) auto
ultimately show "D.iso (map⇩1 f)"
using f map⇩1_def H.preserves_iso τ.iso_map⇩1_ide H.cmp_components_are_iso
C.VV.arr_char⇩S⇩b⇩C D.isos_compose
by auto
qed
show "⋀a. B.obj a ⟹ «map⇩0 a : src⇩D ((H ∘ F) a) →⇩D src⇩D ((H ∘ G) a)»"
using map⇩0_def by fastforce
show "⋀f. B.ide f ⟹
«map⇩1 f : (H ∘ G) f ⋆⇩D map⇩0 (src⇩B f) ⇒⇩D map⇩0 (trg⇩B f) ⋆⇩D (H ∘ F) f»"
using map⇩0_def map⇩1_def by fastforce
show "⋀μ. B.arr μ ⟹
map⇩1 (B.cod μ) ⋅⇩D ((H ∘ G) μ ⋆⇩D map⇩0 (src⇩B μ))
= (map⇩0 (trg⇩B μ) ⋆⇩D (H ∘ F) μ) ⋅⇩D map⇩1 (B.dom μ)"
proof -
fix μ
assume μ: "B.arr μ"
have "(map⇩0 (trg⇩B μ) ⋆⇩D (H ∘ F) μ) ⋅⇩D map⇩1 (B.dom μ)
= (H (τ⇩0 (trg⇩B μ)) ⋆⇩D (H ∘ F) μ) ⋅⇩D
D.inv (Φ⇩H (τ⇩0 (trg⇩B (B.dom μ)), F (B.dom μ))) ⋅⇩D
H (τ⇩1 (B.dom μ)) ⋅⇩D Φ⇩H (G (B.dom μ), τ⇩0 (src⇩B (B.dom μ)))"
unfolding map⇩0_def map⇩1_def
using μ by simp
also have "... = ((H (τ⇩0 (trg⇩B μ)) ⋆⇩D H (F μ)) ⋅⇩D
D.inv (Φ⇩H (τ⇩0 (trg⇩B μ), F (B.dom μ)))) ⋅⇩D
H (τ⇩1 (B.dom μ)) ⋅⇩D Φ⇩H (G (B.dom μ), τ⇩0 (src⇩B μ))"
using μ D.comp_assoc by simp
also have "... = D.inv (Φ⇩H (τ⇩0 (trg⇩B μ), F (B.cod μ))) ⋅⇩D
(H (τ⇩0 (trg⇩B μ) ⋆⇩C F μ) ⋅⇩D
H (τ⇩1 (B.dom μ))) ⋅⇩D
Φ⇩H (G (B.dom μ), τ⇩0 (src⇩B (B.dom μ)))"
proof -
have "Φ⇩H (τ⇩0 (trg⇩B μ), F (B.cod μ)) ⋅⇩D (H (τ⇩0 (trg⇩B μ)) ⋆⇩D H (F μ))
= H (τ⇩0 (trg⇩B μ) ⋆⇩C F μ) ⋅⇩D Φ⇩H (τ⇩0 (trg⇩B μ), F (B.dom μ))"
using μ H.Φ.naturality [of "(τ⇩0 (trg⇩B μ), F μ)"]
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C H.FF_def
by simp
moreover have "D.seq (Φ⇩H (τ⇩0 (trg⇩B μ), F (B.cod μ))) (H (τ⇩0 (trg⇩B μ)) ⋆⇩D H (F μ))"
using μ
by (intro D.seqI D.hseqI') auto
moreover have "D.iso (Φ⇩H (τ⇩0 (trg⇩B μ), F (B.cod μ)))"
using μ H.cmp_components_are_iso by simp
moreover have "D.iso (Φ⇩H (τ⇩0 (trg⇩B μ), F (B.dom μ)))"
using μ H.cmp_components_are_iso by simp
ultimately
have "(H (τ⇩0 (trg⇩B μ)) ⋆⇩D H (F μ)) ⋅⇩D D.inv (Φ⇩H (τ⇩0 (trg⇩B μ), F (B.dom μ)))
= D.inv (Φ⇩H (τ⇩0 (trg⇩B μ), F (B.cod μ))) ⋅⇩D H (τ⇩0 (trg⇩B μ) ⋆⇩C F μ)"
using μ H.cmp_components_are_iso C.VV.arr_char⇩S⇩b⇩C D.invert_opposite_sides_of_square
by blast
thus ?thesis
using μ D.comp_assoc by simp
qed
also have "... = D.inv (Φ⇩H (τ⇩0 (trg⇩B μ), F (B.cod μ))) ⋅⇩D
H ((τ⇩0 (trg⇩B μ) ⋆⇩C F μ) ⋅⇩C τ⇩1 (B.dom μ)) ⋅⇩D
Φ⇩H (G (B.dom μ), τ⇩0 (src⇩B (B.dom μ)))"
using μ by simp
also have "... = D.inv (Φ⇩H (τ⇩0 (trg⇩B μ), F (B.cod μ))) ⋅⇩D
H (τ⇩1 (B.cod μ) ⋅⇩C (G μ ⋆⇩C τ⇩0 (src⇩B μ))) ⋅⇩D
Φ⇩H (G (B.dom μ), τ⇩0 (src⇩B (B.dom μ)))"
using μ τ.naturality by simp
also have "... = D.inv (Φ⇩H (τ⇩0 (trg⇩B μ), F (B.cod μ))) ⋅⇩D
H (τ⇩1 (B.cod μ)) ⋅⇩D
H (G μ ⋆⇩C τ⇩0 (src⇩B μ)) ⋅⇩D
Φ⇩H (G (B.dom μ), τ⇩0 (src⇩B (B.dom μ)))"
using μ D.comp_assoc by simp
also have "... = D.inv (Φ⇩H (τ⇩0 (trg⇩B μ), F (B.cod μ))) ⋅⇩D
H (τ⇩1 (B.cod μ)) ⋅⇩D
Φ⇩H (G (B.cod μ), τ⇩0 (src⇩B (B.cod μ))) ⋅⇩D
(H (G μ) ⋆⇩D H (τ⇩0 (src⇩B μ)))"
using μ H.Φ.naturality [of "(G μ, τ⇩0 (src⇩B μ))"]
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C H.FF_def
by force
also have "... = map⇩1 (B.cod μ) ⋅⇩D ((H ∘ G) μ ⋆⇩D map⇩0 (src⇩B μ))"
unfolding map⇩0_def map⇩1_def
using μ D.comp_assoc by simp
finally show "map⇩1 (B.cod μ) ⋅⇩D ((H ∘ G) μ ⋆⇩D map⇩0 (src⇩B μ))
= (map⇩0 (trg⇩B μ) ⋆⇩D (H ∘ F) μ) ⋅⇩D map⇩1 (B.dom μ)"
by simp
qed
show "⋀a. B.obj a ⟹ (map⇩0 a ⋆⇩D HoF.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[map⇩0 a] ⋅⇩D 𝗅⇩D[map⇩0 a]
= map⇩1 a ⋅⇩D (HoG.unit a ⋆⇩D map⇩0 a)"
proof -
fix a
assume a: "B.obj a"
have "map⇩1 a ⋅⇩D (HoG.unit a ⋆⇩D map⇩0 a)
= D.inv (Φ⇩H (τ⇩0 a, F a)) ⋅⇩D
H (τ⇩1 a) ⋅⇩D
Φ⇩H (G a, τ⇩0 a) ⋅⇩D
(H (τ.G.unit a) ⋅⇩D H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))"
unfolding map⇩0_def map⇩1_def
using a HoG.unit_char' D.comp_assoc by auto
also have "... = D.inv (Φ⇩H (τ⇩0 a, F a)) ⋅⇩D
H (τ⇩1 a) ⋅⇩D
(Φ⇩H (G a, τ⇩0 a) ⋅⇩D
(H (τ.G.unit a) ⋆⇩D H (τ⇩0 a))) ⋅⇩D
(H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))"
using a D.whisker_right D.comp_assoc by simp
also have "... = D.inv (Φ⇩H (τ⇩0 a, F a)) ⋅⇩D
(H (τ⇩1 a) ⋅⇩D
H (τ.G.unit a ⋆⇩C τ⇩0 a)) ⋅⇩D
Φ⇩H (τ.G.map⇩0 a, τ⇩0 a) ⋅⇩D
(H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))"
using a H.Φ.naturality [of "(τ.G.unit a, τ⇩0 a)"] D.comp_assoc
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C H.FF_def
by auto
also have "... = D.inv (Φ⇩H (τ⇩0 a, F a)) ⋅⇩D
H (τ⇩1 a ⋅⇩C (τ.G.unit a ⋆⇩C τ⇩0 a)) ⋅⇩D
Φ⇩H (τ.G.map⇩0 a, τ⇩0 a) ⋅⇩D
(H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))"
proof -
have "C.arr (τ⇩1 a ⋅⇩C (τ.G.unit a ⋆⇩C τ⇩0 a))"
using a by force
hence "H (τ⇩1 a) ⋅⇩D H (τ.G.unit a ⋆⇩C τ⇩0 a) = H (τ⇩1 a ⋅⇩C (τ.G.unit a ⋆⇩C τ⇩0 a))"
using a by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = D.inv (Φ⇩H (τ⇩0 a, F a)) ⋅⇩D
H ((τ⇩0 a ⋆⇩C τ.F.unit a) ⋅⇩C 𝗋⇩C⇧-⇧1[τ⇩0 a] ⋅⇩C 𝗅⇩C[τ⇩0 a]) ⋅⇩D
Φ⇩H (τ.G.map⇩0 a, τ⇩0 a) ⋅⇩D
(H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))"
using a τ.respects_unit by simp
also have "... = (D.inv (Φ⇩H (τ⇩0 a, F a)) ⋅⇩D
H (τ⇩0 a ⋆⇩C τ.F.unit a)) ⋅⇩D
H (𝗋⇩C⇧-⇧1[τ⇩0 a]) ⋅⇩D
H (𝗅⇩C[τ⇩0 a]) ⋅⇩D
Φ⇩H (τ.G.map⇩0 a, τ⇩0 a) ⋅⇩D
(H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))"
using a D.comp_assoc B.obj_simps by simp
also have "... = (H (τ⇩0 a) ⋆⇩D H (τ.F.unit a)) ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 a, τ.F.map⇩0 a)) ⋅⇩D
H (𝗋⇩C⇧-⇧1[τ⇩0 a])) ⋅⇩D
H (𝗅⇩C[τ⇩0 a]) ⋅⇩D
Φ⇩H (τ.G.map⇩0 a, τ⇩0 a) ⋅⇩D
(H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))"
proof -
have "D.inv (Φ⇩H (τ⇩0 a, F a)) ⋅⇩D H (τ⇩0 a ⋆⇩C τ.F.unit a)
= (H (τ⇩0 a) ⋆⇩D H (τ.F.unit a)) ⋅⇩D D.inv (Φ⇩H (τ⇩0 a, τ.F.map⇩0 a))"
proof -
have "D.seq (H (τ⇩0 a ⋆⇩C τ.F.unit a)) (Φ⇩H (τ⇩0 a, τ.F.map⇩0 a))"
using a C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C C.obj_simps by auto
moreover have "D.iso (Φ⇩H (τ⇩0 a, F a)) ∧ D.iso (Φ⇩H (τ⇩0 a, τ.F.map⇩0 a))"
proof -
have "C.ide (F a) ∧ src⇩C (τ⇩0 a) = trg⇩C (F a) ∧ src⇩C (τ⇩0 a) = trg⇩C (τ.F.map⇩0 a)"
using a by auto
moreover have "C.ide (τ.F.map⇩0 a)"
proof -
have "C.obj (τ.F.map⇩0 a)"
using a by simp
thus ?thesis by auto
qed
ultimately show ?thesis
using a H.cmp_components_are_iso B.obj_simps by auto
qed
ultimately show ?thesis
using a H.Φ.naturality [of "(τ⇩0 a, τ.F.unit a)"]
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C H.FF_def
D.invert_opposite_sides_of_square
[of "Φ⇩H (τ⇩0 a, F a)" "H (τ⇩0 a) ⋆⇩D H (τ.F.unit a)"
"H (τ⇩0 a ⋆⇩C τ.F.unit a)" "Φ⇩H (τ⇩0 a, τ.F.map⇩0 a)"]
by auto
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (H (τ⇩0 a) ⋆⇩D H (τ.F.unit a)) ⋅⇩D
(H (τ⇩0 a) ⋆⇩D H.unit (τ.F.map⇩0 a)) ⋅⇩D
𝗋⇩D⇧-⇧1[H (τ⇩0 a)] ⋅⇩D
(H (𝗅⇩C[τ⇩0 a]) ⋅⇩D
Φ⇩H (τ.G.map⇩0 a, τ⇩0 a)) ⋅⇩D
(H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))"
proof -
have "D.inv (Φ⇩H (τ⇩0 a, τ.F.map⇩0 a)) ⋅⇩D H (𝗋⇩C⇧-⇧1[τ⇩0 a])
= (H (τ⇩0 a) ⋆⇩D H.unit (τ.F.map⇩0 a)) ⋅⇩D 𝗋⇩D⇧-⇧1[H (τ⇩0 a)]"
using a H.preserves_runit(2) [of "τ⇩0 a"] D.comp_assoc
by (metis C.ideD(1) C.runit'_simps(1) C.src.preserves_ide C.trg_src
D.invert_side_of_triangle(1) τ.F.map⇩0_def H.cmp_components_are_iso
H.preserves_reflects_arr τ.ide_map⇩0_obj τ.map⇩0_simps(2))
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (H (τ⇩0 a) ⋆⇩D H (τ.F.unit a)) ⋅⇩D
(H (τ⇩0 a) ⋆⇩D H.unit (τ.F.map⇩0 a)) ⋅⇩D
𝗋⇩D⇧-⇧1[H (τ⇩0 a)] ⋅⇩D
𝗅⇩D[H (τ⇩0 a)] ⋅⇩D
(D.inv (H.unit (τ.G.map⇩0 a)) ⋆⇩D H (τ⇩0 a)) ⋅⇩D
(H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))"
proof -
have "H (𝗅⇩C[τ⇩0 a]) ⋅⇩D Φ⇩H (τ.G.map⇩0 a, τ⇩0 a)
= 𝗅⇩D[H (τ⇩0 a)] ⋅⇩D (D.inv (H.unit (τ.G.map⇩0 a)) ⋆⇩D H (τ⇩0 a)) ⋅⇩D
D.inv (Φ⇩H (τ.G.map⇩0 a, τ⇩0 a)) ⋅⇩D Φ⇩H (τ.G.map⇩0 a, τ⇩0 a)"
using a H.preserves_lunit(1) D.comp_assoc by auto
also have "... = 𝗅⇩D[H (τ⇩0 a)] ⋅⇩D (D.inv (H.unit (τ.G.map⇩0 a)) ⋆⇩D H (τ⇩0 a))"
proof -
have "D.inv (Φ⇩H (τ.G.map⇩0 a, τ⇩0 a)) ⋅⇩D Φ⇩H (τ.G.map⇩0 a, τ⇩0 a)
= H (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a)"
using a H.cmp_components_are_iso D.comp_inv_arr'
by (metis C.isomorphic_implies_hpar(1) τ.G.map⇩0_simps(2) τ.G.weakly_preserves_objects
H.cmp_simps(4) τ.ide_map⇩0_obj τ.map⇩0_simps(3))
moreover have "(D.inv (H.unit (τ.G.map⇩0 a)) ⋆⇩D H (τ⇩0 a)) ⋅⇩D
(H (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))
= (D.inv (H.unit (τ.G.map⇩0 a)) ⋆⇩D H (τ⇩0 a))"
using a H.unit_char(2) D.comp_arr_dom
by (metis D.arr_inv D.dom_inv D.whisker_right τ.G.map⇩0_simps(1) H.unit_simps(5)
H.preserves_ide τ.ide_map⇩0_obj)
ultimately show ?thesis by simp
qed
finally have "H (𝗅⇩C[τ⇩0 a]) ⋅⇩D Φ⇩H (τ.G.map⇩0 a, τ⇩0 a)
= 𝗅⇩D[H (τ⇩0 a)] ⋅⇩D (D.inv (H.unit (τ.G.map⇩0 a)) ⋆⇩D H (τ⇩0 a))"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((H (τ⇩0 a) ⋆⇩D H (τ.F.unit a)) ⋅⇩D
(H (τ⇩0 a) ⋆⇩D H.unit (τ.F.map⇩0 a))) ⋅⇩D
𝗋⇩D⇧-⇧1[H (τ⇩0 a)] ⋅⇩D
𝗅⇩D[H (τ⇩0 a)]"
proof -
have "(D.inv (H.unit (τ.G.map⇩0 a)) ⋆⇩D H (τ⇩0 a)) ⋅⇩D
(H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))
= D.inv (H.unit (τ.G.map⇩0 a)) ⋅⇩D H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a)"
using a D.whisker_right H.unit_char(2) by simp
also have "... = H.map⇩0 (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a)"
using a H.unit_char(1-2) [of "τ.G.map⇩0 a"] D.comp_inv_arr' by simp
finally have "(D.inv (H.unit (τ.G.map⇩0 a)) ⋆⇩D H (τ⇩0 a)) ⋅⇩D
(H.unit (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a))
= H.map⇩0 (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a)"
by blast
moreover have "𝗅⇩D[H (τ⇩0 a)] ⋅⇩D (H.map⇩0 (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a)) = 𝗅⇩D[H (τ⇩0 a)]"
using a D.comp_arr_dom [of "𝗅⇩D[H (τ⇩0 a)]" "H.map⇩0 (τ.G.map⇩0 a) ⋆⇩D H (τ⇩0 a)"]
by auto
ultimately show ?thesis
using D.comp_assoc by simp
qed
also have "... = (H (τ⇩0 a) ⋆⇩D HoF.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[H (τ⇩0 a)] ⋅⇩D 𝗅⇩D[H (τ⇩0 a)]"
using a HoF.unit_char' D.whisker_left [of "H (τ⇩0 a)"] by simp
also have "... = (map⇩0 a ⋆⇩D HoF.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[map⇩0 a] ⋅⇩D 𝗅⇩D[map⇩0 a]"
unfolding map⇩0_def by simp
finally show "(map⇩0 a ⋆⇩D HoF.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[map⇩0 a] ⋅⇩D 𝗅⇩D[map⇩0 a] =
map⇩1 a ⋅⇩D (HoG.unit a ⋆⇩D map⇩0 a)"
by simp
qed
show "⋀f g. ⟦B.ide f; B.ide g; src⇩B g = trg⇩B f⟧ ⟹
(map⇩0 (trg⇩B g) ⋆⇩D HoF.cmp (g, f)) ⋅⇩D
𝖺⇩D[map⇩0 (trg⇩B g), (H ∘ F) g, (H ∘ F) f] ⋅⇩D
(map⇩1 g ⋆⇩D (H ∘ F) f) ⋅⇩D
D.inv 𝖺⇩D[(H ∘ G) g, map⇩0 (src⇩B g), (H ∘ F) f] ⋅⇩D
((H ∘ G) g ⋆⇩D map⇩1 f) ⋅⇩D 𝖺⇩D[(H ∘ G) g, (H ∘ G) f, map⇩0 (src⇩B f)]
= map⇩1 (g ⋆⇩B f) ⋅⇩D (HoG.cmp (g, f) ⋆⇩D map⇩0 (src⇩B f))"
proof -
fix f g
assume f: "B.ide f" and g: "B.ide g" and fg: "src⇩B g = trg⇩B f"
have "map⇩1 (g ⋆⇩B f) ⋅⇩D (HoG.cmp (g, f) ⋆⇩D map⇩0 (src⇩B f))
= D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F (g ⋆⇩B f))) ⋅⇩D
H (τ⇩1 (g ⋆⇩B f)) ⋅⇩D
Φ⇩H (G (g ⋆⇩B f), τ⇩0 (src⇩B f)) ⋅⇩D
(H (G (g ⋆⇩B f)) ⋅⇩D
H (Φ⇩G (g, f)) ⋅⇩D
Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
unfolding map⇩0_def map⇩1_def HoG.cmp_def
using f g fg B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C D.comp_assoc by simp
also have "... = D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F (g ⋆⇩B f))) ⋅⇩D
H (τ⇩1 (g ⋆⇩B f)) ⋅⇩D
Φ⇩H (G (g ⋆⇩B f), τ⇩0 (src⇩B f)) ⋅⇩D
((H (G (g ⋆⇩B f)) ⋆⇩D H (τ⇩0 (src⇩B f))) ⋅⇩D
(H (Φ⇩G (g, f)) ⋆⇩D H (τ⇩0 (src⇩B f)))) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
using f g fg B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C τ.G.FF_def
D.comp_assoc D.whisker_right
by auto
also have "... = D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F (g ⋆⇩B f))) ⋅⇩D
H (τ⇩1 (g ⋆⇩B f)) ⋅⇩D
(Φ⇩H (G (g ⋆⇩B f), τ⇩0 (src⇩B f)) ⋅⇩D
(H (Φ⇩G (g, f)) ⋆⇩D H (τ⇩0 (src⇩B f)))) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
proof -
have "(H (G (g ⋆⇩B f)) ⋆⇩D H (τ⇩0 (src⇩B f))) ⋅⇩D (H (Φ⇩G (g, f)) ⋆⇩D H (τ⇩0 (src⇩B f)))
= H (G (g ⋆⇩B f)) ⋅⇩D H (Φ⇩G (g, f)) ⋆⇩D H (τ⇩0 (src⇩B f))"
using f g fg B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C D.whisker_right
by simp
also have "... = H (Φ⇩G (g, f)) ⋆⇩D H (τ⇩0 (src⇩B f))"
using f g fg D.comp_cod_arr [of "H (Φ⇩G (g, f))" "H (G (g ⋆⇩B f))"]
B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C
by simp
finally have "(H (G (g ⋆⇩B f)) ⋆⇩D H (τ⇩0 (src⇩B f))) ⋅⇩D
(H (Φ⇩G (g, f)) ⋆⇩D H (τ⇩0 (src⇩B f)))
= H (Φ⇩G (g, f)) ⋆⇩D H (τ⇩0 (src⇩B f))"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F (g ⋆⇩B f))) ⋅⇩D
(H (τ⇩1 (g ⋆⇩B f)) ⋅⇩D
H (Φ⇩G (g, f) ⋆⇩C τ⇩0 (src⇩B f))) ⋅⇩D
Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f)) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
using f g fg H.Φ.naturality [of "(Φ⇩G (g, f), τ⇩0 (src⇩B f))"]
B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C τ.G.FF_def
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C H.FF_def
D.comp_assoc
by simp
also have "... = D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F (g ⋆⇩B f))) ⋅⇩D
H (τ⇩1 (g ⋆⇩B f) ⋅⇩C (Φ⇩G (g, f) ⋆⇩C τ⇩0 (src⇩B f))) ⋅⇩D
Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f)) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
using f g fg B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C D.comp_assoc by simp
also have "... = D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F (g ⋆⇩B f))) ⋅⇩D
H ((τ⇩0 (trg⇩B g) ⋆⇩C Φ⇩F (g, f)) ⋅⇩C
𝖺⇩C[τ⇩0 (trg⇩B g), F g, F f] ⋅⇩C
(τ⇩1 g ⋆⇩C F f) ⋅⇩C
𝖺⇩C⇧-⇧1[G g, τ⇩0 (src⇩B g), F f] ⋅⇩C
(G g ⋆⇩C τ⇩1 f) ⋅⇩C
𝖺⇩C[G g, G f, τ⇩0 (src⇩B f)]) ⋅⇩D
Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f)) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
using f g fg τ.respects_hcomp by simp
also have "... = (D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F (g ⋆⇩B f))) ⋅⇩D
H (τ⇩0 (trg⇩B g) ⋆⇩C Φ⇩F (g, f))) ⋅⇩D
H 𝖺⇩C[τ⇩0 (trg⇩B g), F g, F f] ⋅⇩D
H (τ⇩1 g ⋆⇩C F f) ⋅⇩D
H (𝖺⇩C⇧-⇧1[G g, τ⇩0 (src⇩B g), F f]) ⋅⇩D
H (G g ⋆⇩C τ⇩1 f) ⋅⇩D
H 𝖺⇩C[G g, G f, τ⇩0 (src⇩B f)] ⋅⇩D
Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f)) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
using f g fg B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C τ.F.FF_def D.comp_assoc
by simp
also have "... = (H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f))) ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g ⋆⇩C F f)) ⋅⇩D
H 𝖺⇩C[τ⇩0 (trg⇩B g), F g, F f]) ⋅⇩D
H (τ⇩1 g ⋆⇩C F f) ⋅⇩D
H (𝖺⇩C⇧-⇧1[G g, τ⇩0 (src⇩B g), F f]) ⋅⇩D
H (G g ⋆⇩C τ⇩1 f) ⋅⇩D
H 𝖺⇩C[G g, G f, τ⇩0 (src⇩B f)] ⋅⇩D
Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f)) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
proof -
have "D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F (g ⋆⇩B f))) ⋅⇩D H (τ⇩0 (trg⇩B g) ⋆⇩C Φ⇩F (g, f))
= (H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f))) ⋅⇩D D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g ⋆⇩C F f))"
proof -
have "Φ⇩H (τ⇩0 (trg⇩B g), F (g ⋆⇩B f)) ⋅⇩D (H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f))) =
H (τ⇩0 (trg⇩B g) ⋆⇩C Φ⇩F (g, f)) ⋅⇩D Φ⇩H (τ⇩0 (trg⇩B g), F g ⋆⇩C F f)"
using f g fg B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C τ.F.FF_def H.FF_def
H.Φ.naturality [of "(τ⇩0 (trg⇩B g), Φ⇩F (g, f))"]
by auto
moreover have "D.seq (Φ⇩H (τ⇩0 (trg⇩B g), F (g ⋆⇩B f))) (H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f)))"
using f g fg B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C H.FF_def
by auto
moreover have "D.iso (Φ⇩H (τ⇩0 (trg⇩B g), F (g ⋆⇩B f))) ∧
D.iso (Φ⇩H (τ⇩0 (trg⇩B g), F g ⋆⇩C F f))"
using f g fg H.cmp_components_are_iso by simp
ultimately show ?thesis
using f g fg D.invert_opposite_sides_of_square by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f))) ⋅⇩D
(H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f)) ⋅⇩D
𝖺⇩D[H (τ⇩0 (trg⇩B g)), H (F g), H (F f)] ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋆⇩D H (F f)) ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g) ⋆⇩C F g, F f)) ⋅⇩D
H (τ⇩1 g ⋆⇩C F f)) ⋅⇩D
H (𝖺⇩C⇧-⇧1[G g, τ⇩0 (src⇩B g), F f]) ⋅⇩D
H (G g ⋆⇩C τ⇩1 f) ⋅⇩D
H 𝖺⇩C[G g, G f, τ⇩0 (src⇩B f)] ⋅⇩D
Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f)) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
proof -
have "D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g ⋆⇩C F f)) ⋅⇩D H 𝖺⇩C[τ⇩0 (trg⇩B g), F g, F f]
= (H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f)) ⋅⇩D
𝖺⇩D[H (τ⇩0 (trg⇩B g)), H (F g), H (F f)] ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋆⇩D H (F f)) ⋅⇩D
D.inv (Φ⇩H (τ⇩0 (trg⇩B g) ⋆⇩C F g, F f))"
proof -
have "D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g ⋆⇩C F f)) ⋅⇩D H 𝖺⇩C[τ⇩0 (trg⇩B g), F g, F f]
= ((D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g ⋆⇩C F f)) ⋅⇩D
Φ⇩H (τ⇩0 (trg⇩B g), F g ⋆⇩C F f)) ⋅⇩D
(H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f))) ⋅⇩D
𝖺⇩D[H (τ⇩0 (trg⇩B g)), H (F g), H (F f)] ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋆⇩D H (F f)) ⋅⇩D
D.inv (Φ⇩H (τ⇩0 (trg⇩B g) ⋆⇩C F g, F f))"
using f g fg H.preserves_assoc(1) D.comp_assoc by simp
also have "... = ((H (τ⇩0 (trg⇩B g)) ⋆⇩D H (F g ⋆⇩C F f)) ⋅⇩D
(H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f))) ⋅⇩D
𝖺⇩D[H (τ⇩0 (trg⇩B g)), H (F g), H (F f)] ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋆⇩D H (F f)) ⋅⇩D
D.inv (Φ⇩H (τ⇩0 (trg⇩B g) ⋆⇩C F g, F f))"
using f g fg B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C
H.FF_def D.comp_assoc D.comp_inv_arr' H.cmp_components_are_iso
by simp
also have "... = (H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f)) ⋅⇩D
𝖺⇩D[H (τ⇩0 (trg⇩B g)), H (F g), H (F f)] ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋆⇩D H (F f)) ⋅⇩D
D.inv (Φ⇩H (τ⇩0 (trg⇩B g) ⋆⇩C F g, F f))"
using f g fg C.VV.arr_char⇩S⇩b⇩C H.cmp_simps(5) D.comp_cod_arr D.comp_assoc by auto
finally show ?thesis by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f))) ⋅⇩D
(H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f)) ⋅⇩D
𝖺⇩D[H (τ⇩0 (trg⇩B g)), H (F g), H (F f)] ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋆⇩D H (F f)) ⋅⇩D
(H (τ⇩1 g) ⋆⇩D H (F f)) ⋅⇩D
(D.inv (Φ⇩H (G g ⋆⇩C τ⇩0 (src⇩B g), F f)) ⋅⇩D
H (𝖺⇩C⇧-⇧1[G g, τ⇩0 (src⇩B g), F f])) ⋅⇩D
H (G g ⋆⇩C τ⇩1 f) ⋅⇩D
H 𝖺⇩C[G g, G f, τ⇩0 (src⇩B f)] ⋅⇩D
Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f)) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
proof -
have "D.inv (Φ⇩H (τ⇩0 (trg⇩B g) ⋆⇩C F g, F f)) ⋅⇩D H (τ⇩1 g ⋆⇩C F f)
= (H (τ⇩1 g) ⋆⇩D H (F f)) ⋅⇩D D.inv (Φ⇩H (G g ⋆⇩C τ⇩0 (src⇩B g), F f))"
proof -
have "Φ⇩H (τ⇩0 (trg⇩B g) ⋆⇩C F g, F f) ⋅⇩D (H (τ⇩1 g) ⋆⇩D H (F f))
= H (τ⇩1 g ⋆⇩C F f) ⋅⇩D Φ⇩H (G g ⋆⇩C τ⇩0 (src⇩B g), F f)"
using f g fg H.Φ.naturality [of "(τ⇩1 g, F f)"]
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C H.FF_def
by simp
moreover have "D.seq (Φ⇩H (τ⇩0 (trg⇩B g) ⋆⇩C F g, F f))
(H (τ⇩1 g) ⋆⇩D H (F f))"
using f g fg by fastforce
moreover have "D.iso (Φ⇩H (τ⇩0 (trg⇩B g) ⋆⇩C F g, F f)) ∧
D.iso (Φ⇩H (G g ⋆⇩C τ⇩0 (src⇩B g), F f))"
using f g fg H.cmp_components_are_iso by simp
ultimately show ?thesis
using f g fg D.invert_opposite_sides_of_square by metis
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f))) ⋅⇩D
(H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f)) ⋅⇩D
𝖺⇩D[H (τ⇩0 (trg⇩B g)), H (F g), H (F f)] ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋆⇩D H (F f)) ⋅⇩D
(H (τ⇩1 g) ⋆⇩D H (F f)) ⋅⇩D
(Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (G g), H (τ⇩0 (src⇩B g)), H (F f)] ⋅⇩D
(H (G g) ⋆⇩D D.inv (Φ⇩H (τ⇩0 (src⇩B g), F f))) ⋅⇩D
(D.inv (Φ⇩H (G g, τ⇩0 (src⇩B g) ⋆⇩C F f)) ⋅⇩D
H (G g ⋆⇩C τ⇩1 f)) ⋅⇩D
H 𝖺⇩C[G g, G f, τ⇩0 (src⇩B f)] ⋅⇩D
Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f)) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
proof -
have "D.inv (Φ⇩H (G g ⋆⇩C τ⇩0 (src⇩B g), F f)) ⋅⇩D H (𝖺⇩C⇧-⇧1[G g, τ⇩0 (src⇩B g), F f])
= (Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (G g), H (τ⇩0 (src⇩B g)), H (F f)] ⋅⇩D
(H (G g) ⋆⇩D D.inv (Φ⇩H (τ⇩0 (src⇩B g), F f))) ⋅⇩D
D.inv (Φ⇩H (G g, τ⇩0 (src⇩B g) ⋆⇩C F f))"
proof -
have "D.inv (Φ⇩H (G g ⋆⇩C τ⇩0 (src⇩B g), F f)) ⋅⇩D H (𝖺⇩C⇧-⇧1[G g, τ⇩0 (src⇩B g), F f])
= ((D.inv (Φ⇩H (G g ⋆⇩C τ⇩0 (src⇩B g), F f)) ⋅⇩D
Φ⇩H (G g ⋆⇩C τ⇩0 (src⇩B g), F f)) ⋅⇩D
(Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f))) ⋅⇩D
𝖺⇩D⇧-⇧1[H (G g), H (τ⇩0 (src⇩B g)), H (F f)] ⋅⇩D
(H (G g) ⋆⇩D D.inv (Φ⇩H (τ⇩0 (src⇩B g), F f))) ⋅⇩D
D.inv (Φ⇩H (G g, τ⇩0 (src⇩B g) ⋆⇩C F f))"
using f g fg H.preserves_assoc(2) D.comp_assoc by simp
also have "... = (Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (G g), H (τ⇩0 (src⇩B g)), H (F f)] ⋅⇩D
(H (G g) ⋆⇩D D.inv (Φ⇩H (τ⇩0 (src⇩B g), F f))) ⋅⇩D
D.inv (Φ⇩H (G g, τ⇩0 (src⇩B g) ⋆⇩C F f))"
proof -
have "D.inv (Φ⇩H (G g ⋆⇩C τ⇩0 (src⇩B g), F f)) ⋅⇩D Φ⇩H (G g ⋆⇩C τ⇩0 (src⇩B g), F f)
= H (G g ⋆⇩C τ⇩0 (src⇩B g)) ⋆⇩D H (F f)"
using f g fg H.cmp_components_are_iso D.comp_inv_arr' H.FF_def
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C
by simp
moreover have "(H (G g ⋆⇩C τ⇩0 (src⇩B g)) ⋆⇩D H (F f)) ⋅⇩D (Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f))
= (Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f))"
using f g fg D.comp_cod_arr C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C
by simp
ultimately show ?thesis by simp
qed
finally show ?thesis by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f))) ⋅⇩D
(H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f)) ⋅⇩D
𝖺⇩D[H (τ⇩0 (trg⇩B g)), H (F g), H (F f)] ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋆⇩D H (F f)) ⋅⇩D
(H (τ⇩1 g) ⋆⇩D H (F f)) ⋅⇩D
(Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (G g), H (τ⇩0 (src⇩B g)), H (F f)] ⋅⇩D
(H (G g) ⋆⇩D D.inv (Φ⇩H (τ⇩0 (src⇩B g), F f))) ⋅⇩D
(H (G g) ⋆⇩D H (τ⇩1 f)) ⋅⇩D
(D.inv (Φ⇩H (G g, G f ⋆⇩C τ⇩0 (src⇩B f))) ⋅⇩D
H 𝖺⇩C[G g, G f, τ⇩0 (src⇩B f)]) ⋅⇩D
Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f)) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
proof -
have "D.inv (Φ⇩H (G g, τ⇩0 (src⇩B g) ⋆⇩C F f)) ⋅⇩D H (G g ⋆⇩C τ⇩1 f)
= (H (G g) ⋆⇩D H (τ⇩1 f)) ⋅⇩D D.inv (Φ⇩H (G g, G f ⋆⇩C τ⇩0 (src⇩B f)))"
proof -
have "Φ⇩H (G g, τ⇩0 (trg⇩B f) ⋆⇩C F f) ⋅⇩D (H (G g) ⋆⇩D H (τ⇩1 f))
= H (G g ⋆⇩C τ⇩1 f) ⋅⇩D Φ⇩H (G g, G f ⋆⇩C τ⇩0 (src⇩B f))"
using f g fg H.Φ.naturality [of "(G g, τ⇩1 f)"]
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C H.FF_def
by simp
thus ?thesis
using f g fg H.cmp_components_are_iso
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C
D.invert_opposite_sides_of_square
[of "Φ⇩H (G g, τ⇩0 (trg⇩B f) ⋆⇩C F f)" "H (G g) ⋆⇩D H (τ⇩1 f)"
"H (G g ⋆⇩C τ⇩1 f)" "Φ⇩H (G g, G f ⋆⇩C τ⇩0 (src⇩B f))"]
by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f))) ⋅⇩D
(H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f)) ⋅⇩D
𝖺⇩D[H (τ⇩0 (trg⇩B g)), H (F g), H (F f)] ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋆⇩D H (F f)) ⋅⇩D
(H (τ⇩1 g) ⋆⇩D H (F f)) ⋅⇩D
(Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (G g), H (τ⇩0 (src⇩B g)), H (F f)] ⋅⇩D
(H (G g) ⋆⇩D D.inv (Φ⇩H (τ⇩0 (src⇩B g), F f))) ⋅⇩D
(H (G g) ⋆⇩D H (τ⇩1 f)) ⋅⇩D
(H (G g) ⋆⇩D Φ⇩H (G f, τ⇩0 (src⇩B f))) ⋅⇩D
𝖺⇩D[H (G g), H (G f), H (τ⇩0 (src⇩B f))] ⋅⇩D
(D.inv (Φ⇩H (G g, G f)) ⋆⇩D H (τ⇩0 (src⇩B f))) ⋅⇩D
(D.inv (Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f))) ⋅⇩D
Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f))) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))"
proof -
have "D.inv (Φ⇩H (G g, G f ⋆⇩C τ⇩0 (src⇩B f))) ⋅⇩D H 𝖺⇩C[G g, G f, τ⇩0 (src⇩B f)]
= (H (G g) ⋆⇩D Φ⇩H (G f, τ⇩0 (src⇩B f))) ⋅⇩D
𝖺⇩D[H (G g), H (G f), H (τ⇩0 (src⇩B f))] ⋅⇩D
(D.inv (Φ⇩H (G g, G f)) ⋆⇩D H (τ⇩0 (src⇩B f))) ⋅⇩D
D.inv (Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f)))"
proof -
have "D.inv (Φ⇩H (G g, G f ⋆⇩C τ⇩0 (src⇩B f))) ⋅⇩D H 𝖺⇩C[G g, G f, τ⇩0 (src⇩B f)]
= ((D.inv (Φ⇩H (G g, G f ⋆⇩C τ⇩0 (src⇩B f))) ⋅⇩D
Φ⇩H (G g, G f ⋆⇩C τ⇩0 (src⇩B f))) ⋅⇩D
(H (G g) ⋆⇩D Φ⇩H (G f, τ⇩0 (src⇩B f)))) ⋅⇩D
𝖺⇩D[H (G g), H (G f), H (τ⇩0 (src⇩B f))] ⋅⇩D
(D.inv (Φ⇩H (G g, G f)) ⋆⇩D H (τ⇩0 (src⇩B f))) ⋅⇩D
D.inv (Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f)))"
using f g fg H.preserves_assoc(1)
H.cmp_components_are_iso C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C
D.comp_assoc
by simp
moreover have "D.inv (Φ⇩H (G g, G f ⋆⇩C τ⇩0 (src⇩B f))) ⋅⇩D
Φ⇩H (G g, G f ⋆⇩C τ⇩0 (src⇩B f))
= H (G g) ⋆⇩D H (G f ⋆⇩C τ⇩0 (src⇩B f))"
using f g fg H.cmp_components_are_iso C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C
D.comp_inv_arr' H.FF_def
by simp
moreover have "(H (G g) ⋆⇩D H (G f ⋆⇩C τ⇩0 (src⇩B f))) ⋅⇩D
(H (G g) ⋆⇩D Φ⇩H (G f, τ⇩0 (src⇩B f)))
= H (G g) ⋆⇩D Φ⇩H (G f, τ⇩0 (src⇩B f))"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C
D.whisker_left D.comp_cod_arr
by simp
ultimately show ?thesis by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f))) ⋅⇩D
(H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f))) ⋅⇩D
𝖺⇩D[H (τ⇩0 (trg⇩B g)), H (F g), H (F f)] ⋅⇩D
((D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋆⇩D H (F f)) ⋅⇩D
(H (τ⇩1 g) ⋆⇩D H (F f)) ⋅⇩D
(Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f))) ⋅⇩D
𝖺⇩D⇧-⇧1[H (G g), H (τ⇩0 (src⇩B g)), H (F f)] ⋅⇩D
((H (G g) ⋆⇩D D.inv (Φ⇩H (τ⇩0 (src⇩B g), F f))) ⋅⇩D
(H (G g) ⋆⇩D H (τ⇩1 f)) ⋅⇩D
(H (G g) ⋆⇩D Φ⇩H (G f, τ⇩0 (src⇩B f)))) ⋅⇩D
𝖺⇩D[H (G g), H (G f), H (τ⇩0 (src⇩B f))]"
proof -
have "𝖺⇩D[H (G g), H (G f), H (τ⇩0 (src⇩B f))] ⋅⇩D
(D.inv (Φ⇩H (G g, G f)) ⋆⇩D H (τ⇩0 (src⇩B f))) ⋅⇩D
(D.inv (Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f))) ⋅⇩D
Φ⇩H (G g ⋆⇩C G f, τ⇩0 (src⇩B f))) ⋅⇩D
(Φ⇩H (G g, G f) ⋆⇩D H (τ⇩0 (src⇩B f)))
= 𝖺⇩D[H (G g), H (G f), H (τ⇩0 (src⇩B f))]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.whisker_right [of "H (τ⇩0 (src⇩B f))" "D.inv (Φ⇩H (G g, G f))" "Φ⇩H (G g, G f)"]
D.comp_inv_arr' C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C H.FF_def
H.cmp_components_are_iso
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (H (τ⇩0 (trg⇩B g)) ⋆⇩D H (F (g ⋆⇩B f)) ⋅⇩D
H (Φ⇩F (g, f)) ⋅⇩D
Φ⇩H (F g, F f)) ⋅⇩D
𝖺⇩D[H (τ⇩0 (trg⇩B g)), H (F g), H (F f)] ⋅⇩D
(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋅⇩D
H (τ⇩1 g) ⋅⇩D
Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f)) ⋅⇩D
𝖺⇩D⇧-⇧1[H (G g), H (τ⇩0 (src⇩B g)), H (F f)] ⋅⇩D
(H (G g) ⋆⇩D D.inv (Φ⇩H (τ⇩0 (src⇩B g), F f)) ⋅⇩D
H (τ⇩1 f) ⋅⇩D
Φ⇩H (G f, τ⇩0 (src⇩B f))) ⋅⇩D
𝖺⇩D[H (G g), H (G f), H (τ⇩0 (src⇩B f))]"
proof -
have "(H (G g) ⋆⇩D D.inv (Φ⇩H (τ⇩0 (src⇩B g), F f))) ⋅⇩D
(H (G g) ⋆⇩D H (τ⇩1 f)) ⋅⇩D
(H (G g) ⋆⇩D Φ⇩H (G f, τ⇩0 (src⇩B f)))
= H (G g) ⋆⇩D
D.inv (Φ⇩H (τ⇩0 (src⇩B g), F f)) ⋅⇩D H (τ⇩1 f) ⋅⇩D Φ⇩H (G f, τ⇩0 (src⇩B f))"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C D.whisker_left
H.cmp_components_are_iso
by simp
moreover have "(H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f))) ⋅⇩D
(H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f))
= H (τ⇩0 (trg⇩B g)) ⋆⇩D
H (F (g ⋆⇩B f)) ⋅⇩D H (Φ⇩F (g, f)) ⋅⇩D Φ⇩H (F g, F f)"
proof -
have "(H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f))) ⋅⇩D (H (τ⇩0 (trg⇩B g)) ⋆⇩D Φ⇩H (F g, F f))
= H (τ⇩0 (trg⇩B g)) ⋆⇩D H (Φ⇩F (g, f)) ⋅⇩D Φ⇩H (F g, F f)"
proof -
have "D.arr (H (Φ⇩F (g, f)) ⋅⇩D Φ⇩H (F g, F f))"
using f g fg B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C τ.F.FF_def
by (intro D.seqI) auto
thus ?thesis
using f g fg D.whisker_left C.VV.arr_char⇩S⇩b⇩C by simp
qed
also have "... = H (τ⇩0 (trg⇩B g)) ⋆⇩D
(H (F (g ⋆⇩B f) ⋅⇩C Φ⇩F (g, f))) ⋅⇩D Φ⇩H (F g, F f)"
using f g fg C.comp_cod_arr B.VV.arr_char⇩S⇩b⇩C τ.F.cmp_simps(5) by auto
also have "... = H (τ⇩0 (trg⇩B g)) ⋆⇩D
(H (F (g ⋆⇩B f)) ⋅⇩D H (Φ⇩F (g, f))) ⋅⇩D Φ⇩H (F g, F f)"
using f g fg B.VV.arr_char⇩S⇩b⇩C τ.F.cmp_simps(5) by auto
also have "... = H (τ⇩0 (trg⇩B g)) ⋆⇩D
H (F (g ⋆⇩B f)) ⋅⇩D H (Φ⇩F (g, f)) ⋅⇩D Φ⇩H (F g, F f)"
using D.comp_assoc by simp
finally show ?thesis by simp
qed
moreover have "(D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋆⇩D H (F f)) ⋅⇩D
(H (τ⇩1 g) ⋆⇩D H (F f)) ⋅⇩D
(Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f))
= D.inv (Φ⇩H (τ⇩0 (trg⇩B g), F g)) ⋅⇩D
H (τ⇩1 g) ⋅⇩D Φ⇩H (G g, τ⇩0 (src⇩B g)) ⋆⇩D H (F f)"
using f g fg D.whisker_right C.VV.arr_char⇩S⇩b⇩C C.VV.dom_char⇩S⇩b⇩C C.VV.cod_char⇩S⇩b⇩C
by simp
ultimately show ?thesis
by simp
qed
also have "... = (map⇩0 (trg⇩B g) ⋆⇩D HoF.cmp (g, f)) ⋅⇩D
𝖺⇩D[map⇩0 (trg⇩B g), (H ∘ F) g, (H ∘ F) f] ⋅⇩D
(map⇩1 g ⋆⇩D (H ∘ F) f) ⋅⇩D
D.inv 𝖺⇩D[(H ∘ G) g, map⇩0 (src⇩B g), (H ∘ F) f] ⋅⇩D
((H ∘ G) g ⋆⇩D map⇩1 f) ⋅⇩D 𝖺⇩D[(H ∘ G) g, (H ∘ G) f, map⇩0 (src⇩B f)]"
unfolding map⇩0_def map⇩1_def HoF.cmp_def
using f g fg B.VV.arr_char⇩S⇩b⇩C B.VV.dom_char⇩S⇩b⇩C B.VV.cod_char⇩S⇩b⇩C by simp
finally show "(map⇩0 (trg⇩B g) ⋆⇩D HoF.cmp (g, f)) ⋅⇩D
𝖺⇩D[map⇩0 (trg⇩B g), (H ∘ F) g, (H ∘ F) f] ⋅⇩D
(map⇩1 g ⋆⇩D (H ∘ F) f) ⋅⇩D
D.inv 𝖺⇩D[(H ∘ G) g, map⇩0 (src⇩B g), (H ∘ F) f] ⋅⇩D
((H ∘ G) g ⋆⇩D map⇩1 f) ⋅⇩D 𝖺⇩D[(H ∘ G) g, (H ∘ G) f, map⇩0 (src⇩B f)]
= map⇩1 (g ⋆⇩B f) ⋅⇩D (HoG.cmp (g, f) ⋆⇩D map⇩0 (src⇩B f))"
by simp
qed
qed
lemma is_pseudonatural_transformation:
shows "pseudonatural_transformation V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
HoF.map HoF.cmp HoG.map HoG.cmp map⇩0 map⇩1"
..
end
subsection "Pseudonatural Equivalences"
text ‹
A \emph{pseudonatural equivalence} is a pseudonatural transformation whose components
at objects are equivalence maps. Pseudonatural equivalences between pseudofunctors
generalize natural isomorphisms between ordinary functors.
›
locale pseudonatural_equivalence =
pseudonatural_transformation +
assumes components_are_equivalences: "C.obj a ⟹ D.equivalence_map (τ⇩0 a)"
subsubsection "Identity Transformations are Pseudonatural Equivalences"
sublocale identity_pseudonatural_transformation ⊆
pseudonatural_equivalence V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
F Φ⇩F F Φ⇩F map⇩0 map⇩1
by unfold_locales (simp add: D.obj_is_equivalence_map)
subsubsection "Composition of Pseudonatural Equivalences"
locale composite_pseudonatural_equivalence =
composite_pseudonatural_transformation +
σ: pseudonatural_equivalence V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
F Φ⇩F G Φ⇩G σ⇩0 σ⇩1 +
ρ: pseudonatural_equivalence V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
G Φ⇩G H Φ⇩H ρ⇩0 ρ⇩1
begin
sublocale pseudonatural_equivalence V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
F Φ⇩F H Φ⇩H map⇩0 map⇩1
apply unfold_locales
by (metis D.equivalence_maps_compose D.hcomp_in_hhomE ρ.components_are_equivalences
σ.components_are_equivalences map⇩0_def map⇩0_in_hom(1))
lemma is_pseudonatural_equivalence:
shows "pseudonatural_equivalence V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
F Φ⇩F H Φ⇩H map⇩0 map⇩1"
..
end
locale pseudonatural_equivalence_whisker_right =
pseudonatural_transformation_whisker_right +
τ: pseudonatural_equivalence
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
begin
interpretation FoH: composite_pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D H Φ⇩H F Φ⇩F
..
interpretation GoH: composite_pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D H Φ⇩H G Φ⇩G
..
sublocale pseudonatural_equivalence V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
‹F o H› FoH.cmp ‹G o H› GoH.cmp map⇩0 map⇩1
using map⇩0_def τ.components_are_equivalences
by unfold_locales simp
lemma is_pseudonatural_equivalence:
shows "pseudonatural_equivalence V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
(F o H) FoH.cmp (G o H) GoH.cmp map⇩0 map⇩1"
..
end
locale pseudonatural_equivalence_whisker_left =
pseudonatural_transformation_whisker_left +
τ: pseudonatural_equivalence
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
begin
interpretation HoF: composite_pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F H Φ⇩H
..
interpretation HoG: composite_pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G H Φ⇩H
..
sublocale pseudonatural_equivalence V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
‹H o F› HoF.cmp ‹H o G› HoG.cmp map⇩0 map⇩1
using map⇩0_def τ.components_are_equivalences H.preserves_equivalence_maps
by unfold_locales simp
lemma is_pseudonatural_equivalence:
shows "pseudonatural_equivalence V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
(H o F) HoF.cmp (H o G) HoG.cmp map⇩0 map⇩1"
..
end
subsubsection "Converse of a Pseudonatural Equivalence"
text ‹
It is easy to see that natural isomorphism between ordinary functors is a symmetric
relation because a unique inverse to a natural isomorphism is obtained merely by inverting
the components. However the situation is more difficult for pseudonatural equivalences
because they do not have unique inverses. Instead, we have to choose a quasi-inverse for
each of the components. In order to satisfy the required coherence conditions,
it is necessary for these quasi-inverses to be part of chosen adjoint equivalences.
Some long calculations to establish the coherence conditions seem unavoidable.
The purpose of this section is to carry out the construction, given a pseudonatural
equivalence, of a ``converse'' pseudonatural equivalence in the opposite direction.
›
locale converse_pseudonatural_equivalence =
C: bicategory V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C +
D: bicategory V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D +
F: pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F +
G: pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G +
τ: pseudonatural_equivalence
begin
abbreviation (input) F⇩0
where "F⇩0 ≡ F.map⇩0"
abbreviation (input) G⇩0
where "G⇩0 ≡ G.map⇩0"
definition map⇩0
where "map⇩0 a = (SOME g. ∃η ε. adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D (τ⇩0 a) g η ε)"
abbreviation (input) τ⇩0'
where "τ⇩0' ≡ map⇩0"
definition unit
where "unit a = (SOME η. ∃ε. adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D (τ⇩0 a) (τ⇩0' a) η ε)"
abbreviation (input) η
where "η ≡ unit"
definition counit
where "counit a = (SOME ε. adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D (τ⇩0 a) (τ⇩0' a) (η a) ε)"
abbreviation (input) ε
where "ε ≡ counit"
lemma chosen_adjoint_equivalence:
assumes "C.obj a"
shows "adjoint_equivalence_in_bicategory V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D (τ⇩0 a) (τ⇩0' a) (η a) (ε a)"
using assms τ.components_are_equivalences map⇩0_def unit_def counit_def
D.obj_is_equivalence_map D.equivalence_map_extends_to_adjoint_equivalence
someI_ex [of "λg. ∃η ε. adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D (τ⇩0 a) g η ε"]
someI_ex [of "λη. ∃ε. adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D (τ⇩0 a) (τ⇩0' a) η ε"]
someI_ex [of "λε. adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D (τ⇩0 a) (τ⇩0' a) (η a) ε"]
by simp
lemma map⇩0_in_hhom [intro]:
assumes "C.obj a"
shows "«τ⇩0' a : G⇩0 a →⇩D F⇩0 a»"
proof -
interpret adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ‹τ⇩0 a› ‹τ⇩0' a› ‹η a› ‹ε a›
using assms chosen_adjoint_equivalence by simp
show ?thesis
using assms τ.map⇩0_in_hhom [of a] antipar by auto
qed
lemma map⇩0_simps [simp]:
assumes "C.obj a"
shows "D.ide (τ⇩0' a)" and "src⇩D (τ⇩0' a) = G⇩0 a" and "trg⇩D (τ⇩0' a) = F⇩0 a"
proof -
interpret adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ‹τ⇩0 a› ‹τ⇩0' a› ‹η a› ‹ε a›
using assms chosen_adjoint_equivalence by simp
show "D.ide (τ⇩0' a)"
by simp
show "src⇩D (τ⇩0' a) = G⇩0 a"
using assms map⇩0_in_hhom by blast
show "trg⇩D (τ⇩0' a) = F⇩0 a"
using assms map⇩0_in_hhom by blast
qed
lemma equivalence_map_map⇩0 [simp]:
assumes "C.obj a"
shows "D.equivalence_map (τ⇩0' a)"
proof -
interpret adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ‹τ⇩0 a› ‹τ⇩0' a› ‹η a› ‹ε a›
using assms chosen_adjoint_equivalence by simp
show "D.equivalence_map (τ⇩0' a)"
using D.equivalence_map_def adjoint_equivalence_in_bicategory_axioms
dual_equivalence
by blast
qed
lemma unit_in_hom [intro]:
assumes "C.obj a"
shows "«η a : F⇩0 a →⇩D F⇩0 a»"
and "«η a : F⇩0 a ⇒⇩D τ⇩0' a ⋆⇩D τ⇩0 a»"
proof -
interpret adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ‹τ⇩0 a› ‹τ⇩0' a› ‹η a› ‹ε a›
using assms chosen_adjoint_equivalence by simp
show "«η a : F⇩0 a →⇩D F⇩0 a»"
using assms unit_in_hom antipar(1) by auto
show "«η a : F⇩0 a ⇒⇩D τ⇩0' a ⋆⇩D τ⇩0 a»"
using assms unit_in_hom antipar(1) by auto
qed
lemma unit_simps [simp]:
assumes "C.obj a"
shows "D.iso (η a)" and "D.arr (η a)"
and "src⇩D (η a) = F⇩0 a" and "trg⇩D (η a) = F⇩0 a"
and "D.dom (η a) = F⇩0 a" and "D.cod (η a) = τ⇩0' a ⋆⇩D τ⇩0 a"
proof -
interpret adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ‹τ⇩0 a› ‹τ⇩0' a› ‹η a› ‹ε a›
using assms chosen_adjoint_equivalence by simp
show "D.iso (η a)" and "D.arr (η a)"
and "src⇩D (η a) = F⇩0 a" and "trg⇩D (η a) = F⇩0 a"
and "D.dom (η a) = F⇩0 a" and "D.cod (η a) = τ⇩0' a ⋆⇩D τ⇩0 a"
using assms by auto
qed
lemma iso_unit:
assumes "C.obj a"
shows "D.iso (η a)"
proof -
interpret adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ‹τ⇩0 a› ‹τ⇩0' a› ‹η a› ‹ε a›
using assms chosen_adjoint_equivalence by simp
show ?thesis by simp
qed
lemma counit_in_hom [intro]:
assumes "C.obj a"
shows "«ε a : G⇩0 a →⇩D G⇩0 a»"
and "«ε a : τ⇩0 a ⋆⇩D τ⇩0' a ⇒⇩D G⇩0 a»"
proof -
interpret adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ‹τ⇩0 a› ‹τ⇩0' a› ‹η a› ‹ε a›
using assms chosen_adjoint_equivalence by simp
show "«ε a : G⇩0 a →⇩D G⇩0 a»"
using assms counit_in_hom antipar(2) by auto
show " «ε a : τ⇩0 a ⋆⇩D τ⇩0' a ⇒⇩D G⇩0 a»"
using assms counit_in_hom antipar(2) by simp
qed
lemma counit_simps [simp]:
assumes "C.obj a"
shows "D.iso (ε a)" and "D.arr (ε a)"
and "src⇩D (ε a) = G⇩0 a" and "trg⇩D (ε a) = G⇩0 a"
and "D.dom (ε a) = τ⇩0 a ⋆⇩D τ⇩0' a" and "D.cod (ε a) = G⇩0 a"
proof -
interpret adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ‹τ⇩0 a› ‹τ⇩0' a› ‹η a› ‹ε a›
using assms chosen_adjoint_equivalence by simp
show "D.iso (ε a)" and "D.arr (ε a)"
and "src⇩D (ε a) = G⇩0 a" and "trg⇩D (ε a) = G⇩0 a"
and "D.dom (ε a) = τ⇩0 a ⋆⇩D τ⇩0' a" and "D.cod (ε a) = G⇩0 a"
using assms by auto
qed
lemma iso_counit:
assumes "C.obj a"
shows "D.iso (ε a)"
proof -
interpret adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ‹τ⇩0 a› ‹τ⇩0' a› ‹η a› ‹ε a›
using assms chosen_adjoint_equivalence by simp
show ?thesis by simp
qed
lemma quasi_inverts_components:
assumes "C.obj a"
shows "D.isomorphic (τ⇩0' a ⋆⇩D τ⇩0 a) (F⇩0 a)"
and "D.isomorphic (τ⇩0 a ⋆⇩D τ⇩0' a) (G⇩0 a)"
and "D.quasi_inverses (τ⇩0 a) (τ⇩0' a)"
proof -
interpret adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ‹τ⇩0 a› ‹τ⇩0' a› ‹η a› ‹ε a›
using assms chosen_adjoint_equivalence by simp
show "D.isomorphic (τ⇩0' a ⋆⇩D τ⇩0 a) (F⇩0 a)"
using assms D.isomorphic_def D.isomorphic_symmetric unit_is_iso by blast
show "D.isomorphic (τ⇩0 a ⋆⇩D τ⇩0' a) (G⇩0 a)"
using assms D.isomorphic_def counit_is_iso by blast
show "D.quasi_inverses (τ⇩0 a) (τ⇩0' a)"
using D.quasi_inverses_def equivalence_in_bicategory_axioms by auto
qed
definition map⇩1
where "map⇩1 f = (τ⇩0' (trg⇩C f) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(τ⇩0' (trg⇩C f) ⋆⇩D G f ⋆⇩D ε (src⇩C f)) ⋅⇩D
(τ⇩0' (trg⇩C f) ⋆⇩D 𝖺⇩D[G f, τ⇩0 (src⇩C f), τ⇩0' (src⇩C f)]) ⋅⇩D
𝖺⇩D[τ⇩0' (trg⇩C f), G f ⋆⇩D τ⇩0 (src⇩C f), τ⇩0' (src⇩C f)] ⋅⇩D
((τ⇩0' (trg⇩C f) ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' (src⇩C f)) ⋅⇩D
(𝖺⇩D[τ⇩0' (trg⇩C f), τ⇩0 (trg⇩C f), F f] ⋆⇩D τ⇩0' (src⇩C f)) ⋅⇩D
((η (trg⇩C f) ⋆⇩D F f) ⋆⇩D τ⇩0' (src⇩C f)) ⋅⇩D
(𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' (src⇩C f))"
abbreviation (input) τ⇩1'
where "τ⇩1' ≡ map⇩1"
lemma map⇩1_in_hom [intro]:
assumes "C.ide f"
shows "«τ⇩1' f : G⇩0 (src⇩C f) →⇩D F⇩0 (trg⇩C f)»"
and "«τ⇩1' f : F f ⋆⇩D τ⇩0' (src⇩C f) ⇒⇩D τ⇩0' (trg⇩C f) ⋆⇩D G f»"
proof -
show "«τ⇩1' f : F f ⋆⇩D τ⇩0' (src⇩C f) ⇒⇩D τ⇩0' (trg⇩C f) ⋆⇩D G f»"
using assms τ.iso_map⇩1_ide τ.map⇩1_in_vhom
by (unfold map⇩1_def, intro D.comp_in_homI) auto
thus "«τ⇩1' f : G⇩0 (src⇩C f) →⇩D F⇩0 (trg⇩C f)»"
using assms D.vconn_implies_hpar(1-2) by auto
qed
lemma map⇩1_simps [simp]:
assumes "C.ide f"
shows "D.arr (τ⇩1' f)"
and "src⇩D (τ⇩1' f) = G⇩0 (src⇩C f)" and "trg⇩D (τ⇩1' f) = F⇩0 (trg⇩C f)"
and "D.dom (τ⇩1' f) = F f ⋆⇩D τ⇩0' (src⇩C f)" and "D.cod (τ⇩1' f) = τ⇩0' (trg⇩C f) ⋆⇩D G f"
using assms map⇩1_in_hom by auto
lemma iso_map⇩1_ide:
assumes "C.ide f"
shows "D.iso (τ⇩1' f)"
proof -
interpret src: adjoint_equivalence_in_bicategory V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
‹τ⇩0 (src⇩C f)› ‹τ⇩0' (src⇩C f)› ‹η (src⇩C f)› ‹ε (src⇩C f)›
using assms chosen_adjoint_equivalence by simp
interpret trg: adjoint_equivalence_in_bicategory V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
‹τ⇩0 (trg⇩C f)› ‹τ⇩0' (trg⇩C f)› ‹η (trg⇩C f)› ‹ε (trg⇩C f)›
using assms chosen_adjoint_equivalence by simp
show ?thesis
unfolding map⇩1_def
using assms τ.iso_map⇩1_ide
by (intro D.isos_compose) auto
qed
interpretation EV: self_evaluation_map V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ..
notation EV.eval (‹⦃_⦄›)
sublocale pseudonatural_equivalence
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G F Φ⇩F τ⇩0' τ⇩1'
proof
show "⋀a. C.obj a ⟹ D.ide (τ⇩0' a)"
using map⇩0_simps(1) by simp
show "⋀f. C.ide f ⟹ D.iso (τ⇩1' f)"
using iso_map⇩1_ide by simp
show "⋀a. C.obj a ⟹ «τ⇩0' a : src⇩D (G a) →⇩D src⇩D (F a)»"
by fastforce
show "⋀f. C.ide f ⟹ «τ⇩1' f : F f ⋆⇩D τ⇩0' (src⇩C f) ⇒⇩D τ⇩0' (trg⇩C f) ⋆⇩D G f»"
by auto
show "⋀a. C.obj a ⟹ D.equivalence_map (τ⇩0' a)"
by simp
show "⋀μ. C.arr μ ⟹ τ⇩1' (C.cod μ) ⋅⇩D (F μ ⋆⇩D τ⇩0' (src⇩C μ))
= (τ⇩0' (trg⇩C μ) ⋆⇩D G μ) ⋅⇩D τ⇩1' (C.dom μ)"
proof -
fix μ
assume μ: "C.arr μ"
let ?a = "src⇩C μ"
let ?b = "trg⇩C μ"
let ?f = "C.dom μ"
let ?g = "C.cod μ"
have "τ⇩1' (C.cod μ) ⋅⇩D (F μ ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?g]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G ?g ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?g, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, G ?g ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?g)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?g] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?b ⋆⇩D F ?g) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F ?g] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F μ ⋆⇩D τ⇩0' ?a)"
unfolding map⇩1_def
using μ D.comp_assoc by simp
also have "... = (τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?g]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G ?g ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?g, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, G ?g ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?g)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?g] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((η ?b ⋆⇩D F ?g) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((trg⇩D (F μ) ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝗅⇩D⇧-⇧1[F ?f] ⋆⇩D τ⇩0' ?a)"
using μ D.whisker_right D.lunit'_naturality [of "F μ"] D.comp_assoc
D.whisker_right [of "τ⇩0' ?a" "trg⇩D (F μ) ⋆⇩D F μ" "𝗅⇩D⇧-⇧1[F ?f]"]
by simp
also have "... = (τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?g]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G ?g ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?g, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, G ?g ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?g)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?g] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((η ?b ⋆⇩D F ?f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F ?f] ⋆⇩D τ⇩0' ?a)"
proof -
have "((η ?b ⋆⇩D F ?g) ⋆⇩D τ⇩0' ?a) ⋅⇩D ((trg⇩D (F μ) ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a)
= (((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a) ⋅⇩D ((η ?b ⋆⇩D F ?f) ⋆⇩D τ⇩0' ?a)"
proof -
have "((η ?b ⋆⇩D F ?g) ⋆⇩D τ⇩0' ?a) ⋅⇩D ((trg⇩D (F μ) ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a)
= (η ?b ⋆⇩D F ?g) ⋅⇩D (trg⇩D (F μ) ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a"
using μ D.whisker_right D.obj_simps by simp
also have "... = (η ?b ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a"
using μ D.interchange [of "η ?b" "trg⇩D (F μ)" "F ?g" "F μ"]
D.comp_arr_dom D.comp_cod_arr
by simp
also have "... = ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F μ) ⋅⇩D (η ?b ⋆⇩D F ?f) ⋆⇩D τ⇩0' ?a"
using μ D.interchange [of "τ⇩0' ?b ⋆⇩D τ⇩0 ?b" "η ?b" "F μ" "F ?f"]
D.comp_arr_dom D.comp_cod_arr
by simp
also have "... = (((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a) ⋅⇩D ((η ?b ⋆⇩D F ?f) ⋆⇩D τ⇩0' ?a)"
using μ D.whisker_right by simp
finally show ?thesis by blast
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?g]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G ?g ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?g, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, G ?g ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?g)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?b ⋆⇩D F ?f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F ?f] ⋆⇩D τ⇩0' ?a)"
proof -
have "(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?g] ⋆⇩D τ⇩0' ?a) ⋅⇩D (((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a)
= 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?g] ⋅⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a"
using μ D.whisker_right by simp
also have "... = (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F μ) ⋅⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?f] ⋆⇩D τ⇩0' ?a"
using μ D.assoc_naturality [of "τ⇩0' ?b" "τ⇩0 ?b" "F μ"] by simp
also have "... = ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?f] ⋆⇩D τ⇩0' ?a)"
using μ D.whisker_right by simp
finally have "(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?g] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a)
= ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?f] ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?g]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G ?g ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?g, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, G ?g ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D (G μ ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?b ⋆⇩D F ?f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F ?f] ⋆⇩D τ⇩0' ?a)"
proof -
have "((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?g)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?g)) ⋅⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a"
using μ τ.iso_map⇩1_ide D.whisker_right by simp
also have "... = (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?g) ⋅⇩D (τ⇩0 ?b ⋆⇩D F μ)) ⋆⇩D τ⇩0' ?a"
using μ τ.iso_map⇩1_ide D.whisker_left by simp
also have "... = (τ⇩0' ?b ⋆⇩D (G μ ⋆⇩D τ⇩0 ?a) ⋅⇩D D.inv (τ⇩1 ?f)) ⋆⇩D τ⇩0' ?a"
using μ τ.iso_map⇩1_ide τ.naturality
D.invert_opposite_sides_of_square
[of "τ⇩1 ?g" "G μ ⋆⇩D τ⇩0 ?a" "τ⇩0 ?b ⋆⇩D F μ" "τ⇩1 ?f"]
by simp
also have "... = (τ⇩0' ?b ⋆⇩D (G μ ⋆⇩D τ⇩0 ?a)) ⋅⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?f)) ⋆⇩D τ⇩0' ?a"
using μ τ.iso_map⇩1_ide D.whisker_left by simp
also have "... = ((τ⇩0' ?b ⋆⇩D (G μ ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?f)) ⋆⇩D τ⇩0' ?a)"
using μ τ.iso_map⇩1_ide D.whisker_right by simp
finally have "((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?g)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F μ) ⋆⇩D τ⇩0' ?a)
= ((τ⇩0' ?b ⋆⇩D (G μ ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?f)) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?g]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G ?g ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?g, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D (G μ ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, G ?f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?b ⋆⇩D F ?f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F ?f] ⋆⇩D τ⇩0' ?a)"
using μ D.assoc_naturality [of "τ⇩0' ?b" "G μ ⋆⇩D τ⇩0 ?a" "τ⇩0' ?a"] D.comp_assoc
by simp
also have "... = (τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?g]) ⋅⇩D
((τ⇩0' ?b ⋆⇩D G ?g ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G μ ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, G ?f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?b ⋆⇩D F ?f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F ?f] ⋆⇩D τ⇩0' ?a)"
proof -
have "(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?g, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D (G μ ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)
= τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?g, τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D ((G μ ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
using μ D.whisker_left by simp
also have "... = τ⇩0' ?b ⋆⇩D (G μ ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D 𝖺⇩D[G ?f, τ⇩0 ?a, τ⇩0' ?a]"
using μ D.assoc_naturality [of "G μ" "τ⇩0 ?a" "τ⇩0' ?a"] by simp
also have "... = (τ⇩0' ?b ⋆⇩D G μ ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?f, τ⇩0 ?a, τ⇩0' ?a])"
using μ D.whisker_left by simp
finally have "(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?g, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D (G μ ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?b ⋆⇩D G μ ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?f, τ⇩0 ?a, τ⇩0' ?a])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?g]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G μ ⋆⇩D G⇩0 ?a)) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G ?f ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, G ?f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?b ⋆⇩D F ?f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F ?f] ⋆⇩D τ⇩0' ?a)"
proof -
have "(τ⇩0' ?b ⋆⇩D G ?g ⋆⇩D ε ?a) ⋅⇩D (τ⇩0' ?b ⋆⇩D G μ ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)
= τ⇩0' ?b ⋆⇩D (G ?g ⋆⇩D ε ?a) ⋅⇩D (G μ ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
using μ D.whisker_left by simp
also have "... = τ⇩0' ?b ⋆⇩D G μ ⋆⇩D ε ?a"
using μ D.interchange [of "G ?g" "G μ" "ε ?a" "τ⇩0 ?a ⋆⇩D τ⇩0' ?a"]
D.comp_arr_dom D.comp_cod_arr
by simp
also have "... = τ⇩0' ?b ⋆⇩D (G μ ⋆⇩D G⇩0 ?a) ⋅⇩D (G ?f ⋆⇩D ε ?a)"
using μ D.interchange [of "G μ" "G ?f" "G⇩0 ?a" "ε ?a"]
D.comp_arr_dom D.comp_cod_arr
by simp
also have "... = (τ⇩0' ?b ⋆⇩D G μ ⋆⇩D G⇩0 ?a) ⋅⇩D (τ⇩0' ?b ⋆⇩D G ?f ⋆⇩D ε ?a)"
using μ D.whisker_left D.obj_simps by auto
finally have "(τ⇩0' ?b ⋆⇩D G ?g ⋆⇩D ε ?a) ⋅⇩D (τ⇩0' ?b ⋆⇩D G μ ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?b ⋆⇩D G μ ⋆⇩D G⇩0 ?a) ⋅⇩D (τ⇩0' ?b ⋆⇩D G ?f ⋆⇩D ε ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?b ⋆⇩D G μ) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?f]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G ?f ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G ?f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, G ?f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 ?f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F ?f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?b ⋆⇩D F ?f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F ?f] ⋆⇩D τ⇩0' ?a)"
proof -
have "(τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?g]) ⋅⇩D (τ⇩0' ?b ⋆⇩D G μ ⋆⇩D G⇩0 ?a)
= τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?g] ⋅⇩D (G μ ⋆⇩D G⇩0 ?a)"
using μ D.whisker_left D.obj_simps by simp
also have "... = τ⇩0' ?b ⋆⇩D G μ ⋅⇩D 𝗋⇩D[G ?f]"
using μ D.runit_naturality [of "G μ"] by simp
also have "... = (τ⇩0' ?b ⋆⇩D G μ) ⋅⇩D (τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?f])"
using μ D.whisker_left by simp
finally have "(τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?g]) ⋅⇩D (τ⇩0' ?b ⋆⇩D G μ ⋆⇩D G⇩0 ?a)
= (τ⇩0' ?b ⋆⇩D G μ) ⋅⇩D (τ⇩0' ?b ⋆⇩D 𝗋⇩D[G ?f])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?b ⋆⇩D G μ) ⋅⇩D τ⇩1' ?f"
unfolding map⇩1_def
using μ D.comp_assoc by simp
finally show "τ⇩1' ?g ⋅⇩D (F μ ⋆⇩D τ⇩0' ?a) = (τ⇩0' ?b ⋆⇩D G μ) ⋅⇩D τ⇩1' ?f"
by blast
qed
show "⋀a. C.obj a ⟹
(τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0' a] ⋅⇩D 𝗅⇩D[τ⇩0' a] = τ⇩1' a ⋅⇩D (F.unit a ⋆⇩D τ⇩0' a)"
proof -
fix a
assume "C.obj a"
hence a: "C.obj a ∧ C.arr a ∧ C.ide a ∧ src⇩C a = a ∧ trg⇩C a = a"
by auto
have 1: "D.ide (F⇩0 a)"
using a F.map⇩0_simps(1) by blast
have 2: "D.ide (G⇩0 a)"
using a G.map⇩0_simps(1) by blast
have "τ⇩1' a ⋅⇩D (F.unit a ⋆⇩D τ⇩0' a)
= (τ⇩0' a ⋆⇩D 𝗋⇩D[G a]) ⋅⇩D
(τ⇩0' a ⋆⇩D G a ⋆⇩D ε a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝖺⇩D[G a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
𝖺⇩D[τ⇩0' a, G a ⋆⇩D τ⇩0 a, τ⇩0' a] ⋅⇩D
((τ⇩0' a ⋆⇩D D.inv (τ⇩1 a)) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝖺⇩D[τ⇩0' a, τ⇩0 a, F a] ⋆⇩D τ⇩0' a) ⋅⇩D
((η a ⋆⇩D F a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F a] ⋆⇩D τ⇩0' a) ⋅⇩D
(F.unit a ⋆⇩D τ⇩0' a)"
unfolding map⇩1_def
using a D.comp_assoc by simp
also have "... = (τ⇩0' a ⋆⇩D 𝗋⇩D[G a]) ⋅⇩D
(τ⇩0' a ⋆⇩D G a ⋆⇩D ε a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝖺⇩D[G a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
𝖺⇩D[τ⇩0' a, G a ⋆⇩D τ⇩0 a, τ⇩0' a] ⋅⇩D
((τ⇩0' a ⋆⇩D D.inv (τ⇩1 a)) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝖺⇩D[τ⇩0' a, τ⇩0 a, F a] ⋆⇩D τ⇩0' a) ⋅⇩D
(((η a ⋆⇩D F a) ⋆⇩D τ⇩0' a) ⋅⇩D
((F⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a)) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
proof -
have "(𝗅⇩D⇧-⇧1[F a] ⋆⇩D τ⇩0' a) ⋅⇩D (F.unit a ⋆⇩D τ⇩0' a) = 𝗅⇩D⇧-⇧1[F a] ⋅⇩D F.unit a ⋆⇩D τ⇩0' a"
using a D.whisker_right by simp
also have "... = (F⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a"
using a D.lunit'_naturality [of "F.unit a"] by simp
also have "... = ((F⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a) ⋅⇩D (𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
using a 1 D.whisker_right by simp
finally have "(𝗅⇩D⇧-⇧1[F a] ⋆⇩D τ⇩0' a) ⋅⇩D (F.unit a ⋆⇩D τ⇩0' a) =
((F⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a) ⋅⇩D (𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' a ⋆⇩D 𝗋⇩D[G a]) ⋅⇩D
(τ⇩0' a ⋆⇩D G a ⋆⇩D ε a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝖺⇩D[G a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
𝖺⇩D[τ⇩0' a, G a ⋆⇩D τ⇩0 a, τ⇩0' a] ⋅⇩D
((τ⇩0' a ⋆⇩D D.inv (τ⇩1 a)) ⋆⇩D τ⇩0' a) ⋅⇩D
((𝖺⇩D[τ⇩0' a, τ⇩0 a, F a] ⋆⇩D τ⇩0' a) ⋅⇩D
(((τ⇩0' a ⋆⇩D τ⇩0 a) ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a)) ⋅⇩D
((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
proof -
have "((η a ⋆⇩D F a) ⋆⇩D τ⇩0' a) ⋅⇩D ((F⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a)
= (η a ⋆⇩D F a) ⋅⇩D (F⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a"
using a 1 D.whisker_right by simp
also have "... = (η a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a"
using a D.interchange [of "η a" "F⇩0 a" "F a" "F.unit a"]
D.comp_cod_arr D.comp_arr_dom
by simp
also have "... = ((τ⇩0' a ⋆⇩D τ⇩0 a) ⋆⇩D F.unit a) ⋅⇩D (η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a"
using a D.interchange [of "τ⇩0' a ⋆⇩D τ⇩0 a" "η a" "F.unit a" "F⇩0 a"]
D.comp_cod_arr D.comp_arr_dom
by simp
also have "... = (((τ⇩0' a ⋆⇩D τ⇩0 a) ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a) ⋅⇩D ((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a)"
using a 1 D.whisker_right by simp
finally have "((η a ⋆⇩D F a) ⋆⇩D τ⇩0' a) ⋅⇩D ((F⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a)
= (((τ⇩0' a ⋆⇩D τ⇩0 a) ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a) ⋅⇩D ((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' a ⋆⇩D 𝗋⇩D[G a]) ⋅⇩D
(τ⇩0' a ⋆⇩D G a ⋆⇩D ε a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝖺⇩D[G a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
𝖺⇩D[τ⇩0' a, G a ⋆⇩D τ⇩0 a, τ⇩0' a] ⋅⇩D
(((τ⇩0' a ⋆⇩D D.inv (τ⇩1 a)) ⋆⇩D τ⇩0' a) ⋅⇩D
((τ⇩0' a ⋆⇩D τ⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a)) ⋅⇩D
(𝖺⇩D[τ⇩0' a, τ⇩0 a, F⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D
((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
proof -
have "(𝖺⇩D[τ⇩0' a, τ⇩0 a, F a] ⋆⇩D τ⇩0' a) ⋅⇩D (((τ⇩0' a ⋆⇩D τ⇩0 a) ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a)
= 𝖺⇩D[τ⇩0' a, τ⇩0 a, F a] ⋅⇩D ((τ⇩0' a ⋆⇩D τ⇩0 a) ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a"
using a D.whisker_right by simp
also have "... = (τ⇩0' a ⋆⇩D τ⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝖺⇩D[τ⇩0' a, τ⇩0 a, F⇩0 a] ⋆⇩D τ⇩0' a"
using a D.assoc_naturality [of "τ⇩0' a" "τ⇩0 a" "F.unit a"] by simp
also have "... = ((τ⇩0' a ⋆⇩D τ⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝖺⇩D[τ⇩0' a, τ⇩0 a, F⇩0 a] ⋆⇩D τ⇩0' a)"
using a 1 D.whisker_right by simp
finally have "(𝖺⇩D[τ⇩0' a, τ⇩0 a, F a] ⋆⇩D τ⇩0' a) ⋅⇩D
(((τ⇩0' a ⋆⇩D τ⇩0 a) ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a)
= ((τ⇩0' a ⋆⇩D τ⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝖺⇩D[τ⇩0' a, τ⇩0 a, F⇩0 a] ⋆⇩D τ⇩0' a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' a ⋆⇩D 𝗋⇩D[G a]) ⋅⇩D
(τ⇩0' a ⋆⇩D G a ⋆⇩D ε a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝖺⇩D[G a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
(𝖺⇩D[τ⇩0' a, G a ⋆⇩D τ⇩0 a, τ⇩0' a] ⋅⇩D
((τ⇩0' a ⋆⇩D G.unit a ⋆⇩D τ⇩0 a) ⋆⇩D τ⇩0' a)) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗋⇩D[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝖺⇩D[τ⇩0' a, τ⇩0 a, F⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D
((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
proof -
have "((τ⇩0' a ⋆⇩D D.inv (τ⇩1 a)) ⋆⇩D τ⇩0' a) ⋅⇩D ((τ⇩0' a ⋆⇩D τ⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a)
= (τ⇩0' a ⋆⇩D D.inv (τ⇩1 a)) ⋅⇩D (τ⇩0' a ⋆⇩D τ⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a"
using a τ.iso_map⇩1_ide D.whisker_right by simp
also have "... = (τ⇩0' a ⋆⇩D D.inv (τ⇩1 a) ⋅⇩D (τ⇩0 a ⋆⇩D F.unit a)) ⋆⇩D τ⇩0' a"
using a τ.iso_map⇩1_ide D.whisker_left by simp
also have "... = (τ⇩0' a ⋆⇩D (G.unit a ⋆⇩D τ⇩0 a) ⋅⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a] ⋅⇩D 𝗋⇩D[τ⇩0 a]) ⋆⇩D τ⇩0' a"
proof -
have "(τ⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0 a] ⋅⇩D 𝗅⇩D[τ⇩0 a] = τ⇩1 a ⋅⇩D (G.unit a ⋆⇩D τ⇩0 a)"
using a τ.respects_unit by simp
hence "D.inv (τ⇩1 a) ⋅⇩D (τ⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0 a] ⋅⇩D 𝗅⇩D[τ⇩0 a]
= G.unit a ⋆⇩D τ⇩0 a"
using a τ.iso_map⇩1_ide D.invert_side_of_triangle(1) by simp
hence "D.inv (τ⇩1 a) ⋅⇩D (τ⇩0 a ⋆⇩D F.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0 a]
= (G.unit a ⋆⇩D τ⇩0 a) ⋅⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a]"
using a D.iso_lunit D.invert_side_of_triangle(2) D.comp_assoc by simp
hence "D.inv (τ⇩1 a) ⋅⇩D (τ⇩0 a ⋆⇩D F.unit a)
= (G.unit a ⋆⇩D τ⇩0 a) ⋅⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a] ⋅⇩D 𝗋⇩D[τ⇩0 a]"
using a D.iso_runit D.comp_assoc
D.invert_side_of_triangle(2)
[of "(G.unit a ⋆⇩D τ⇩0 a) ⋅⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a]" "D.inv (τ⇩1 a) ⋅⇩D (τ⇩0 a ⋆⇩D F.unit a)"
"𝗋⇩D⇧-⇧1[τ⇩0 a]"]
by simp
thus ?thesis by simp
qed
also have "... = (τ⇩0' a ⋆⇩D G.unit a ⋆⇩D τ⇩0 a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a]) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗋⇩D[τ⇩0 a]) ⋆⇩D τ⇩0' a"
using a D.whisker_left by simp
also have "... = ((τ⇩0' a ⋆⇩D G.unit a ⋆⇩D τ⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗋⇩D[τ⇩0 a]) ⋆⇩D τ⇩0' a)"
using a D.whisker_right by simp
finally have "((τ⇩0' a ⋆⇩D D.inv (τ⇩1 a)) ⋆⇩D τ⇩0' a) ⋅⇩D
((τ⇩0' a ⋆⇩D τ⇩0 a ⋆⇩D F.unit a) ⋆⇩D τ⇩0' a)
= ((τ⇩0' a ⋆⇩D G.unit a ⋆⇩D τ⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗋⇩D[τ⇩0 a]) ⋆⇩D τ⇩0' a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' a ⋆⇩D 𝗋⇩D[G a]) ⋅⇩D
(τ⇩0' a ⋆⇩D G a ⋆⇩D ε a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝖺⇩D[G a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
(τ⇩0' a ⋆⇩D (G.unit a ⋆⇩D τ⇩0 a) ⋆⇩D τ⇩0' a)) ⋅⇩D
𝖺⇩D[τ⇩0' a, G⇩0 a ⋆⇩D τ⇩0 a, τ⇩0' a] ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗋⇩D[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝖺⇩D[τ⇩0' a, τ⇩0 a, F⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D
((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
using a D.assoc_naturality [of "τ⇩0' a" "G.unit a ⋆⇩D τ⇩0 a" "τ⇩0' a"] D.comp_assoc
by simp
also have "... = (τ⇩0' a ⋆⇩D 𝗋⇩D[G a]) ⋅⇩D
((τ⇩0' a ⋆⇩D G a ⋆⇩D ε a) ⋅⇩D
(τ⇩0' a ⋆⇩D G.unit a ⋆⇩D τ⇩0 a ⋆⇩D τ⇩0' a)) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝖺⇩D[G⇩0 a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
𝖺⇩D[τ⇩0' a, G⇩0 a ⋆⇩D τ⇩0 a, τ⇩0' a] ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗋⇩D[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝖺⇩D[τ⇩0' a, τ⇩0 a, F⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D
((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
proof -
have "(τ⇩0' a ⋆⇩D 𝖺⇩D[G a, τ⇩0 a, τ⇩0' a]) ⋅⇩D (τ⇩0' a ⋆⇩D (G.unit a ⋆⇩D τ⇩0 a) ⋆⇩D τ⇩0' a)
= τ⇩0' a ⋆⇩D 𝖺⇩D[G a, τ⇩0 a, τ⇩0' a] ⋅⇩D ((G.unit a ⋆⇩D τ⇩0 a) ⋆⇩D τ⇩0' a)"
using a D.whisker_left by simp
also have "... = τ⇩0' a ⋆⇩D (G.unit a ⋆⇩D τ⇩0 a ⋆⇩D τ⇩0' a) ⋅⇩D 𝖺⇩D[G⇩0 a, τ⇩0 a, τ⇩0' a]"
using a D.assoc_naturality [of "G.unit a" "τ⇩0 a" "τ⇩0' a"] by simp
also have "... = (τ⇩0' a ⋆⇩D G.unit a ⋆⇩D τ⇩0 a ⋆⇩D τ⇩0' a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝖺⇩D[G⇩0 a, τ⇩0 a, τ⇩0' a])"
using a 2 D.whisker_left [of "τ⇩0' a"] by simp
finally have "(τ⇩0' a ⋆⇩D 𝖺⇩D[G a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
(τ⇩0' a ⋆⇩D (G.unit a ⋆⇩D τ⇩0 a) ⋆⇩D τ⇩0' a)
= (τ⇩0' a ⋆⇩D G.unit a ⋆⇩D τ⇩0 a ⋆⇩D τ⇩0' a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝖺⇩D[G⇩0 a, τ⇩0 a, τ⇩0' a])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ((τ⇩0' a ⋆⇩D 𝗋⇩D[G a]) ⋅⇩D
(τ⇩0' a ⋆⇩D G.unit a ⋆⇩D G⇩0 a)) ⋅⇩D
(τ⇩0' a ⋆⇩D G⇩0 a ⋆⇩D ε a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝖺⇩D[G⇩0 a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
𝖺⇩D[τ⇩0' a, G⇩0 a ⋆⇩D τ⇩0 a, τ⇩0' a] ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗋⇩D[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝖺⇩D[τ⇩0' a, τ⇩0 a, F⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D
((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
proof -
have "(τ⇩0' a ⋆⇩D G a ⋆⇩D ε a) ⋅⇩D (τ⇩0' a ⋆⇩D G.unit a ⋆⇩D τ⇩0 a ⋆⇩D τ⇩0' a)
= τ⇩0' a ⋆⇩D G.unit a ⋆⇩D ε a"
using a D.whisker_left D.comp_arr_dom D.comp_cod_arr
D.interchange [of "G a" "G.unit a" "ε a" "τ⇩0 a ⋆⇩D τ⇩0' a"]
by simp
also have "... = (τ⇩0' a ⋆⇩D G.unit a ⋆⇩D G⇩0 a) ⋅⇩D (τ⇩0' a ⋆⇩D G⇩0 a ⋆⇩D ε a)"
using a 2 D.whisker_left D.comp_arr_dom D.comp_cod_arr
D.interchange [of "G.unit a" "G⇩0 a" "G⇩0 a" "ε a"]
by simp
finally have "(τ⇩0' a ⋆⇩D G a ⋆⇩D ε a) ⋅⇩D (τ⇩0' a ⋆⇩D G.unit a ⋆⇩D τ⇩0 a ⋆⇩D τ⇩0' a)
= (τ⇩0' a ⋆⇩D G.unit a ⋆⇩D G⇩0 a) ⋅⇩D (τ⇩0' a ⋆⇩D G⇩0 a ⋆⇩D ε a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗋⇩D[G⇩0 a]) ⋅⇩D
(τ⇩0' a ⋆⇩D G⇩0 a ⋆⇩D ε a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝖺⇩D[G⇩0 a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
𝖺⇩D[τ⇩0' a, G⇩0 a ⋆⇩D τ⇩0 a, τ⇩0' a]) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
(((τ⇩0' a ⋆⇩D 𝗋⇩D[τ⇩0 a]) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝖺⇩D[τ⇩0' a, τ⇩0 a, F⇩0 a] ⋆⇩D τ⇩0' a)) ⋅⇩D
((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
proof -
have "(τ⇩0' a ⋆⇩D 𝗋⇩D[G a]) ⋅⇩D (τ⇩0' a ⋆⇩D G.unit a ⋆⇩D G⇩0 a)
= τ⇩0' a ⋆⇩D 𝗋⇩D[G a] ⋅⇩D (G.unit a ⋆⇩D G⇩0 a)"
using a 2 D.whisker_left by simp
also have "... = τ⇩0' a ⋆⇩D G.unit a ⋅⇩D 𝗋⇩D[G⇩0 a]"
using a D.runit_naturality [of "G.unit a"] by simp
also have "... = (τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D (τ⇩0' a ⋆⇩D 𝗋⇩D[G⇩0 a])"
using a 2 D.whisker_left by simp
finally have "(τ⇩0' a ⋆⇩D 𝗋⇩D[G a]) ⋅⇩D (τ⇩0' a ⋆⇩D G.unit a ⋆⇩D G⇩0 a)
= (τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D (τ⇩0' a ⋆⇩D 𝗋⇩D[G⇩0 a])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗋⇩D[G⇩0 a]) ⋅⇩D
(τ⇩0' a ⋆⇩D G⇩0 a ⋆⇩D ε a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝖺⇩D[G⇩0 a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
(𝖺⇩D[τ⇩0' a, G⇩0 a ⋆⇩D τ⇩0 a, τ⇩0' a] ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a]) ⋆⇩D τ⇩0' a)) ⋅⇩D
(𝗋⇩D[τ⇩0' a ⋆⇩D τ⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D
((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
using a 1 D.whisker_right D.runit_hcomp(1) D.comp_assoc by simp
also have "... = (τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗋⇩D[G⇩0 a]) ⋅⇩D
(τ⇩0' a ⋆⇩D G⇩0 a ⋆⇩D ε a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝖺⇩D[G⇩0 a, τ⇩0 a, τ⇩0' a]) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a] ⋆⇩D τ⇩0' a)) ⋅⇩D
𝖺⇩D[τ⇩0' a, τ⇩0 a, τ⇩0' a] ⋅⇩D
(𝗋⇩D[τ⇩0' a ⋆⇩D τ⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D
((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
using a D.assoc_naturality [of "τ⇩0' a" "𝗅⇩D⇧-⇧1[τ⇩0 a]" "τ⇩0' a"] D.comp_assoc by simp
also have "... = (τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗋⇩D[G⇩0 a]) ⋅⇩D
((τ⇩0' a ⋆⇩D G⇩0 a ⋆⇩D ε a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a ⋆⇩D τ⇩0' a])) ⋅⇩D
𝖺⇩D[τ⇩0' a, τ⇩0 a, τ⇩0' a] ⋅⇩D
(𝗋⇩D[τ⇩0' a ⋆⇩D τ⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D
((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
using a 2 D.whisker_left D.lunit_hcomp(4) D.comp_assoc by simp
also have "... = (τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗋⇩D[G⇩0 a]) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[G⇩0 a]) ⋅⇩D
(τ⇩0' a ⋆⇩D ε a) ⋅⇩D
𝖺⇩D[τ⇩0' a, τ⇩0 a, τ⇩0' a] ⋅⇩D
((𝗋⇩D[τ⇩0' a ⋆⇩D τ⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D
((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a)) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
proof -
have "(τ⇩0' a ⋆⇩D G⇩0 a ⋆⇩D ε a) ⋅⇩D (τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a ⋆⇩D τ⇩0' a])
= τ⇩0' a ⋆⇩D (G⇩0 a ⋆⇩D ε a) ⋅⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a ⋆⇩D τ⇩0' a]"
using a 2 D.whisker_left by simp
also have "... = τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[G⇩0 a] ⋅⇩D ε a"
using a D.lunit'_naturality [of "ε a"] by simp
also have "... = (τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[G⇩0 a]) ⋅⇩D (τ⇩0' a ⋆⇩D ε a)"
using a 2 D.whisker_left by simp
finally have "(τ⇩0' a ⋆⇩D G⇩0 a ⋆⇩D ε a) ⋅⇩D (τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 a ⋆⇩D τ⇩0' a])
= (τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[G⇩0 a]) ⋅⇩D (τ⇩0' a ⋆⇩D ε a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗋⇩D[G⇩0 a]) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[G⇩0 a]) ⋅⇩D
((τ⇩0' a ⋆⇩D ε a) ⋅⇩D
𝖺⇩D[τ⇩0' a, τ⇩0 a, τ⇩0' a] ⋅⇩D
(η a ⋆⇩D τ⇩0' a)) ⋅⇩D
(𝗋⇩D[F⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
proof -
have "(𝗋⇩D[τ⇩0' a ⋆⇩D τ⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D ((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a)
= 𝗋⇩D[τ⇩0' a ⋆⇩D τ⇩0 a] ⋅⇩D (η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a"
using a 1 D.whisker_right by simp
also have "... = η a ⋅⇩D 𝗋⇩D[F⇩0 a] ⋆⇩D τ⇩0' a"
using a D.runit_naturality [of "η a"] by simp
also have "... = (η a ⋆⇩D τ⇩0' a) ⋅⇩D (𝗋⇩D[F⇩0 a] ⋆⇩D τ⇩0' a)"
using a 1 D.whisker_right by simp
finally have "(𝗋⇩D[τ⇩0' a ⋆⇩D τ⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D ((η a ⋆⇩D F⇩0 a) ⋆⇩D τ⇩0' a)
= (η a ⋆⇩D τ⇩0' a) ⋅⇩D (𝗋⇩D[F⇩0 a] ⋆⇩D τ⇩0' a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D
((τ⇩0' a ⋆⇩D 𝗋⇩D[G⇩0 a]) ⋅⇩D
(τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[G⇩0 a]) ⋅⇩D
𝗋⇩D⇧-⇧1[τ⇩0' a]) ⋅⇩D
𝗅⇩D[τ⇩0' a] ⋅⇩D
(𝗋⇩D[F⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a)"
proof -
interpret adjoint_equivalence_in_bicategory V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
‹τ⇩0 a› ‹τ⇩0' a› ‹η a› ‹ε a›
using a chosen_adjoint_equivalence by simp
have "(τ⇩0' a ⋆⇩D ε a) ⋅⇩D 𝖺⇩D[τ⇩0' a, τ⇩0 a, τ⇩0' a] ⋅⇩D (η a ⋆⇩D τ⇩0' a)
= 𝗋⇩D⇧-⇧1[τ⇩0' a] ⋅⇩D 𝗅⇩D[τ⇩0' a]"
using triangle_right by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0' a] ⋅⇩D 𝗅⇩D[τ⇩0' a]"
proof -
have "𝗅⇩D[τ⇩0' a] ⋅⇩D (𝗋⇩D[F⇩0 a] ⋆⇩D τ⇩0' a) ⋅⇩D (𝗅⇩D⇧-⇧1[F⇩0 a] ⋆⇩D τ⇩0' a) = 𝗅⇩D[τ⇩0' a]"
proof -
have "D.seq 𝗋⇩D[F⇩0 a] 𝗅⇩D⇧-⇧1[F⇩0 a]"
using a 1 by auto
thus ?thesis
using a D.unitor_coincidence [of "F⇩0 a"] D.comp_arr_dom D.whisker_right
by (metis D.comp_arr_inv' D.iso_runit D.lunit_simps(1,4)
D.objE D.runit_simps(5) F.map⇩0_simps(1) map⇩0_simps(1,3))
qed
moreover have "(τ⇩0' a ⋆⇩D 𝗋⇩D[G⇩0 a]) ⋅⇩D (τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[G⇩0 a]) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0' a]
= 𝗋⇩D⇧-⇧1[τ⇩0' a]"
proof -
have "(τ⇩0' a ⋆⇩D 𝗋⇩D[G⇩0 a]) ⋅⇩D (τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[G⇩0 a]) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0' a] =
((τ⇩0' a ⋆⇩D 𝗅⇩D[G⇩0 a]) ⋅⇩D (τ⇩0' a ⋆⇩D 𝗅⇩D⇧-⇧1[G⇩0 a])) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0' a]"
using a D.unitor_coincidence D.comp_assoc by simp
also have "... = (τ⇩0' a ⋆⇩D 𝗅⇩D[G⇩0 a] ⋅⇩D 𝗅⇩D⇧-⇧1[G⇩0 a]) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0' a]"
using a 2 D.whisker_left by simp
also have "... = (τ⇩0' a ⋆⇩D G⇩0 a) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0' a]"
using a 2 D.comp_arr_inv' by simp
also have "... = 𝗋⇩D⇧-⇧1[τ⇩0' a]"
using a 2 D.comp_cod_arr by simp
finally show ?thesis by blast
qed
ultimately show ?thesis
using D.comp_assoc by simp
qed
finally show "(τ⇩0' a ⋆⇩D G.unit a) ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0' a] ⋅⇩D 𝗅⇩D[τ⇩0' a]
= τ⇩1' a ⋅⇩D (F.unit a ⋆⇩D τ⇩0' a)"
by simp
qed
show "⋀f g. ⟦C.ide f; C.ide g; src⇩C g = trg⇩C f⟧ ⟹
(τ⇩0' (trg⇩C g) ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' (trg⇩C g), G g, G f] ⋅⇩D
(τ⇩1' g ⋆⇩D G f) ⋅⇩D
D.inv 𝖺⇩D[F g, τ⇩0' (src⇩C g), G f] ⋅⇩D
(F g ⋆⇩D τ⇩1' f) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' (src⇩C f)]
= τ⇩1' (g ⋆⇩C f) ⋅⇩D (Φ⇩F (g, f) ⋆⇩D τ⇩0' (src⇩C f))"
proof -
fix f g
assume f: "C.ide f" and g: "C.ide g" and fg: "src⇩C g = trg⇩C f"
let ?a = "src⇩C f"
let ?b = "trg⇩C f"
let ?c = "trg⇩C g"
have *: "D.ide (G⇩0 ?a) ∧ D.ide (G⇩0 ?b) ∧ D.ide (G⇩0 ?b) ∧ D.ide (G⇩0 ?c)"
using f g C.ideD(1) G.map⇩0_simps(1) by blast
have **: "D.ide (F⇩0 ?a) ∧ D.ide (F⇩0 ?b) ∧ D.ide (F⇩0 ?b) ∧ D.ide (F⇩0 ?c)"
using f g C.ideD(1) F.map⇩0_simps(1) by blast
have "(τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
(τ⇩1' g ⋆⇩D G f) ⋅⇩D
D.inv 𝖺⇩D[F g, τ⇩0' (src⇩C g), G f] ⋅⇩D
(F g ⋆⇩D τ⇩1' f) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]
= (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b)
⋆⇩D G f) ⋅⇩D
D.inv 𝖺⇩D[F g, τ⇩0' ?b, G f] ⋅⇩D
(F g ⋆⇩D (τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a)) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
unfolding map⇩1_def
using f g fg D.comp_assoc by simp
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[F g, τ⇩0' ?b, G f]) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(F g ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b)
⋆⇩D G f
= ((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f)"
proof -
have 1: "D.arr ((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b))"
using f g fg τ.iso_map⇩1_ide by auto
thus ?thesis
using f g fg D.whisker_right [of "G f"]
by (metis D.seqE G.preserves_ide)
qed
moreover have "F g ⋆⇩D (τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a)
= (F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(F g ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a)"
proof -
have 1: "D.arr ((τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a))"
using f g fg τ.iso_map⇩1_ide map⇩1_def map⇩1_simps(1) by presburger
thus ?thesis
using f g fg D.whisker_left [of "F g"]
by (metis D.seqE F.preserves_ide)
qed
ultimately show ?thesis
using f g fg D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[F⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f])) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(F g ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D 𝖺⇩D⇧-⇧1[F g, τ⇩0' ?b, G f]
= 𝖺⇩D⇧-⇧1[F⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D (𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f)"
using f g fg D.assoc'_naturality [of "𝗅⇩D⇧-⇧1[F g]" "τ⇩0' ?b" "G f"] by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[F⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a)) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(F g ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f) ⋅⇩D (F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f])
= 𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝗅⇩D⇧-⇧1[F g]" "F g" "τ⇩0' ?b ⋆⇩D G f" "τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]"]
by simp
also have "... = ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "F⇩0 ?c ⋆⇩D F g" "𝗅⇩D⇧-⇧1[F g]" "τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]"
"τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a"]
by simp
finally have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f) ⋅⇩D (F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f])
= ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[F⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(F g ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D (F g ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a)
= 𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝗅⇩D⇧-⇧1[F g]" "F g" "τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a"
"τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a"]
by simp
also have "... = ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "F⇩0 ?c ⋆⇩D F g" "𝗅⇩D⇧-⇧1[F g]"
"τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a"
"τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a)
= ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[F⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
(F g ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= 𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝗅⇩D⇧-⇧1[F g]" "F g" "τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"
"τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
also have "... = ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "F⇩0 ?c ⋆⇩D F g" "𝗅⇩D⇧-⇧1[F g]" "τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
"τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[F⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a])
= 𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝗅⇩D⇧-⇧1[F g]" "F g" "τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"
"𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]"]
by simp
also have "... = ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "F⇩0 ?c ⋆⇩D F g" "𝗅⇩D⇧-⇧1[F g]" "𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]"
"(τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a])
= ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[F⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(F g ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)
= 𝗅⇩D⇧-⇧1[F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝗅⇩D⇧-⇧1[F g]" "F g" "(τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a"
"(τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "F⇩0 ?c ⋆⇩D F g" "𝗅⇩D⇧-⇧1[F g]" "(τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a"
"(τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)
= ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[F⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)
= 𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝗅⇩D⇧-⇧1[F g]" "F g" "(τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
"𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "F⇩0 ?c ⋆⇩D F g" "𝗅⇩D⇧-⇧1[F g]" "𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"
"((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)
= ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[F⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a)) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= 𝗅⇩D⇧-⇧1[F g] ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝗅⇩D⇧-⇧1[F g]" "F g" "((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
"(η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "F⇩0 ?c ⋆⇩D F g" "𝗅⇩D⇧-⇧1[F g]" "(η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
"(F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(F g ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[F⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, G f]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D (F g ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a)
= 𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝗅⇩D⇧-⇧1[F g]" "F g" "(F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a" "𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
((((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f)) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f])) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D 𝖺⇩D⇧-⇧1[F⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, G f]
= 𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f)"
using f g fg D.assoc'_naturality [of "η ?c ⋆⇩D F g" "τ⇩0' ?b" "G f"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a)) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f) ⋅⇩D ((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f])
= (η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "η ?c ⋆⇩D F g" "F⇩0 ?c ⋆⇩D F g"
"τ⇩0' ?b ⋆⇩D G f" "τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g" "η ?c ⋆⇩D F g"
"τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]" "τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a"]
by simp
finally have "((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f])
= (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a)
= (η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "η ?c ⋆⇩D F g" "F⇩0 ?c ⋆⇩D F g" "τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a"
"τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g" "η ?c ⋆⇩D F g"
"τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a" "τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a)
= (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= (η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "η ?c ⋆⇩D F g" "F⇩0 ?c ⋆⇩D F g" "τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"
"τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g" "η ?c ⋆⇩D F g"
"τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
"τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a])
= (η ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "η ?c ⋆⇩D F g" "F⇩0 ?c ⋆⇩D F g" "τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"
"𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g" "η ?c ⋆⇩D F g"
"𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]"
"(τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((η ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a])
= (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((η ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)
= (η ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "η ?c ⋆⇩D F g" "F⇩0 ?c ⋆⇩D F g"
"(τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a"
"(τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g" "η ?c ⋆⇩D F g"
"(τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a"
"(τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f)) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((η ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D (G f ⋆⇩D τ⇩0 ?a)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)
= (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f)) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((η ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)
= (η ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "η ?c ⋆⇩D F g" "F⇩0 ?c ⋆⇩D F g"
"(τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
"𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g" "η ?c ⋆⇩D F g"
"𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"
"((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((η ?c ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)
= (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f])) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((η ?c ⋆⇩D F g) ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= (η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "η ?c ⋆⇩D F g" "F⇩0 ?c ⋆⇩D F g"
"((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
"(η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f ⋆⇩D G⇩0 ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a)) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝗋⇩D[G f])
= ((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f ⋆⇩D G⇩0 ?a]"
using f g fg D.assoc'_naturality [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g" "τ⇩0' ?b" "𝗋⇩D[G f]"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f ⋆⇩D G⇩0 ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D G f ⋆⇩D ε ?a)
= ((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a]"
using f g fg D.assoc'_naturality [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g" "τ⇩0' ?b" "G f ⋆⇩D ε ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= ((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a]"
using f g fg
D.assoc'_naturality [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g" "τ⇩0' ?b" "𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)
= ((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.whisker_left by simp
also have "... = ((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]"
using f g fg τ.iso_map⇩1_ide
D.assoc_naturality [of "τ⇩0' ?b" "D.inv (τ⇩1 f)" "τ⇩0' ?a"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a])"
using f g fg τ.iso_map⇩1_ide D.whisker_left by simp
finally have "(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D (τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)
= (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)
= ((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
using f g fg τ.iso_map⇩1_ide D.assoc'_naturality
[of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g" "τ⇩0' ?b" "D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])
= (𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b"
"((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"G f" "𝗋⇩D[G f]"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b"
"𝗋⇩D[G f]" "G f ⋆⇩D G⇩0 ?a"]
by simp
finally have "((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])
= (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)
= (𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b"
"((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D G⇩0 ?a" "G f ⋆⇩D ε ?a"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D ε ?a" "G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)
= (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= (𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b"
"((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"
"𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b"
"𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
"(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)
= (𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b"
"((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"
"D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b"
"D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"
"(τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)
= (((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])
= ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b"
"(τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"G f" "𝗋⇩D[G f]"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b"
"𝗋⇩D[G f]" "G f ⋆⇩D G⇩0 ?a"]
by simp
finally have "(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])
= (((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)
= ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b"
"(τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D G⇩0 ?a" "G f ⋆⇩D ε ?a"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D ε ?a" "G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)
= (((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b"
"(τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a" "𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b"
"𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]" "(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= (((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)
= ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b"
"(τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b"
"(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a" "D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b"
"D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a" "(τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)
= (((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a])) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.assoc'_naturality [of "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g]" "τ⇩0' ?b"
"(τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a])
= 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g]" "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g"
"τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
"𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g" "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g]"
"𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]"
"(τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f)) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a])
= ((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)
= 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g]" "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g"
"(τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
"𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g" "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g]"
"𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"
"((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)
= ((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a])) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide
D.assoc'_naturality
[of "τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)" "τ⇩0' ?b" "(τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a])
= (τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)" "τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g"
"τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
"𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f)) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b" "τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)"
"𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]"
"(τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f)) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D τ⇩0' ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a])
= ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)" "τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g"
"(τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
"𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b" "τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)"
"𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"
"((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (τ⇩0' ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a)
= ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋅⇩D (η ?c ⋆⇩D F g) ⋆⇩D
(((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D ((η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg
D.interchange [of "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g]" "η ?c ⋆⇩D F g"
"((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
"(η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋅⇩D (η ?c ⋆⇩D F g) ⋆⇩D ((η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_cod_arr by simp
also have "... = 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋅⇩D (η ?c ⋆⇩D F g) ⋆⇩D
((η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D ((F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom by simp
also have "... = (𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg ** D.interchange by auto
finally have "(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= (𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f)) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D ((η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_cod_arr
D.interchange
[of "τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)" "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g]"
"((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a" "(η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom
D.interchange
[of "τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)" "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g]"
"(η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a" "(F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D ((τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f)) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f)
= (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f"
using f g fg D.whisker_right by simp
also have "... = 𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋅⇩D 𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f"
using f g fg D.pentagon
D.invert_side_of_triangle(2)
[of "𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋅⇩D 𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b]"
"(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b]"
"𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b"]
D.comp_assoc
by simp
also have "... = (𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f)"
using f g fg D.whisker_right by simp
finally have "((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f)
= (𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f)) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D (𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f)
= (τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f"
using f g fg D.whisker_right [of "G f"] by simp
also have "... = 𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋅⇩D ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f"
using f g fg D.assoc_naturality [of "τ⇩0' ?c" "G g" "ε ?b"] by simp
also have "... = (𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f) ⋅⇩D (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f)"
using f g fg * D.whisker_right [of "G f"] by simp
finally have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f)
= (𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f) ⋅⇩D (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b)
= 𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋅⇩D 𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b]"
using f g fg D.pentagon by simp
hence "𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b]
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋅⇩D (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋅⇩D (𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b)"
using f g fg D.comp_assoc D.invert_side_of_triangle(1) by simp
hence "𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋅⇩D (𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b)
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋅⇩D (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b]"
using f g fg D.comp_assoc
D.invert_side_of_triangle(2)
[of "𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b]"
"𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋅⇩D (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b]"
"𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b"]
by simp
hence "𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋅⇩D (𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋅⇩D (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f"
using f g fg D.whisker_right by simp
hence "(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f)
= (𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f)"
using f g fg D.whisker_right by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
(((𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f)
= ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋅⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f"
using f g fg D.whisker_right by simp
also have "... = 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G⇩0 ?b] ⋅⇩D (τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f"
using f g fg D.assoc'_naturality [of "τ⇩0' ?c" "G g" "ε ?b"] by simp
also have "... = (𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f) ⋅⇩D ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f)"
using f g fg * D.whisker_right by simp
finally have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f)
= (𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f) ⋅⇩D ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f) ⋅⇩D (𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f)
= (τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f"
using f g fg * D.comp_arr_inv' D.whisker_right
by (metis C.ideD(1) C.obj_trg D.comp_assoc_assoc'(1) D.hcomp_simps(2) D.hseqI'
D.ideD(1) G.map⇩0_simps(3) G.preserves_ide G.preserves_src G.preserves_trg
map⇩0_simps(1-2))
moreover have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f)
= (τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f"
using f g fg D.comp_cod_arr by simp
ultimately have "((𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f)
= (τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f"
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])
= 𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D 𝗋⇩D[G f]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b]"
"(τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"G f" "𝗋⇩D[G f]"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b]"
"𝗋⇩D[G f]" "G f ⋆⇩D G⇩0 ?a"]
by simp
finally have "(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])
= ((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
by blast
thus ?thesis
using f g fg D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])
= (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D 𝗋⇩D[G f]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]"
"τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"G f" "𝗋⇩D[G f]"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b"
"τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]"
"𝗋⇩D[G f]" "G f ⋆⇩D G⇩0 ?a"]
by simp
finally have "((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])
= ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])
= (τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D 𝗋⇩D[G f]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b" "τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b"
"G f" "𝗋⇩D[G f]"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b" "τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b"
"𝗋⇩D[G f]" "G f ⋆⇩D G⇩0 ?a"]
by simp
finally have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝗋⇩D[G f])
= ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)
= 𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D ε ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b]"
"(τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D G⇩0 ?a" "G f ⋆⇩D ε ?a"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b]"
"G f ⋆⇩D ε ?a" "G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)
= ((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)
= (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D ε ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]"
"τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D G⇩0 ?a" "G f ⋆⇩D ε ?a"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b"
"τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]"
"G f ⋆⇩D ε ?a" "G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)
= ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)
= (τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D ε ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b"
"τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D G⇩0 ?a" "G f ⋆⇩D ε ?a"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b"
"τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b"
"G f ⋆⇩D ε ?a" "G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D G⇩0 ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D ε ?a)
= ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)
= (𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
proof -
have "(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b)
= 𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋅⇩D 𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b]"
using f g fg D.pentagon by simp
hence "(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b]
= 𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋅⇩D 𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b)"
using f g fg D.comp_assoc
D.invert_side_of_triangle(2)
[of "𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋅⇩D 𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b]"
"(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b]"
"𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b"]
by simp
hence "(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, τ⇩0' ?b]) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b]
⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a
= 𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋅⇩D 𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b)
⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"
by simp
thus ?thesis
using f g fg D.whisker_right by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b]
⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"
using f g fg D.whisker_right by simp
also have "... = 𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋅⇩D ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b)
⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a"
using f g fg D.assoc_naturality [of "τ⇩0' ?c" "G g" "ε ?b"] by simp
also have "... = (𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
using f g fg * D.whisker_right by simp
finally have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)
= (𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= ((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b"
"(τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a" "𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
also have "... = ((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b"
"𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]" "(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= ((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= 𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b]"
"((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a" "𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b"
"𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b]"
"𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]" "(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b" "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b"
"G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a" "𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b" "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b"
"𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]" "(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)
= (𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b"
"(τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a" "D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = ((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b"
"D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a" "(τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)
= ((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)
= 𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b]"
"((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b"
"(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a" "D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b"
"𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b]"
"D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a" "(τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)
= (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)
= ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b" "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b"
"(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a" "D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b" "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b"
"D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a" "(τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)
= (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a
= ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b" "τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)"
"(η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a" "(F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, G⇩0 ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G⇩0 ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (ε ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a])) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D η ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, G⇩0 ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G⇩0 ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (ε ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a
= (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom by simp
also have "... = ((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
proof -
have "𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]
= ⦃❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨τ⇩0' ?b❙⟩, (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨τ⇩0' ?b❙⟩) ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙𝖺❙[❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨τ⇩0' ?b❙⟩, ❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨τ⇩0' ?b❙⟩, ❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨τ⇩0' ?b❙⟩) ❙⋆ ❙𝖺❙[❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
❙𝖺❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨τ⇩0' ?b❙⟩, (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙]⦄"
using f g fg D.α_def D.α'.map_ide_simp D.VVV.ide_char⇩S⇩b⇩C D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C
by simp
also have "... =
⦃((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨τ⇩0' ?b❙⟩) ❙⋆ (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩⦄"
using f g fg by (intro EV.eval_eqI, auto)
also have "... = ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
using f g fg D.α_def D.α'.map_ide_simp D.VVV.ide_char D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C
by simp
finally have "𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]
= ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, G⇩0 ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a])) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, G⇩0 ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg
D.assoc'_naturality [of "τ⇩0' ?c ⋆⇩D G g" "ε ?b" "(τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by auto
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, G⇩0 ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a])) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a])
= ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a])"
using f g fg * D.comp_arr_dom D.comp_cod_arr D.whisker_left
D.interchange [of "ε ?b" "(τ⇩0 ?b ⋆⇩D τ⇩0' ?b)" "(τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
"𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg * D.comp_arr_dom D.comp_cod_arr D.whisker_left
D.interchange [of "G⇩0 ?b" "ε ?b" "𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]"
"τ⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a])
= ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, G⇩0 ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G⇩0 ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (ε ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a])
= (τ⇩0' ?c ⋆⇩D G g) ⋆⇩D
(ε ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]"
using f g fg D.whisker_left by simp
also have "... = (τ⇩0' ?c ⋆⇩D G g) ⋆⇩D
𝖺⇩D[G⇩0 ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((ε ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg D.assoc_naturality [of "ε ?b" "τ⇩0 ?b" "F f ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G⇩0 ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (ε ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg * D.whisker_left by simp
finally have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D ε ?b ⋆⇩D τ⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a])
= ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G⇩0 ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (ε ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
finally show ?thesis by simp
qed
moreover
have "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a
= (𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D η ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a])"
proof -
have "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a
= ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg ** D.comp_arr_dom by simp
also have "... = (((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[F⇩0 ?b, F f, τ⇩0' ?a])) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a])"
proof -
have "(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[F⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a])
= ⦃(❙𝖺❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩❙] ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨F⇩0 ?b❙⟩⇩0, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩, ❙⟨F⇩0 ?b❙⟩⇩0 ❙⋆ ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙𝖺❙[❙⟨τ⇩0 ?b❙⟩, ❙⟨F⇩0 ?b❙⟩⇩0, ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨τ⇩0 ?b❙⟩, ❙⟨F⇩0 ?b❙⟩⇩0, ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
❙𝖺❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩, ❙⟨F⇩0 ?b❙⟩⇩0 ❙⋆ ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
(❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩❙] ❙⋆ ❙𝖺❙[❙⟨F⇩0 ?b❙⟩⇩0, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙])⦄"
using f g fg ** D.α_def D.α'.map_ide_simp D.VVV.ide_char⇩S⇩b⇩C D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C
by simp
also have "... = ⦃(❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩ ❙⋆ ❙⟨τ⇩0 ?b❙⟩) ❙⋆ (❙⟨F⇩0 ?b❙⟩⇩0 ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩⦄"
using f g fg by (intro EV.eval_eqI, auto)
also have "... = (τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
using f g fg ** D.α_def D.α'.map_ide_simp D.VVV.ide_char⇩S⇩b⇩C D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C
by simp
finally have "(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[F⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a])
= (τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a])"
proof -
have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[F⇩0 ?b, F f, τ⇩0' ?a])
= 𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D
((η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[F⇩0 ?b, F f, τ⇩0' ?a]"
using f g fg ** D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b" "𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b]"
"(η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a" "𝖺⇩D⇧-⇧1[F⇩0 ?b, F f, τ⇩0' ?a]"]
by simp
also have "... = 𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a] ⋅⇩D
(η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg ** D.assoc'_naturality [of "η ?b" "F f" "τ⇩0' ?a"]
by simp
also have "... = (𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg ** D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b]" "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b"
"𝖺⇩D⇧-⇧1[τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]"
"η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D (η ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[F⇩0 ?b, F f, τ⇩0' ?a])
= (𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a])) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a])"
proof -
have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a]
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg D.assoc'_naturality [of "τ⇩0' ?c ⋆⇩D G g" "τ⇩0 ?b"
"η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a"]
by force
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D η ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a])"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a])
= (τ⇩0' ?c ⋆⇩D G g) ⋆⇩D
(τ⇩0 ?b ⋆⇩D η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D 𝖺⇩D[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]"
using f g fg ** D.whisker_left by auto
also have "... = (τ⇩0' ?c ⋆⇩D G g) ⋆⇩D
𝖺⇩D[τ⇩0 ?b, τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0 ?b ⋆⇩D η ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg ** D.assoc_naturality [of "τ⇩0 ?b" "η ?b" "F f ⋆⇩D τ⇩0' ?a"]
by auto
also have "... = ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D η ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg ** D.whisker_left by auto
finally have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D η ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a])
= ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D η ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
finally show ?thesis by blast
qed
ultimately show ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, G⇩0 ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G⇩0 ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (ε ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, τ⇩0' ?b, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D η ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a])
= (τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, τ⇩0' ?b, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b ⋆⇩D τ⇩0' ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D τ⇩0' ?b) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b ⋆⇩D τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, τ⇩0' ?b] ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D τ⇩0' ?b) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b, τ⇩0' ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝖺⇩D[τ⇩0' ?b, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (τ⇩0' ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[τ⇩0 ?b, τ⇩0' ?b ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a])
= ⦃((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨τ⇩0' ?b❙⟩, ❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨τ⇩0' ?b❙⟩) ❙⋆ ❙𝖺❙[❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
❙𝖺❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨τ⇩0' ?b❙⟩, (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
(❙𝖺❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩, ❙⟨τ⇩0' ?b❙⟩❙] ❙⋆ (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩) ❙⋅
((❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩❙] ❙⋆ ❙⟨τ⇩0' ?b❙⟩) ❙⋆ (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩) ❙⋅
❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩ ❙⋆ ❙⟨τ⇩0 ?b❙⟩, ❙⟨τ⇩0' ?b❙⟩, (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩ ❙⋆ ❙⟨τ⇩0 ?b❙⟩) ❙⋆ ❙𝖺❙[❙⟨τ⇩0' ?b❙⟩, ❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩ ❙⋆ ❙⟨τ⇩0 ?b❙⟩) ❙⋆ ❙𝖺❙[❙⟨τ⇩0' ?b❙⟩, ❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩❙] ❙⋆ ❙⟨τ⇩0' ?a❙⟩) ❙⋅
(❙𝖺❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩❙] ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?b❙⟩ ❙⋆ ❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩, (❙⟨τ⇩0' ?b❙⟩ ❙⋆ ❙⟨τ⇩0 ?b❙⟩) ❙⋆ ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙𝖺❙[❙⟨τ⇩0 ?b❙⟩, ❙⟨τ⇩0' ?b❙⟩ ❙⋆ ❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙])⦄"
using f g fg D.α_def D.α'.map_ide_simp D.VVV.ide_char⇩S⇩b⇩C D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C
by simp
also have "... =
⦃(❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨τ⇩0 ?b❙⟩, ❙⟨τ⇩0' ?b❙⟩, ❙⟨τ⇩0 ?b❙⟩❙] ❙⋆ ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩⦄"
using f g fg by (intro EV.eval_eqI, auto)
also have "... = (τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, τ⇩0' ?b, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a"
using f g fg D.α_def D.α'.map_ide_simp D.VVV.ide_char⇩S⇩b⇩C D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C
by simp
finally show ?thesis
using D.comp_assoc by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, G⇩0 ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G⇩0 ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 ?b] ⋅⇩D 𝗋⇩D[τ⇩0 ?b] ⋆⇩D (F f ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a])) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (ε ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, τ⇩0' ?b, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D η ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D G g) ⋆⇩D
((ε ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0 ?b, τ⇩0' ?b, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0 ?b ⋆⇩D η ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg D.whisker_left by simp
also have "... = (τ⇩0' ?c ⋆⇩D G g) ⋆⇩D
(ε ?b ⋆⇩D τ⇩0 ?b) ⋅⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, τ⇩0' ?b, τ⇩0 ?b] ⋅⇩D (τ⇩0 ?b ⋆⇩D η ?b)
⋆⇩D F f ⋆⇩D τ⇩0' ?a"
using f g fg D.whisker_right by simp
also have "... = (τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 ?b] ⋅⇩D 𝗋⇩D[τ⇩0 ?b] ⋆⇩D (F f ⋆⇩D τ⇩0' ?a)"
proof -
interpret adjoint_equivalence_in_bicategory
V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D ‹τ⇩0 ?b› ‹τ⇩0' ?b› ‹η ?b› ‹ε ?b›
using f chosen_adjoint_equivalence by simp
show ?thesis
using fg triangle_left by simp
qed
finally have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (ε ?b ⋆⇩D τ⇩0 ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, τ⇩0' ?b, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D η ?b) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 ?b] ⋅⇩D 𝗋⇩D[τ⇩0 ?b] ⋆⇩D (F f ⋆⇩D τ⇩0' ?a)"
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f])) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, G⇩0 ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G⇩0 ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 ?b] ⋅⇩D 𝗋⇩D[τ⇩0 ?b] ⋆⇩D (F f ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a])
= (𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
proof -
have "𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g, G⇩0 ?b, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G⇩0 ?b, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗅⇩D⇧-⇧1[τ⇩0 ?b] ⋅⇩D 𝗋⇩D[τ⇩0 ?b] ⋆⇩D (F f ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F⇩0 ?b, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F⇩0 ?b ⋆⇩D F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝖺⇩D[F⇩0 ?b, F f, τ⇩0' ?a])
= ⦃❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩, ❙⟨G⇩0 ?b❙⟩⇩0, (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙⟨G⇩0 ?b❙⟩⇩0 ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙𝖺❙[❙⟨G⇩0 ?b❙⟩⇩0, ❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙𝗅⇧-⇧1❙[❙⟨τ⇩0 ?b❙⟩❙] ❙⋅ ❙𝗋❙[❙⟨τ⇩0 ?b❙⟩❙] ❙⋆ (❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩)) ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨τ⇩0 ?b❙⟩, ❙⟨F⇩0 ?b❙⟩⇩0, ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
❙𝖺❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩, ❙⟨F⇩0 ?b❙⟩⇩0 ❙⋆ ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
(❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩❙] ❙⋆ ❙𝖺❙[❙⟨F⇩0 ?b❙⟩⇩0, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙])⦄"
using f g fg * ** D.α_def D.α'.map_ide_simp D.VVV.ide_char⇩S⇩b⇩C D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C D.𝔩_ide_simp D.𝔯_ide_simp
by simp
also have "... = ⦃(❙𝗋⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩❙] ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙𝗅❙[❙⟨F f❙⟩❙] ❙⋆ ❙⟨τ⇩0' ?a❙⟩) ❙⋅
❙𝖺❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩, (❙⟨F⇩0 ?b❙⟩⇩0 ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
(❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩❙] ❙⋆ (❙⟨F⇩0 ?b❙⟩⇩0 ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩)⦄"
using f g fg by (intro EV.eval_eqI, auto)
also have "... = (𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg * ** D.α_def D.α'.map_ide_simp D.VVV.ide_char⇩S⇩b⇩C D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C D.𝔩_ide_simp D.𝔯_ide_simp
by simp
finally show ?thesis by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D G f) ⋅⇩D ((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D 𝗋⇩D[G f])
= (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]" "τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b" "G f" "𝗋⇩D[G f]"]
by simp
moreover have "(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= 𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
using f g fg * D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b]" "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b"
"G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a" "𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
ultimately show ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]
= 𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a)"
using f g fg D.assoc_naturality [of "τ⇩0' ?c ⋆⇩D G g" "τ⇩0 ?b" "𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b" "𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b]"
"𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a" "(F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = (𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b]" "τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b"
"F f ⋆⇩D τ⇩0' ?a" "𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= (𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a])) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b" "τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)"
"𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a" "(F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)" "τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g"
"F f ⋆⇩D τ⇩0' ?a" "𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a"]
by simp
finally have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D τ⇩0 ?b) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a])
= 𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b" "𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g]"
"D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a" "𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]"]
by simp
also have "... = (𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a])"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g]" "τ⇩0' ?c ⋆⇩D G g" "(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"
"(D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]"]
D.whisker_left
by simp
finally have "(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G⇩0 ?b) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a])
= (𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (G g ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a])) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (τ⇩1 g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (G g ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a
= ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom by simp
also have "... = (((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]
= ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a] ⋅⇩D
𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
using f g fg τ.iso_map⇩1_ide D.whisker_left D.comp_assoc by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D G g ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
using f g fg τ.iso_map⇩1_ide D.comp_arr_inv' by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
using f g fg τ.iso_map⇩1_ide D.comp_cod_arr by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_inv_arr' by simp
finally show ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a])) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D G g ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide
D.assoc'_naturality [of "τ⇩0' ?c" "G g" "D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (G g ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a])
= τ⇩0' ?c ⋆⇩D (G g ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D 𝖺⇩D[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]"
using f g fg τ.iso_map⇩1_ide D.whisker_left by simp
also have "... = τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((G g ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.assoc_naturality [of "G g" "D.inv (τ⇩1 f)" "τ⇩0' ?a"]
by simp
also have "... = (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (G g ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.whisker_left by simp
finally have "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D D.inv (τ⇩1 f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a])
= (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (G g ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
finally show ?thesis by simp
qed
moreover have "(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (τ⇩1 g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a
= ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.comp_arr_dom by auto
also have "... = (((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a]
= ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a] ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a]"
using f g fg D.whisker_left D.comp_assoc by simp
also have "... = ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D (τ⇩0 ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a]"
using f g fg D.comp_arr_inv' by simp
also have "... = ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a]"
using f g fg D.comp_cod_arr by simp
also have "... = ((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_inv_arr' by simp
finally show ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a])) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g)) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a]
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide
D.assoc'_naturality [of "τ⇩0' ?c" "D.inv (τ⇩1 g)" "F f ⋆⇩D τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (τ⇩1 g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a])
= τ⇩0' ?c ⋆⇩D (D.inv (τ⇩1 g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D 𝖺⇩D[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]"
using f g fg τ.iso_map⇩1_ide D.whisker_left by simp
also have "... = τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a] ⋅⇩D
((D.inv (τ⇩1 g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.assoc_naturality [of "D.inv (τ⇩1 g)" "F f" "τ⇩0' ?a"]
by simp
also have "... = (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (τ⇩1 g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.whisker_left by simp
finally have "(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a])
= (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (τ⇩1 g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
finally show ?thesis
by simp
qed
ultimately show ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (τ⇩1 g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a])
= τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"
proof -
have "(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, (τ⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?b, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D G g, τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, τ⇩0 ?b] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g ⋆⇩D τ⇩0 ?b, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D τ⇩0 ?b, F f, τ⇩0' ?a])
= ⦃(❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
❙𝖺❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨G g❙⟩, (❙⟨τ⇩0 ?b❙⟩ ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
((❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩) ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
❙𝖺❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨G g❙⟩,❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
(❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩❙] ❙⋆ ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩) ❙⋅
❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨G g❙⟩ ❙⋆ ❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
(❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙𝖺❙[❙⟨G g❙⟩ ❙⋆ ❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙])⦄"
using f g fg D.α_def D.α'.map_ide_simp D.VVV.ide_char⇩S⇩b⇩C D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C
by simp
also have "... = ⦃❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙𝖺❙[❙⟨G g❙⟩, ❙⟨τ⇩0 ?b❙⟩, ❙⟨F f❙⟩❙] ❙⋆ ❙⟨τ⇩0' ?a❙⟩⦄"
using f g fg by (intro EV.eval_eqI, auto)
also have "... = τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a"
using f g fg D.α_def D.α'.map_ide_simp D.VVV.ide_char⇩S⇩b⇩C D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C
by simp
finally show ?thesis by blast
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D (G g ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (τ⇩1 g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= τ⇩0' ?c ⋆⇩D ((G g ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[G g, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((D.inv (τ⇩1 g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.whisker_left by simp
also have "... = τ⇩0' ?c ⋆⇩D
(G g ⋆⇩D D.inv (τ⇩1 f)) ⋅⇩D 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋅⇩D (D.inv (τ⇩1 g) ⋆⇩D F f)
⋆⇩D τ⇩0' ?a"
using f g fg τ.iso_map⇩1_ide D.whisker_right by simp
also have "... = τ⇩0' ?c ⋆⇩D
𝖺⇩D[G g, G f, τ⇩0 ?a] ⋅⇩D
(D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋅⇩D
D.inv (τ⇩1 (g ⋆⇩C f)) ⋅⇩D
((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f])
⋆⇩D τ⇩0' ?a"
proof -
have 1: "(τ⇩1 g ⋆⇩D F f) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b, F f] ⋅⇩D (G g ⋆⇩D τ⇩1 f)
= D.inv ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f]) ⋅⇩D
τ⇩1 (g ⋆⇩C f) ⋅⇩D
(Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a]"
proof -
have "((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋅⇩D
(τ⇩1 g ⋆⇩D F f) ⋅⇩D D.inv 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋅⇩D (G g ⋆⇩D τ⇩1 f)) ⋅⇩D
𝖺⇩D[G g, G f, τ⇩0 ?a]
= τ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a)"
using f g fg τ.respects_hcomp D.comp_assoc by simp
hence "((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f]) ⋅⇩D
(τ⇩1 g ⋆⇩D F f) ⋅⇩D D.inv 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋅⇩D (G g ⋆⇩D τ⇩1 f)
= τ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a]"
using f g fg D.comp_assoc
D.invert_side_of_triangle(2)
[of "τ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a)"
"(τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋅⇩D
(τ⇩1 g ⋆⇩D F f) ⋅⇩D D.inv 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋅⇩D (G g ⋆⇩D τ⇩1 f)"
"𝖺⇩D[G g, G f, τ⇩0 ?a]"]
by fastforce
moreover have "D.iso ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f])"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_simp F.cmp_components_are_iso
F.FF_def
by (intro D.isos_compose D.seqI D.hseqI') auto
moreover have "D.seq (τ⇩1 (g ⋆⇩C f))
((Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a])"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_simp G.FF_def
by (intro D.seqI) auto
ultimately show ?thesis
using f g fg τ.iso_map⇩1_ide
D.invert_side_of_triangle(1)
[of "τ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a]"
"(τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f]"
"(τ⇩1 g ⋆⇩D F f) ⋅⇩D D.inv 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋅⇩D (G g ⋆⇩D τ⇩1 f)"]
by simp
qed
have "(G g ⋆⇩D D.inv (τ⇩1 f)) ⋅⇩D 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋅⇩D (D.inv (τ⇩1 g) ⋆⇩D F f)
= D.inv ((τ⇩1 g ⋆⇩D F f) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b, F f] ⋅⇩D (G g ⋆⇩D τ⇩1 f))"
proof -
have "D.inv ((τ⇩1 g ⋆⇩D F f) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b, F f] ⋅⇩D (G g ⋆⇩D τ⇩1 f))
= D.inv (𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b, F f] ⋅⇩D (G g ⋆⇩D τ⇩1 f)) ⋅⇩D D.inv (τ⇩1 g ⋆⇩D F f)"
proof -
have "D.iso ((τ⇩1 g ⋆⇩D F f) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, τ⇩0 ?b, F f] ⋅⇩D (G g ⋆⇩D τ⇩1 f))"
using f g fg τ.iso_map⇩1_ide
by (intro D.isos_compose) auto
moreover have "D.iso (τ⇩1 g ⋆⇩D F f)"
using f g fg τ.iso_map⇩1_ide by auto
ultimately show ?thesis
using τ.iso_map⇩1_ide D.inv_comp_left by simp
qed
also have "... = ((G g ⋆⇩D D.inv (τ⇩1 f)) ⋅⇩D 𝖺⇩D[G g, τ⇩0 ?b, F f]) ⋅⇩D
(D.inv (τ⇩1 g) ⋆⇩D F f)"
proof -
have "D.iso (𝖺⇩D⇧-⇧1[G g, τ⇩0 (src⇩C g), F f] ⋅⇩D (G g ⋆⇩D τ⇩1 f))"
using f g fg τ.iso_map⇩1_ide
by (intro D.isos_compose) auto
thus ?thesis
using f g fg τ.iso_map⇩1_ide D.inv_comp_left by simp
qed
finally show ?thesis
using D.comp_assoc by simp
qed
also have "... = D.inv (D.inv ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f]) ⋅⇩D
τ⇩1 (g ⋆⇩C f) ⋅⇩D
(Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a])"
using 1 by simp
also have "... = D.inv (τ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a]) ⋅⇩D
((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f])"
proof -
have 2: "D.iso ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f])"
using f g fg τ.iso_map⇩1_ide C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp F.cmp_components_are_iso
F.FF_def
by (intro D.isos_compose) auto
moreover have "D.iso (D.inv ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f]) ⋅⇩D
τ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a])"
using 2 f g fg τ.iso_map⇩1_ide C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp
C.VV.cod_simp F.FF_def G.FF_def D.inv_comp_left
by (intro D.isos_compose) auto
ultimately show ?thesis
using D.inv_comp_left
[of "D.inv ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f])"
"τ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a]"]
D.inv_inv D.iso_inv_iso
by metis
qed
also have "... = 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋅⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋅⇩D
D.inv (τ⇩1 (g ⋆⇩C f)) ⋅⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f])"
proof -
have "D.inv (τ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a])
= 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋅⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋅⇩D
D.inv (τ⇩1 (g ⋆⇩C f))"
proof -
have 2: "D.iso (τ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a])"
using f g fg τ.iso_map⇩1_ide C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp
C.VV.cod_simp G.FF_def
by (intro D.isos_compose D.seqI D.hseqI') auto
have "D.inv (τ⇩1 (g ⋆⇩C f) ⋅⇩D (Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a])
= D.inv ((Φ⇩G (g, f) ⋆⇩D τ⇩0 ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[G g, G f, τ⇩0 ?a]) ⋅⇩D D.inv (τ⇩1 (g ⋆⇩C f))"
using 2 f g fg * τ.iso_map⇩1_ide G.cmp_components_are_iso C.VV.arr_char⇩S⇩b⇩C
C.VV.dom_simp C.VV.cod_simp G.FF_def D.inv_comp_left
by simp
also have "... = (𝖺⇩D[G g, G f, τ⇩0 ?a] ⋅⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a)) ⋅⇩D
D.inv (τ⇩1 (g ⋆⇩C f))"
using 2 f g fg * τ.iso_map⇩1_ide G.cmp_components_are_iso C.VV.arr_char⇩S⇩b⇩C
C.VV.dom_simp C.VV.cod_simp G.FF_def D.inv_comp_left
by simp
also have "... = 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋅⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋅⇩D
D.inv (τ⇩1 (g ⋆⇩C f))"
using D.comp_assoc by simp
finally show ?thesis
using D.comp_assoc by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
finally have "(G g ⋆⇩D D.inv (τ⇩1 f)) ⋅⇩D 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋅⇩D (D.inv (τ⇩1 g) ⋆⇩D F f)
= 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋅⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋅⇩D
D.inv (τ⇩1 (g ⋆⇩C f)) ⋅⇩D (τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f]"
by blast
thus ?thesis by simp
qed
also have "... = τ⇩0' ?c ⋆⇩D
(𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.whisker_right
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_simp G.cmp_components_are_iso
F.FF_def G.FF_def
by simp
also have "... = (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide D.whisker_left
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_simp G.cmp_components_are_iso
F.FF_def G.FF_def
by simp
finally have "(τ⇩0' ?c ⋆⇩D (G g ⋆⇩D D.inv (τ⇩1 f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, τ⇩0 ?b, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (τ⇩1 g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g" "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g]"
"𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a" "(F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
D.whisker_right
by simp
also have "... = (𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g]" "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g"
"F f ⋆⇩D τ⇩0' ?a" "𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a"]
D.whisker_right
by simp
finally have "((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= (𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a)) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= (η ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g" "η ?c ⋆⇩D F g"
"𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a" "(F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = ((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_arr_dom D.comp_cod_arr
D.interchange [of "η ?c ⋆⇩D F g" "F⇩0 ?c ⋆⇩D F g" "F f ⋆⇩D τ⇩0' ?a" "𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a"]
by simp
finally have "(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D (F⇩0 ?b ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= ((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D (𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a) =
𝗅⇩D⇧-⇧1[F g] ⋆⇩D (𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D (𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a)"
using f g fg D.comp_cod_arr
D.interchange [of "F⇩0 ?c ⋆⇩D F g" "𝗅⇩D⇧-⇧1[F g]" "𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a" "𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = 𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D[F f] ⋅⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a"
using f g fg D.whisker_right by simp
also have "... = 𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a"
using f D.comp_arr_inv' by simp
finally have "((F⇩0 ?c ⋆⇩D F g) ⋆⇩D 𝗅⇩D[F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D 𝗅⇩D⇧-⇧1[F f] ⋆⇩D τ⇩0' ?a)
= 𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)
= 𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋅⇩D 𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
using f g fg * D.comp_arr_dom
D.interchange [of "𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b]" "𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g]"
"𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]" "(G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
using f g fg D.runit_hcomp(4) [of "τ⇩0' ?c" "G g"] by simp
finally have "(𝖺⇩D[τ⇩0' ?c, G g, G⇩0 ?b] ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(𝗋⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D G g] ⋆⇩D (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D G f ⋆⇩D ε ?a)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= (τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D (G f ⋆⇩D ε ?a) ⋅⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"
using f g fg D.comp_cod_arr
D.interchange [of "τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b" "τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]"
"G f ⋆⇩D ε ?a" "𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
also have "... = ((τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])"
using f g fg D.comp_arr_dom
D.interchange [of "τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]" "τ⇩0' ?c ⋆⇩D G g" "G f ⋆⇩D ε ?a"
"𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
finally have "((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G⇩0 ?b) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])
= ((τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D ((τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D G f ⋆⇩D ε ?a)
= (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋅⇩D (τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D 𝗋⇩D[G f] ⋅⇩D (G f ⋆⇩D ε ?a)"
using f g fg D.interchange by simp
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g] ⋅⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D 𝗋⇩D[G f] ⋅⇩D (G f ⋆⇩D ε ?a)"
using f g fg D.whisker_left by simp
also have "... = (τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗋⇩D[G f] ⋅⇩D (G f ⋆⇩D ε ?a)"
using g D.comp_arr_inv' by simp
also have "... = ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G f ⋆⇩D ε ?a)"
using f g fg D.whisker_left by simp
finally have "((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g]) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D⇧-⇧1[G g]) ⋆⇩D G f ⋆⇩D ε ?a)
= ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D ((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G f ⋆⇩D ε ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, (G f ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a]
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a] ⋅⇩D
(τ⇩0' ?c ⋆⇩D G g ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a])"
using f g fg
D.assoc'_naturality [of "τ⇩0' ?c" "G g" "𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a)
= τ⇩0' ?c ⋆⇩D (G g ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a)"
using f g fg D.whisker_left by simp
also have "... = τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a ⋆⇩D τ⇩0' ?a] ⋅⇩D
𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a]"
using f g fg D.pentagon by simp
also have "... = (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a])"
using f g fg D.whisker_left by simp
finally have "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D 𝖺⇩D[G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f ⋆⇩D τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a] ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G f ⋆⇩D G⇩0 ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G g ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G f ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a]
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G f ⋆⇩D G⇩0 ?a] ⋅⇩D (τ⇩0' ?c ⋆⇩D G g ⋆⇩D G f ⋆⇩D ε ?a)"
using f g fg D.assoc'_naturality [of "τ⇩0' ?c" "G g" "G f ⋆⇩D ε ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D
𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G f]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G g ⋆⇩D 𝗋⇩D[G f])) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G g ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a ⋆⇩D τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D G g) ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G f ⋆⇩D G⇩0 ?a]
= 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G f] ⋅⇩D (τ⇩0' ?c ⋆⇩D G g ⋆⇩D 𝗋⇩D[G f])"
using f g fg D.assoc'_naturality [of "τ⇩0' ?c" "G g" "𝗋⇩D[G f]"] by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G g ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a ⋆⇩D τ⇩0' ?a])) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D 𝖺⇩D⇧-⇧1[τ⇩0' ?c, G g, G f]) ⋅⇩D (τ⇩0' ?c ⋆⇩D G g ⋆⇩D 𝗋⇩D[G f])
= (τ⇩0' ?c ⋆⇩D G g ⋆⇩D 𝗋⇩D[G f])"
using f g fg D.comp_arr_inv' D.comp_cod_arr by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D G g ⋆⇩D 𝗋⇩D[G f]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, G⇩0 ?a])) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (G g ⋆⇩D G f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a ⋆⇩D τ⇩0' ?a])
= τ⇩0' ?c ⋆⇩D (G g ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a ⋆⇩D τ⇩0' ?a]"
using f g fg D.whisker_left by simp
also have "... = τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, G⇩0 ?a] ⋅⇩D ((G g ⋆⇩D G f) ⋆⇩D ε ?a)"
using f g fg D.assoc_naturality [of "G g" "G f" "ε ?a"] by simp
also have "... = (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, G⇩0 ?a]) ⋅⇩D (τ⇩0' ?c ⋆⇩D (G g ⋆⇩D G f) ⋆⇩D ε ?a)"
using f g fg * D.whisker_left by simp
finally have "(τ⇩0' ?c ⋆⇩D G g ⋆⇩D G f ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, τ⇩0 ?a ⋆⇩D τ⇩0' ?a])
= (τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g, G f, G⇩0 ?a]) ⋅⇩D (τ⇩0' ?c ⋆⇩D (G g ⋆⇩D G f) ⋆⇩D ε ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g ⋆⇩D G f]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (G g ⋆⇩D G f) ⋆⇩D ε ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
using f g fg * D.runit_hcomp D.whisker_left D.comp_assoc by simp
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g ⋆⇩D G f]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D (G g ⋆⇩D G f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)
= τ⇩0' ?c ⋆⇩D
𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)"
using f g fg G.cmp_components_are_iso D.whisker_left by simp
also have "... = τ⇩0' ?c ⋆⇩D
(D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]"
using f g fg G.cmp_components_are_iso
D.assoc_naturality [of "D.inv (Φ⇩G (g, f))" "τ⇩0 ?a" "τ⇩0' ?a"]
by simp
also have "... = (τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a])"
using f g fg G.cmp_components_are_iso D.whisker_left by simp
finally have "(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G g ⋆⇩D G f, τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a) ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g ⋆⇩D G f]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)) ⋆⇩D G⇩0 ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D (G g ⋆⇩D G f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)
= τ⇩0' ?c ⋆⇩D ((G g ⋆⇩D G f) ⋆⇩D ε ?a) ⋅⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)"
using f g fg G.cmp_components_are_iso D.whisker_left by simp
also have "... = τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D ε ?a)"
using f g fg * D.comp_arr_dom D.comp_cod_arr
D.interchange [of "G g ⋆⇩D G f" "D.inv (Φ⇩G (g, f))" "ε ?a" "τ⇩0 ?a ⋆⇩D τ⇩0' ?a"]
by simp
also have "... = τ⇩0' ?c ⋆⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D G⇩0 ?a) ⋅⇩D (G (g ⋆⇩C f) ⋆⇩D ε ?a)"
using f g fg * D.comp_arr_dom D.comp_cod_arr
D.interchange [of "D.inv (Φ⇩G (g, f))" "G (g ⋆⇩C f)" "G⇩0 ?a" "ε ?a"]
by simp
also have "... = (τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)) ⋆⇩D G⇩0 ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a)"
using f g fg * G.cmp_components_are_iso D.whisker_left by simp
finally have "(τ⇩0' ?c ⋆⇩D (G g ⋆⇩D G f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)) ⋆⇩D τ⇩0 ?a ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)) ⋆⇩D G⇩0 ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (((τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)))) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)])) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "(τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g ⋆⇩D G f]) ⋅⇩D (τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)) ⋆⇩D G⇩0 ?a)
= τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g ⋆⇩D G f] ⋅⇩D (D.inv (Φ⇩G (g, f)) ⋆⇩D G⇩0 ?a)"
using f g fg * G.cmp_components_are_iso D.whisker_left by simp
also have "... = τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)) ⋅⇩D 𝗋⇩D[G (g ⋆⇩C f)]"
using f g fg * G.cmp_components_are_iso D.runit_naturality [of "D.inv (Φ⇩G (g, f))"]
by simp
also have "... = (τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f))) ⋅⇩D (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)])"
using f g fg * G.cmp_components_are_iso D.whisker_left by simp
finally have "(τ⇩0' ?c ⋆⇩D 𝗋⇩D[G g ⋆⇩D G f]) ⋅⇩D (τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)) ⋆⇩D G⇩0 ?a) =
(τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f))) ⋅⇩D (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)])"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F g, F f, τ⇩0' ?a]"
proof -
have "((τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D (τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)))) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)])
= τ⇩0' ?c ⋆⇩D (Φ⇩G (g, f) ⋅⇩D D.inv (Φ⇩G (g, f))) ⋅⇩D 𝗋⇩D[G (g ⋆⇩C f)]"
using f g fg D.whisker_left G.cmp_components_are_iso
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_simp
by simp
also have "... = τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]"
using f g fg G.cmp_components_are_iso D.comp_arr_inv' D.comp_cod_arr by simp
finally have "((τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D (τ⇩0' ?c ⋆⇩D D.inv (Φ⇩G (g, f)))) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)])
= τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[F⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg D.assoc_naturality [of "𝗅⇩D⇧-⇧1[F g]" "F f" "τ⇩0' ?a"] D.comp_assoc by simp
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
proof -
have "((η ?c ⋆⇩D F g) ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D 𝖺⇩D[F⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]
= 𝖺⇩D[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, F f, τ⇩0' ?a] ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg **
D.assoc_naturality [of "η ?c ⋆⇩D F g" "F f" "τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a] ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((η ?c ⋆⇩D F g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
proof -
have "(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[(τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D F g, F f, τ⇩0' ?a]
= 𝖺⇩D[τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a] ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg D.assoc_naturality [of "𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g]" "F f" "τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a] ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((η ?c ⋆⇩D F g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D⇧-⇧1[trg⇩D (F g), F g, F f] ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)"
proof -
have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f) ⋆⇩D τ⇩0' ?a
= 𝖺⇩D⇧-⇧1[trg⇩D (F g), F g, F f] ⋅⇩D 𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a"
using f g fg D.lunit_hcomp(2) [of "F g" "F f"] by simp
also have "... = (𝖺⇩D⇧-⇧1[trg⇩D (F g), F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D (𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)"
using f g fg ** D.whisker_right [of "τ⇩0' ?a"] by simp
finally have "(𝗅⇩D⇧-⇧1[F g] ⋆⇩D F f) ⋆⇩D τ⇩0' ?a
= (𝖺⇩D⇧-⇧1[trg⇩D (F g), F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D (𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a] ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((η ?c ⋆⇩D F g ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)"
proof -
have "(((η ?c ⋆⇩D F g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D (𝖺⇩D⇧-⇧1[trg⇩D (F g), F g, F f] ⋆⇩D τ⇩0' ?a)
= ((η ?c ⋆⇩D F g) ⋆⇩D F f) ⋅⇩D 𝖺⇩D⇧-⇧1[trg⇩D (F g), F g, F f] ⋆⇩D τ⇩0' ?a"
using f g fg ** D.whisker_right by simp
also have "... = 𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D τ⇩0 ?c, F g, F f] ⋅⇩D (η ?c ⋆⇩D F g ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
using f g fg ** D.assoc'_naturality [of "η ?c" "F g" "F f"] by simp
also have "... = (𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
using f g fg ** D.whisker_right by simp
finally have "(((η ?c ⋆⇩D F g) ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D⇧-⇧1[trg⇩D (F g), F g, F f] ⋆⇩D τ⇩0' ?a)
= (𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g ⋆⇩D F f, τ⇩0' ?a]) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)"
proof -
have "(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a] ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a)
= 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g ⋆⇩D F f, τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)"
proof -
have "(τ⇩0' ?c ⋆⇩D 𝖺⇩D[τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D⇧-⇧1[τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g, F f ⋆⇩D τ⇩0' ?a] ⋅⇩D
𝖺⇩D[τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D F g, F f, τ⇩0' ?a] ⋅⇩D
((𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g] ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D⇧-⇧1[τ⇩0' ?c ⋆⇩D τ⇩0 ?c, F g, F f] ⋆⇩D τ⇩0' ?a)
= ⦃(❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙𝖺❙[❙⟨τ⇩0 ?c❙⟩, ❙⟨F g❙⟩, ❙⟨F f❙⟩❙] ❙⋆ ❙⟨τ⇩0' ?a❙⟩) ❙⋅
(❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙𝖺⇧-⇧1❙[❙⟨τ⇩0 ?c❙⟩ ❙⋆ ❙⟨F g❙⟩, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙]) ❙⋅
❙𝖺❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨τ⇩0 ?c❙⟩ ❙⋆ ❙⟨F g❙⟩, ❙⟨F f❙⟩ ❙⋆ ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
❙𝖺❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨τ⇩0 ?c❙⟩ ❙⋆ ❙⟨F g❙⟩, ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
((❙𝖺❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨τ⇩0 ?c❙⟩, ❙⟨F g❙⟩❙] ❙⋆ ❙⟨F f❙⟩) ❙⋆ ❙⟨τ⇩0' ?a❙⟩) ❙⋅
(❙𝖺⇧-⇧1❙[❙⟨τ⇩0' ?c❙⟩ ❙⋆ ❙⟨τ⇩0 ?c❙⟩, ❙⟨F g❙⟩, ❙⟨F f❙⟩❙] ❙⋆ ❙⟨τ⇩0' ?a❙⟩)⦄"
using f g fg D.α_def D.α'.map_ide_simp D.VVV.ide_char⇩S⇩b⇩C D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C
by simp
also have "... = ⦃❙𝖺❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨τ⇩0 ?c❙⟩ ❙⋆ ❙⟨F g❙⟩ ❙⋆ ❙⟨F f❙⟩, ❙⟨τ⇩0' ?a❙⟩❙] ❙⋅
(❙𝖺❙[❙⟨τ⇩0' ?c❙⟩, ❙⟨τ⇩0 ?c❙⟩, ❙⟨F g❙⟩ ❙⋆ ❙⟨F f❙⟩❙] ❙⋆ ❙⟨τ⇩0' ?a❙⟩)⦄"
using f g fg by (intro EV.eval_eqI, auto)
also have "... = 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g ⋆⇩D F f, τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)"
using f g fg D.α_def D.α'.map_ide_simp D.VVV.ide_char⇩S⇩b⇩C D.VVV.arr_char⇩S⇩b⇩C
D.VV.ide_char⇩S⇩b⇩C D.VV.arr_char⇩S⇩b⇩C
by simp
finally show ?thesis by simp
qed
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F (g ⋆⇩C f), τ⇩0' ?a] ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)) ⋅⇩D
((η ?c ⋆⇩D F g ⋆⇩D F f) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)"
proof -
have "(τ⇩0' ?c ⋆⇩D ((τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F g ⋆⇩D F f, τ⇩0' ?a]
= 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F (g ⋆⇩C f), τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_char⇩S⇩b⇩C F.FF_def
D.assoc_naturality [of "τ⇩0' ?c" "τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)" "τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F (g ⋆⇩C f), τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F (g ⋆⇩C f)] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)"
proof -
have "((τ⇩0' ?c ⋆⇩D (τ⇩0 ?c ⋆⇩D Φ⇩F (g, f))) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)
= (τ⇩0' ?c ⋆⇩D τ⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_char⇩S⇩b⇩C F.FF_def
D.whisker_right
by simp
also have "... = 𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F (g ⋆⇩C f)] ⋅⇩D
((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_char⇩S⇩b⇩C F.FF_def
D.assoc_naturality [of "τ⇩0' ?c" "τ⇩0 ?c" "Φ⇩F (g, f)"]
by simp
also have "... = (𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F (g ⋆⇩C f)] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_char⇩S⇩b⇩C F.FF_def
D.whisker_right
by simp
finally have "((τ⇩0' ?c ⋆⇩D (τ⇩0 ?c ⋆⇩D Φ⇩F (g, f))) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)
= (𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F (g ⋆⇩C f)] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F (g ⋆⇩C f), τ⇩0' ?a] ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F (g ⋆⇩C f)] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((F⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)"
proof -
have "(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= ((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D Φ⇩F (g, f)) ⋅⇩D (η ?c ⋆⇩D F g ⋆⇩D F f) ⋆⇩D τ⇩0' ?a"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_char⇩S⇩b⇩C F.FF_def D.whisker_right
by simp
also have "... = (η ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_char⇩S⇩b⇩C F.FF_def
D.interchange [of "τ⇩0' ?c ⋆⇩D τ⇩0 ?c" "η ?c" "Φ⇩F (g, f)" "F g ⋆⇩D F f"]
by simp
also have "... = (η ?c ⋆⇩D F (g ⋆⇩C f)) ⋅⇩D (F⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a"
using f g fg D.comp_arr_dom D.comp_cod_arr
C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_char⇩S⇩b⇩C F.FF_def
D.interchange [of "η ?c" "F⇩0 ?c" "F (g ⋆⇩C f)" "Φ⇩F (g, f)"]
by simp
also have "... = ((η ?c ⋆⇩D F (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D ((F⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)"
using f g fg ** C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_char⇩S⇩b⇩C F.FF_def D.whisker_right
by simp
finally have "(((τ⇩0' ?c ⋆⇩D τ⇩0 ?c) ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F g ⋆⇩D F f) ⋆⇩D τ⇩0' ?a)
= ((η ?c ⋆⇩D F (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D ((F⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F (g ⋆⇩C f), τ⇩0' ?a]) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F (g ⋆⇩C f)] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F (g ⋆⇩C f)] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(Φ⇩F (g, f) ⋆⇩D τ⇩0' ?a)"
proof -
have "((F⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D (𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)
= (F⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋅⇩D 𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a"
using f g fg ** C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_char⇩S⇩b⇩C F.FF_def D.whisker_right
by simp
also have "... = 𝗅⇩D⇧-⇧1[F (g ⋆⇩C f)] ⋅⇩D Φ⇩F (g, f) ⋆⇩D τ⇩0' ?a"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_char⇩S⇩b⇩C F.FF_def
D.lunit'_naturality [of "Φ⇩F (g, f)"]
by simp
also have "... = (𝗅⇩D⇧-⇧1[F (g ⋆⇩C f)] ⋆⇩D τ⇩0' ?a) ⋅⇩D (Φ⇩F (g, f) ⋆⇩D τ⇩0' ?a)"
using f g fg C.VV.arr_char⇩S⇩b⇩C C.VV.dom_simp C.VV.cod_char⇩S⇩b⇩C F.FF_def D.whisker_right
by simp
finally have "((F⇩0 ?c ⋆⇩D Φ⇩F (g, f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D (𝗅⇩D⇧-⇧1[F g ⋆⇩D F f] ⋆⇩D τ⇩0' ?a)
= (𝗅⇩D⇧-⇧1[F (g ⋆⇩C f)] ⋆⇩D τ⇩0' ?a) ⋅⇩D (Φ⇩F (g, f) ⋆⇩D τ⇩0' ?a)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (τ⇩0' ?c ⋆⇩D 𝗋⇩D[G (g ⋆⇩C f)]) ⋅⇩D
(τ⇩0' ?c ⋆⇩D G (g ⋆⇩C f) ⋆⇩D ε ?a) ⋅⇩D
(τ⇩0' ?c ⋆⇩D 𝖺⇩D[G (g ⋆⇩C f), τ⇩0 ?a, τ⇩0' ?a]) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, G (g ⋆⇩C f) ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f))) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c, F (g ⋆⇩C f)] ⋆⇩D τ⇩0' ?a) ⋅⇩D
((η ?c ⋆⇩D F (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
(𝗅⇩D⇧-⇧1[F (g ⋆⇩C f)] ⋆⇩D τ⇩0' ?a) ⋅⇩D
(Φ⇩F (g, f) ⋆⇩D τ⇩0' ?a)"
proof -
have "(τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f)) ⋆⇩D τ⇩0' ?a) ⋅⇩D
𝖺⇩D[τ⇩0' ?c, τ⇩0 ?c ⋆⇩D F (g ⋆⇩C f), τ⇩0' ?a]
= 𝖺⇩D[τ⇩0' ?c, G (g ⋆⇩C f) ⋆⇩D τ⇩0 ?a, τ⇩0' ?a] ⋅⇩D
((τ⇩0' ?c ⋆⇩D D.inv (τ⇩1 (g ⋆⇩C f))) ⋆⇩D τ⇩0' ?a)"
using f g fg τ.iso_map⇩1_ide
D.assoc_naturality [of "τ⇩0' ?c" "D.inv (τ⇩1 (g ⋆⇩C f))" "τ⇩0' ?a"]
by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = τ⇩1' (g ⋆⇩C f) ⋅⇩D (Φ⇩F (g, f) ⋆⇩D τ⇩0' ?a)"
unfolding map⇩1_def
using f g fg D.comp_assoc by simp
finally show "(τ⇩0' ?c ⋆⇩D Φ⇩G (g, f)) ⋅⇩D 𝖺⇩D[τ⇩0' ?c, G g, G f] ⋅⇩D (τ⇩1' g ⋆⇩D G f) ⋅⇩D
D.inv 𝖺⇩D[F g, τ⇩0' (src⇩C g), G f] ⋅⇩D (F g ⋆⇩D τ⇩1' f) ⋅⇩D 𝖺⇩D[F g, F f, τ⇩0' ?a]
= τ⇩1' (g ⋆⇩C f) ⋅⇩D (Φ⇩F (g, f) ⋆⇩D τ⇩0' ?a)"
by blast
qed
qed
lemma is_pseudonatural_equivalence:
shows "pseudonatural_equivalence
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G F Φ⇩F τ⇩0' τ⇩1'"
..
end
subsection "Pseudonaturally Equivalent Pseudofunctors"
text ‹
Pseudofunctors ‹F› and ‹G› are \emph{pseudonaturally equivalent} if there is a
pseudonatural equivalence between them.
›
definition pseudonaturally_equivalent
where "pseudonaturally_equivalent
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G ≡
∃τ⇩0 τ⇩1. pseudonatural_equivalence
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G τ⇩0 τ⇩1"
lemma pseudonaturally_equivalent_reflexive:
assumes "pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F"
shows "pseudonaturally_equivalent
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F F Φ⇩F"
proof -
interpret F: pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F
using assms by simp
interpret identity_pseudonatural_transformation
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F
..
show ?thesis
using pseudonatural_equivalence_axioms pseudonaturally_equivalent_def by blast
qed
lemma pseudonaturally_equivalent_symmetric:
assumes "pseudonaturally_equivalent
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G"
shows "pseudonaturally_equivalent
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C G Φ⇩G F Φ⇩F"
proof -
obtain τ⇩0 τ⇩1 where τ: "pseudonatural_equivalence
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G τ⇩0 τ⇩1"
using assms pseudonaturally_equivalent_def by blast
interpret τ: pseudonatural_equivalence
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
using τ by simp
interpret σ: converse_pseudonatural_equivalence
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
..
show ?thesis
using σ.is_pseudonatural_equivalence pseudonaturally_equivalent_def by blast
qed
lemma pseudonaturally_equivalent_transitive:
assumes "pseudonaturally_equivalent
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G"
and "pseudonaturally_equivalent
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C G Φ⇩G H Φ⇩H"
shows "pseudonaturally_equivalent
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F H Φ⇩H"
proof -
obtain τ⇩0 τ⇩1 where τ: "pseudonatural_equivalence
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G τ⇩0 τ⇩1"
using assms pseudonaturally_equivalent_def by blast
interpret τ: pseudonatural_equivalence
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
using τ by simp
obtain σ⇩0 σ⇩1 where σ: "pseudonatural_equivalence
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C G Φ⇩G H Φ⇩H σ⇩0 σ⇩1"
using assms pseudonaturally_equivalent_def by blast
interpret σ: pseudonatural_equivalence
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C G Φ⇩G H Φ⇩H σ⇩0 σ⇩1
using σ by simp
interpret στ: composite_pseudonatural_equivalence V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G H Φ⇩H τ⇩0 τ⇩1 σ⇩0 σ⇩1
..
show ?thesis
using στ.pseudonatural_equivalence_axioms pseudonaturally_equivalent_def by blast
qed
text ‹
If ‹τ› is a pseudonatural equivalence from pseudofunctor ‹F› to pseudofunctor ‹G›
and ‹σ› is the converse equivalence, then ‹F› is locally naturally isomorphic to
the functor that takes a 2-cell ‹μ› of ‹C› to ‹σ⇩0 (trg⇩C μ) ⋆⇩D G μ ⋆⇩D τ⇩0 (src⇩C μ)›
and symmetrically for ‹G›. Here we just establish the naturality property and
and that each 1-cell ‹«g : a →⇩C a'»› is isomorphic to ‹τ⇩0 a' ⋆⇩D (σ⇩0 a' ⋆⇩D g ⋆⇩D τ⇩0 a) ⋆⇩D σ⇩0 a›.
We ultimately need these results to prove that a pseudofunctor extends to an
equivalence of bicategories if and only if it is an equivalence pseudofunctor.
›
context pseudonatural_equivalence
begin
interpretation σ: converse_pseudonatural_equivalence
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
..
abbreviation (input) σ⇩0
where "σ⇩0 ≡ σ.map⇩0"
definition φ
where "φ f ≡ 𝖺⇩D[τ⇩0 (trg⇩C f), F f, σ⇩0 (src⇩C f)] ⋅⇩D
(τ⇩1 f ⋆⇩D σ⇩0 (src⇩C f)) ⋅⇩D
𝖺⇩D⇧-⇧1[G f, τ⇩0 (src⇩C f), σ⇩0 (src⇩C f)] ⋅⇩D
(G f ⋆⇩D D.inv (σ.ε (src⇩C f))) ⋅⇩D
𝗋⇩D⇧-⇧1[G f]"
lemma φ_in_hom [intro]:
assumes "C.ide f"
shows "«φ f : G f ⇒⇩D τ⇩0 (trg⇩C f) ⋆⇩D F f ⋆⇩D σ⇩0 (src⇩C f)»"
unfolding φ_def
using assms by (intro D.comp_in_homI' D.hseqI') auto
lemma iso_φ:
assumes "C.ide f"
shows "D.iso (φ f)"
unfolding φ_def
using assms iso_map⇩1_ide
by (intro D.isos_compose) auto
definition ψ
where "ψ f ≡ (σ⇩0 (trg⇩C f) ⋆⇩D D.inv (τ⇩1 f)) ⋅⇩D
𝖺⇩D[σ⇩0 (trg⇩C f), τ⇩0 (trg⇩C f), F f] ⋅⇩D
(σ.η (trg⇩C f) ⋆⇩D F f) ⋅⇩D
𝗅⇩D⇧-⇧1[F f]"
lemma ψ_in_hom [intro]:
assumes "C.ide f"
shows "«ψ f : F f ⇒⇩D σ⇩0 (trg⇩C f) ⋆⇩D G f ⋆⇩D τ⇩0 (src⇩C f)»"
unfolding ψ_def
using assms iso_map⇩1_ide
by (intro D.comp_in_homI' D.hseqI') auto
lemma iso_ψ:
assumes "C.ide f"
shows "D.iso (ψ f)"
unfolding ψ_def
using assms iso_map⇩1_ide
by (intro D.isos_compose) auto
lemma ψ_naturality:
assumes "C.arr μ"
shows "(σ⇩0 (trg⇩C μ) ⋆⇩D G μ ⋆⇩D τ⇩0 (src⇩C μ)) ⋅⇩D ψ (C.dom μ) = ψ (C.cod μ) ⋅⇩D F μ"
and "D.inv (ψ (C.cod μ)) ⋅⇩D (σ⇩0 (trg⇩C μ) ⋆⇩D G μ ⋆⇩D τ⇩0 (src⇩C μ)) ⋅⇩D ψ (C.dom μ) = F μ"
proof -
let ?a = "src⇩C μ" and ?a' = "trg⇩C μ"
let ?f = "C.dom μ" and ?f' = "C.cod μ"
have "(σ⇩0 ?a' ⋆⇩D G μ ⋆⇩D τ⇩0 ?a) ⋅⇩D ψ (C.dom μ)
= ((σ⇩0 ?a' ⋆⇩D G μ ⋆⇩D τ⇩0 ?a) ⋅⇩D
(σ⇩0 ?a' ⋆⇩D D.inv (τ⇩1 ?f))) ⋅⇩D
𝖺⇩D[σ⇩0 ?a', τ⇩0 ?a', F ?f] ⋅⇩D
(σ.η ?a' ⋆⇩D F ?f) ⋅⇩D
𝗅⇩D⇧-⇧1[F ?f]"
unfolding ψ_def
using assms D.comp_assoc by simp
also have "... = (σ⇩0 ?a' ⋆⇩D D.inv (τ⇩1 ?f')) ⋅⇩D
((σ⇩0 ?a' ⋆⇩D τ⇩0 ?a' ⋆⇩D F μ) ⋅⇩D
𝖺⇩D[σ⇩0 ?a', τ⇩0 ?a', F ?f]) ⋅⇩D
(σ.η ?a' ⋆⇩D F ?f) ⋅⇩D
𝗅⇩D⇧-⇧1[F ?f]"
proof -
have "(σ⇩0 ?a' ⋆⇩D G μ ⋆⇩D τ⇩0 ?a) ⋅⇩D (σ⇩0 ?a' ⋆⇩D D.inv (τ⇩1 ?f))
= σ⇩0 ?a' ⋆⇩D (G μ ⋆⇩D τ⇩0 ?a) ⋅⇩D D.inv (τ⇩1 ?f)"
using assms D.whisker_left iso_map⇩1_ide by simp
also have "... = σ⇩0 ?a' ⋆⇩D D.inv (τ⇩1 ?f') ⋅⇩D (τ⇩0 ?a' ⋆⇩D F μ)"
using assms naturality iso_map⇩1_ide
D.invert_opposite_sides_of_square
[of "τ⇩1 ?f'" "G μ ⋆⇩D τ⇩0 ?a" "τ⇩0 ?a' ⋆⇩D F μ" "τ⇩1 ?f"]
by simp
also have "... = (σ⇩0 ?a' ⋆⇩D D.inv (τ⇩1 ?f')) ⋅⇩D (σ⇩0 ?a' ⋆⇩D τ⇩0 ?a' ⋆⇩D F μ)"
using assms D.whisker_left iso_map⇩1_ide by simp
finally have "(σ⇩0 ?a' ⋆⇩D G μ ⋆⇩D τ⇩0 ?a) ⋅⇩D (σ⇩0 ?a' ⋆⇩D D.inv (τ⇩1 ?f))
= (σ⇩0 ?a' ⋆⇩D D.inv (τ⇩1 ?f')) ⋅⇩D (σ⇩0 ?a' ⋆⇩D τ⇩0 ?a' ⋆⇩D F μ)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (σ⇩0 ?a' ⋆⇩D D.inv (τ⇩1 ?f')) ⋅⇩D
𝖺⇩D[σ⇩0 ?a', τ⇩0 ?a', F ?f'] ⋅⇩D
(((σ⇩0 ?a' ⋆⇩D τ⇩0 ?a') ⋆⇩D F μ) ⋅⇩D
(σ.η ?a' ⋆⇩D F ?f)) ⋅⇩D
𝗅⇩D⇧-⇧1[F ?f]"
proof -
have "(σ⇩0 ?a' ⋆⇩D τ⇩0 ?a' ⋆⇩D F μ) ⋅⇩D 𝖺⇩D[σ⇩0 ?a', τ⇩0 ?a', F ?f]
= 𝖺⇩D[σ⇩0 ?a', τ⇩0 ?a', F ?f'] ⋅⇩D ((σ⇩0 ?a' ⋆⇩D τ⇩0 ?a') ⋆⇩D F μ)"
using assms D.assoc_naturality [of "σ⇩0 ?a'" "τ⇩0 ?a'" "F μ"] by simp
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = (σ⇩0 ?a' ⋆⇩D D.inv (τ⇩1 ?f')) ⋅⇩D
𝖺⇩D[σ⇩0 ?a', τ⇩0 ?a', F ?f'] ⋅⇩D
(σ.η ?a' ⋆⇩D F ?f') ⋅⇩D
(F.map⇩0 ?a' ⋆⇩D F μ) ⋅⇩D
𝗅⇩D⇧-⇧1[F ?f]"
proof -
have "((σ⇩0 ?a' ⋆⇩D τ⇩0 ?a') ⋆⇩D F μ) ⋅⇩D (σ.η ?a' ⋆⇩D F ?f)
= (σ⇩0 ?a' ⋆⇩D τ⇩0 ?a') ⋅⇩D σ.η ?a' ⋆⇩D F μ ⋅⇩D F ?f"
using assms D.interchange [of "σ⇩0 ?a' ⋆⇩D τ⇩0 ?a'" "σ.η ?a'" "F μ" "F ?f"]
by simp
also have "... = σ.η ?a' ⋅⇩D F.map⇩0 ?a' ⋆⇩D F ?f' ⋅⇩D F μ"
using assms D.comp_arr_dom D.comp_cod_arr by simp
also have "... = (σ.η ?a' ⋆⇩D F ?f') ⋅⇩D (F.map⇩0 ?a' ⋆⇩D F μ)"
using assms D.interchange [of "σ.η ?a'" "F.map⇩0 ?a'" "F ?f'" "F μ"]
σ.unit_in_hom [of ?a']
by fastforce
finally have "((σ⇩0 ?a' ⋆⇩D τ⇩0 ?a') ⋆⇩D F μ) ⋅⇩D (σ.η ?a' ⋆⇩D F ?f)
= (σ.η ?a' ⋆⇩D F ?f') ⋅⇩D (F.map⇩0 ?a' ⋆⇩D F μ)"
by blast
thus ?thesis
using D.comp_assoc by simp
qed
also have "... = ψ ?f' ⋅⇩D F μ"
proof -
have "(F.map⇩0 ?a' ⋆⇩D F μ) ⋅⇩D 𝗅⇩D⇧-⇧1[F ?f] = 𝗅⇩D⇧-⇧1[F ?f'] ⋅⇩D F μ"
using assms D.lunit'_naturality [of "F μ"] by simp
thus ?thesis
unfolding ψ_def
using assms D.comp_assoc by simp
qed
finally show "(σ⇩0 ?a' ⋆⇩D G μ ⋆⇩D τ⇩0 ?a) ⋅⇩D ψ (C.dom μ) = ψ ?f' ⋅⇩D F μ"
by blast
thus "D.inv (ψ ?f') ⋅⇩D (σ⇩0 ?a' ⋆⇩D G μ ⋆⇩D τ⇩0 ?a) ⋅⇩D ψ (C.dom μ) = F μ"
using assms ψ_in_hom iso_ψ
by (metis C.ide_cod D.in_homE D.invert_side_of_triangle(1) D.seqI
F.preserves_arr F.preserves_cod)
qed
lemma isomorphic_expansion:
assumes "C.obj a" and "C.obj a'" and "«g : G.map⇩0 a →⇩D G.map⇩0 a'»" and "D.ide g"
shows "D.isomorphic (τ⇩0 a' ⋆⇩D (σ⇩0 a' ⋆⇩D g ⋆⇩D τ⇩0 a) ⋆⇩D σ⇩0 a) g"
proof -
let ?g' = "σ⇩0 a' ⋆⇩D g ⋆⇩D τ⇩0 a"
have g': "«?g' : F.map⇩0 a →⇩D F.map⇩0 a'»"
using assms ide_map⇩0_obj σ.map⇩0_simps(3) C.obj_simps
by (intro D.in_hhomI D.hseqI') auto
have ide_g': "D.ide ?g'"
using assms g' σ.ide_map⇩0_obj ide_map⇩0_obj by blast
let ?ψ = "(σ⇩0 a' ⋆⇩D 𝗋⇩D[g]) ⋅⇩D (σ⇩0 a' ⋆⇩D g ⋆⇩D σ.ε a) ⋅⇩D
(σ⇩0 a' ⋆⇩D 𝖺⇩D[g, τ⇩0 a, σ⇩0 a]) ⋅⇩D 𝖺⇩D[σ⇩0 a', g ⋆⇩D τ⇩0 a, σ⇩0 a]"
have ψ: "«?ψ : ?g' ⋆⇩D σ⇩0 a ⇒⇩D σ⇩0 a' ⋆⇩D g»"
proof (intro D.comp_in_homI)
show "«𝖺⇩D[σ⇩0 a', g ⋆⇩D τ⇩0 a, σ⇩0 a] :
(σ⇩0 a' ⋆⇩D g ⋆⇩D τ⇩0 a) ⋆⇩D σ⇩0 a ⇒⇩D σ⇩0 a' ⋆⇩D (g ⋆⇩D τ⇩0 a) ⋆⇩D σ⇩0 a»"
using assms g' by fastforce
show "«σ⇩0 a' ⋆⇩D 𝖺⇩D[g, τ⇩0 a, σ⇩0 a] :
σ⇩0 a' ⋆⇩D (g ⋆⇩D τ⇩0 a) ⋆⇩D σ⇩0 a ⇒⇩D σ⇩0 a' ⋆⇩D g ⋆⇩D τ⇩0 a ⋆⇩D σ⇩0 a»"
using assms g' by fastforce
show "«σ⇩0 a' ⋆⇩D g ⋆⇩D σ.ε a :
σ⇩0 a' ⋆⇩D g ⋆⇩D τ⇩0 a ⋆⇩D σ⇩0 a ⇒⇩D σ⇩0 a' ⋆⇩D g ⋆⇩D G.map⇩0 a»"
using assms C.obj_simps
by (intro D.hcomp_in_vhom) auto
show "«σ⇩0 a' ⋆⇩D 𝗋⇩D[g] : σ⇩0 a' ⋆⇩D g ⋆⇩D G.map⇩0 a ⇒⇩D σ⇩0 a' ⋆⇩D g»"
using assms
apply (intro D.hcomp_in_vhom)
apply auto
by fastforce
qed
have iso_ψ: "D.iso ?ψ"
using assms g' ψ ide_g' ide_map⇩0_obj C.obj_simps
by (intro D.isos_compose) auto
let ?φ = "𝗅⇩D[g] ⋅⇩D (σ.ε a' ⋆⇩D g) ⋅⇩D 𝖺⇩D⇧-⇧1[τ⇩0 a', σ⇩0 a', g] ⋅⇩D (τ⇩0 a' ⋆⇩D ?ψ)"
have φ: "«?φ : τ⇩0 a' ⋆⇩D ?g' ⋆⇩D σ⇩0 a ⇒⇩D g»"
proof (intro D.comp_in_homI)
show "«τ⇩0 a' ⋆⇩D ?ψ : τ⇩0 a' ⋆⇩D ?g' ⋆⇩D σ⇩0 a ⇒⇩D τ⇩0 a' ⋆⇩D σ⇩0 a' ⋆⇩D g»"
using assms g' ψ C.obj_simps
by (intro D.hcomp_in_vhom) auto
show "«𝖺⇩D⇧-⇧1[τ⇩0 a', σ⇩0 a', g] : τ⇩0 a' ⋆⇩D σ⇩0 a' ⋆⇩D g ⇒⇩D (τ⇩0 a' ⋆⇩D σ⇩0 a') ⋆⇩D g»"
proof -
have "src⇩D (τ⇩0 a') = trg⇩D (σ⇩0 a')"
using assms by auto
moreover have "src⇩D (σ⇩0 a') = trg⇩D g"
using assms by auto
ultimately show ?thesis
using assms ide_map⇩0_obj σ.ide_map⇩0_obj by auto
qed
show "«σ.ε a' ⋆⇩D g : (τ⇩0 a' ⋆⇩D σ⇩0 a') ⋆⇩D g ⇒⇩D G.map⇩0 a' ⋆⇩D g»"
using assms by fastforce
show "«𝗅⇩D[g] : G.map⇩0 a' ⋆⇩D g ⇒⇩D g»"
using assms by auto
qed
have iso_φ: "D.iso ?φ"
using assms g' φ ψ iso_ψ ide_map⇩0_obj iso_map⇩1_ide σ.ide_map⇩0_obj
apply (intro D.isos_compose)
apply (meson D.arrI D.hseqE D.ide_is_iso D.iso_hcomp D.seqE)
apply (metis D.hseqE D.in_hhomE D.iso_assoc' D.trg_hcomp F.map⇩0_def map⇩0_simps(2))
by auto
show ?thesis
using φ iso_φ D.isomorphic_def by auto
qed
end
text ‹
Here we show that pseudonatural equivalence respects equivalence pseudofunctors,
in the sense that a pseudofunctor ‹G›, pseudonaturally equivalent to an
equivalence pseudofunctor ‹F›, is itself an equivalence pseudofunctor.
›
locale pseudofunctor_pseudonaturally_equivalent_to_equivalence_pseudofunctor =
C: bicategory V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C +
D: bicategory V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D +
F: equivalence_pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F +
pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G +
τ: pseudonatural_equivalence V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
for V⇩C :: "'c comp" (infixr ‹⋅⇩C› 55)
and H⇩C :: "'c comp" (infixr ‹⋆⇩C› 53)
and 𝖺⇩C :: "'c ⇒ 'c ⇒ 'c ⇒ 'c" (‹𝖺⇩C[_, _, _]›)
and 𝗂⇩C :: "'c ⇒ 'c" (‹𝗂⇩C[_]›)
and src⇩C :: "'c ⇒ 'c"
and trg⇩C :: "'c ⇒ 'c"
and V⇩D :: "'d comp" (infixr ‹⋅⇩D› 55)
and H⇩D :: "'d comp" (infixr ‹⋆⇩D› 53)
and 𝖺⇩D :: "'d ⇒ 'd ⇒ 'd ⇒ 'd" (‹𝖺⇩D[_, _, _]›)
and 𝗂⇩D :: "'d ⇒ 'd" (‹𝗂⇩D[_]›)
and src⇩D :: "'d ⇒ 'd"
and trg⇩D :: "'d ⇒ 'd"
and F :: "'c ⇒ 'd"
and Φ⇩F :: "'c * 'c ⇒ 'd"
and G :: "'c ⇒ 'd"
and Φ⇩G :: "'c * 'c ⇒ 'd"
and τ⇩0 :: "'c ⇒ 'd"
and τ⇩1 :: "'c ⇒ 'd"
begin
interpretation σ': converse_pseudonatural_equivalence
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
..
sublocale G: equivalence_pseudofunctor
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G
proof
show "⋀μ μ'. ⟦C.par μ μ'; G μ = G μ'⟧ ⟹ μ = μ'"
proof -
fix μ μ'
assume par: "C.par μ μ'" and eq: "G μ = G μ'"
let ?a = "src⇩C μ" and ?a' = "trg⇩C μ"
let ?f = "C.dom μ" and ?f' = "C.cod μ"
have "τ⇩0 ?a' ⋆⇩D F μ = (τ⇩0 ?a' ⋆⇩D F μ) ⋅⇩D τ⇩1 ?f ⋅⇩D D.inv (τ⇩1 ?f)"
using par τ.ide_map⇩0_obj τ.iso_map⇩1_ide D.comp_arr_dom D.comp_arr_inv'
τ.map⇩1_in_hom [of μ]
by (metis C.dom_trg C.ide_dom C.obj_trg C.trg.preserves_dom D.whisker_left
F.as_nat_trans.naturality2 F.as_nat_trans.naturality F.preserves_arr
τ.map⇩1_simps(5))
also have "... = ((τ⇩0 ?a' ⋆⇩D F μ) ⋅⇩D τ⇩1 ?f) ⋅⇩D D.inv (τ⇩1 ?f)"
using D.comp_assoc by simp
also have "... = ((τ⇩0 ?a' ⋆⇩D F μ') ⋅⇩D τ⇩1 ?f) ⋅⇩D D.inv (τ⇩1 ?f)"
using eq par τ.naturality [of μ] τ.naturality [of μ'] C.src_cod C.trg_cod by metis
also have 1: "... = (τ⇩0 ?a' ⋆⇩D F μ') ⋅⇩D τ⇩1 ?f ⋅⇩D D.inv (τ⇩1 ?f)"
using D.comp_assoc by blast
also have "... = τ⇩0 ?a' ⋆⇩D F μ'"
using par τ.iso_map⇩1_ide D.comp_arr_dom D.comp_arr_inv' τ.map⇩1_in_hom [of μ']
by (metis 1 C.ide_dom C.trg_cod D.hseqE D.hseqI' D.hseq_char' D.seqE
F.preserves_arr F.preserves_trg calculation)
finally have "τ⇩0 ?a' ⋆⇩D F μ = τ⇩0 ?a' ⋆⇩D F μ'"
by blast
hence "F μ = F μ'"
using par τ.components_are_equivalences
D.equivalence_cancel_left [of "τ⇩0 ?a'" "F μ" "F μ'"]
by simp
thus "μ = μ'"
using par F.is_faithful by blast
qed
show "⋀b. D.obj b ⟹ ∃a. C.obj a ∧ D.equivalent_objects (map⇩0 a) b"
proof -
fix b
assume b: "D.obj b"
obtain a where a: "C.obj a ∧ D.equivalent_objects (F.map⇩0 a) b"
using b F.biessentially_surjective_on_objects by blast
have "D.equivalent_objects (F.map⇩0 a) (map⇩0 a)"
using a τ.components_are_equivalences D.equivalent_objects_def
by (metis F.map⇩0_def map⇩0_def τ.map⇩0_in_hhom)
hence "D.equivalent_objects (map⇩0 a) b"
using a D.equivalent_objects_symmetric D.equivalent_objects_transitive by blast
thus "∃a. C.obj a ∧ D.equivalent_objects (map⇩0 a) b"
using a by auto
qed
show "⋀a a' g. ⟦C.obj a; C.obj a'; «g : map⇩0 a →⇩D map⇩0 a'»; D.ide g⟧
⟹ ∃f. «f : a →⇩C a'» ∧ C.ide f ∧ D.isomorphic (G f) g"
proof -
fix a a' g
assume a: "C.obj a" and a': "C.obj a'"
assume g: "«g : map⇩0 a →⇩D map⇩0 a'»" and ide_g: "D.ide g"
interpret σ: converse_pseudonatural_equivalence
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
..
interpret σ: pseudonatural_equivalence
V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D
G Φ⇩G F Φ⇩F σ'.map⇩0 σ'.map⇩1
using σ'.is_pseudonatural_equivalence by simp
let ?g' = "σ'.map⇩0 a' ⋆⇩D g ⋆⇩D τ⇩0 a"
have g': "«?g' : F.map⇩0 a →⇩D F.map⇩0 a'»"
using a a' g τ.ide_map⇩0_obj σ'.map⇩0_simps(3) C.obj_simps
by (intro D.in_hhomI D.hseqI') auto
have ide_g': "D.ide ?g'"
using a a' g g' ide_g
by (meson D.hcomp_in_hhomE D.hseqE D.ide_hcomp σ'.ide_map⇩0_obj τ.ide_map⇩0_obj)
obtain f where f: "«f : a →⇩C a'» ∧ C.ide f ∧ D.isomorphic (F f) ?g'"
using a a' g g' ide_g' F.locally_essentially_surjective [of a a' ?g'] by auto
obtain ξ where ξ: "«ξ : F f ⇒⇩D ?g'» ∧ D.iso ξ"
using f D.isomorphic_def by blast
have "D.isomorphic (G f) g"
proof -
have "D.isomorphic (G f) (τ⇩0 a' ⋆⇩D F f ⋆⇩D σ'.map⇩0 a)"
using a a' f τ.iso_φ D.isomorphic_def by blast
also have "D.isomorphic ... (τ⇩0 a' ⋆⇩D ?g' ⋆⇩D σ'.map⇩0 a)"
using a a' g' ξ D.isomorphic_def
by (metis D.hcomp_ide_isomorphic D.hcomp_isomorphic_ide D.hseqE D.ideD(1)
D.isomorphic_implies_ide(2) σ'.ide_map⇩0_obj calculation τ.ide_map⇩0_obj)
also have "D.isomorphic ... g"
using a a' g ide_g τ.isomorphic_expansion by simp
finally show ?thesis by blast
qed
thus "∃f. «f : a →⇩C a'» ∧ C.ide f ∧ D.isomorphic (G f) g"
using f by auto
qed
show "⋀f f' ν. ⟦C.ide f; C.ide f'; src⇩C f = src⇩C f'; trg⇩C f = trg⇩C f'; «ν : G f ⇒⇩D G f'»⟧
⟹ ∃μ. «μ : f ⇒⇩C f'» ∧ G μ = ν"
proof -
fix f f' ν
assume f: "C.ide f" and f': "C.ide f'"
and eq_src: "src⇩C f = src⇩C f'" and eq_trg: "trg⇩C f = trg⇩C f'"
and ν: "«ν : G f ⇒⇩D G f'»"
let ?a = "src⇩C f" and ?a' = "trg⇩C f"
let ?ν' = "D.inv (τ.ψ f') ⋅⇩D (σ'.map⇩0 ?a' ⋆⇩D ν ⋆⇩D τ⇩0 ?a) ⋅⇩D τ.ψ f"
have ν': "«?ν' : F f ⇒⇩D F f'»"
proof (intro D.comp_in_homI)
show "«τ.ψ f : F f ⇒⇩D σ'.map⇩0 ?a' ⋆⇩D G f ⋆⇩D τ⇩0 ?a»"
using f τ.ψ_in_hom [of f] by blast
show "«σ'.map⇩0 ?a' ⋆⇩D ν ⋆⇩D τ⇩0 ?a :
σ'.map⇩0 ?a' ⋆⇩D G f ⋆⇩D τ⇩0 ?a ⇒⇩D σ'.map⇩0 ?a' ⋆⇩D G f' ⋆⇩D τ⇩0 ?a»"
using f ν by (intro D.hcomp_in_vhom) auto
show "«D.inv (τ.ψ f') : σ'.map⇩0 ?a' ⋆⇩D G f' ⋆⇩D τ⇩0 ?a ⇒⇩D F f'»"
using f' τ.iso_ψ eq_src eq_trg by auto
qed
obtain μ where μ: "«μ : f ⇒⇩C f'» ∧ F μ = ?ν'"
using f f' eq_src eq_trg ν' F.locally_full [of f f' ?ν'] by blast
have "G μ = ν"
proof -
have "D.inv (τ.ψ f') ⋅⇩D (σ'.map⇩0 (trg⇩C μ) ⋆⇩D G μ ⋆⇩D τ⇩0 (src⇩C μ)) ⋅⇩D τ.ψ f =
D.inv (τ.ψ f') ⋅⇩D (σ'.map⇩0 ?a' ⋆⇩D ν ⋆⇩D τ⇩0 ?a) ⋅⇩D τ.ψ f"
using μ τ.ψ_naturality [of μ] by auto
hence "σ'.map⇩0 (trg⇩C μ) ⋆⇩D G μ ⋆⇩D τ⇩0 (src⇩C μ) = σ'.map⇩0 ?a' ⋆⇩D ν ⋆⇩D τ⇩0 ?a"
using f f' ν' τ.iso_ψ
D.iso_cancel_left
[of "D.inv (τ.ψ f')" "(σ'.map⇩0 (trg⇩C μ) ⋆⇩D G μ ⋆⇩D τ⇩0 (src⇩C μ)) ⋅⇩D τ.ψ f"
"(σ'.map⇩0 ?a' ⋆⇩D ν ⋆⇩D τ⇩0 ?a) ⋅⇩D τ.ψ f"]
D.iso_cancel_right
[of "τ.ψ f" "σ'.map⇩0 (trg⇩C μ) ⋆⇩D G μ ⋆⇩D τ⇩0 (src⇩C μ)" "σ'.map⇩0 ?a' ⋆⇩D ν ⋆⇩D τ⇩0 ?a"]
by auto
hence "σ'.map⇩0 ?a' ⋆⇩D G μ ⋆⇩D τ⇩0 ?a = σ'.map⇩0 ?a' ⋆⇩D ν ⋆⇩D τ⇩0 ?a"
using μ by auto
moreover have "D.par (G μ ⋆⇩D τ⇩0 (src⇩C f)) (ν ⋆⇩D τ⇩0 (src⇩C f))"
using f μ ν ν'
apply (intro conjI D.hseqI')
apply (auto simp add: D.vconn_implies_hpar(1))
apply fastforce
by (metis C.ideD(1) C.vconn_implies_hpar(1) D.hcomp_simps(4) D.hseqE D.hseqI'
D.seqE D.vconn_implies_hpar(1) preserves_arr preserves_cod preserves_src
weak_arrow_of_homs_axioms category.in_homE horizontal_homs_def
weak_arrow_of_homs_def)
ultimately have "G μ ⋆⇩D τ⇩0 ?a = ν ⋆⇩D τ⇩0 ?a"
using f f' μ ν τ.ide_map⇩0_obj σ'.ide_map⇩0_obj
D.equivalence_cancel_left [of "σ'.map⇩0 ?a'" "G μ ⋆⇩D τ⇩0 ?a" "ν ⋆⇩D τ⇩0 ?a"]
σ'.components_are_equivalences
by auto
moreover have "D.par (G μ) ν"
using f f' μ ν by fastforce
ultimately show ?thesis
using f f' μ ν τ.ide_map⇩0_obj
D.equivalence_cancel_right [of "τ⇩0 ?a" "G μ" "ν"] τ.components_are_equivalences
by auto
qed
thus "∃μ. «μ : f ⇒⇩C f'» ∧ G μ = ν"
using μ by auto
qed
qed
lemma is_equivalence_pseudofunctor:
shows "equivalence_pseudofunctor V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C V⇩D H⇩D 𝖺⇩D 𝗂⇩D src⇩D trg⇩D G Φ⇩G"
..
end
lemma pseudonaturally_equivalent_respects_equivalence_pseudofunctor:
assumes "pseudonaturally_equivalent
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G"
and "equivalence_pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F"
shows "equivalence_pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C G Φ⇩G"
proof -
obtain τ⇩0 τ⇩1 where τ: "pseudonatural_equivalence
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G τ⇩0 τ⇩1"
using assms pseudonaturally_equivalent_def by blast
interpret F: equivalence_pseudofunctor
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F
using assms by simp
interpret G: pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C G Φ⇩G
using assms τ
by (simp add: pseudonatural_equivalence_def pseudonatural_transformation_def)
interpret τ: pseudonatural_equivalence
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
using τ by simp
interpret G: pseudofunctor_pseudonaturally_equivalent_to_equivalence_pseudofunctor
V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C F Φ⇩F G Φ⇩G τ⇩0 τ⇩1
..
show "equivalence_pseudofunctor V⇩B H⇩B 𝖺⇩B 𝗂⇩B src⇩B trg⇩B V⇩C H⇩C 𝖺⇩C 𝗂⇩C src⇩C trg⇩C G Φ⇩G"
using G.is_equivalence_pseudofunctor by simp
qed
end