[STATEMENT]
lemma characteristic_iso:
    assumes "S.ide f"
    shows "\<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>"
    and "\<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>"
    and "\<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>"
    and "S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright> &&& \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>) &&& \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright> &&& S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>
 2. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
 3. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>
 4. S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
have f: "S.ide f \<and> ide f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. S.ide f \<and> ide f
[PROOF STEP]
using assms S.ide_char\<^sub>S\<^sub>b\<^sub>C
[PROOF STATE]
proof (prove)
using this:
S.ide f
S.ide ?a = (S.arr ?a \<and> ide ?a)

goal (1 subgoal):
 1. S.ide f \<and> ide f
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
S.ide f \<and> ide f

goal (4 subgoals):
 1. \<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>
 2. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
 3. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>
 4. S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
have a: "weak_unit a \<and> ide a \<and> S.ide a"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. weak_unit a \<and> ide a \<and> S.ide a
[PROOF STEP]
using weak_unit_a S.ide_char\<^sub>S\<^sub>b\<^sub>C weak_unit_def S.arr_char\<^sub>S\<^sub>b\<^sub>C right_def
              weak_unit_self_composable
[PROOF STATE]
proof (prove)
using this:
weak_unit a
S.ide ?a = (S.arr ?a \<and> ide ?a)
weak_unit ?a \<equiv> ?a \<star> ?a \<cong> ?a \<and> fully_faithful_functor (local.Left ?a) (local.Left ?a) (H\<^sub>L ?a) \<and> fully_faithful_functor (local.Right ?a) (local.Right ?a) (H\<^sub>R ?a)
S.arr ?f = right a ?f
right ?\<sigma> \<equiv> \<lambda>\<mu>. \<mu> \<star> ?\<sigma> \<noteq> null
weak_unit ?a \<Longrightarrow> ide ?a
weak_unit ?a \<Longrightarrow> ide (?a \<star> ?a)
weak_unit ?a \<Longrightarrow> ?a \<star> ?a \<noteq> null

goal (1 subgoal):
 1. weak_unit a \<and> ide a \<and> S.ide a
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
weak_unit a \<and> ide a \<and> S.ide a

goal (4 subgoals):
 1. \<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>
 2. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
 3. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>
 4. S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
have fa: "f \<star> a \<noteq> null \<and> (f \<star> a) \<star> a \<noteq> null \<and> ((f \<star> a) \<star> a) \<star> a \<noteq> null"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f \<star> a \<noteq> null \<and> (f \<star> a) \<star> a \<noteq> null \<and> ((f \<star> a) \<star> a) \<star> a \<noteq> null
[PROOF STEP]
using assms S.ideD(1) R.preserves_arr H\<^sub>R_def S.not_arr_null S.null_char
[PROOF STATE]
proof (prove)
using this:
S.ide f
S.ide ?a \<Longrightarrow> S.arr ?a
S.arr ?f \<Longrightarrow> S.arr (R ?f)
H\<^sub>R ?f \<equiv> \<lambda>\<mu>. \<mu> \<star> ?f
\<not> S.arr S.null
S.null = null

goal (1 subgoal):
 1. f \<star> a \<noteq> null \<and> (f \<star> a) \<star> a \<noteq> null \<and> ((f \<star> a) \<star> a) \<star> a \<noteq> null
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
f \<star> a \<noteq> null \<and> (f \<star> a) \<star> a \<noteq> null \<and> ((f \<star> a) \<star> a) \<star> a \<noteq> null

goal (4 subgoals):
 1. \<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>
 2. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
 3. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>
 4. S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
