[STATEMENT]
lemma LI_soundness_single:
  assumes "wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r S\<^sub>1 \<theta>\<^sub>1" "(S\<^sub>1,\<theta>\<^sub>1) \<leadsto> (S\<^sub>2,\<theta>\<^sub>2)" "\<I> \<Turnstile>\<^sub>c \<langle>S\<^sub>2,\<theta>\<^sub>2\<rangle>"
  shows "\<I> \<Turnstile>\<^sub>c \<langle>S\<^sub>1,\<theta>\<^sub>1\<rangle>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<I> \<Turnstile>\<^sub>c \<langle>S\<^sub>1,\<theta>\<^sub>1\<rangle>
[PROOF STEP]
using assms(2,1,3)
[PROOF STATE]
proof (prove)
using this:
(S\<^sub>1, \<theta>\<^sub>1) \<leadsto> (S\<^sub>2, \<theta>\<^sub>2)
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r S\<^sub>1 \<theta>\<^sub>1
\<I> \<Turnstile>\<^sub>c \<langle>S\<^sub>2,\<theta>\<^sub>2\<rangle>

goal (1 subgoal):
 1. \<I> \<Turnstile>\<^sub>c \<langle>S\<^sub>1,\<theta>\<^sub>1\<rangle>
[PROOF STEP]
proof (induction rule: LI_rel.induct)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>S T f S' \<theta>. \<lbrakk>simple S; length T = arity f; public f; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ map Send1 T @ S',\<theta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 3. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
case (Compose S T f S' \<theta>)
[PROOF STATE]
proof (state)
this:
simple S
length T = arity f
public f
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>
\<I> \<Turnstile>\<^sub>c \<langle>S @ map Send1 T @ S',\<theta>\<rangle>

goal (3 subgoals):
 1. \<And>S T f S' \<theta>. \<lbrakk>simple S; length T = arity f; public f; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ map Send1 T @ S',\<theta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 3. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "ik\<^sub>s\<^sub>t (map Send1 T) \<cdot>\<^sub>s\<^sub>e\<^sub>t \<theta> = {}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ik\<^sub>s\<^sub>t (map Send1 T) \<cdot>\<^sub>s\<^sub>e\<^sub>t \<theta> = {}
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
ik\<^sub>s\<^sub>t (map Send1 T) \<cdot>\<^sub>s\<^sub>e\<^sub>t \<theta> = {}

goal (3 subgoals):
 1. \<And>S T f S' \<theta>. \<lbrakk>simple S; length T = arity f; public f; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ map Send1 T @ S',\<theta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 3. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
hence *: "\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>" "\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; map Send1 T\<rbrakk>\<^sub>c \<I>" "\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>"
[PROOF STATE]
proof (prove)
using this:
ik\<^sub>s\<^sub>t (map Send1 T) \<cdot>\<^sub>s\<^sub>e\<^sub>t \<theta> = {}

goal (1 subgoal):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I> &&& \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; map Send1 T\<rbrakk>\<^sub>c \<I> &&& \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
using Compose
[PROOF STATE]
proof (prove)
using this:
ik\<^sub>s\<^sub>t (map Send1 T) \<cdot>\<^sub>s\<^sub>e\<^sub>t \<theta> = {}
simple S
length T = arity f
public f
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>
\<I> \<Turnstile>\<^sub>c \<langle>S @ map Send1 T @ S',\<theta>\<rangle>

goal (1 subgoal):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I> &&& \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; map Send1 T\<rbrakk>\<^sub>c \<I> &&& \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
unfolding constr_sem_c_def
[PROOF STATE]
proof (prove)
using this:
ik\<^sub>s\<^sub>t (map Send1 T) \<cdot>\<^sub>s\<^sub>e\<^sub>t \<theta> = {}
simple S
length T = arity f
public f
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>
\<theta> supports \<I> \<and> \<lbrakk>{}; S @ map Send1 T @ S'\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I> &&& \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; map Send1 T\<rbrakk>\<^sub>c \<I> &&& \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
by (force, force, fastforce)
[PROOF STATE]
proof (state)
this:
\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; map Send1 T\<rbrakk>\<^sub>c \<I>
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>

goal (3 subgoals):
 1. \<And>S T f S' \<theta>. \<lbrakk>simple S; length T = arity f; public f; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ map Send1 T @ S',\<theta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 3. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I> \<turnstile>\<^sub>c Fun f T \<cdot> \<I>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I> \<turnstile>\<^sub>c Fun f T \<cdot> \<I>
[PROOF STEP]
using *(2) Compose.hyps(2) ComposeC[OF _ Compose.hyps(3), of "map (\<lambda>x. x \<cdot> \<I>) T"]
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; map Send1 T\<rbrakk>\<^sub>c \<I>
length T = arity f
\<lbrakk>length (T \<cdot>\<^sub>l\<^sub>i\<^sub>s\<^sub>t \<I>) = arity f; \<And>t. t \<in> set (T \<cdot>\<^sub>l\<^sub>i\<^sub>s\<^sub>t \<I>) \<Longrightarrow> ?M \<turnstile>\<^sub>c t\<rbrakk> \<Longrightarrow> ?M \<turnstile>\<^sub>c Fun f (T \<cdot>\<^sub>l\<^sub>i\<^sub>s\<^sub>t \<I>)

goal (1 subgoal):
 1. ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I> \<turnstile>\<^sub>c Fun f T \<cdot> \<I>
[PROOF STEP]
unfolding subst_compose_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; map Send1 T\<rbrakk>\<^sub>c \<I>
length T = arity f
\<lbrakk>length (T \<cdot>\<^sub>l\<^sub>i\<^sub>s\<^sub>t \<I>) = arity f; \<And>t. t \<in> set (T \<cdot>\<^sub>l\<^sub>i\<^sub>s\<^sub>t \<I>) \<Longrightarrow> ?M \<turnstile>\<^sub>c t\<rbrakk> \<Longrightarrow> ?M \<turnstile>\<^sub>c Fun f (T \<cdot>\<^sub>l\<^sub>i\<^sub>s\<^sub>t \<I>)

goal (1 subgoal):
 1. ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I> \<turnstile>\<^sub>c Fun f T \<cdot> \<I>
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I> \<turnstile>\<^sub>c Fun f T \<cdot> \<I>

goal (3 subgoals):
 1. \<And>S T f S' \<theta>. \<lbrakk>simple S; length T = arity f; public f; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ map Send1 T @ S',\<theta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 3. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
thus "\<I> \<Turnstile>\<^sub>c \<langle>S@Send [Fun f T]#S',\<theta>\<rangle>"
[PROOF STATE]
proof (prove)
using this:
ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I> \<turnstile>\<^sub>c Fun f T \<cdot> \<I>

goal (1 subgoal):
 1. \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
[PROOF STEP]
using *(1,3) \<open>\<I> \<Turnstile>\<^sub>c \<langle>S@map Send1 T@S',\<theta>\<rangle>\<close>
[PROOF STATE]
proof (prove)
using this:
ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I> \<turnstile>\<^sub>c Fun f T \<cdot> \<I>
\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
\<I> \<Turnstile>\<^sub>c \<langle>S @ map Send1 T @ S',\<theta>\<rangle>

goal (1 subgoal):
 1. \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
[PROOF STEP]
by (auto simp add: constr_sem_c_def)
[PROOF STATE]
proof (state)
this:
\<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>

goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
case (Unify S f U \<delta> T S' \<theta>)
[PROOF STATE]
proof (state)
this:
simple S
Fun f U \<in> ik\<^sub>s\<^sub>t S
Some \<delta> = mgu (Fun f T) (Fun f U)
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>
\<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>

goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "(\<theta> \<circ>\<^sub>s \<delta>) supports \<I>" "\<lbrakk>{}; S@S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<theta> \<circ>\<^sub>s \<delta> supports \<I> &&& \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
using Unify.prems(2)
[PROOF STATE]
proof (prove)
using this:
\<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>

goal (1 subgoal):
 1. \<theta> \<circ>\<^sub>s \<delta> supports \<I> &&& \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
unfolding constr_sem_c_def
[PROOF STATE]
proof (prove)
using this:
\<theta> \<circ>\<^sub>s \<delta> supports \<I> \<and> \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. \<theta> \<circ>\<^sub>s \<delta> supports \<I> &&& \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
by metis+
[PROOF STATE]
proof (state)
this:
\<theta> \<circ>\<^sub>s \<delta> supports \<I>
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>

goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<theta> \<circ>\<^sub>s \<delta> supports \<I>
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
obtain \<sigma> where \<sigma>: "\<theta> \<circ>\<^sub>s \<delta> \<circ>\<^sub>s \<sigma> = \<I>"
[PROOF STATE]
proof (prove)
using this:
\<theta> \<circ>\<^sub>s \<delta> supports \<I>
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. (\<And>\<sigma>. \<theta> \<circ>\<^sub>s \<delta> \<circ>\<^sub>s \<sigma> = \<I> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
unfolding subst_compose_def
[PROOF STATE]
proof (prove)
using this:
(\<lambda>x. \<theta> x \<cdot> \<delta>) supports \<I>
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. (\<And>\<sigma>. (\<lambda>x. \<theta> x \<cdot> \<delta> \<cdot> \<sigma>) = \<I> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<theta> \<circ>\<^sub>s \<delta> \<circ>\<^sub>s \<sigma> = \<I>

goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have \<theta>fun_id: "Fun f U \<cdot> \<theta> = Fun f U" "Fun f T \<cdot> \<theta> = Fun f T"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Fun f U \<cdot> \<theta> = Fun f U &&& Fun f T \<cdot> \<theta> = Fun f T
[PROOF STEP]
using Unify.prems(1) trm_subst_ident[of "Fun f U" \<theta>]
          fv_subset_if_in_strand_ik[of "Fun f U" S] Unify.hyps(2)
          fv_snd_rcv_strand_subset(2)[of S]
          strand_vars_split(1)[of S "Send [Fun f T]#S'"]
[PROOF STATE]
proof (prove)
using this:
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>
fv (Fun f U) \<inter> subst_domain \<theta> = {} \<Longrightarrow> Fun f U \<cdot> \<theta> = Fun f U
Fun f U \<in> ik\<^sub>s\<^sub>t S \<Longrightarrow> fv (Fun f U) \<subseteq> \<Union> (set (map fv\<^sub>r\<^sub>c\<^sub>v S))
Fun f U \<in> ik\<^sub>s\<^sub>t S
\<Union> (set (map fv\<^sub>r\<^sub>c\<^sub>v S)) \<subseteq> fv\<^sub>s\<^sub>t S
vars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = vars\<^sub>s\<^sub>t S \<union> vars\<^sub>s\<^sub>t (Send1 (Fun f T) # S')

goal (1 subgoal):
 1. Fun f U \<cdot> \<theta> = Fun f U &&& Fun f T \<cdot> \<theta> = Fun f T
[PROOF STEP]
unfolding wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r_def
[PROOF STATE]
proof (prove)
using this:
wf\<^sub>s\<^sub>u\<^sub>b\<^sub>s\<^sub>t \<theta> \<and> wf\<^sub>s\<^sub>t {} (S @ Send1 (Fun f T) # S') \<and> subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = {} \<and> range_vars \<theta> \<inter> bvars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = {} \<and> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') \<inter> bvars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = {}
fv (Fun f U) \<inter> subst_domain \<theta> = {} \<Longrightarrow> Fun f U \<cdot> \<theta> = Fun f U
Fun f U \<in> ik\<^sub>s\<^sub>t S \<Longrightarrow> fv (Fun f U) \<subseteq> \<Union> (set (map fv\<^sub>r\<^sub>c\<^sub>v S))
Fun f U \<in> ik\<^sub>s\<^sub>t S
\<Union> (set (map fv\<^sub>r\<^sub>c\<^sub>v S)) \<subseteq> fv\<^sub>s\<^sub>t S
vars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = vars\<^sub>s\<^sub>t S \<union> vars\<^sub>s\<^sub>t (Send1 (Fun f T) # S')

goal (1 subgoal):
 1. Fun f U \<cdot> \<theta> = Fun f U &&& Fun f T \<cdot> \<theta> = Fun f T
[PROOF STEP]
apply blast
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Fun f T \<cdot> \<theta> = Fun f T
[PROOF STEP]
using Unify.prems(1) trm_subst_ident[of "Fun f T" \<theta>]
[PROOF STATE]
proof (prove)
using this:
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>
fv (Fun f T) \<inter> subst_domain \<theta> = {} \<Longrightarrow> Fun f T \<cdot> \<theta> = Fun f T

goal (1 subgoal):
 1. Fun f T \<cdot> \<theta> = Fun f T
[PROOF STEP]
unfolding wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r_def
[PROOF STATE]
proof (prove)
using this:
wf\<^sub>s\<^sub>u\<^sub>b\<^sub>s\<^sub>t \<theta> \<and> wf\<^sub>s\<^sub>t {} (S @ Send1 (Fun f T) # S') \<and> subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = {} \<and> range_vars \<theta> \<inter> bvars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = {} \<and> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') \<inter> bvars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = {}
fv (Fun f T) \<inter> subst_domain \<theta> = {} \<Longrightarrow> Fun f T \<cdot> \<theta> = Fun f T

goal (1 subgoal):
 1. Fun f T \<cdot> \<theta> = Fun f T
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
Fun f U \<cdot> \<theta> = Fun f U
Fun f T \<cdot> \<theta> = Fun f T

goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
hence \<theta>\<delta>_disj:
      "subst_domain \<theta> \<inter> subst_domain \<delta> = {}"
      "subst_domain \<theta> \<inter> range_vars \<delta> = {}"
      "subst_domain \<theta> \<inter> range_vars \<theta> = {}"
[PROOF STATE]
proof (prove)
using this:
Fun f U \<cdot> \<theta> = Fun f U
Fun f T \<cdot> \<theta> = Fun f T

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> subst_domain \<delta> = {} &&& subst_domain \<theta> \<inter> range_vars \<delta> = {} &&& subst_domain \<theta> \<inter> range_vars \<theta> = {}
[PROOF STEP]
using trm_subst_disj mgu_vars_bounded[OF Unify.hyps(3)[symmetric]]
[PROOF STATE]
proof (prove)
using this:
Fun f U \<cdot> \<theta> = Fun f U
Fun f T \<cdot> \<theta> = Fun f T
?t \<cdot> ?\<theta> = ?t \<Longrightarrow> fv ?t \<inter> subst_domain ?\<theta> = {}
subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv (Fun f T) \<union> fv (Fun f U)

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> subst_domain \<delta> = {} &&& subst_domain \<theta> \<inter> range_vars \<delta> = {} &&& subst_domain \<theta> \<inter> range_vars \<theta> = {}
[PROOF STEP]
apply (blast,blast)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subst_domain \<theta> \<inter> range_vars \<theta> = {}
[PROOF STEP]
using Unify.prems(1)
[PROOF STATE]
proof (prove)
using this:
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> range_vars \<theta> = {}
[PROOF STEP]
unfolding wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r_def wf\<^sub>s\<^sub>u\<^sub>b\<^sub>s\<^sub>t_def
[PROOF STATE]
proof (prove)
using this:
(subst_domain \<theta> \<inter> range_vars \<theta> = {} \<and> finite (subst_domain \<theta>)) \<and> wf\<^sub>s\<^sub>t {} (S @ Send1 (Fun f T) # S') \<and> subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = {} \<and> range_vars \<theta> \<inter> bvars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = {} \<and> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') \<inter> bvars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = {}

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> range_vars \<theta> = {}
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
subst_domain \<theta> \<inter> subst_domain \<delta> = {}
subst_domain \<theta> \<inter> range_vars \<delta> = {}
subst_domain \<theta> \<inter> range_vars \<theta> = {}

goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
hence \<theta>\<delta>_support: "\<theta> supports \<I>" "\<delta> supports \<I>"
[PROOF STATE]
proof (prove)
using this:
subst_domain \<theta> \<inter> subst_domain \<delta> = {}
subst_domain \<theta> \<inter> range_vars \<delta> = {}
subst_domain \<theta> \<inter> range_vars \<theta> = {}

goal (1 subgoal):
 1. \<theta> supports \<I> &&& \<delta> supports \<I>
[PROOF STEP]
by (simp_all add: subst_support_comp_split[OF \<open>(\<theta> \<circ>\<^sub>s \<delta>) supports \<I>\<close>])
[PROOF STATE]
proof (state)
this:
\<theta> supports \<I>
\<delta> supports \<I>

goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "fv (Fun f T) \<subseteq> fv\<^sub>s\<^sub>t (S@Send [Fun f T]#S')" "fv (Fun f U) \<subseteq> fv\<^sub>s\<^sub>t (S@Send [Fun f T]#S')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fv (Fun f T) \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') &&& fv (Fun f U) \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S')
[PROOF STEP]
using Unify.hyps(2)
[PROOF STATE]
proof (prove)
using this:
Fun f U \<in> ik\<^sub>s\<^sub>t S

goal (1 subgoal):
 1. fv (Fun f T) \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') &&& fv (Fun f U) \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S')
[PROOF STEP]
by force+
[PROOF STATE]
proof (state)
this:
fv (Fun f T) \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S')
fv (Fun f U) \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S')

goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
hence \<delta>_vars_bound: "subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv\<^sub>s\<^sub>t (S@Send [Fun f T]#S')"
[PROOF STATE]
proof (prove)
using this:
fv (Fun f T) \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S')
fv (Fun f U) \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S')

goal (1 subgoal):
 1. subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S')
[PROOF STEP]
using mgu_vars_bounded[OF Unify.hyps(3)[symmetric]]
[PROOF STATE]
proof (prove)
using this:
fv (Fun f T) \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S')
fv (Fun f U) \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S')
subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv (Fun f T) \<union> fv (Fun f U)

goal (1 subgoal):
 1. subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S')
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S')

goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send [Fun f T]]\<rbrakk>\<^sub>c \<I>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send1 (Fun f T)]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send1 (Fun f T)]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
from Unify.hyps(2)
[PROOF STATE]
proof (chain)
picking this:
Fun f U \<in> ik\<^sub>s\<^sub>t S
[PROOF STEP]
have "Fun f U \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>"
[PROOF STATE]
proof (prove)
using this:
Fun f U \<in> ik\<^sub>s\<^sub>t S

goal (1 subgoal):
 1. Fun f U \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
Fun f U \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>

goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send1 (Fun f T)]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
hence "Fun f U \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>"
[PROOF STATE]
proof (prove)
using this:
Fun f U \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>

goal (1 subgoal):
 1. Fun f U \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
Fun f U \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>

goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send1 (Fun f T)]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Fun f U \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>

goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send1 (Fun f T)]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
have "Unifier \<delta> (Fun f T) (Fun f U)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Unifier \<delta> (Fun f T) (Fun f U)
[PROOF STEP]
by (fact MGU_is_Unifier[OF mgu_gives_MGU[OF Unify.hyps(3)[symmetric]]])
[PROOF STATE]
proof (state)
this:
Unifier \<delta> (Fun f T) (Fun f U)

goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send1 (Fun f T)]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
Fun f U \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>
Unifier \<delta> (Fun f T) (Fun f U)
[PROOF STEP]
have "Fun f T \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>"
[PROOF STATE]
proof (prove)
using this:
Fun f U \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>
Unifier \<delta> (Fun f T) (Fun f U)

goal (1 subgoal):
 1. Fun f T \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>
[PROOF STEP]
using \<sigma>
[PROOF STATE]
proof (prove)
using this:
Fun f U \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>
Unifier \<delta> (Fun f T) (Fun f U)
\<theta> \<circ>\<^sub>s \<delta> \<circ>\<^sub>s \<sigma> = \<I>

goal (1 subgoal):
 1. Fun f T \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>
[PROOF STEP]
by (metis \<theta>fun_id subst_subst_compose)
[PROOF STATE]
proof (state)
this:
Fun f T \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>

goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send1 (Fun f T)]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
Fun f T \<cdot> \<I> \<in> ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>

goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send1 (Fun f T)]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send1 (Fun f T)]\<rbrakk>\<^sub>c \<I>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send1 (Fun f T)]\<rbrakk>\<^sub>c \<I>

goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>" "\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I> &&& \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
have "(S@S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S@S' \<cdot>\<^sub>s\<^sub>t \<delta>" "(S@S') \<cdot>\<^sub>s\<^sub>t \<theta> = S@S'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta> &&& S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
 2. S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
have "subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S@S') = {}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S') = {}
[PROOF STEP]
using Unify.prems(1)
[PROOF STATE]
proof (prove)
using this:
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S') = {}
[PROOF STEP]
by (auto simp add: wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r_def)
[PROOF STATE]
proof (state)
this:
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S') = {}

goal (2 subgoals):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
 2. S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
hence "subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S@S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}"
[PROOF STATE]
proof (prove)
using this:
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S') = {}

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
[PROOF STEP]
using \<theta>\<delta>_disj(2) strand_subst_vars_union_bound[of "S@S'" \<delta>]
[PROOF STATE]
proof (prove)
using this:
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S') = {}
subst_domain \<theta> \<inter> range_vars \<delta> = {}
vars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<subseteq> vars\<^sub>s\<^sub>t (S @ S') \<union> range_vars \<delta>

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}

