[STATEMENT]
lemma has_pseudo_pullback:
    assumes "is_left_adjoint u" and "is_left_adjoint v" and "isomorphic (k \<star> v) (h \<star> u)"
    shows "\<exists>w. is_left_adjoint w \<and> isomorphic (p\<^sub>0 \<star> w) u \<and> isomorphic v (p\<^sub>1 \<star> w)"
    and "\<And>w w'. \<lbrakk> is_left_adjoint w; is_left_adjoint w';
                  p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w' \<rbrakk> \<Longrightarrow> w \<cong> w'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>w. is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w &&& (\<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w')
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<exists>w. is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w
 2. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
interpret u: map_in_bicategory V H \<a> \<i> src trg u
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. map_in_bicategory (\<cdot>) (\<star>) \<a> \<i> src trg u
[PROOF STEP]
using assms(1)
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint u

goal (1 subgoal):
 1. map_in_bicategory (\<cdot>) (\<star>) \<a> \<i> src trg u
[PROOF STEP]
by unfold_locales auto
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<exists>w. is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w
 2. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
interpret v: map_in_bicategory V H \<a> \<i> src trg v
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. map_in_bicategory (\<cdot>) (\<star>) \<a> \<i> src trg v
[PROOF STEP]
using assms(2)
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint v

goal (1 subgoal):
 1. map_in_bicategory (\<cdot>) (\<star>) \<a> \<i> src trg v
[PROOF STEP]
by unfold_locales auto
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<exists>w. is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w
 2. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
obtain \<mu> where \<mu>: "\<guillemotleft>\<mu> : k \<star> v \<Rightarrow> h \<star> u\<guillemotright> \<and> iso \<mu>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>\<mu>. \<guillemotleft>\<mu> : k \<star> v \<Rightarrow> h \<star> u\<guillemotright> \<and> local.iso \<mu> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using assms(3)
[PROOF STATE]
proof (prove)
using this:
k \<star> v \<cong> h \<star> u

goal (1 subgoal):
 1. (\<And>\<mu>. \<guillemotleft>\<mu> : k \<star> v \<Rightarrow> h \<star> u\<guillemotright> \<and> local.iso \<mu> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<guillemotleft>\<mu> : k \<star> v \<Rightarrow> h \<star> u\<guillemotright> \<and> local.iso \<mu>

goal (2 subgoals):
 1. \<exists>w. is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w
 2. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
obtain w \<theta> \<nu> where w\<theta>\<nu>: "ide w \<and> \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright> \<and>
                               \<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> iso \<nu> \<and>
                               (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] \<cdot> (k \<star> \<nu>) = \<mu>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>w \<theta> \<nu>. ide w \<and> \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright> \<and> \<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu> \<and> (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] \<cdot> (k \<star> \<nu>) = \<mu> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using assms \<mu> \<phi>_biuniversal_prop(1) [of u v \<mu>]
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint u
is_left_adjoint v
k \<star> v \<cong> h \<star> u
\<guillemotleft>\<mu> : k \<star> v \<Rightarrow> h \<star> u\<guillemotright> \<and> local.iso \<mu>
\<lbrakk>ide u; ide v; \<guillemotleft>\<mu> : k \<star> v \<Rightarrow> h \<star> u\<guillemotright>\<rbrakk> \<Longrightarrow> \<exists>w \<theta> \<nu>. ide w \<and> \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright> \<and> \<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu> \<and> (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] \<cdot> (k \<star> \<nu>) = \<mu>

goal (1 subgoal):
 1. (\<And>w \<theta> \<nu>. ide w \<and> \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright> \<and> \<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu> \<and> (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] \<cdot> (k \<star> \<nu>) = \<mu> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
ide w \<and> \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright> \<and> \<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu> \<and> (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] \<cdot> (k \<star> \<nu>) = \<mu>

goal (2 subgoals):
 1. \<exists>w. is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w
 2. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
have "is_left_adjoint w \<and> isomorphic (p\<^sub>0 \<star> w) u \<and> isomorphic v (p\<^sub>1 \<star> w)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w
[PROOF STEP]
proof (intro conjI)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. is_left_adjoint w
 2. p\<^sub>0 \<star> w \<cong> u
 3. v \<cong> p\<^sub>1 \<star> w
[PROOF STEP]
show 1: "is_left_adjoint w"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. is_left_adjoint w
[PROOF STEP]
using assms(2) w\<theta>\<nu> left_adjoint_preserved_by_iso' isomorphic_def BS4 leg1_is_map
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint v
ide w \<and> \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright> \<and> \<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu> \<and> (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] \<cdot> (k \<star> \<nu>) = \<mu>
\<lbrakk>is_left_adjoint ?f; ?f \<cong> ?f'\<rbrakk> \<Longrightarrow> is_left_adjoint ?f'
(?a \<cong> ?a') = (\<exists>f. \<guillemotleft>f : ?a \<Rightarrow> ?a'\<guillemotright> \<and> local.iso f)
\<lbrakk>is_left_adjoint ?g; ide ?w; is_left_adjoint (?g \<star> ?w)\<rbrakk> \<Longrightarrow> is_left_adjoint ?w
is_left_adjoint p\<^sub>1

goal (1 subgoal):
 1. is_left_adjoint w
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
is_left_adjoint w

goal (2 subgoals):
 1. p\<^sub>0 \<star> w \<cong> u
 2. v \<cong> p\<^sub>1 \<star> w
[PROOF STEP]
show "v \<cong> p\<^sub>1 \<star> w"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. v \<cong> p\<^sub>1 \<star> w
[PROOF STEP]
using w\<theta>\<nu> isomorphic_def
[PROOF STATE]
proof (prove)
using this:
ide w \<and> \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright> \<and> \<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu> \<and> (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] \<cdot> (k \<star> \<nu>) = \<mu>
(?a \<cong> ?a') = (\<exists>f. \<guillemotleft>f : ?a \<Rightarrow> ?a'\<guillemotright> \<and> local.iso f)

goal (1 subgoal):
 1. v \<cong> p\<^sub>1 \<star> w
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
v \<cong> p\<^sub>1 \<star> w

goal (1 subgoal):
 1. p\<^sub>0 \<star> w \<cong> u
[PROOF STEP]
show "p\<^sub>0 \<star> w \<cong> u"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p\<^sub>0 \<star> w \<cong> u
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. p\<^sub>0 \<star> w \<cong> u
[PROOF STEP]
have "src p\<^sub>0 = trg w"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. src p\<^sub>0 = trg w
[PROOF STEP]
using w\<theta>\<nu> ide_dom
[PROOF STATE]
proof (prove)
using this:
ide w \<and> \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright> \<and> \<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu> \<and> (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] \<cdot> (k \<star> \<nu>) = \<mu>
arr ?f \<Longrightarrow> ide (local.dom ?f)

goal (1 subgoal):
 1. src p\<^sub>0 = trg w
[PROOF STEP]
by (metis ideD(1) in_homE not_arr_null seq_if_composable)
[PROOF STATE]
proof (state)
this:
src p\<^sub>0 = trg w

goal (1 subgoal):
 1. p\<^sub>0 \<star> w \<cong> u
[PROOF STEP]
hence "is_left_adjoint (p\<^sub>0 \<star> w)"
[PROOF STATE]
proof (prove)
using this:
src p\<^sub>0 = trg w

goal (1 subgoal):
 1. is_left_adjoint (p\<^sub>0 \<star> w)
[PROOF STEP]
using 1 left_adjoints_compose
[PROOF STATE]
proof (prove)
using this:
src p\<^sub>0 = trg w
is_left_adjoint w
\<lbrakk>is_left_adjoint ?f; is_left_adjoint ?f'; src ?f = trg ?f'\<rbrakk> \<Longrightarrow> is_left_adjoint (?f \<star> ?f')

goal (1 subgoal):
 1. is_left_adjoint (p\<^sub>0 \<star> w)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
is_left_adjoint (p\<^sub>0 \<star> w)

goal (1 subgoal):
 1. p\<^sub>0 \<star> w \<cong> u
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint (p\<^sub>0 \<star> w)

goal (1 subgoal):
 1. p\<^sub>0 \<star> w \<cong> u
[PROOF STEP]
using assms w\<theta>\<nu> 1 BS3 isomorphic_def
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint (p\<^sub>0 \<star> w)
is_left_adjoint u
is_left_adjoint v
k \<star> v \<cong> h \<star> u
ide w \<and> \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright> \<and> \<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu> \<and> (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] \<cdot> (k \<star> \<nu>) = \<mu>
is_left_adjoint w
\<lbrakk>is_left_adjoint ?f; is_left_adjoint ?f'; \<guillemotleft>?\<mu> : ?f \<Rightarrow> ?f'\<guillemotright>; \<guillemotleft>?\<mu>' : ?f \<Rightarrow> ?f'\<guillemotright>\<rbrakk> \<Longrightarrow> local.iso ?\<mu> \<and> local.iso ?\<mu>' \<and> ?\<mu> = ?\<mu>'
(?a \<cong> ?a') = (\<exists>f. \<guillemotleft>f : ?a \<Rightarrow> ?a'\<guillemotright> \<and> local.iso f)

goal (1 subgoal):
 1. p\<^sub>0 \<star> w \<cong> u
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
p\<^sub>0 \<star> w \<cong> u

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
p\<^sub>0 \<star> w \<cong> u

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w

goal (2 subgoals):
 1. \<exists>w. is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w
 2. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
thus "\<exists>w. is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w"
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w

goal (1 subgoal):
 1. \<exists>w. is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>w. is_left_adjoint w \<and> p\<^sub>0 \<star> w \<cong> u \<and> v \<cong> p\<^sub>1 \<star> w

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
show "\<And>w w'. \<lbrakk> is_left_adjoint w; is_left_adjoint w';
                     p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w' \<rbrakk> \<Longrightarrow> w \<cong> w'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
fix w w'
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
assume w: "is_left_adjoint w" and w': "is_left_adjoint w'"
[PROOF STATE]
proof (state)
this:
is_left_adjoint w
is_left_adjoint w'

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
assume 1: "p\<^sub>0 \<star> w \<cong> u"
[PROOF STATE]
proof (state)
this:
p\<^sub>0 \<star> w \<cong> u

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
assume 2: "v \<cong> p\<^sub>1 \<star> w"
[PROOF STATE]
proof (state)
this:
v \<cong> p\<^sub>1 \<star> w

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
assume 3: "p\<^sub>0 \<star> w' \<cong> u"
[PROOF STATE]
proof (state)
this:
p\<^sub>0 \<star> w' \<cong> u

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
assume 4: "v \<cong> p\<^sub>1 \<star> w'"
[PROOF STATE]
proof (state)
this:
v \<cong> p\<^sub>1 \<star> w'

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
obtain \<theta> where \<theta>: "\<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>\<theta>. \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using 1
[PROOF STATE]
proof (prove)
using this:
p\<^sub>0 \<star> w \<cong> u

goal (1 subgoal):
 1. (\<And>\<theta>. \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright>

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
obtain \<theta>' where \<theta>': "\<guillemotleft>\<theta>' : p\<^sub>0 \<star> w' \<Rightarrow> u\<guillemotright>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>\<theta>'. \<guillemotleft>\<theta>' : p\<^sub>0 \<star> w' \<Rightarrow> u\<guillemotright> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using 3
[PROOF STATE]
proof (prove)
using this:
p\<^sub>0 \<star> w' \<cong> u

goal (1 subgoal):
 1. (\<And>\<theta>'. \<guillemotleft>\<theta>' : p\<^sub>0 \<star> w' \<Rightarrow> u\<guillemotright> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<guillemotleft>\<theta>' : p\<^sub>0 \<star> w' \<Rightarrow> u\<guillemotright>

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
obtain \<nu> where \<nu>: "\<guillemotleft>\<nu>: v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> iso \<nu>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>\<nu>. \<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using 2
[PROOF STATE]
proof (prove)
using this:
v \<cong> p\<^sub>1 \<star> w

goal (1 subgoal):
 1. (\<And>\<nu>. \<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu>

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
obtain \<nu>' where \<nu>': "\<guillemotleft>\<nu>': v \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright> \<and> iso \<nu>'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>\<nu>'. \<guillemotleft>\<nu>' : v \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright> \<and> local.iso \<nu>' \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using 4
[PROOF STATE]
proof (prove)
using this:
v \<cong> p\<^sub>1 \<star> w'

goal (1 subgoal):
 1. (\<And>\<nu>'. \<guillemotleft>\<nu>' : v \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright> \<and> local.iso \<nu>' \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<guillemotleft>\<nu>' : v \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright> \<and> local.iso \<nu>'

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
let ?\<beta> = "\<nu>' \<cdot> inv \<nu>"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
have \<beta>: "\<guillemotleft>?\<beta> : p\<^sub>1 \<star> w \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<guillemotleft>\<nu>' \<cdot> local.inv \<nu> : p\<^sub>1 \<star> w \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright>
[PROOF STEP]
using \<nu> \<nu>'
[PROOF STATE]
proof (prove)
using this:
\<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu>
\<guillemotleft>\<nu>' : v \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright> \<and> local.iso \<nu>'

goal (1 subgoal):
 1. \<guillemotleft>\<nu>' \<cdot> local.inv \<nu> : p\<^sub>1 \<star> w \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright>
[PROOF STEP]
by (elim conjE in_homE, auto)
[PROOF STATE]
proof (state)
this:
\<guillemotleft>\<nu>' \<cdot> local.inv \<nu> : p\<^sub>1 \<star> w \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright>

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
interpret uw\<theta>: uw\<theta> V H \<a> \<i> src trg \<open>k\<^sup>* \<star> h\<close> tab \<open>p\<^sub>0\<close> \<open>p\<^sub>1\<close> u w \<theta>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. uw\<theta> (\<cdot>) (\<star>) \<a> \<i> src trg (k\<^sup>* \<star> h) tab p\<^sub>0 p\<^sub>1 u w \<theta>
[PROOF STEP]
using w \<theta> left_adjoint_is_ide
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint w
\<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright>
is_left_adjoint ?f \<Longrightarrow> ide ?f

goal (1 subgoal):
 1. uw\<theta> (\<cdot>) (\<star>) \<a> \<i> src trg (k\<^sup>* \<star> h) tab p\<^sub>0 p\<^sub>1 u w \<theta>
[PROOF STEP]
by unfold_locales auto
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
interpret uw'\<theta>': uw\<theta> V H \<a> \<i> src trg \<open>k\<^sup>* \<star> h\<close> tab \<open>p\<^sub>0\<close> \<open>p\<^sub>1\<close>
                             u w' \<theta>'
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. uw\<theta> (\<cdot>) (\<star>) \<a> \<i> src trg (k\<^sup>* \<star> h) tab p\<^sub>0 p\<^sub>1 u w' \<theta>'
[PROOF STEP]
using w' \<theta>' left_adjoint_is_ide
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint w'
\<guillemotleft>\<theta>' : p\<^sub>0 \<star> w' \<Rightarrow> u\<guillemotright>
is_left_adjoint ?f \<Longrightarrow> ide ?f

goal (1 subgoal):
 1. uw\<theta> (\<cdot>) (\<star>) \<a> \<i> src trg (k\<^sup>* \<star> h) tab p\<^sub>0 p\<^sub>1 u w' \<theta>'
[PROOF STEP]
by unfold_locales auto
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
interpret uw\<theta>w'\<theta>': uw\<theta>w'\<theta>' V H \<a> \<i> src trg \<open>k\<^sup>* \<star> h\<close> tab \<open>p\<^sub>0\<close> \<open>p\<^sub>1\<close> u w \<theta> w' \<theta>'
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. uw\<theta>w'\<theta>' (\<cdot>) (\<star>) \<a> \<i> src trg (k\<^sup>* \<star> h) tab p\<^sub>0 p\<^sub>1 u w \<theta> w' \<theta>'
[PROOF STEP]
using w w' \<theta> \<theta>' left_adjoint_is_ide
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint w
is_left_adjoint w'
\<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright>
\<guillemotleft>\<theta>' : p\<^sub>0 \<star> w' \<Rightarrow> u\<guillemotright>
is_left_adjoint ?f \<Longrightarrow> ide ?f

goal (1 subgoal):
 1. uw\<theta>w'\<theta>' (\<cdot>) (\<star>) \<a> \<i> src trg (k\<^sup>* \<star> h) tab p\<^sub>0 p\<^sub>1 u w \<theta> w' \<theta>'
[PROOF STEP]
by unfold_locales
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
have "(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] =
              (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot>
                (k \<star> ?\<beta>)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
let ?LHS = "(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w]"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
let ?RHS = "(h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> ?\<beta>)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
have "\<guillemotleft>?LHS : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<guillemotleft>(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>
[PROOF STEP]
using w k.antipar
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint w
trg k\<^sup>* = src k
src k\<^sup>* = trg k

goal (1 subgoal):
 1. \<guillemotleft>(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<guillemotleft>(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>

goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<guillemotleft>(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>

goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
have "\<guillemotleft>?RHS : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<guillemotleft>(h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>) : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>
[PROOF STEP]
using w k.antipar \<beta>
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint w
trg k\<^sup>* = src k
src k\<^sup>* = trg k
\<guillemotleft>\<nu>' \<cdot> local.inv \<nu> : p\<^sub>1 \<star> w \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright>

goal (1 subgoal):
 1. \<guillemotleft>(h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>) : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
\<guillemotleft>(h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>) : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>

goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<guillemotleft>(h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>) : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>

goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
have "is_left_adjoint (k \<star> p\<^sub>1 \<star> w)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. is_left_adjoint (k \<star> p\<^sub>1 \<star> w)
[PROOF STEP]
using w k.is_map left_adjoints_compose
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint w
is_left_adjoint k
\<lbrakk>is_left_adjoint ?f; is_left_adjoint ?f'; src ?f = trg ?f'\<rbrakk> \<Longrightarrow> is_left_adjoint (?f \<star> ?f')

goal (1 subgoal):
 1. is_left_adjoint (k \<star> p\<^sub>1 \<star> w)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
is_left_adjoint (k \<star> p\<^sub>1 \<star> w)

goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
is_left_adjoint (k \<star> p\<^sub>1 \<star> w)

goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
have "is_left_adjoint (h \<star> u)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. is_left_adjoint (h \<star> u)
[PROOF STEP]
using assms h.is_map left_adjoints_compose
[PROOF STATE]
proof (prove)
using this:
is_left_adjoint u
is_left_adjoint v
k \<star> v \<cong> h \<star> u
is_left_adjoint h
\<lbrakk>is_left_adjoint ?f; is_left_adjoint ?f'; src ?f = trg ?f'\<rbrakk> \<Longrightarrow> is_left_adjoint (?f \<star> ?f')

goal (1 subgoal):
 1. is_left_adjoint (h \<star> u)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
is_left_adjoint (h \<star> u)

goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<guillemotleft>(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>
\<guillemotleft>(h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>) : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>
is_left_adjoint (k \<star> p\<^sub>1 \<star> w)
is_left_adjoint (h \<star> u)
[PROOF STEP]
show "?LHS = ?RHS"
[PROOF STATE]
proof (prove)
using this:
\<guillemotleft>(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>
\<guillemotleft>(h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>) : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>
is_left_adjoint (k \<star> p\<^sub>1 \<star> w)
is_left_adjoint (h \<star> u)

goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
using BS3
[PROOF STATE]
proof (prove)
using this:
\<guillemotleft>(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>
\<guillemotleft>(h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>) : k \<star> p\<^sub>1 \<star> w \<Rightarrow> h \<star> u\<guillemotright>
is_left_adjoint (k \<star> p\<^sub>1 \<star> w)
is_left_adjoint (h \<star> u)
\<lbrakk>is_left_adjoint ?f; is_left_adjoint ?f'; \<guillemotleft>?\<mu> : ?f \<Rightarrow> ?f'\<guillemotright>; \<guillemotleft>?\<mu>' : ?f \<Rightarrow> ?f'\<guillemotright>\<rbrakk> \<Longrightarrow> local.iso ?\<mu> \<and> local.iso ?\<mu>' \<and> ?\<mu> = ?\<mu>'

goal (1 subgoal):
 1. (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
hence "\<exists>!\<gamma>. \<guillemotleft>\<gamma> : w \<Rightarrow> w'\<guillemotright> \<and> \<theta> = \<theta>' \<cdot> (p\<^sub>0 \<star> \<gamma>) \<and> p\<^sub>1 \<star> \<gamma> = ?\<beta>"
[PROOF STATE]
proof (prove)
using this:
(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)

goal (1 subgoal):
 1. \<exists>!\<gamma>. \<guillemotleft>\<gamma> : w \<Rightarrow> w'\<guillemotright> \<and> \<theta> = \<theta>' \<cdot> (p\<^sub>0 \<star> \<gamma>) \<and> p\<^sub>1 \<star> \<gamma> = \<nu>' \<cdot> local.inv \<nu>
[PROOF STEP]
using assms left_adjoint_is_ide w w' \<theta> \<theta>' \<nu> \<nu>' \<beta>
                \<phi>_biuniversal_prop(2) [of u v w w' \<theta> \<theta>' ?\<beta>]
[PROOF STATE]
proof (prove)
using this:
(h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)
is_left_adjoint u
is_left_adjoint v
k \<star> v \<cong> h \<star> u
is_left_adjoint ?f \<Longrightarrow> ide ?f
is_left_adjoint w
is_left_adjoint w'
\<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright>
\<guillemotleft>\<theta>' : p\<^sub>0 \<star> w' \<Rightarrow> u\<guillemotright>
\<guillemotleft>\<nu> : v \<Rightarrow> p\<^sub>1 \<star> w\<guillemotright> \<and> local.iso \<nu>
\<guillemotleft>\<nu>' : v \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright> \<and> local.iso \<nu>'
\<guillemotleft>\<nu>' \<cdot> local.inv \<nu> : p\<^sub>1 \<star> w \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright>
\<lbrakk>ide u; ide v; ide w; ide w'; \<guillemotleft>\<theta> : p\<^sub>0 \<star> w \<Rightarrow> u\<guillemotright>; \<guillemotleft>\<theta>' : p\<^sub>0 \<star> w' \<Rightarrow> u\<guillemotright>; \<guillemotleft>\<nu>' \<cdot> local.inv \<nu> : p\<^sub>1 \<star> w \<Rightarrow> p\<^sub>1 \<star> w'\<guillemotright>; (h \<star> \<theta>) \<cdot> \<a>[h, p\<^sub>0, w] \<cdot> (\<phi> \<star> w) \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w] = (h \<star> \<theta>') \<cdot> \<a>[h, p\<^sub>0, w'] \<cdot> (\<phi> \<star> w') \<cdot> \<a>\<^sup>-\<^sup>1[k, p\<^sub>1, w'] \<cdot> (k \<star> \<nu>' \<cdot> local.inv \<nu>)\<rbrakk> \<Longrightarrow> \<exists>!\<gamma>. \<guillemotleft>\<gamma> : w \<Rightarrow> w'\<guillemotright> \<and> \<theta> = \<theta>' \<cdot> (p\<^sub>0 \<star> \<gamma>) \<and> p\<^sub>1 \<star> \<gamma> = \<nu>' \<cdot> local.inv \<nu>

goal (1 subgoal):
 1. \<exists>!\<gamma>. \<guillemotleft>\<gamma> : w \<Rightarrow> w'\<guillemotright> \<and> \<theta> = \<theta>' \<cdot> (p\<^sub>0 \<star> \<gamma>) \<and> p\<^sub>1 \<star> \<gamma> = \<nu>' \<cdot> local.inv \<nu>
[PROOF STEP]
by presburger
[PROOF STATE]
proof (state)
this:
\<exists>!\<gamma>. \<guillemotleft>\<gamma> : w \<Rightarrow> w'\<guillemotright> \<and> \<theta> = \<theta>' \<cdot> (p\<^sub>0 \<star> \<gamma>) \<and> p\<^sub>1 \<star> \<gamma> = \<nu>' \<cdot> local.inv \<nu>

goal (1 subgoal):
 1. \<And>w w'. \<lbrakk>is_left_adjoint w; is_left_adjoint w'; p\<^sub>0 \<star> w \<cong> u; v \<cong> p\<^sub>1 \<star> w; p\<^sub>0 \<star> w' \<cong> u; v \<cong> p\<^sub>1 \<star> w'\<rbrakk> \<Longrightarrow> w \<cong> w'
[PROOF STEP]
thus "w \<cong> w'"
[PROOF STATE]
proof (prove)
using this:
\<exists>!\<gamma>. \<guillemotleft>\<gamma> : w \<Rightarrow> w'\<guillemotright> \<and> \<theta> = \<theta>' \<cdot> (p\<^sub>0 \<star> \<gamma>) \<and> p\<^sub>1 \<star> \<gamma> = \<nu>' \<cdot> local.inv \<nu>

goal (1 subgoal):
 1. w \<cong> w'
[PROOF STEP]
using w w' BS3 isomorphic_def
[PROOF STATE]
proof (prove)
using this:
\<exists>!\<gamma>. \<guillemotleft>\<gamma> : w \<Rightarrow> w'\<guillemotright> \<and> \<theta> = \<theta>' \<cdot> (p\<^sub>0 \<star> \<gamma>) \<and> p\<^sub>1 \<star> \<gamma> = \<nu>' \<cdot> local.inv \<nu>
is_left_adjoint w
is_left_adjoint w'
\<lbrakk>is_left_adjoint ?f; is_left_adjoint ?f'; \<guillemotleft>?\<mu> : ?f \<Rightarrow> ?f'\<guillemotright>; \<guillemotleft>?\<mu>' : ?f \<Rightarrow> ?f'\<guillemotright>\<rbrakk> \<Longrightarrow> local.iso ?\<mu> \<and> local.iso ?\<mu>' \<and> ?\<mu> = ?\<mu>'
(?a \<cong> ?a') = (\<exists>f. \<guillemotleft>f : ?a \<Rightarrow> ?a'\<guillemotright> \<and> local.iso f)

goal (1 subgoal):
 1. w \<cong> w'
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
w \<cong> w'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>is_left_adjoint ?w4; is_left_adjoint ?w'4; p\<^sub>0 \<star> ?w4 \<cong> u; v \<cong> p\<^sub>1 \<star> ?w4; p\<^sub>0 \<star> ?w'4 \<cong> u; v \<cong> p\<^sub>1 \<star> ?w'4\<rbrakk> \<Longrightarrow> ?w4 \<cong> ?w'4

goal:
No subgoals!
[PROOF STEP]
qed