have aa: "a \<star> a \<noteq> null"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a \<star> a \<noteq> null
[PROOF STEP]
using a S.ideD(1) R.preserves_arr H\<^sub>R_def S.not_arr_null weak_unit_self_composable
[PROOF STATE]
proof (prove)
using this:
weak_unit a \<and> ide a \<and> S.ide a
S.ide ?a \<Longrightarrow> S.arr ?a
S.arr ?f \<Longrightarrow> S.arr (R ?f)
H\<^sub>R ?f \<equiv> \<lambda>\<mu>. \<mu> \<star> ?f
\<not> S.arr S.null
weak_unit ?a \<Longrightarrow> ide ?a
weak_unit ?a \<Longrightarrow> ide (?a \<star> ?a)
weak_unit ?a \<Longrightarrow> ?a \<star> ?a \<noteq> null

goal (1 subgoal):
 1. a \<star> a \<noteq> null
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
a \<star> a \<noteq> null

goal (4 subgoals):
 1. \<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>
 2. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
 3. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>
 4. S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
have f_ia: "f \<star> \<iota> \<noteq> null"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f \<star> \<iota> \<noteq> null
[PROOF STEP]
using assms S.ide_char right_def S.arr_char\<^sub>S\<^sub>b\<^sub>C hom_connected(4) \<iota>_in_hom
[PROOF STATE]
proof (prove)
using this:
S.ide f
S.ide ?a = (S.arr ?a \<and> S.dom ?a = ?a \<and> S.cod ?a = ?a)
right ?\<sigma> \<equiv> \<lambda>\<mu>. \<mu> \<star> ?\<sigma> \<noteq> null
S.arr ?f = right a ?f
(?\<nu> \<star> ?\<mu> \<noteq> null) = (?\<nu> \<star> cod ?\<mu> \<noteq> null)
\<guillemotleft>\<iota> : a \<star> a \<Rightarrow> a\<guillemotright>

goal (1 subgoal):
 1. f \<star> \<iota> \<noteq> null
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
f \<star> \<iota> \<noteq> null

goal (4 subgoals):
 1. \<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>
 2. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
 3. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>
 4. S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
show assoc_in_hom: "\<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>
[PROOF STEP]
using a f fa hom_connected(1) [of "\<a>[f, a, a]" a] S.arr_char\<^sub>S\<^sub>b\<^sub>C right_def
              match_3 match_4 S.in_hom_char\<^sub>S\<^sub>b\<^sub>C weak_unit_self_composable
[PROOF STATE]
proof (prove)
using this:
weak_unit a \<and> ide a \<and> S.ide a
S.ide f \<and> ide f
f \<star> a \<noteq> null \<and> (f \<star> a) \<star> a \<noteq> null \<and> ((f \<star> a) \<star> a) \<star> a \<noteq> null
(\<a>[f, a, a] \<star> a \<noteq> null) = (local.dom \<a>[f, a, a] \<star> a \<noteq> null)
S.arr ?f = right a ?f
right ?\<sigma> \<equiv> \<lambda>\<mu>. \<mu> \<star> ?\<sigma> \<noteq> null
\<lbrakk>?\<mu> \<star> ?\<tau> \<noteq> null; ?\<nu> \<star> ?\<mu> \<noteq> null\<rbrakk> \<Longrightarrow> (?\<nu> \<star> ?\<mu>) \<star> ?\<tau> \<noteq> null
\<lbrakk>?\<mu> \<star> ?\<tau> \<noteq> null; ?\<nu> \<star> ?\<mu> \<noteq> null\<rbrakk> \<Longrightarrow> ?\<nu> \<star> ?\<mu> \<star> ?\<tau> \<noteq> null
\<guillemotleft>?f : ?a \<Rightarrow>\<^sub>S ?b\<guillemotright> = (S.arr ?a \<and> S.arr ?b \<and> S.arr ?f \<and> \<guillemotleft>?f : ?a \<Rightarrow> ?b\<guillemotright>)
weak_unit ?a \<Longrightarrow> ide ?a
weak_unit ?a \<Longrightarrow> ide (?a \<star> ?a)
weak_unit ?a \<Longrightarrow> ?a \<star> ?a \<noteq> null