goal (2 subgoals):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
 2. S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
thus "(S@S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S@S' \<cdot>\<^sub>s\<^sub>t \<delta>" "(S@S') \<cdot>\<^sub>s\<^sub>t \<theta> = S@S'"
[PROOF STATE]
proof (prove)
using this:
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}

goal (1 subgoal):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta> &&& S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
using strand_subst_comp \<open>subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S@S') = {}\<close>
[PROOF STATE]
proof (prove)
using this:
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
range_vars ?\<delta> \<inter> bvars\<^sub>s\<^sub>t ?S = {} \<Longrightarrow> ?S \<cdot>\<^sub>s\<^sub>t ?\<delta> \<circ>\<^sub>s ?\<theta> = (?S \<cdot>\<^sub>s\<^sub>t ?\<delta>) \<cdot>\<^sub>s\<^sub>t ?\<theta>
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S') = {}

goal (1 subgoal):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta> &&& S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
by (blast,blast)
[PROOF STATE]
proof (state)
this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'

goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'

goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
have "subst_idem \<delta>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subst_idem \<delta>
[PROOF STEP]
by (fact mgu_gives_subst_idem[OF Unify.hyps(3)[symmetric]])
[PROOF STATE]
proof (state)
this:
subst_idem \<delta>

goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
subst_idem \<delta>

goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
have
        "(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S@S') = {}"
        "(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S@S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}"
        "(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S@S') = {}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {} &&& (subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {} &&& (subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
[PROOF STEP]
using wf_constr_bvars_disj[OF Unify.prems(1)]
            wf_constr_bvars_disj'[OF Unify.prems(1) \<delta>_vars_bound]
[PROOF STATE]
proof (prove)
using this:
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ Send1 (Fun f T) # S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}

goal (1 subgoal):
 1. (subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {} &&& (subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {} &&& (subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}

goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
subst_idem \<delta>
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
[PROOF STEP]
have "\<lbrakk>{}; S@S'\<rbrakk>\<^sub>c \<I>"
[PROOF STATE]
proof (prove)
using this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
subst_idem \<delta>
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}

goal (1 subgoal):
 1. \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
using \<open>\<lbrakk>{}; S@S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>\<close> \<sigma>
            strand_sem_subst(1)[of \<theta> "S@S' \<cdot>\<^sub>s\<^sub>t \<delta>" "{}" "\<delta> \<circ>\<^sub>s \<sigma>"]
            strand_sem_subst(2)[of \<theta> "S@S'" "{}" "\<delta> \<circ>\<^sub>s \<sigma>"]
            strand_sem_subst_subst_idem[of \<delta> "S@S'" "{}" \<sigma>]
[PROOF STATE]
proof (prove)
using this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
subst_idem \<delta>
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
\<theta> \<circ>\<^sub>s \<delta> \<circ>\<^sub>s \<sigma> = \<I>
\<lbrakk>(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c (\<theta> \<circ>\<^sub>s (\<delta> \<circ>\<^sub>s \<sigma>))\<rbrakk> \<Longrightarrow> \<lbrakk>{}; (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)
\<lbrakk>(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<theta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)\<rbrakk> \<Longrightarrow> \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c (\<theta> \<circ>\<^sub>s (\<delta> \<circ>\<^sub>s \<sigma>))
\<lbrakk>(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>); subst_idem \<delta>\<rbrakk> \<Longrightarrow> \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)

goal (1 subgoal):
 1. \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
unfolding constr_sem_c_def
[PROOF STATE]
proof (prove)
using this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
subst_idem \<delta>
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
\<theta> \<circ>\<^sub>s \<delta> \<circ>\<^sub>s \<sigma> = \<I>
\<lbrakk>(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c (\<theta> \<circ>\<^sub>s (\<delta> \<circ>\<^sub>s \<sigma>))\<rbrakk> \<Longrightarrow> \<lbrakk>{}; (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)
\<lbrakk>(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<theta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)\<rbrakk> \<Longrightarrow> \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c (\<theta> \<circ>\<^sub>s (\<delta> \<circ>\<^sub>s \<sigma>))
\<lbrakk>(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>); subst_idem \<delta>\<rbrakk> \<Longrightarrow> \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)

goal (1 subgoal):
 1. \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
by (metis subst_compose_assoc)
[PROOF STATE]
proof (state)
this:
\<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c \<I>

goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
thus "\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>" "\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I> &&& \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>

goal (2 subgoals):
 1. \<And>S f T' \<delta> T S' \<theta>. \<lbrakk>simple S; Fun f T' \<in> ik\<^sub>s\<^sub>t S; Some \<delta> = mgu (Fun f T) (Fun f T'); wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ Send1 (Fun f T) # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
 2. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
show "\<I> \<Turnstile>\<^sub>c \<langle>S@Send [Fun f T]#S',\<theta>\<rangle>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
[PROOF STEP]
using \<theta>\<delta>_support(1) \<open>\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send [Fun f T]]\<rbrakk>\<^sub>c \<I>\<close> \<open>\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>\<close> \<open>\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>\<close>
[PROOF STATE]
proof (prove)
using this:
\<theta> supports \<I>
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Send1 (Fun f T)]\<rbrakk>\<^sub>c \<I>
\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. \<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>
[PROOF STEP]
by (auto simp add: constr_sem_c_def)
[PROOF STATE]
proof (state)
this:
\<I> \<Turnstile>\<^sub>c \<langle>S @ Send1 (Fun f T) # S',\<theta>\<rangle>

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
case (Equality S \<delta> t t' a S' \<theta>)
[PROOF STATE]
proof (state)
this:
simple S
Some \<delta> = mgu t t'
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>
\<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "(\<theta> \<circ>\<^sub>s \<delta>) supports \<I>" "\<lbrakk>{}; S@S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<theta> \<circ>\<^sub>s \<delta> supports \<I> &&& \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
using Equality.prems(2)
[PROOF STATE]
proof (prove)
using this:
\<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>

goal (1 subgoal):
 1. \<theta> \<circ>\<^sub>s \<delta> supports \<I> &&& \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