goal (1 subgoal):
 1. \<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>

goal (3 subgoals):
 1. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
 2. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>
 3. S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
show 1: "\<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
[PROOF STEP]
using a f fa iso_unit left_hcomp_closed
[PROOF STATE]
proof (prove)
using this:
weak_unit a \<and> ide a \<and> S.ide a
S.ide f \<and> ide f
f \<star> a \<noteq> null \<and> (f \<star> a) \<star> a \<noteq> null \<and> ((f \<star> a) \<star> a) \<star> a \<noteq> null
S.iso \<iota>
\<guillemotleft>\<iota> : a \<star> a \<Rightarrow>\<^sub>S a\<guillemotright>
\<lbrakk>\<guillemotleft>?\<mu> : ?x \<Rightarrow>\<^sub>S ?y\<guillemotright>; \<guillemotleft>?\<nu> : ?c \<Rightarrow> ?d\<guillemotright>; ?\<nu> \<star> ?\<mu> \<noteq> null\<rbrakk> \<Longrightarrow> \<guillemotleft>?\<nu> \<star> ?\<mu> : ?c \<star> ?x \<Rightarrow>\<^sub>S ?d \<star> ?y\<guillemotright>

goal (1 subgoal):
 1. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
[PROOF STEP]
by (simp add: f_ia ide_in_hom)
[PROOF STATE]
proof (state)
this:
\<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>

goal (2 subgoals):
 1. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>
 2. S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
have unit_part: "\<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright> \<and> S.iso (f \<star> \<iota>)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright> \<and> S.iso (f \<star> \<iota>)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright> \<and> S.iso (f \<star> \<iota>)
[PROOF STEP]
have "S.iso (f \<star> \<iota>)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. S.iso (f \<star> \<iota>)
[PROOF STEP]
using a f fa f_ia 1 VoV.arr_char\<^sub>S\<^sub>b\<^sub>C VxV.inv_simp
               inv_in_hom hom_connected(2) [of f "inv \<iota>"] VoV.arr_char\<^sub>S\<^sub>b\<^sub>C VoV.iso_char\<^sub>S\<^sub>b\<^sub>C
                preserves_iso iso_char iso_\<iota> S.dom_simp S.cod_simp
[PROOF STATE]
proof (prove)
using this:
weak_unit a \<and> ide a \<and> S.ide a
S.ide f \<and> ide f
f \<star> a \<noteq> null \<and> (f \<star> a) \<star> a \<noteq> null \<and> ((f \<star> a) \<star> a) \<star> a \<noteq> null
f \<star> \<iota> \<noteq> null
\<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
VoV.arr ?f = (fst ?f \<star> snd ?f \<noteq> null)
VxV.iso ?f \<Longrightarrow> VxV.inv ?f = (local.inv (fst ?f), local.inv (snd ?f))
\<lbrakk>local.iso ?f; \<guillemotleft>?f : ?a \<Rightarrow> ?b\<guillemotright>\<rbrakk> \<Longrightarrow> \<guillemotleft>local.inv ?f : ?b \<Rightarrow> ?a\<guillemotright>
(f \<star> local.inv \<iota> \<noteq> null) = (f \<star> local.dom (local.inv \<iota>) \<noteq> null)
VoV.arr ?f = (fst ?f \<star> snd ?f \<noteq> null)
VoV.iso ?f = (VxV.iso ?f \<and> VoV.arr ?f \<and> VoV.arr (VxV.inv ?f))
VoV.iso ?f \<Longrightarrow> local.iso (fst ?f \<star> snd ?f)
S.arr ?\<phi> \<Longrightarrow> S.iso ?\<phi> = local.iso ?\<phi>
local.iso \<iota>
S.arr ?f \<Longrightarrow> S.dom ?f = local.dom ?f
S.arr ?f \<Longrightarrow> S.cod ?f = cod ?f

goal (1 subgoal):
 1. S.iso (f \<star> \<iota>)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