unfolding constr_sem_c_def
[PROOF STATE]
proof (prove)
using this:
\<theta> \<circ>\<^sub>s \<delta> supports \<I> \<and> \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. \<theta> \<circ>\<^sub>s \<delta> supports \<I> &&& \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
by metis+
[PROOF STATE]
proof (state)
this:
\<theta> \<circ>\<^sub>s \<delta> supports \<I>
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<theta> \<circ>\<^sub>s \<delta> supports \<I>
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
obtain \<sigma> where \<sigma>: "\<theta> \<circ>\<^sub>s \<delta> \<circ>\<^sub>s \<sigma> = \<I>"
[PROOF STATE]
proof (prove)
using this:
\<theta> \<circ>\<^sub>s \<delta> supports \<I>
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. (\<And>\<sigma>. \<theta> \<circ>\<^sub>s \<delta> \<circ>\<^sub>s \<sigma> = \<I> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
unfolding subst_compose_def
[PROOF STATE]
proof (prove)
using this:
(\<lambda>x. \<theta> x \<cdot> \<delta>) supports \<I>
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. (\<And>\<sigma>. (\<lambda>x. \<theta> x \<cdot> \<delta> \<cdot> \<sigma>) = \<I> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<theta> \<circ>\<^sub>s \<delta> \<circ>\<^sub>s \<sigma> = \<I>

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "fv t \<subseteq> vars\<^sub>s\<^sub>t (S@Equality a t t'#S')" "fv t' \<subseteq> vars\<^sub>s\<^sub>t (S@Equality a t t'#S')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fv t \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') &&& fv t' \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
fv t \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
fv t' \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
fv t \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
fv t' \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S@Equality a t t'#S') = {}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {}
[PROOF STEP]
using Equality.prems(1)
[PROOF STATE]
proof (prove)
using this:
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {}
[PROOF STEP]
unfolding wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r_def
[PROOF STATE]
proof (prove)
using this:
wf\<^sub>s\<^sub>u\<^sub>b\<^sub>s\<^sub>t \<theta> \<and> wf\<^sub>s\<^sub>t {} (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<and> subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {} \<and> range_vars \<theta> \<inter> bvars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {} \<and> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<inter> bvars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {}

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {}

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
fv t \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
fv t' \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {}
[PROOF STEP]
have \<theta>fun_id: "t \<cdot> \<theta> = t" "t' \<cdot> \<theta> = t'"
[PROOF STATE]
proof (prove)
using this:
fv t \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
fv t' \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {}

goal (1 subgoal):
 1. t \<cdot> \<theta> = t &&& t' \<cdot> \<theta> = t'
[PROOF STEP]
using trm_subst_ident[of t \<theta>] trm_subst_ident[of t' \<theta>]
[PROOF STATE]
proof (prove)
using this:
fv t \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
fv t' \<subseteq> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {}
fv t \<inter> subst_domain \<theta> = {} \<Longrightarrow> t \<cdot> \<theta> = t
fv t' \<inter> subst_domain \<theta> = {} \<Longrightarrow> t' \<cdot> \<theta> = t'

goal (1 subgoal):
 1. t \<cdot> \<theta> = t &&& t' \<cdot> \<theta> = t'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
t \<cdot> \<theta> = t
t' \<cdot> \<theta> = t'

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
hence \<theta>\<delta>_disj:
      "subst_domain \<theta> \<inter> subst_domain \<delta> = {}"
      "subst_domain \<theta> \<inter> range_vars \<delta> = {}"
      "subst_domain \<theta> \<inter> range_vars \<theta> = {}"
[PROOF STATE]
proof (prove)
using this:
t \<cdot> \<theta> = t
t' \<cdot> \<theta> = t'

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> subst_domain \<delta> = {} &&& subst_domain \<theta> \<inter> range_vars \<delta> = {} &&& subst_domain \<theta> \<inter> range_vars \<theta> = {}
[PROOF STEP]
using trm_subst_disj mgu_vars_bounded[OF Equality.hyps(2)[symmetric]]
[PROOF STATE]
proof (prove)
using this:
t \<cdot> \<theta> = t
t' \<cdot> \<theta> = t'
?t \<cdot> ?\<theta> = ?t \<Longrightarrow> fv ?t \<inter> subst_domain ?\<theta> = {}
subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv t \<union> fv t'

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> subst_domain \<delta> = {} &&& subst_domain \<theta> \<inter> range_vars \<delta> = {} &&& subst_domain \<theta> \<inter> range_vars \<theta> = {}
[PROOF STEP]
apply (blast,blast)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subst_domain \<theta> \<inter> range_vars \<theta> = {}
[PROOF STEP]
using Equality.prems(1)
[PROOF STATE]
proof (prove)
using this:
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> range_vars \<theta> = {}
[PROOF STEP]
unfolding wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r_def wf\<^sub>s\<^sub>u\<^sub>b\<^sub>s\<^sub>t_def
[PROOF STATE]
proof (prove)
using this:
(subst_domain \<theta> \<inter> range_vars \<theta> = {} \<and> finite (subst_domain \<theta>)) \<and> wf\<^sub>s\<^sub>t {} (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<and> subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {} \<and> range_vars \<theta> \<inter> bvars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {} \<and> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<inter> bvars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {}

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> range_vars \<theta> = {}
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
subst_domain \<theta> \<inter> subst_domain \<delta> = {}
subst_domain \<theta> \<inter> range_vars \<delta> = {}
subst_domain \<theta> \<inter> range_vars \<theta> = {}

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
hence \<theta>\<delta>_support: "\<theta> supports \<I>" "\<delta> supports \<I>"
[PROOF STATE]
proof (prove)
using this:
subst_domain \<theta> \<inter> subst_domain \<delta> = {}
subst_domain \<theta> \<inter> range_vars \<delta> = {}
subst_domain \<theta> \<inter> range_vars \<theta> = {}

goal (1 subgoal):
 1. \<theta> supports \<I> &&& \<delta> supports \<I>
[PROOF STEP]
by (simp_all add: subst_support_comp_split[OF \<open>(\<theta> \<circ>\<^sub>s \<delta>) supports \<I>\<close>])
[PROOF STATE]
proof (state)
this:
\<theta> supports \<I>
\<delta> supports \<I>

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "fv t \<subseteq> fv\<^sub>s\<^sub>t (S@Equality a t t'#S')" "fv t' \<subseteq> fv\<^sub>s\<^sub>t (S@Equality a t t'#S')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fv t \<subseteq> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') &&& fv t' \<subseteq> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
fv t \<subseteq> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
fv t' \<subseteq> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
hence \<delta>_vars_bound: "subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv\<^sub>s\<^sub>t (S@Equality a t t'#S')"
[PROOF STATE]
proof (prove)
using this:
fv t \<subseteq> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
fv t' \<subseteq> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')

goal (1 subgoal):
 1. subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
[PROOF STEP]
using mgu_vars_bounded[OF Equality.hyps(2)[symmetric]]
[PROOF STATE]
proof (prove)
using this:
fv t \<subseteq> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
fv t' \<subseteq> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv t \<union> fv t'

goal (1 subgoal):
 1. subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
subst_domain \<delta> \<union> range_vars \<delta> \<subseteq> fv\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S')

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Equality a t t']\<rbrakk>\<^sub>c \<I>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [\<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [\<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
have "t \<cdot> \<delta> = t' \<cdot> \<delta>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Unifier \<delta> t t'
[PROOF STEP]
using MGU_is_Unifier[OF mgu_gives_MGU[OF Equality.hyps(2)[symmetric]]]
[PROOF STATE]
proof (prove)
using this:
Unifier \<delta> t t'

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

goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [\<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
hence "t \<cdot> (\<theta> \<circ>\<^sub>s \<delta>) = t' \<cdot> (\<theta> \<circ>\<^sub>s \<delta>)"
[PROOF STATE]
proof (prove)
using this:
Unifier \<delta> t t'

goal (1 subgoal):
 1. Unifier (\<theta> \<circ>\<^sub>s \<delta>) t t'
[PROOF STEP]
by (metis \<theta>fun_id subst_subst_compose)
[PROOF STATE]
proof (state)
this:
Unifier (\<theta> \<circ>\<^sub>s \<delta>) t t'

goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [\<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
hence "t \<cdot> \<I> = t' \<cdot> \<I>"
[PROOF STATE]
proof (prove)
using this:
Unifier (\<theta> \<circ>\<^sub>s \<delta>) t t'

goal (1 subgoal):
 1. Unifier \<I> t t'
[PROOF STEP]
by (metis \<sigma> subst_subst_compose)
[PROOF STATE]
proof (state)
this:
Unifier \<I> t t'

goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [\<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
Unifier \<I> t t'

goal (1 subgoal):
 1. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [\<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t]\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [\<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t]\<rbrakk>\<^sub>c \<I>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [\<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t]\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
have "\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>" "\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I> &&& \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
have "(S@S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S@S' \<cdot>\<^sub>s\<^sub>t \<delta>" "(S@S') \<cdot>\<^sub>s\<^sub>t \<theta> = S@S'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta> &&& S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
 2. S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
have "subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S@S') = {}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S') = {}
[PROOF STEP]
using Equality.prems(1)
[PROOF STATE]
proof (prove)
using this:
wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S') = {}
[PROOF STEP]
by (fastforce simp add: wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r_def simp del: subst_range.simps)
[PROOF STATE]
proof (state)
this:
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S') = {}

goal (2 subgoals):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
 2. S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
hence "subst_domain \<theta> \<inter> fv\<^sub>s\<^sub>t (S@S') = {}"
[PROOF STATE]
proof (prove)
using this:
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S') = {}

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> fv\<^sub>s\<^sub>t (S @ S') = {}
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
subst_domain \<theta> \<inter> fv\<^sub>s\<^sub>t (S @ S') = {}

goal (2 subgoals):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
 2. S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
hence "subst_domain \<theta> \<inter> fv\<^sub>s\<^sub>t (S@S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}"
[PROOF STATE]
proof (prove)
using this:
subst_domain \<theta> \<inter> fv\<^sub>s\<^sub>t (S @ S') = {}

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> fv\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
[PROOF STEP]
using \<theta>\<delta>_disj(2) subst_sends_strand_fv_to_img[of "S@S'" \<delta>]
[PROOF STATE]
proof (prove)
using this:
subst_domain \<theta> \<inter> fv\<^sub>s\<^sub>t (S @ S') = {}
subst_domain \<theta> \<inter> range_vars \<delta> = {}
fv\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<subseteq> fv\<^sub>s\<^sub>t (S @ S') \<union> range_vars \<delta>

goal (1 subgoal):
 1. subst_domain \<theta> \<inter> fv\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
subst_domain \<theta> \<inter> fv\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}

goal (2 subgoals):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
 2. S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
thus "(S@S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S@S' \<cdot>\<^sub>s\<^sub>t \<delta>" "(S@S') \<cdot>\<^sub>s\<^sub>t \<theta> = S@S'"
[PROOF STATE]
proof (prove)
using this:
subst_domain \<theta> \<inter> fv\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}

goal (1 subgoal):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta> &&& S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
using strand_subst_comp \<open>subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S@S') = {}\<close>
[PROOF STATE]
proof (prove)
using this:
subst_domain \<theta> \<inter> fv\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
range_vars ?\<delta> \<inter> bvars\<^sub>s\<^sub>t ?S = {} \<Longrightarrow> ?S \<cdot>\<^sub>s\<^sub>t ?\<delta> \<circ>\<^sub>s ?\<theta> = (?S \<cdot>\<^sub>s\<^sub>t ?\<delta>) \<cdot>\<^sub>s\<^sub>t ?\<theta>
subst_domain \<theta> \<inter> vars\<^sub>s\<^sub>t (S @ S') = {}

goal (1 subgoal):
 1. (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta> &&& S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
[PROOF STEP]
by (blast,blast)
[PROOF STATE]
proof (state)
this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'

goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'

goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
have
        "(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S@S') = {}"
        "(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S@S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}"
        "(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S@S') = {}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {} &&& (subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {} &&& (subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
[PROOF STEP]
using wf_constr_bvars_disj[OF Equality.prems(1)]
            wf_constr_bvars_disj'[OF Equality.prems(1) \<delta>_vars_bound]
[PROOF STATE]
proof (prove)
using this:
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}

goal (1 subgoal):
 1. (subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {} &&& (subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {} &&& (subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}

goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
[PROOF STEP]
have "\<lbrakk>{}; S@S'\<rbrakk>\<^sub>c \<I>"
[PROOF STATE]
proof (prove)
using this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}

goal (1 subgoal):
 1. \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
using \<open>\<lbrakk>{}; S@S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>\<close> \<sigma>
            strand_sem_subst(1)[of \<theta> "S@S' \<cdot>\<^sub>s\<^sub>t \<delta>" "{}" "\<delta> \<circ>\<^sub>s \<sigma>"]
            strand_sem_subst(2)[of \<theta> "S@S'" "{}" "\<delta> \<circ>\<^sub>s \<sigma>"]
            strand_sem_subst_subst_idem[of \<delta> "S@S'" "{}" \<sigma>]
            mgu_gives_subst_idem[OF Equality.hyps(2)[symmetric]]
[PROOF STATE]
proof (prove)
using this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
\<theta> \<circ>\<^sub>s \<delta> \<circ>\<^sub>s \<sigma> = \<I>
\<lbrakk>(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c (\<theta> \<circ>\<^sub>s (\<delta> \<circ>\<^sub>s \<sigma>))\<rbrakk> \<Longrightarrow> \<lbrakk>{}; (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)
\<lbrakk>(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<theta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)\<rbrakk> \<Longrightarrow> \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c (\<theta> \<circ>\<^sub>s (\<delta> \<circ>\<^sub>s \<sigma>))
\<lbrakk>(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>); subst_idem \<delta>\<rbrakk> \<Longrightarrow> \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)
subst_idem \<delta>

goal (1 subgoal):
 1. \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
unfolding constr_sem_c_def
[PROOF STATE]
proof (prove)
using this:
(S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>
S @ S' \<cdot>\<^sub>s\<^sub>t \<theta> = S @ S'
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}
(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}
\<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c \<I>
\<theta> \<circ>\<^sub>s \<delta> \<circ>\<^sub>s \<sigma> = \<I>
\<lbrakk>(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c (\<theta> \<circ>\<^sub>s (\<delta> \<circ>\<^sub>s \<sigma>))\<rbrakk> \<Longrightarrow> \<lbrakk>{}; (S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>) \<cdot>\<^sub>s\<^sub>t \<theta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)
\<lbrakk>(subst_domain \<theta> \<union> range_vars \<theta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<theta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)\<rbrakk> \<Longrightarrow> \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c (\<theta> \<circ>\<^sub>s (\<delta> \<circ>\<^sub>s \<sigma>))
\<lbrakk>(subst_domain \<delta> \<union> range_vars \<delta>) \<inter> bvars\<^sub>s\<^sub>t (S @ S') = {}; \<lbrakk>{}; S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>); subst_idem \<delta>\<rbrakk> \<Longrightarrow> \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c (\<delta> \<circ>\<^sub>s \<sigma>)
subst_idem \<delta>

goal (1 subgoal):
 1. \<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
by (metis subst_compose_assoc)
[PROOF STATE]
proof (state)
this:
\<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c \<I>

goal (2 subgoals):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
 2. \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
thus "\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>" "\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>{}; S @ S'\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. \<lbrakk>{}; S\<rbrakk>\<^sub>c \<I> &&& \<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. \<And>S \<delta> t t' uu_ S' \<theta>. \<lbrakk>simple S; Some \<delta> = mgu t t'; wf\<^sub>c\<^sub>o\<^sub>n\<^sub>s\<^sub>t\<^sub>r (S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S') \<theta>; \<I> \<Turnstile>\<^sub>c \<langle>S @ S' \<cdot>\<^sub>s\<^sub>t \<delta>,\<theta> \<circ>\<^sub>s \<delta>\<rangle>\<rbrakk> \<Longrightarrow> \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>uu_: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
show "\<I> \<Turnstile>\<^sub>c \<langle>S@Equality a t t'#S',\<theta>\<rangle>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
using \<theta>\<delta>_support(1) \<open>\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [Equality a t t']\<rbrakk>\<^sub>c \<I>\<close> \<open>\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>\<close> \<open>\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>\<close>
[PROOF STATE]
proof (prove)
using this:
\<theta> supports \<I>
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; [\<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t]\<rbrakk>\<^sub>c \<I>
\<lbrakk>{}; S\<rbrakk>\<^sub>c \<I>
\<lbrakk>ik\<^sub>s\<^sub>t S \<cdot>\<^sub>s\<^sub>e\<^sub>t \<I>; S'\<rbrakk>\<^sub>c \<I>

goal (1 subgoal):
 1. \<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>
[PROOF STEP]
by (auto simp add: constr_sem_c_def)
[PROOF STATE]
proof (state)
this:
\<I> \<Turnstile>\<^sub>c \<langle>S @ \<langle>a: t \<doteq> t'\<rangle>\<^sub>s\<^sub>t # S',\<theta>\<rangle>

goal:
No subgoals!
[PROOF STEP]
qed