S.iso (f \<star> \<iota>)

goal (1 subgoal):
 1. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright> \<and> S.iso (f \<star> \<iota>)
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
S.iso (f \<star> \<iota>)

goal (1 subgoal):
 1. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright> \<and> S.iso (f \<star> \<iota>)
[PROOF STEP]
using 1
[PROOF STATE]
proof (prove)
using this:
S.iso (f \<star> \<iota>)
\<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>

goal (1 subgoal):
 1. \<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright> \<and> S.iso (f \<star> \<iota>)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright> \<and> S.iso (f \<star> \<iota>)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright> \<and> S.iso (f \<star> \<iota>)

goal (2 subgoals):
 1. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>
 2. S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
show "S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
using assms a f fa aa hom_connected(1) [of "\<a>[f, a, a]" a] right_def
              iso_assoc\<^sub>A\<^sub>W\<^sub>C iso_char S.arr_char\<^sub>S\<^sub>b\<^sub>C unit_part assoc_in_hom isos_compose
              S.isos_compose S.seqI'
[PROOF STATE]
proof (prove)
using this:
S.ide f
weak_unit a \<and> ide a \<and> S.ide a
S.ide f \<and> ide f
f \<star> a \<noteq> null \<and> (f \<star> a) \<star> a \<noteq> null \<and> ((f \<star> a) \<star> a) \<star> a \<noteq> null
a \<star> a \<noteq> null
(\<a>[f, a, a] \<star> a \<noteq> null) = (local.dom \<a>[f, a, a] \<star> a \<noteq> null)
right ?\<sigma> \<equiv> \<lambda>\<mu>. \<mu> \<star> ?\<sigma> \<noteq> null
\<lbrakk>ide ?f; ide ?g; ide ?h; ?f \<star> ?g \<noteq> null; ?g \<star> ?h \<noteq> null\<rbrakk> \<Longrightarrow> local.iso \<a>[?f, ?g, ?h]
S.arr ?\<phi> \<Longrightarrow> S.iso ?\<phi> = local.iso ?\<phi>
S.arr ?f = right a ?f
\<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright> \<and> S.iso (f \<star> \<iota>)
\<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>
\<lbrakk>local.iso ?f; local.iso ?f'; seq ?f' ?f\<rbrakk> \<Longrightarrow> local.iso (?f' \<cdot> ?f)
\<lbrakk>S.iso ?f; S.iso ?f'; S.seq ?f' ?f\<rbrakk> \<Longrightarrow> S.iso (?f' \<cdot>\<^sub>S ?f)
\<lbrakk>\<guillemotleft>?f : ?a \<Rightarrow>\<^sub>S ?b\<guillemotright>; \<guillemotleft>?g : ?b \<Rightarrow>\<^sub>S ?c\<guillemotright>\<rbrakk> \<Longrightarrow> S.seq ?g ?f

goal (1 subgoal):
 1. S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
S.iso ((f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a])

goal (1 subgoal):
 1. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>
[PROOF STEP]
show "\<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>
[PROOF STEP]
unfolding H\<^sub>R_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
[PROOF STEP]
using unit_part assoc_in_hom
[PROOF STATE]
proof (prove)
using this:
\<guillemotleft>f \<star> \<iota> : f \<star> a \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright> \<and> S.iso (f \<star> \<iota>)
\<guillemotleft>\<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a \<star> a\<guillemotright>

goal (1 subgoal):
 1. \<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : (f \<star> a) \<star> a \<Rightarrow>\<^sub>S f \<star> a\<guillemotright>
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<guillemotleft>(f \<star> \<iota>) \<cdot>\<^sub>S \<a>[f, a, a] : R (R f) \<Rightarrow>\<^sub>S R f\<guillemotright>

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma "x \<in> {}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> {}
[PROOF STEP]
nitpick [expect = genuine]
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> {}
[PROOF STEP]
oops