[STATEMENT]
lemma expandTrans:
  fixes P :: pi
  and   Q :: pi
  and   R :: pi
  and   a :: name
  and   b :: name
  and   x :: name

  assumes Exp: "(R, expandSet P Q) \<in> sumComposeSet"
  and     Phnf: "hnf P"
  and     Qhnf: "hnf Q"

  shows "(P \<parallel> Q \<longmapsto>\<tau> \<prec> P') = (R \<longmapsto>\<tau> \<prec> P')"
  and   "(P \<parallel> Q \<longmapsto>a[b] \<prec> P') = (R \<longmapsto>a[b] \<prec> P')"
  and   "(P \<parallel> Q \<longmapsto>a<x> \<prec> P') = (R \<longmapsto>a<x> \<prec> P')"
  and   "(P \<parallel> Q \<longmapsto>a<\<nu>x> \<prec> P') = (R \<longmapsto>a<\<nu>x> \<prec> P')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (P \<parallel> Q \<longmapsto> \<tau> \<prec> P' = R \<longmapsto> \<tau> \<prec> P' &&& P \<parallel> Q \<longmapsto> a[b] \<prec> P' = R \<longmapsto> a[b] \<prec> P') &&& P \<parallel> Q \<longmapsto> a<x> \<prec> P' = R \<longmapsto> a<x> \<prec> P' &&& P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P' = R \<longmapsto> \<tau> \<prec> P'
 2. P \<parallel> Q \<longmapsto> a[b] \<prec> P' = R \<longmapsto> a[b] \<prec> P'
 3. P \<parallel> Q \<longmapsto> a<x> \<prec> P' = R \<longmapsto> a<x> \<prec> P'
 4. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
show "P \<parallel> Q \<longmapsto> \<tau> \<prec> P' = R \<longmapsto> \<tau> \<prec> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P' = R \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
proof(rule iffI)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'
 2. R \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "P \<parallel> Q \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'
 2. R \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
thus "R \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
proof(induct rule: parCasesF[of _ _ _ _ _ "(P, Q)"])
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 4. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case(cPar1 P')
[PROOF STATE]
proof (state)
this:
P \<longmapsto> \<tau> \<prec> P'

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 4. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "P \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
P \<longmapsto> \<tau> \<prec> P'

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 4. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
with Phnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
P \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
have "\<tau>.(P') \<in> summands P"
[PROOF STATE]
proof (prove)
using this:
hnf P
P \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. \<tau>.P' \<in> summands P
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
\<tau>.P' \<in> summands P

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 4. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
hence "\<tau>.(P' \<parallel> Q) \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
\<tau>.P' \<in> summands P

goal (1 subgoal):
 1. \<tau>.(P' \<parallel> Q) \<in> expandSet P Q
[PROOF STEP]
by(auto simp add: expandSet_def)
[PROOF STATE]
proof (state)
this:
\<tau>.(P' \<parallel> Q) \<in> expandSet P Q

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 4. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<tau>.(P' \<parallel> Q) \<in> expandSet P Q

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 4. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "\<tau>.(P' \<parallel> Q) \<longmapsto>\<tau> \<prec> (P' \<parallel> Q)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<tau>.(P' \<parallel> Q) \<longmapsto> \<tau> \<prec> P' \<parallel> Q
[PROOF STEP]
by(rule Tau)
[PROOF STATE]
proof (state)
this:
\<tau>.(P' \<parallel> Q) \<longmapsto> \<tau> \<prec> P' \<parallel> Q

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 4. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<tau>.(P' \<parallel> Q) \<in> expandSet P Q
\<tau>.(P' \<parallel> Q) \<longmapsto> \<tau> \<prec> P' \<parallel> Q
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P' \<parallel> Q) \<in> expandSet P Q
\<tau>.(P' \<parallel> Q) \<longmapsto> \<tau> \<prec> P' \<parallel> Q

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P' \<parallel> Q
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P' \<parallel> Q) \<in> expandSet P Q
\<tau>.(P' \<parallel> Q) \<longmapsto> \<tau> \<prec> P' \<parallel> Q
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P' \<parallel> Q
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> P' \<parallel> Q

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case(cPar2 Q')
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> \<tau> \<prec> Q'

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "Q \<longmapsto>\<tau> \<prec> Q'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<longmapsto> \<tau> \<prec> Q'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> \<tau> \<prec> Q'

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
with Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf Q
Q \<longmapsto> \<tau> \<prec> Q'
[PROOF STEP]
have "\<tau>.(Q') \<in> summands Q"
[PROOF STATE]
proof (prove)
using this:
hnf Q
Q \<longmapsto> \<tau> \<prec> Q'

goal (1 subgoal):
 1. \<tau>.Q' \<in> summands Q
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
\<tau>.Q' \<in> summands Q

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
hence "\<tau>.(P \<parallel> Q') \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
\<tau>.Q' \<in> summands Q

goal (1 subgoal):
 1. \<tau>.(P \<parallel> Q') \<in> expandSet P Q
[PROOF STEP]
by(auto simp add: expandSet_def)
[PROOF STATE]
proof (state)
this:
\<tau>.(P \<parallel> Q') \<in> expandSet P Q

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<tau>.(P \<parallel> Q') \<in> expandSet P Q

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "\<tau>.(P \<parallel> Q') \<longmapsto>\<tau> \<prec> (P \<parallel> Q')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P \<parallel> Q'
[PROOF STEP]
by(rule Tau)
[PROOF STATE]
proof (state)
this:
\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P \<parallel> Q'

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 3. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<tau>.(P \<parallel> Q') \<in> expandSet P Q
\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P \<parallel> Q'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P \<parallel> Q') \<in> expandSet P Q
\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P \<parallel> Q'

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P \<parallel> Q') \<in> expandSet P Q
\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P \<parallel> Q'
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P \<parallel> Q'
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> P \<parallel> Q'

goal (4 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case(cComm1 P' Q' a b x)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<x> \<prec> P'
Q \<longmapsto> a[b] \<prec> Q'
x \<sharp> P
x \<sharp> Q
x \<noteq> a
x \<noteq> b
x \<sharp> Q'
x \<sharp> (P, Q)
\<tau> = \<tau>

goal (4 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "P \<longmapsto>a<x> \<prec> P'" and "Q \<longmapsto>a[b] \<prec> Q'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<longmapsto> a<x> \<prec> P' &&& Q \<longmapsto> a[b] \<prec> Q'
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<x> \<prec> P'
Q \<longmapsto> a[b] \<prec> Q'

goal (4 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
with Phnf Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
hnf Q
P \<longmapsto> a<x> \<prec> P'
Q \<longmapsto> a[b] \<prec> Q'
[PROOF STEP]
have "a<x>.P' \<in> summands P" and "a{b}.Q' \<in> summands Q"
[PROOF STATE]
proof (prove)
using this:
hnf P
hnf Q
P \<longmapsto> a<x> \<prec> P'
Q \<longmapsto> a[b] \<prec> Q'

goal (1 subgoal):
 1. a<x>.P' \<in> summands P &&& a{b}.Q' \<in> summands Q
[PROOF STEP]
by(simp add: summandTransition)+
[PROOF STATE]
proof (state)
this:
a<x>.P' \<in> summands P
a{b}.Q' \<in> summands Q

goal (4 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
hence "\<tau>.(P'[x::=b] \<parallel> Q') \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
a<x>.P' \<in> summands P
a{b}.Q' \<in> summands Q

goal (1 subgoal):
 1. \<tau>.(P'[x::=b] \<parallel> Q') \<in> expandSet P Q
[PROOF STEP]
by(simp add: expandSet_def, blast)
[PROOF STATE]
proof (state)
this:
\<tau>.(P'[x::=b] \<parallel> Q') \<in> expandSet P Q

goal (4 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<tau>.(P'[x::=b] \<parallel> Q') \<in> expandSet P Q

goal (4 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "\<tau>.(P'[x::=b] \<parallel> Q') \<longmapsto>\<tau> \<prec> (P'[x::=b] \<parallel> Q')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<tau>.(P'[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
[PROOF STEP]
by(rule Tau)
[PROOF STATE]
proof (state)
this:
\<tau>.(P'[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'

goal (4 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a[b] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> Q'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
 2. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 4. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<tau>.(P'[x::=b] \<parallel> Q') \<in> expandSet P Q
\<tau>.(P'[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P'[x::=b] \<parallel> Q') \<in> expandSet P Q
\<tau>.(P'[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P'[x::=b] \<parallel> Q') \<in> expandSet P Q
\<tau>.(P'[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> Q'

goal (3 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case(cComm2 P' Q' a b x)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a[b] \<prec> P'
Q \<longmapsto> a<x> \<prec> Q'
x \<sharp> P
x \<sharp> Q
x \<noteq> a
x \<noteq> b
x \<sharp> P'
x \<sharp> (P, Q)
\<tau> = \<tau>

goal (3 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "P \<longmapsto>a[b] \<prec> P'" and "Q \<longmapsto>a<x> \<prec> Q'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<longmapsto> a[b] \<prec> P' &&& Q \<longmapsto> a<x> \<prec> Q'
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a[b] \<prec> P'
Q \<longmapsto> a<x> \<prec> Q'

goal (3 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
with Phnf Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
hnf Q
P \<longmapsto> a[b] \<prec> P'
Q \<longmapsto> a<x> \<prec> Q'
[PROOF STEP]
have "a{b}.P' \<in> summands P" and "a<x>.Q' \<in> summands Q"
[PROOF STATE]
proof (prove)
using this:
hnf P
hnf Q
P \<longmapsto> a[b] \<prec> P'
Q \<longmapsto> a<x> \<prec> Q'

goal (1 subgoal):
 1. a{b}.P' \<in> summands P &&& a<x>.Q' \<in> summands Q
[PROOF STEP]
by(simp add: summandTransition)+
[PROOF STATE]
proof (state)
this:
a{b}.P' \<in> summands P
a<x>.Q' \<in> summands Q

goal (3 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
hence "\<tau>.(P' \<parallel> (Q'[x::=b])) \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
a{b}.P' \<in> summands P
a<x>.Q' \<in> summands Q

goal (1 subgoal):
 1. \<tau>.(P' \<parallel> Q'[x::=b]) \<in> expandSet P Q
[PROOF STEP]
by(simp add: expandSet_def, blast)
[PROOF STATE]
proof (state)
this:
\<tau>.(P' \<parallel> Q'[x::=b]) \<in> expandSet P Q

goal (3 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<tau>.(P' \<parallel> Q'[x::=b]) \<in> expandSet P Q

goal (3 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "\<tau>.(P' \<parallel> (Q'[x::=b])) \<longmapsto>\<tau> \<prec> (P' \<parallel> (Q'[x::=b]))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<tau>.(P' \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
[PROOF STEP]
by(rule Tau)
[PROOF STATE]
proof (state)
this:
\<tau>.(P' \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]

goal (3 subgoals):
 1. \<And>P' Q' a b x. \<lbrakk>P \<longmapsto> a[b] \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> b; x \<sharp> P'; x \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 3. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<tau>.(P' \<parallel> Q'[x::=b]) \<in> expandSet P Q
\<tau>.(P' \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P' \<parallel> Q'[x::=b]) \<in> expandSet P Q
\<tau>.(P' \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P' \<parallel> Q'[x::=b]) \<in> expandSet P Q
\<tau>.(P' \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=b]

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case(cClose1 P' Q' a x y)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<x> \<prec> P'
Q \<longmapsto> a<\<nu>y> \<prec> Q'
x \<sharp> P
x \<sharp> Q
x \<noteq> a
x \<noteq> y
x \<sharp> Q'
y \<sharp> P
y \<sharp> Q
y \<noteq> a
y \<sharp> P'
x \<sharp> (P, Q)
y \<sharp> (P, Q)
\<tau> = \<tau>

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "y \<sharp> (P, Q)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. y \<sharp> (P, Q)
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
y \<sharp> (P, Q)

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
hence yFreshP: "y \<sharp> P"
[PROOF STATE]
proof (prove)
using this:
y \<sharp> (P, Q)

goal (1 subgoal):
 1. y \<sharp> P
[PROOF STEP]
by(simp add: fresh_prod)
[PROOF STATE]
proof (state)
this:
y \<sharp> P

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have PTrans: "P \<longmapsto>a<x> \<prec> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<x> \<prec> P'

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
with Phnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
P \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
have PSumm: "a<x>.P' \<in> summands P"
[PROOF STATE]
proof (prove)
using this:
hnf P
P \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. a<x>.P' \<in> summands P
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
a<x>.P' \<in> summands P

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "Q \<longmapsto>a<\<nu>y> \<prec> Q'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<longmapsto> a<\<nu>y> \<prec> Q'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<\<nu>y> \<prec> Q'

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<\<nu>y> \<prec> Q'

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
from PTrans yFreshP
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> a<x> \<prec> P'
y \<sharp> P
[PROOF STEP]
have "y \<noteq> a"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a<x> \<prec> P'
y \<sharp> P

goal (1 subgoal):
 1. y \<noteq> a
[PROOF STEP]
by(force dest: freshBoundDerivative)
[PROOF STATE]
proof (state)
this:
y \<noteq> a

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> a<\<nu>y> \<prec> Q'
y \<noteq> a
[PROOF STEP]
have "<\<nu>y>a{y}.Q' \<in> summands Q"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a<\<nu>y> \<prec> Q'
y \<noteq> a

goal (1 subgoal):
 1. <\<nu>y>a{y}.Q' \<in> summands Q
[PROOF STEP]
using Qhnf
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a<\<nu>y> \<prec> Q'
y \<noteq> a
hnf Q

goal (1 subgoal):
 1. <\<nu>y>a{y}.Q' \<in> summands Q
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
<\<nu>y>a{y}.Q' \<in> summands Q

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
with PSumm yFreshP
[PROOF STATE]
proof (chain)
picking this:
a<x>.P' \<in> summands P
y \<sharp> P
<\<nu>y>a{y}.Q' \<in> summands Q
[PROOF STEP]
have "\<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
a<x>.P' \<in> summands P
y \<sharp> P
<\<nu>y>a{y}.Q' \<in> summands Q

goal (1 subgoal):
 1. \<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<in> expandSet P Q
[PROOF STEP]
by(auto simp add: expandSet_def)
[PROOF STATE]
proof (state)
this:
\<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<in> expandSet P Q

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<in> expandSet P Q

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "\<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<longmapsto>\<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
[PROOF STEP]
by(rule Tau)
[PROOF STATE]
proof (state)
this:
\<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')

goal (2 subgoals):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; Q \<longmapsto> a<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> P'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<in> expandSet P Q
\<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<in> expandSet P Q
\<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
\<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<in> expandSet P Q
\<tau>.(<\<nu>y>(P'[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case(cClose2 P' Q' a x y)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<\<nu>y> \<prec> P'
Q \<longmapsto> a<x> \<prec> Q'
x \<sharp> P
x \<sharp> Q
x \<noteq> a
x \<noteq> y
x \<sharp> P'
y \<sharp> P
y \<sharp> Q
y \<noteq> a
y \<sharp> Q'
x \<sharp> (P, Q)
y \<sharp> (P, Q)
\<tau> = \<tau>

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "y \<sharp> (P, Q)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. y \<sharp> (P, Q)
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
y \<sharp> (P, Q)

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
hence yFreshQ: "y \<sharp> Q"
[PROOF STATE]
proof (prove)
using this:
y \<sharp> (P, Q)

goal (1 subgoal):
 1. y \<sharp> Q
[PROOF STEP]
by(simp add: fresh_prod)
[PROOF STATE]
proof (state)
this:
y \<sharp> Q

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have QTrans: "Q \<longmapsto>a<x> \<prec> Q'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<longmapsto> a<x> \<prec> Q'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<x> \<prec> Q'

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
with Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf Q
Q \<longmapsto> a<x> \<prec> Q'
[PROOF STEP]
have QSumm: "a<x>.Q' \<in> summands Q"
[PROOF STATE]
proof (prove)
using this:
hnf Q
Q \<longmapsto> a<x> \<prec> Q'

goal (1 subgoal):
 1. a<x>.Q' \<in> summands Q
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
a<x>.Q' \<in> summands Q

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "P \<longmapsto>a<\<nu>y> \<prec> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<longmapsto> a<\<nu>y> \<prec> P'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<\<nu>y> \<prec> P'

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<\<nu>y> \<prec> P'

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
from QTrans yFreshQ
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> a<x> \<prec> Q'
y \<sharp> Q
[PROOF STEP]
have "y \<noteq> a"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a<x> \<prec> Q'
y \<sharp> Q

goal (1 subgoal):
 1. y \<noteq> a
[PROOF STEP]
by(force dest: freshBoundDerivative)
[PROOF STATE]
proof (state)
this:
y \<noteq> a

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> a<\<nu>y> \<prec> P'
y \<noteq> a
[PROOF STEP]
have "<\<nu>y>a{y}.P' \<in> summands P"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a<\<nu>y> \<prec> P'
y \<noteq> a

goal (1 subgoal):
 1. <\<nu>y>a{y}.P' \<in> summands P
[PROOF STEP]
using Phnf
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a<\<nu>y> \<prec> P'
y \<noteq> a
hnf P

goal (1 subgoal):
 1. <\<nu>y>a{y}.P' \<in> summands P
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
<\<nu>y>a{y}.P' \<in> summands P

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
with QSumm yFreshQ
[PROOF STATE]
proof (chain)
picking this:
a<x>.Q' \<in> summands Q
y \<sharp> Q
<\<nu>y>a{y}.P' \<in> summands P
[PROOF STEP]
have "\<tau>.(<\<nu>y>(P' \<parallel> (Q'[x::=y]))) \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
a<x>.Q' \<in> summands Q
y \<sharp> Q
<\<nu>y>a{y}.P' \<in> summands P

goal (1 subgoal):
 1. \<tau>.(<\<nu>y>(P' \<parallel> Q'[x::=y])) \<in> expandSet P Q
[PROOF STEP]
by(simp add: expandSet_def, blast)
[PROOF STATE]
proof (state)
this:
\<tau>.(<\<nu>y>(P' \<parallel> Q'[x::=y])) \<in> expandSet P Q

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<tau>.(<\<nu>y>(P' \<parallel> Q'[x::=y])) \<in> expandSet P Q

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "\<tau>.(<\<nu>y>(P' \<parallel> (Q'[x::=y]))) \<longmapsto>\<tau> \<prec> <\<nu>y>(P' \<parallel> (Q'[x::=y]))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<tau>.(<\<nu>y>(P' \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
by(rule Tau)
[PROOF STATE]
proof (state)
this:
\<tau>.(<\<nu>y>(P' \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])

goal (1 subgoal):
 1. \<And>P' Q' a x y. \<lbrakk>P \<longmapsto> a<\<nu>y> \<prec> P'; Q \<longmapsto> a<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> a; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> a; y \<sharp> Q'; x \<sharp> (P, Q); y \<sharp> (P, Q); \<tau> = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<tau>.(<\<nu>y>(P' \<parallel> Q'[x::=y])) \<in> expandSet P Q
\<tau>.(<\<nu>y>(P' \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<tau>.(<\<nu>y>(P' \<parallel> Q'[x::=y])) \<in> expandSet P Q
\<tau>.(<\<nu>y>(P' \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
\<tau>.(<\<nu>y>(P' \<parallel> Q'[x::=y])) \<in> expandSet P Q
\<tau>.(<\<nu>y>(P' \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "R \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with Exp
[PROOF STATE]
proof (chain)
picking this:
(R, expandSet P Q) \<in> sumComposeSet
R \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
obtain R where "R \<in> expandSet P Q" and "R \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
(R, expandSet P Q) \<in> sumComposeSet
R \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. (\<And>R. \<lbrakk>R \<in> expandSet P Q; R \<longmapsto> \<tau> \<prec> P'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(blast dest: expandAction')
[PROOF STATE]
proof (state)
this:
R \<in> expandSet P Q
R \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
thus "P \<parallel> Q \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
R \<in> expandSet P Q
R \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
proof(auto simp add: expandSet_def)
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>P'a. \<lbrakk>\<tau>.(P'a \<parallel> Q) \<longmapsto> \<tau> \<prec> P'; \<tau>.P'a \<in> summands P; R = \<tau>.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 6. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
fix P''
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>P'a. \<lbrakk>\<tau>.(P'a \<parallel> Q) \<longmapsto> \<tau> \<prec> P'; \<tau>.P'a \<in> summands P; R = \<tau>.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 6. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "\<tau>.(P'') \<in> summands P"
[PROOF STATE]
proof (state)
this:
\<tau>.P'' \<in> summands P

goal (6 subgoals):
 1. \<And>P'a. \<lbrakk>\<tau>.(P'a \<parallel> Q) \<longmapsto> \<tau> \<prec> P'; \<tau>.P'a \<in> summands P; R = \<tau>.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 6. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with Phnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
\<tau>.P'' \<in> summands P
[PROOF STEP]
have "P \<longmapsto>\<tau> \<prec> P''"
[PROOF STATE]
proof (prove)
using this:
hnf P
\<tau>.P'' \<in> summands P

goal (1 subgoal):
 1. P \<longmapsto> \<tau> \<prec> P''
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> \<tau> \<prec> P''

goal (6 subgoals):
 1. \<And>P'a. \<lbrakk>\<tau>.(P'a \<parallel> Q) \<longmapsto> \<tau> \<prec> P'; \<tau>.P'a \<in> summands P; R = \<tau>.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 6. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
hence PQTrans: "P \<parallel> Q \<longmapsto>\<tau> \<prec> P'' \<parallel> Q"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> \<tau> \<prec> P''

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P'' \<parallel> Q
[PROOF STEP]
by(rule Par1F)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'' \<parallel> Q

goal (6 subgoals):
 1. \<And>P'a. \<lbrakk>\<tau>.(P'a \<parallel> Q) \<longmapsto> \<tau> \<prec> P'; \<tau>.P'a \<in> summands P; R = \<tau>.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 6. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "\<tau>.(P'' \<parallel> Q) \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (state)
this:
\<tau>.(P'' \<parallel> Q) \<longmapsto> \<tau> \<prec> P'

goal (6 subgoals):
 1. \<And>P'a. \<lbrakk>\<tau>.(P'a \<parallel> Q) \<longmapsto> \<tau> \<prec> P'; \<tau>.P'a \<in> summands P; R = \<tau>.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 6. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
hence "P' = P'' \<parallel> Q"
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P'' \<parallel> Q) \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. P' = P'' \<parallel> Q
[PROOF STEP]
by(erule_tac tauCases, auto simp add: pi.inject residual.inject)
[PROOF STATE]
proof (state)
this:
P' = P'' \<parallel> Q

goal (6 subgoals):
 1. \<And>P'a. \<lbrakk>\<tau>.(P'a \<parallel> Q) \<longmapsto> \<tau> \<prec> P'; \<tau>.P'a \<in> summands P; R = \<tau>.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 6. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'' \<parallel> Q
P' = P'' \<parallel> Q
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'' \<parallel> Q
P' = P'' \<parallel> Q

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'

goal (5 subgoals):
 1. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
fix Q'
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "\<tau>.(Q') \<in> summands Q"
[PROOF STATE]
proof (state)
this:
\<tau>.Q' \<in> summands Q

goal (5 subgoals):
 1. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf Q
\<tau>.Q' \<in> summands Q
[PROOF STEP]
have "Q \<longmapsto>\<tau> \<prec> Q'"
[PROOF STATE]
proof (prove)
using this:
hnf Q
\<tau>.Q' \<in> summands Q

goal (1 subgoal):
 1. Q \<longmapsto> \<tau> \<prec> Q'
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> \<tau> \<prec> Q'

goal (5 subgoals):
 1. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
hence PQTrans: "P \<parallel> Q \<longmapsto>\<tau> \<prec> P \<parallel> Q'"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> \<tau> \<prec> Q'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P \<parallel> Q'
[PROOF STEP]
by(rule Par2F)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P \<parallel> Q'

goal (5 subgoals):
 1. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "\<tau>.(P \<parallel> Q') \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (state)
this:
\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'

goal (5 subgoals):
 1. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
hence "P' = P \<parallel> Q'"
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. P' = P \<parallel> Q'
[PROOF STEP]
by(erule_tac tauCases, auto simp add: pi.inject residual.inject)
[PROOF STATE]
proof (state)
this:
P' = P \<parallel> Q'

goal (5 subgoals):
 1. \<And>Q'. \<lbrakk>\<tau>.(P \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; \<tau>.Q' \<in> summands Q; R = \<tau>.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 5. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P \<parallel> Q'
P' = P \<parallel> Q'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P \<parallel> Q'
P' = P \<parallel> Q'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'

goal (4 subgoals):
 1. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
fix a x P'' b Q'
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "a<x>.P'' \<in> summands P" and "a{b}.Q' \<in> summands Q"
[PROOF STATE]
proof (state)
this:
a<x>.P'' \<in> summands P
a{b}.Q' \<in> summands Q

goal (4 subgoals):
 1. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with Phnf Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
hnf Q
a<x>.P'' \<in> summands P
a{b}.Q' \<in> summands Q
[PROOF STEP]
have "P \<longmapsto>a<x> \<prec> P''" and "Q \<longmapsto>a[b] \<prec> Q'"
[PROOF STATE]
proof (prove)
using this:
hnf P
hnf Q
a<x>.P'' \<in> summands P
a{b}.Q' \<in> summands Q

goal (1 subgoal):
 1. P \<longmapsto> a<x> \<prec> P'' &&& Q \<longmapsto> a[b] \<prec> Q'
[PROOF STEP]
by(simp add: summandTransition)+
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<x> \<prec> P''
Q \<longmapsto> a[b] \<prec> Q'

goal (4 subgoals):
 1. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
hence PQTrans: "P \<parallel> Q \<longmapsto>\<tau> \<prec> P''[x::=b] \<parallel> Q'"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a<x> \<prec> P''
Q \<longmapsto> a[b] \<prec> Q'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P''[x::=b] \<parallel> Q'
[PROOF STEP]
by(rule Comm1)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P''[x::=b] \<parallel> Q'

goal (4 subgoals):
 1. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "\<tau>.(P''[x::=b] \<parallel> Q') \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (state)
this:
\<tau>.(P''[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'

goal (4 subgoals):
 1. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
hence "P' = P''[x::=b] \<parallel> Q'"
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P''[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. P' = P''[x::=b] \<parallel> Q'
[PROOF STEP]
by(erule_tac tauCases, auto simp add: pi.inject residual.inject)
[PROOF STATE]
proof (state)
this:
P' = P''[x::=b] \<parallel> Q'

goal (4 subgoals):
 1. \<And>x P'a b Q' a. \<lbrakk>\<tau>.(P'a[x::=b] \<parallel> Q') \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a[x::=b] \<parallel> Q'); a<x>.P'a \<in> summands P; a{b}.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 4. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P''[x::=b] \<parallel> Q'
P' = P''[x::=b] \<parallel> Q'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P''[x::=b] \<parallel> Q'
P' = P''[x::=b] \<parallel> Q'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'

goal (3 subgoals):
 1. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
fix a b P'' x Q'
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "a{b}.P'' \<in> summands P" and "a<x>.Q' \<in> summands Q"
[PROOF STATE]
proof (state)
this:
a{b}.P'' \<in> summands P
a<x>.Q' \<in> summands Q

goal (3 subgoals):
 1. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with Phnf Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
hnf Q
a{b}.P'' \<in> summands P
a<x>.Q' \<in> summands Q
[PROOF STEP]
have "P \<longmapsto>a[b] \<prec> P''" and "Q \<longmapsto>a<x> \<prec> Q'"
[PROOF STATE]
proof (prove)
using this:
hnf P
hnf Q
a{b}.P'' \<in> summands P
a<x>.Q' \<in> summands Q

goal (1 subgoal):
 1. P \<longmapsto> a[b] \<prec> P'' &&& Q \<longmapsto> a<x> \<prec> Q'
[PROOF STEP]
by(simp add: summandTransition)+
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a[b] \<prec> P''
Q \<longmapsto> a<x> \<prec> Q'

goal (3 subgoals):
 1. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
hence PQTrans: "P \<parallel> Q \<longmapsto>\<tau> \<prec> P'' \<parallel> (Q'[x::=b])"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a[b] \<prec> P''
Q \<longmapsto> a<x> \<prec> Q'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P'' \<parallel> Q'[x::=b]
[PROOF STEP]
by(rule Comm2)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'' \<parallel> Q'[x::=b]

goal (3 subgoals):
 1. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "\<tau>.(P'' \<parallel> (Q'[x::=b])) \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (state)
this:
\<tau>.(P'' \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'

goal (3 subgoals):
 1. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
hence "P' = P'' \<parallel> (Q'[x::=b])"
[PROOF STATE]
proof (prove)
using this:
\<tau>.(P'' \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. P' = P'' \<parallel> Q'[x::=b]
[PROOF STEP]
by(erule_tac tauCases, auto simp add: pi.inject residual.inject)
[PROOF STATE]
proof (state)
this:
P' = P'' \<parallel> Q'[x::=b]

goal (3 subgoals):
 1. \<And>b P'a x Q' a. \<lbrakk>\<tau>.(P'a \<parallel> Q'[x::=b]) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(P'a \<parallel> Q'[x::=b]); a{b}.P'a \<in> summands P; a<x>.Q' \<in> summands Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 3. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'' \<parallel> Q'[x::=b]
P' = P'' \<parallel> Q'[x::=b]
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'' \<parallel> Q'[x::=b]
P' = P'' \<parallel> Q'[x::=b]

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'

goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
fix a x P'' y Q'
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume yFreshP: "(y::name) \<sharp> P"
[PROOF STATE]
proof (state)
this:
y \<sharp> P

goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "a<x>.P'' \<in> summands P"
[PROOF STATE]
proof (state)
this:
a<x>.P'' \<in> summands P

goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with Phnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
a<x>.P'' \<in> summands P
[PROOF STEP]
have PTrans: "P \<longmapsto>a<x> \<prec> P''"
[PROOF STATE]
proof (prove)
using this:
hnf P
a<x>.P'' \<in> summands P

goal (1 subgoal):
 1. P \<longmapsto> a<x> \<prec> P''
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<x> \<prec> P''

goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "<\<nu>y>a{y}.Q' \<in> summands Q"
[PROOF STATE]
proof (state)
this:
<\<nu>y>a{y}.Q' \<in> summands Q

goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
<\<nu>y>a{y}.Q' \<in> summands Q

goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
from yFreshP PTrans
[PROOF STATE]
proof (chain)
picking this:
y \<sharp> P
P \<longmapsto> a<x> \<prec> P''
[PROOF STEP]
have "y \<noteq> a"
[PROOF STATE]
proof (prove)
using this:
y \<sharp> P
P \<longmapsto> a<x> \<prec> P''

goal (1 subgoal):
 1. y \<noteq> a
[PROOF STEP]
by(force dest: freshBoundDerivative)
[PROOF STATE]
proof (state)
this:
y \<noteq> a

goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
<\<nu>y>a{y}.Q' \<in> summands Q
y \<noteq> a
[PROOF STEP]
have "Q \<longmapsto>a<\<nu>y> \<prec> Q'"
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a{y}.Q' \<in> summands Q
y \<noteq> a

goal (1 subgoal):
 1. Q \<longmapsto> a<\<nu>y> \<prec> Q'
[PROOF STEP]
using Qhnf
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a{y}.Q' \<in> summands Q
y \<noteq> a
hnf Q

goal (1 subgoal):
 1. Q \<longmapsto> a<\<nu>y> \<prec> Q'
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<\<nu>y> \<prec> Q'

goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with PTrans
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> a<x> \<prec> P''
Q \<longmapsto> a<\<nu>y> \<prec> Q'
[PROOF STEP]
have PQTrans: "P \<parallel> Q \<longmapsto>\<tau> \<prec> <\<nu>y>(P''[x::=y] \<parallel> Q')"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a<x> \<prec> P''
Q \<longmapsto> a<\<nu>y> \<prec> Q'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> <\<nu>y>(P''[x::=y] \<parallel> Q')
[PROOF STEP]
using yFreshP
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a<x> \<prec> P''
Q \<longmapsto> a<\<nu>y> \<prec> Q'
y \<sharp> P

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> <\<nu>y>(P''[x::=y] \<parallel> Q')
[PROOF STEP]
by(rule Close1)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> <\<nu>y>(P''[x::=y] \<parallel> Q')

goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "\<tau>.(<\<nu>y>(P''[x::=y] \<parallel> Q')) \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (state)
this:
\<tau>.(<\<nu>y>(P''[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'

goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
hence "P' = <\<nu>y>(P''[x::=y] \<parallel> Q')"
[PROOF STATE]
proof (prove)
using this:
\<tau>.(<\<nu>y>(P''[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. P' = <\<nu>y>(P''[x::=y] \<parallel> Q')
[PROOF STEP]
by(erule_tac tauCases, auto simp add: pi.inject residual.inject)
[PROOF STATE]
proof (state)
this:
P' = <\<nu>y>(P''[x::=y] \<parallel> Q')

goal (2 subgoals):
 1. \<And>x P'a y Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a[x::=y] \<parallel> Q')); a<x>.P'a \<in> summands P; <\<nu>y>a{y}.Q' \<in> summands Q; y \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
 2. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> <\<nu>y>(P''[x::=y] \<parallel> Q')
P' = <\<nu>y>(P''[x::=y] \<parallel> Q')
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> <\<nu>y>(P''[x::=y] \<parallel> Q')
P' = <\<nu>y>(P''[x::=y] \<parallel> Q')

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
fix a y P'' x Q'
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume yFreshQ: "(y::name) \<sharp> Q"
[PROOF STATE]
proof (state)
this:
y \<sharp> Q

goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "a<x>.Q' \<in> summands Q"
[PROOF STATE]
proof (state)
this:
a<x>.Q' \<in> summands Q

goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf Q
a<x>.Q' \<in> summands Q
[PROOF STEP]
have QTrans: "Q \<longmapsto>a<x> \<prec> Q'"
[PROOF STATE]
proof (prove)
using this:
hnf Q
a<x>.Q' \<in> summands Q

goal (1 subgoal):
 1. Q \<longmapsto> a<x> \<prec> Q'
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<x> \<prec> Q'

goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "<\<nu>y>a{y}.P'' \<in> summands P"
[PROOF STATE]
proof (state)
this:
<\<nu>y>a{y}.P'' \<in> summands P

goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
<\<nu>y>a{y}.P'' \<in> summands P

goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
from yFreshQ QTrans
[PROOF STATE]
proof (chain)
picking this:
y \<sharp> Q
Q \<longmapsto> a<x> \<prec> Q'
[PROOF STEP]
have "y \<noteq> a"
[PROOF STATE]
proof (prove)
using this:
y \<sharp> Q
Q \<longmapsto> a<x> \<prec> Q'

goal (1 subgoal):
 1. y \<noteq> a
[PROOF STEP]
by(force dest: freshBoundDerivative)
[PROOF STATE]
proof (state)
this:
y \<noteq> a

goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
<\<nu>y>a{y}.P'' \<in> summands P
y \<noteq> a
[PROOF STEP]
have "P \<longmapsto>a<\<nu>y> \<prec> P''"
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a{y}.P'' \<in> summands P
y \<noteq> a

goal (1 subgoal):
 1. P \<longmapsto> a<\<nu>y> \<prec> P''
[PROOF STEP]
using Phnf
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a{y}.P'' \<in> summands P
y \<noteq> a
hnf P

goal (1 subgoal):
 1. P \<longmapsto> a<\<nu>y> \<prec> P''
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<\<nu>y> \<prec> P''

goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
hence PQTrans: "P \<parallel> Q \<longmapsto>\<tau> \<prec> <\<nu>y>(P'' \<parallel> Q'[x::=y])"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a<\<nu>y> \<prec> P''

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> <\<nu>y>(P'' \<parallel> Q'[x::=y])
[PROOF STEP]
using QTrans yFreshQ
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a<\<nu>y> \<prec> P''
Q \<longmapsto> a<x> \<prec> Q'
y \<sharp> Q

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> <\<nu>y>(P'' \<parallel> Q'[x::=y])
[PROOF STEP]
by(rule Close2)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> <\<nu>y>(P'' \<parallel> Q'[x::=y])

goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
assume "\<tau>.(<\<nu>y>(P'' \<parallel> Q'[x::=y])) \<longmapsto>\<tau> \<prec> P'"
[PROOF STATE]
proof (state)
this:
\<tau>.(<\<nu>y>(P'' \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
hence "P' = <\<nu>y>(P'' \<parallel> Q'[x::=y])"
[PROOF STATE]
proof (prove)
using this:
\<tau>.(<\<nu>y>(P'' \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'

goal (1 subgoal):
 1. P' = <\<nu>y>(P'' \<parallel> Q'[x::=y])
[PROOF STEP]
by(erule_tac tauCases, auto simp add: pi.inject residual.inject)
[PROOF STATE]
proof (state)
this:
P' = <\<nu>y>(P'' \<parallel> Q'[x::=y])

goal (1 subgoal):
 1. \<And>y P'a x Q' a. \<lbrakk>\<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])) \<longmapsto> \<tau> \<prec> P'; R = \<tau>.(<\<nu>y>(P'a \<parallel> Q'[x::=y])); <\<nu>y>a{y}.P'a \<in> summands P; a<x>.Q' \<in> summands Q; y \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> <\<nu>y>(P'' \<parallel> Q'[x::=y])
P' = <\<nu>y>(P'' \<parallel> Q'[x::=y])
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> <\<nu>y>(P'' \<parallel> Q'[x::=y])
P' = <\<nu>y>(P'' \<parallel> Q'[x::=y])

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> \<tau> \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> \<tau> \<prec> P' = R \<longmapsto> \<tau> \<prec> P'

goal (3 subgoals):
 1. P \<parallel> Q \<longmapsto> a[b] \<prec> P' = R \<longmapsto> a[b] \<prec> P'
 2. P \<parallel> Q \<longmapsto> a<x> \<prec> P' = R \<longmapsto> a<x> \<prec> P'
 3. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. P \<parallel> Q \<longmapsto> a[b] \<prec> P' = R \<longmapsto> a[b] \<prec> P'
 2. P \<parallel> Q \<longmapsto> a<x> \<prec> P' = R \<longmapsto> a<x> \<prec> P'
 3. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
show "P \<parallel> Q \<longmapsto> a[b] \<prec> P' = R \<longmapsto> a[b] \<prec> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a[b] \<prec> P' = R \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
proof(rule iffI)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a[b] \<prec> P' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P'
 2. R \<longmapsto> a[b] \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
assume "P \<parallel> Q \<longmapsto>a[b] \<prec> P'"
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a[b] \<prec> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a[b] \<prec> P' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P'
 2. R \<longmapsto> a[b] \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
thus "R \<longmapsto>a[b] \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a[b] \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
proof(induct rule: parCasesF[where C="()"])
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> a[b] \<prec> P' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 4. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case(cPar1 P')
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a[b] \<prec> P'

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> a[b] \<prec> P' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 4. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "P \<longmapsto>a[b] \<prec> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a[b] \<prec> P'

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> a[b] \<prec> P' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 4. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
with Phnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
P \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
have "a{b}.P' \<in> summands P"
[PROOF STATE]
proof (prove)
using this:
hnf P
P \<longmapsto> a[b] \<prec> P'

goal (1 subgoal):
 1. a{b}.P' \<in> summands P
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
a{b}.P' \<in> summands P

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> a[b] \<prec> P' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 4. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
hence "a{b}.(P' \<parallel> Q) \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
a{b}.P' \<in> summands P

goal (1 subgoal):
 1. a{b}.(P' \<parallel> Q) \<in> expandSet P Q
[PROOF STEP]
by(auto simp add: expandSet_def)
[PROOF STATE]
proof (state)
this:
a{b}.(P' \<parallel> Q) \<in> expandSet P Q

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> a[b] \<prec> P' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 4. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
a{b}.(P' \<parallel> Q) \<in> expandSet P Q

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> a[b] \<prec> P' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 4. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "a{b}.(P' \<parallel> Q) \<longmapsto>a[b] \<prec> (P' \<parallel> Q)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a{b}.(P' \<parallel> Q) \<longmapsto> a[b] \<prec> P' \<parallel> Q
[PROOF STEP]
by(rule Output)
[PROOF STATE]
proof (state)
this:
a{b}.(P' \<parallel> Q) \<longmapsto> a[b] \<prec> P' \<parallel> Q

goal (6 subgoals):
 1. \<And>P'. P \<longmapsto> a[b] \<prec> P' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 4. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 6. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
a{b}.(P' \<parallel> Q) \<in> expandSet P Q
a{b}.(P' \<parallel> Q) \<longmapsto> a[b] \<prec> P' \<parallel> Q
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a{b}.(P' \<parallel> Q) \<in> expandSet P Q
a{b}.(P' \<parallel> Q) \<longmapsto> a[b] \<prec> P' \<parallel> Q

goal (1 subgoal):
 1. R \<longmapsto> a[b] \<prec> P' \<parallel> Q
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
a{b}.(P' \<parallel> Q) \<in> expandSet P Q
a{b}.(P' \<parallel> Q) \<longmapsto> a[b] \<prec> P' \<parallel> Q
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> a[b] \<prec> P' \<parallel> Q
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a[b] \<prec> P' \<parallel> Q

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 2. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 4. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 2. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 4. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case(cPar2 Q')
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a[b] \<prec> Q'

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 2. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 4. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "Q \<longmapsto>a[b] \<prec> Q'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<longmapsto> a[b] \<prec> Q'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a[b] \<prec> Q'

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 2. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 4. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
with Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf Q
Q \<longmapsto> a[b] \<prec> Q'
[PROOF STEP]
have "a{b}.Q' \<in> summands Q"
[PROOF STATE]
proof (prove)
using this:
hnf Q
Q \<longmapsto> a[b] \<prec> Q'

goal (1 subgoal):
 1. a{b}.Q' \<in> summands Q
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
a{b}.Q' \<in> summands Q

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 2. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 4. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
hence "a{b}.(P \<parallel> Q') \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
a{b}.Q' \<in> summands Q

goal (1 subgoal):
 1. a{b}.(P \<parallel> Q') \<in> expandSet P Q
[PROOF STEP]
by(simp add: expandSet_def, blast)
[PROOF STATE]
proof (state)
this:
a{b}.(P \<parallel> Q') \<in> expandSet P Q

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 2. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 4. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
a{b}.(P \<parallel> Q') \<in> expandSet P Q

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 2. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 4. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
have "a{b}.(P \<parallel> Q') \<longmapsto>a[b] \<prec> (P \<parallel> Q')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a{b}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P \<parallel> Q'
[PROOF STEP]
by(rule Output)
[PROOF STATE]
proof (state)
this:
a{b}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P \<parallel> Q'

goal (5 subgoals):
 1. \<And>Q'. Q \<longmapsto> a[b] \<prec> Q' \<Longrightarrow> R \<longmapsto> a[b] \<prec> P \<parallel> Q'
 2. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 3. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 4. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 5. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
a{b}.(P \<parallel> Q') \<in> expandSet P Q
a{b}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P \<parallel> Q'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a{b}.(P \<parallel> Q') \<in> expandSet P Q
a{b}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P \<parallel> Q'

goal (1 subgoal):
 1. R \<longmapsto> a[b] \<prec> P \<parallel> Q'
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
a{b}.(P \<parallel> Q') \<in> expandSet P Q
a{b}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P \<parallel> Q'
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> a[b] \<prec> P \<parallel> Q'
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a[b] \<prec> P \<parallel> Q'

goal (4 subgoals):
 1. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 2. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 3. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 4. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 2. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 3. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 4. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case cComm1
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a_<x_> \<prec> P'_
Q \<longmapsto> a_[b_] \<prec> Q'_
x_ \<sharp> P
x_ \<sharp> Q
x_ \<noteq> a_
x_ \<noteq> b_
x_ \<sharp> Q'_
x_ \<sharp> ()
a[b] = \<tau>

goal (4 subgoals):
 1. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa[ba] \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> Q'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P'[x::=ba] \<parallel> Q'
 2. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 3. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 4. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a_<x_> \<prec> P'_
Q \<longmapsto> a_[b_] \<prec> Q'_
x_ \<sharp> P
x_ \<sharp> Q
x_ \<noteq> a_
x_ \<noteq> b_
x_ \<sharp> Q'_
x_ \<sharp> ()
a[b] = \<tau>

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P'_[x_::=b_] \<parallel> Q'_
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> P'_[x_::=b_] \<parallel> Q'_

goal (3 subgoals):
 1. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 2. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 3. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 2. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 3. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case cComm2
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a_[b_] \<prec> P'_
Q \<longmapsto> a_<x_> \<prec> Q'_
x_ \<sharp> P
x_ \<sharp> Q
x_ \<noteq> a_
x_ \<noteq> b_
x_ \<sharp> P'_
x_ \<sharp> ()
a[b] = \<tau>

goal (3 subgoals):
 1. \<And>P' Q' aa ba x. \<lbrakk>P \<longmapsto> aa[ba] \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> ba; x \<sharp> P'; x \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> P' \<parallel> Q'[x::=ba]
 2. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 3. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a_[b_] \<prec> P'_
Q \<longmapsto> a_<x_> \<prec> Q'_
x_ \<sharp> P
x_ \<sharp> Q
x_ \<noteq> a_
x_ \<noteq> b_
x_ \<sharp> P'_
x_ \<sharp> ()
a[b] = \<tau>

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> P'_ \<parallel> Q'_[x_::=b_]
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> P'_ \<parallel> Q'_[x_::=b_]

goal (2 subgoals):
 1. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case cClose1
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a_<x_> \<prec> P'_
Q \<longmapsto> a_<\<nu>y_> \<prec> Q'_
x_ \<sharp> P
x_ \<sharp> Q
x_ \<noteq> a_
x_ \<noteq> y_
x_ \<sharp> Q'_
y_ \<sharp> P
y_ \<sharp> Q
y_ \<noteq> a_
y_ \<sharp> P'_
x_ \<sharp> ()
y_ \<sharp> ()
a[b] = \<tau>

goal (2 subgoals):
 1. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<x> \<prec> P'; Q \<longmapsto> aa<\<nu>y> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> Q'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> P'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> Q')
 2. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a_<x_> \<prec> P'_
Q \<longmapsto> a_<\<nu>y_> \<prec> Q'_
x_ \<sharp> P
x_ \<sharp> Q
x_ \<noteq> a_
x_ \<noteq> y_
x_ \<sharp> Q'_
y_ \<sharp> P
y_ \<sharp> Q
y_ \<noteq> a_
y_ \<sharp> P'_
x_ \<sharp> ()
y_ \<sharp> ()
a[b] = \<tau>

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> <\<nu>y_>(P'_[x_::=y_] \<parallel> Q'_)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> <\<nu>y_>(P'_[x_::=y_] \<parallel> Q'_)

goal (1 subgoal):
 1. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
case cClose2
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a_<\<nu>y_> \<prec> P'_
Q \<longmapsto> a_<x_> \<prec> Q'_
x_ \<sharp> P
x_ \<sharp> Q
x_ \<noteq> a_
x_ \<noteq> y_
x_ \<sharp> P'_
y_ \<sharp> P
y_ \<sharp> Q
y_ \<noteq> a_
y_ \<sharp> Q'_
x_ \<sharp> ()
y_ \<sharp> ()
a[b] = \<tau>

goal (1 subgoal):
 1. \<And>P' Q' aa x y. \<lbrakk>P \<longmapsto> aa<\<nu>y> \<prec> P'; Q \<longmapsto> aa<x> \<prec> Q'; x \<sharp> P; x \<sharp> Q; x \<noteq> aa; x \<noteq> y; x \<sharp> P'; y \<sharp> P; y \<sharp> Q; y \<noteq> aa; y \<sharp> Q'; x \<sharp> (); y \<sharp> (); a[b] = \<tau>\<rbrakk> \<Longrightarrow> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P' \<parallel> Q'[x::=y])
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a_<\<nu>y_> \<prec> P'_
Q \<longmapsto> a_<x_> \<prec> Q'_
x_ \<sharp> P
x_ \<sharp> Q
x_ \<noteq> a_
x_ \<noteq> y_
x_ \<sharp> P'_
y_ \<sharp> P
y_ \<sharp> Q
y_ \<noteq> a_
y_ \<sharp> Q'_
x_ \<sharp> ()
y_ \<sharp> ()
a[b] = \<tau>

goal (1 subgoal):
 1. R \<longmapsto> \<tau> \<prec> <\<nu>y_>(P'_ \<parallel> Q'_[x_::=y_])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<tau> \<prec> <\<nu>y_>(P'_ \<parallel> Q'_[x_::=y_])

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a[b] \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> a[b] \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. R \<longmapsto> a[b] \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
assume "R \<longmapsto>a[b] \<prec> P'"
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a[b] \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> a[b] \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
with Exp
[PROOF STATE]
proof (chain)
picking this:
(R, expandSet P Q) \<in> sumComposeSet
R \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
obtain R where "R \<in> expandSet P Q" and "R \<longmapsto>a[b] \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
(R, expandSet P Q) \<in> sumComposeSet
R \<longmapsto> a[b] \<prec> P'

goal (1 subgoal):
 1. (\<And>R. \<lbrakk>R \<in> expandSet P Q; R \<longmapsto> a[b] \<prec> P'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(blast dest: expandAction')
[PROOF STATE]
proof (state)
this:
R \<in> expandSet P Q
R \<longmapsto> a[b] \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> a[b] \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
thus "P \<parallel> Q \<longmapsto>a[b] \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
R \<in> expandSet P Q
R \<longmapsto> a[b] \<prec> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
proof(auto simp add: expandSet_def)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>aa ba P'a. \<lbrakk>aa{ba}.(P'a \<parallel> Q) \<longmapsto> a[b] \<prec> P'; aa{ba}.P'a \<in> summands P; R = aa{ba}.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
 2. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
fix a' b' P''
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>aa ba P'a. \<lbrakk>aa{ba}.(P'a \<parallel> Q) \<longmapsto> a[b] \<prec> P'; aa{ba}.P'a \<in> summands P; R = aa{ba}.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
 2. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
assume "a'{b'}.P'' \<in> summands P"
[PROOF STATE]
proof (state)
this:
a'{b'}.P'' \<in> summands P

goal (2 subgoals):
 1. \<And>aa ba P'a. \<lbrakk>aa{ba}.(P'a \<parallel> Q) \<longmapsto> a[b] \<prec> P'; aa{ba}.P'a \<in> summands P; R = aa{ba}.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
 2. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
with Phnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
a'{b'}.P'' \<in> summands P
[PROOF STEP]
have "P \<longmapsto>a'[b'] \<prec> P''"
[PROOF STATE]
proof (prove)
using this:
hnf P
a'{b'}.P'' \<in> summands P

goal (1 subgoal):
 1. P \<longmapsto> a'[b'] \<prec> P''
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a'[b'] \<prec> P''

goal (2 subgoals):
 1. \<And>aa ba P'a. \<lbrakk>aa{ba}.(P'a \<parallel> Q) \<longmapsto> a[b] \<prec> P'; aa{ba}.P'a \<in> summands P; R = aa{ba}.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
 2. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
hence PQTrans: "P \<parallel> Q \<longmapsto>a'[b'] \<prec> P'' \<parallel> Q"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a'[b'] \<prec> P''

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a'[b'] \<prec> P'' \<parallel> Q
[PROOF STEP]
by(rule Par1F)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a'[b'] \<prec> P'' \<parallel> Q

goal (2 subgoals):
 1. \<And>aa ba P'a. \<lbrakk>aa{ba}.(P'a \<parallel> Q) \<longmapsto> a[b] \<prec> P'; aa{ba}.P'a \<in> summands P; R = aa{ba}.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
 2. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
assume "a'{b'}.(P'' \<parallel> Q) \<longmapsto>a[b] \<prec> P'"
[PROOF STATE]
proof (state)
this:
a'{b'}.(P'' \<parallel> Q) \<longmapsto> a[b] \<prec> P'

goal (2 subgoals):
 1. \<And>aa ba P'a. \<lbrakk>aa{ba}.(P'a \<parallel> Q) \<longmapsto> a[b] \<prec> P'; aa{ba}.P'a \<in> summands P; R = aa{ba}.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
 2. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
hence "P' = P'' \<parallel> Q" and "a = a'" and "b = b'"
[PROOF STATE]
proof (prove)
using this:
a'{b'}.(P'' \<parallel> Q) \<longmapsto> a[b] \<prec> P'

goal (1 subgoal):
 1. P' = P'' \<parallel> Q &&& a = a' &&& b = b'
[PROOF STEP]
by(erule_tac outputCases, auto simp add: pi.inject residual.inject)+
[PROOF STATE]
proof (state)
this:
P' = P'' \<parallel> Q
a = a'
b = b'

goal (2 subgoals):
 1. \<And>aa ba P'a. \<lbrakk>aa{ba}.(P'a \<parallel> Q) \<longmapsto> a[b] \<prec> P'; aa{ba}.P'a \<in> summands P; R = aa{ba}.(P'a \<parallel> Q)\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
 2. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> a'[b'] \<prec> P'' \<parallel> Q
P' = P'' \<parallel> Q
a = a'
b = b'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a'[b'] \<prec> P'' \<parallel> Q
P' = P'' \<parallel> Q
a = a'
b = b'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a[b] \<prec> P'

goal (1 subgoal):
 1. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
fix a' b' Q'
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
assume "a'{b'}.Q' \<in> summands Q"
[PROOF STATE]
proof (state)
this:
a'{b'}.Q' \<in> summands Q

goal (1 subgoal):
 1. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
with Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf Q
a'{b'}.Q' \<in> summands Q
[PROOF STEP]
have "Q \<longmapsto>a'[b'] \<prec> Q'"
[PROOF STATE]
proof (prove)
using this:
hnf Q
a'{b'}.Q' \<in> summands Q

goal (1 subgoal):
 1. Q \<longmapsto> a'[b'] \<prec> Q'
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a'[b'] \<prec> Q'

goal (1 subgoal):
 1. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
hence PQTrans: "P \<parallel> Q \<longmapsto>a'[b'] \<prec> P \<parallel> Q'"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a'[b'] \<prec> Q'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a'[b'] \<prec> P \<parallel> Q'
[PROOF STEP]
by(rule Par2F)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a'[b'] \<prec> P \<parallel> Q'

goal (1 subgoal):
 1. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
assume "a'{b'}.(P \<parallel> Q') \<longmapsto>a[b] \<prec> P'"
[PROOF STATE]
proof (state)
this:
a'{b'}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'

goal (1 subgoal):
 1. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
hence "P' = P \<parallel> Q'" and "a = a'" and "b = b'"
[PROOF STATE]
proof (prove)
using this:
a'{b'}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'

goal (1 subgoal):
 1. P' = P \<parallel> Q' &&& a = a' &&& b = b'
[PROOF STEP]
by(erule_tac outputCases, auto simp add: pi.inject residual.inject)+
[PROOF STATE]
proof (state)
this:
P' = P \<parallel> Q'
a = a'
b = b'

goal (1 subgoal):
 1. \<And>aa ba Q'. \<lbrakk>aa{ba}.(P \<parallel> Q') \<longmapsto> a[b] \<prec> P'; aa{ba}.Q' \<in> summands Q; R = aa{ba}.(P \<parallel> Q')\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> a'[b'] \<prec> P \<parallel> Q'
P' = P \<parallel> Q'
a = a'
b = b'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a'[b'] \<prec> P \<parallel> Q'
P' = P \<parallel> Q'
a = a'
b = b'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a[b] \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a[b] \<prec> P'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a[b] \<prec> P'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a[b] \<prec> P' = R \<longmapsto> a[b] \<prec> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' = R \<longmapsto> a<x> \<prec> P'
 2. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' = R \<longmapsto> a<x> \<prec> P'
 2. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
show "P \<parallel> Q \<longmapsto> a<x> \<prec> P' = R \<longmapsto> a<x> \<prec> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' = R \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
proof(rule iffI)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P'
 2. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
{
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P'
 2. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
fix x P'
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P'
 2. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
assume "P \<parallel> Q \<longmapsto>a<x> \<prec> P'" and "x \<sharp> P" and "x \<sharp> Q"
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<x> \<prec> P'
x \<sharp> P
x \<sharp> Q

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P'
 2. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
hence "R \<longmapsto>a<x> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a<x> \<prec> P'
x \<sharp> P
x \<sharp> Q

goal (1 subgoal):
 1. R \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
proof(induct rule: parCasesB)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>P'. P \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
case(cPar1 P')
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<x> \<prec> P'

goal (2 subgoals):
 1. \<And>P'. P \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "P \<longmapsto>a<x> \<prec> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<x> \<prec> P'

goal (2 subgoals):
 1. \<And>P'. P \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
with Phnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
P \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
have "a<x>.P' \<in> summands P"
[PROOF STATE]
proof (prove)
using this:
hnf P
P \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. a<x>.P' \<in> summands P
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
a<x>.P' \<in> summands P

goal (2 subgoals):
 1. \<And>P'. P \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
a<x>.P' \<in> summands P

goal (2 subgoals):
 1. \<And>P'. P \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "x \<sharp> Q"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<sharp> Q
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
x \<sharp> Q

goal (2 subgoals):
 1. \<And>P'. P \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
a<x>.P' \<in> summands P
x \<sharp> Q
[PROOF STEP]
have "a<x>.(P' \<parallel> Q) \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
a<x>.P' \<in> summands P
x \<sharp> Q

goal (1 subgoal):
 1. a<x>.(P' \<parallel> Q) \<in> expandSet P Q
[PROOF STEP]
by(auto simp add: expandSet_def)
[PROOF STATE]
proof (state)
this:
a<x>.(P' \<parallel> Q) \<in> expandSet P Q

goal (2 subgoals):
 1. \<And>P'. P \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
a<x>.(P' \<parallel> Q) \<in> expandSet P Q

goal (2 subgoals):
 1. \<And>P'. P \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "a<x>.(P' \<parallel> Q) \<longmapsto>a<x> \<prec> (P' \<parallel> Q)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a<x>.(P' \<parallel> Q) \<longmapsto> a<x> \<prec> P' \<parallel> Q
[PROOF STEP]
by(rule Input)
[PROOF STATE]
proof (state)
this:
a<x>.(P' \<parallel> Q) \<longmapsto> a<x> \<prec> P' \<parallel> Q

goal (2 subgoals):
 1. \<And>P'. P \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P' \<parallel> Q
 2. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
a<x>.(P' \<parallel> Q) \<in> expandSet P Q
a<x>.(P' \<parallel> Q) \<longmapsto> a<x> \<prec> P' \<parallel> Q
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a<x>.(P' \<parallel> Q) \<in> expandSet P Q
a<x>.(P' \<parallel> Q) \<longmapsto> a<x> \<prec> P' \<parallel> Q

goal (1 subgoal):
 1. R \<longmapsto> a<x> \<prec> P' \<parallel> Q
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
a<x>.(P' \<parallel> Q) \<in> expandSet P Q
a<x>.(P' \<parallel> Q) \<longmapsto> a<x> \<prec> P' \<parallel> Q
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> a<x> \<prec> P' \<parallel> Q
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<x> \<prec> P' \<parallel> Q

goal (1 subgoal):
 1. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
case(cPar2 Q')
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<x> \<prec> Q'

goal (1 subgoal):
 1. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "Q \<longmapsto>a<x> \<prec> Q'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<longmapsto> a<x> \<prec> Q'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<x> \<prec> Q'

goal (1 subgoal):
 1. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
with Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf Q
Q \<longmapsto> a<x> \<prec> Q'
[PROOF STEP]
have "a<x>.Q' \<in> summands Q"
[PROOF STATE]
proof (prove)
using this:
hnf Q
Q \<longmapsto> a<x> \<prec> Q'

goal (1 subgoal):
 1. a<x>.Q' \<in> summands Q
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
a<x>.Q' \<in> summands Q

goal (1 subgoal):
 1. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
a<x>.Q' \<in> summands Q

goal (1 subgoal):
 1. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "x \<sharp> P"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<sharp> P
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
x \<sharp> P

goal (1 subgoal):
 1. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
a<x>.Q' \<in> summands Q
x \<sharp> P
[PROOF STEP]
have "a<x>.(P \<parallel> Q') \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
a<x>.Q' \<in> summands Q
x \<sharp> P

goal (1 subgoal):
 1. a<x>.(P \<parallel> Q') \<in> expandSet P Q
[PROOF STEP]
by(simp add: expandSet_def, blast)
[PROOF STATE]
proof (state)
this:
a<x>.(P \<parallel> Q') \<in> expandSet P Q

goal (1 subgoal):
 1. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
a<x>.(P \<parallel> Q') \<in> expandSet P Q

goal (1 subgoal):
 1. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "a<x>.(P \<parallel> Q') \<longmapsto>a<x> \<prec> (P \<parallel> Q')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a<x>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
by(rule Input)
[PROOF STATE]
proof (state)
this:
a<x>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P \<parallel> Q'

goal (1 subgoal):
 1. \<And>Q'. Q \<longmapsto> a<x> \<prec> Q' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
a<x>.(P \<parallel> Q') \<in> expandSet P Q
a<x>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
a<x>.(P \<parallel> Q') \<in> expandSet P Q
a<x>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P \<parallel> Q'

goal (1 subgoal):
 1. R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
a<x>.(P \<parallel> Q') \<in> expandSet P Q
a<x>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P \<parallel> Q'
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> a<x> \<prec> P \<parallel> Q'
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<x> \<prec> P \<parallel> Q'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<x> \<prec> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P'
 2. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<lbrakk>P \<parallel> Q \<longmapsto> a<?xa2> \<prec> ?P'a2; ?xa2 \<sharp> P; ?xa2 \<sharp> Q\<rbrakk> \<Longrightarrow> R \<longmapsto> a<?xa2> \<prec> ?P'a2

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P'
 2. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<lbrakk>P \<parallel> Q \<longmapsto> a<?xa2> \<prec> ?P'a2; ?xa2 \<sharp> P; ?xa2 \<sharp> Q\<rbrakk> \<Longrightarrow> R \<longmapsto> a<?xa2> \<prec> ?P'a2

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P'
 2. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
obtain y::name where "y \<sharp> P" and "y \<sharp> Q" and "y \<sharp> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>y. \<lbrakk>y \<sharp> P; y \<sharp> Q; y \<sharp> P'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(generate_fresh "name") auto
[PROOF STATE]
proof (state)
this:
y \<sharp> P
y \<sharp> Q
y \<sharp> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P'
 2. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
assume "P \<parallel> Q \<longmapsto>a<x> \<prec> P'"
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<x> \<prec> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P'
 2. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
with \<open>y \<sharp> P'\<close>
[PROOF STATE]
proof (chain)
picking this:
y \<sharp> P'
P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
have "P \<parallel> Q \<longmapsto>a<y> \<prec> ([(x, y)] \<bullet> P')"
[PROOF STATE]
proof (prove)
using this:
y \<sharp> P'
P \<parallel> Q \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
by(simp add: alphaBoundResidual)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<y> \<prec> [(x, y)] \<bullet> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P'
 2. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P \<parallel> Q \<longmapsto> a<?xa2> \<prec> ?P'a2; ?xa2 \<sharp> P; ?xa2 \<sharp> Q\<rbrakk> \<Longrightarrow> R \<longmapsto> a<?xa2> \<prec> ?P'a2
P \<parallel> Q \<longmapsto> a<y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
have "R \<longmapsto>a<y> \<prec> ([(x, y)] \<bullet> P')"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P \<parallel> Q \<longmapsto> a<?xa2> \<prec> ?P'a2; ?xa2 \<sharp> P; ?xa2 \<sharp> Q\<rbrakk> \<Longrightarrow> R \<longmapsto> a<?xa2> \<prec> ?P'a2
P \<parallel> Q \<longmapsto> a<y> \<prec> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. R \<longmapsto> a<y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
using \<open>y \<sharp> P\<close> \<open>y \<sharp> Q\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P \<parallel> Q \<longmapsto> a<?xa2> \<prec> ?P'a2; ?xa2 \<sharp> P; ?xa2 \<sharp> Q\<rbrakk> \<Longrightarrow> R \<longmapsto> a<?xa2> \<prec> ?P'a2
P \<parallel> Q \<longmapsto> a<y> \<prec> [(x, y)] \<bullet> P'
y \<sharp> P
y \<sharp> Q

goal (1 subgoal):
 1. R \<longmapsto> a<y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<y> \<prec> [(x, y)] \<bullet> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<x> \<prec> P'
 2. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
thus "R \<longmapsto>a<x> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
R \<longmapsto> a<y> \<prec> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. R \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
using \<open>y \<sharp> P'\<close>
[PROOF STATE]
proof (prove)
using this:
R \<longmapsto> a<y> \<prec> [(x, y)] \<bullet> P'
y \<sharp> P'

goal (1 subgoal):
 1. R \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
by(simp add: alphaBoundResidual)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
assume "R \<longmapsto>a<x> \<prec> P'"
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
with Exp
[PROOF STATE]
proof (chain)
picking this:
(R, expandSet P Q) \<in> sumComposeSet
R \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
obtain R where "R \<in> expandSet P Q" and "R \<longmapsto>a<x> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
(R, expandSet P Q) \<in> sumComposeSet
R \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. (\<And>R. \<lbrakk>R \<in> expandSet P Q; R \<longmapsto> a<x> \<prec> P'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(blast dest: expandAction')
[PROOF STATE]
proof (state)
this:
R \<in> expandSet P Q
R \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> a<x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
thus "P \<parallel> Q \<longmapsto>a<x> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
R \<in> expandSet P Q
R \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
proof(auto simp add: expandSet_def)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>aa xa P'a. \<lbrakk>aa<xa>.(P'a \<parallel> Q) \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P'a \<parallel> Q); aa<xa>.P'a \<in> summands P; xa \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
 2. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
fix a' y P''
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>aa xa P'a. \<lbrakk>aa<xa>.(P'a \<parallel> Q) \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P'a \<parallel> Q); aa<xa>.P'a \<in> summands P; xa \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
 2. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
assume "a'<y>.P'' \<in> summands P"
[PROOF STATE]
proof (state)
this:
a'<y>.P'' \<in> summands P

goal (2 subgoals):
 1. \<And>aa xa P'a. \<lbrakk>aa<xa>.(P'a \<parallel> Q) \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P'a \<parallel> Q); aa<xa>.P'a \<in> summands P; xa \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
 2. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
with Phnf
[PROOF STATE]
proof (chain)
picking this:
hnf P
a'<y>.P'' \<in> summands P
[PROOF STEP]
have "P \<longmapsto>a'<y> \<prec> P''"
[PROOF STATE]
proof (prove)
using this:
hnf P
a'<y>.P'' \<in> summands P

goal (1 subgoal):
 1. P \<longmapsto> a'<y> \<prec> P''
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a'<y> \<prec> P''

goal (2 subgoals):
 1. \<And>aa xa P'a. \<lbrakk>aa<xa>.(P'a \<parallel> Q) \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P'a \<parallel> Q); aa<xa>.P'a \<in> summands P; xa \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
 2. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a'<y> \<prec> P''

goal (2 subgoals):
 1. \<And>aa xa P'a. \<lbrakk>aa<xa>.(P'a \<parallel> Q) \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P'a \<parallel> Q); aa<xa>.P'a \<in> summands P; xa \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
 2. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
assume "y \<sharp> Q"
[PROOF STATE]
proof (state)
this:
y \<sharp> Q

goal (2 subgoals):
 1. \<And>aa xa P'a. \<lbrakk>aa<xa>.(P'a \<parallel> Q) \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P'a \<parallel> Q); aa<xa>.P'a \<in> summands P; xa \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
 2. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> a'<y> \<prec> P''
y \<sharp> Q
[PROOF STEP]
have PQTrans: "P \<parallel> Q \<longmapsto>a'<y> \<prec> P'' \<parallel> Q"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a'<y> \<prec> P''
y \<sharp> Q

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a'<y> \<prec> P'' \<parallel> Q
[PROOF STEP]
by(rule Par1B)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a'<y> \<prec> P'' \<parallel> Q

goal (2 subgoals):
 1. \<And>aa xa P'a. \<lbrakk>aa<xa>.(P'a \<parallel> Q) \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P'a \<parallel> Q); aa<xa>.P'a \<in> summands P; xa \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
 2. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
assume "a'<y>.(P'' \<parallel> Q) \<longmapsto>a<x> \<prec> P'"
[PROOF STATE]
proof (state)
this:
a'<y>.(P'' \<parallel> Q) \<longmapsto> a<x> \<prec> P'

goal (2 subgoals):
 1. \<And>aa xa P'a. \<lbrakk>aa<xa>.(P'a \<parallel> Q) \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P'a \<parallel> Q); aa<xa>.P'a \<in> summands P; xa \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
 2. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
hence "a<x> \<prec> P' = a'<y> \<prec> P'' \<parallel> Q" and "a = a'"
[PROOF STATE]
proof (prove)
using this:
a'<y>.(P'' \<parallel> Q) \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. a<x> \<prec> P' = a'<y> \<prec> P'' \<parallel> Q &&& a = a'
[PROOF STEP]
by(erule_tac inputCases', auto simp add: pi.inject residual.inject)+
[PROOF STATE]
proof (state)
this:
a<x> \<prec> P' = a'<y> \<prec> P'' \<parallel> Q
a = a'

goal (2 subgoals):
 1. \<And>aa xa P'a. \<lbrakk>aa<xa>.(P'a \<parallel> Q) \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P'a \<parallel> Q); aa<xa>.P'a \<in> summands P; xa \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
 2. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> a'<y> \<prec> P'' \<parallel> Q
a<x> \<prec> P' = a'<y> \<prec> P'' \<parallel> Q
a = a'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a'<y> \<prec> P'' \<parallel> Q
a<x> \<prec> P' = a'<y> \<prec> P'' \<parallel> Q
a = a'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
fix a' y Q'
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
assume "a'<y>.Q' \<in> summands Q"
[PROOF STATE]
proof (state)
this:
a'<y>.Q' \<in> summands Q

goal (1 subgoal):
 1. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
with Qhnf
[PROOF STATE]
proof (chain)
picking this:
hnf Q
a'<y>.Q' \<in> summands Q
[PROOF STEP]
have "Q \<longmapsto>(a'::name)<y> \<prec> Q'"
[PROOF STATE]
proof (prove)
using this:
hnf Q
a'<y>.Q' \<in> summands Q

goal (1 subgoal):
 1. Q \<longmapsto> a'<y> \<prec> Q'
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a'<y> \<prec> Q'

goal (1 subgoal):
 1. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a'<y> \<prec> Q'

goal (1 subgoal):
 1. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
assume "y \<sharp> P"
[PROOF STATE]
proof (state)
this:
y \<sharp> P

goal (1 subgoal):
 1. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> a'<y> \<prec> Q'
y \<sharp> P
[PROOF STEP]
have PQTrans: "P \<parallel> Q \<longmapsto>a'<y> \<prec> P \<parallel> Q'"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a'<y> \<prec> Q'
y \<sharp> P

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a'<y> \<prec> P \<parallel> Q'
[PROOF STEP]
by(rule Par2B)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a'<y> \<prec> P \<parallel> Q'

goal (1 subgoal):
 1. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
assume "a'<y>.(P \<parallel> Q') \<longmapsto>a<x> \<prec> P'"
[PROOF STATE]
proof (state)
this:
a'<y>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
hence "a<x> \<prec> P' = a'<y> \<prec> P \<parallel> Q'" and "a = a'"
[PROOF STATE]
proof (prove)
using this:
a'<y>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. a<x> \<prec> P' = a'<y> \<prec> P \<parallel> Q' &&& a = a'
[PROOF STEP]
by(erule_tac inputCases', auto simp add: pi.inject residual.inject)+
[PROOF STATE]
proof (state)
this:
a<x> \<prec> P' = a'<y> \<prec> P \<parallel> Q'
a = a'

goal (1 subgoal):
 1. \<And>aa xa Q'. \<lbrakk>aa<xa>.(P \<parallel> Q') \<longmapsto> a<x> \<prec> P'; R = aa<xa>.(P \<parallel> Q'); aa<xa>.Q' \<in> summands Q; xa \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> a'<y> \<prec> P \<parallel> Q'
a<x> \<prec> P' = a'<y> \<prec> P \<parallel> Q'
a = a'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a'<y> \<prec> P \<parallel> Q'
a<x> \<prec> P' = a'<y> \<prec> P \<parallel> Q'
a = a'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<x> \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<x> \<prec> P'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<x> \<prec> P'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<x> \<prec> P' = R \<longmapsto> a<x> \<prec> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
have Goal: "\<And>P Q a x P' R. \<lbrakk>(R, expandSet P Q) \<in> sumComposeSet; hnf P; hnf Q; a \<noteq> x\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto>a<\<nu>x> \<prec> P' = R \<longmapsto>a<\<nu>x> \<prec> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>P Q a x P' R. \<lbrakk>(R, expandSet P Q) \<in> sumComposeSet; hnf P; hnf Q; a \<noteq> x\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P Q a x P' R. \<lbrakk>(R, expandSet P Q) \<in> sumComposeSet; hnf P; hnf Q; a \<noteq> x\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
fix P Q a x P' R
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P Q a x P' R. \<lbrakk>(R, expandSet P Q) \<in> sumComposeSet; hnf P; hnf Q; a \<noteq> x\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume aineqx: "(a::name) \<noteq> x"
[PROOF STATE]
proof (state)
this:
a \<noteq> x

goal (1 subgoal):
 1. \<And>P Q a x P' R. \<lbrakk>(R, expandSet P Q) \<in> sumComposeSet; hnf P; hnf Q; a \<noteq> x\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume Exp: "(R, expandSet P Q) \<in> sumComposeSet"
[PROOF STATE]
proof (state)
this:
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. \<And>P Q a x P' R. \<lbrakk>(R, expandSet P Q) \<in> sumComposeSet; hnf P; hnf Q; a \<noteq> x\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume Phnf: "hnf P"
[PROOF STATE]
proof (state)
this:
hnf P

goal (1 subgoal):
 1. \<And>P Q a x P' R. \<lbrakk>(R, expandSet P Q) \<in> sumComposeSet; hnf P; hnf Q; a \<noteq> x\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume Qhnf: "hnf Q"
[PROOF STATE]
proof (state)
this:
hnf Q

goal (1 subgoal):
 1. \<And>P Q a x P' R. \<lbrakk>(R, expandSet P Q) \<in> sumComposeSet; hnf P; hnf Q; a \<noteq> x\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
show "P \<parallel> Q \<longmapsto>a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
proof(rule iffI)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P'
 2. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
{
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P'
 2. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
fix x P'
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<\<nu>xa__> \<prec> P'a__ \<Longrightarrow> R \<longmapsto> a<\<nu>xa__> \<prec> P'a__
 2. R \<longmapsto> a<\<nu>xa__> \<prec> P'a__ \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>xa__> \<prec> P'a__
[PROOF STEP]
assume "P \<parallel> Q \<longmapsto>a<\<nu>x> \<prec> P'" and "x \<sharp> P" and "x \<sharp> Q" and "a \<noteq> x"
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
x \<sharp> P
x \<sharp> Q
a \<noteq> x

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<\<nu>xa__> \<prec> P'a__ \<Longrightarrow> R \<longmapsto> a<\<nu>xa__> \<prec> P'a__
 2. R \<longmapsto> a<\<nu>xa__> \<prec> P'a__ \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>xa__> \<prec> P'a__
[PROOF STEP]
hence "R \<longmapsto>a<\<nu>x> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
x \<sharp> P
x \<sharp> Q
a \<noteq> x

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
proof(induct rule: parCasesB)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>P'. \<lbrakk>P \<longmapsto> a<\<nu>x> \<prec> P'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
 2. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
case(cPar1 P')
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<\<nu>x> \<prec> P'
a \<noteq> x

goal (2 subgoals):
 1. \<And>P'. \<lbrakk>P \<longmapsto> a<\<nu>x> \<prec> P'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
 2. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "P \<longmapsto>a<\<nu>x> \<prec> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<\<nu>x> \<prec> P'

goal (2 subgoals):
 1. \<And>P'. \<lbrakk>P \<longmapsto> a<\<nu>x> \<prec> P'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
 2. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
with Phnf \<open>a \<noteq> x\<close>
[PROOF STATE]
proof (chain)
picking this:
hnf P
a \<noteq> x
P \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
have "<\<nu>x>a{x}.P' \<in> summands P"
[PROOF STATE]
proof (prove)
using this:
hnf P
a \<noteq> x
P \<longmapsto> a<\<nu>x> \<prec> P'

goal (1 subgoal):
 1. <\<nu>x>a{x}.P' \<in> summands P
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
<\<nu>x>a{x}.P' \<in> summands P

goal (2 subgoals):
 1. \<And>P'. \<lbrakk>P \<longmapsto> a<\<nu>x> \<prec> P'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
 2. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
<\<nu>x>a{x}.P' \<in> summands P

goal (2 subgoals):
 1. \<And>P'. \<lbrakk>P \<longmapsto> a<\<nu>x> \<prec> P'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
 2. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "x \<sharp> Q"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<sharp> Q
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
x \<sharp> Q

goal (2 subgoals):
 1. \<And>P'. \<lbrakk>P \<longmapsto> a<\<nu>x> \<prec> P'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
 2. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
<\<nu>x>a{x}.P' \<in> summands P
x \<sharp> Q
[PROOF STEP]
have "<\<nu>x>a{x}.(P' \<parallel> Q) \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
<\<nu>x>a{x}.P' \<in> summands P
x \<sharp> Q

goal (1 subgoal):
 1. <\<nu>x>a{x}.(P' \<parallel> Q) \<in> expandSet P Q
[PROOF STEP]
by(auto simp add: expandSet_def)
[PROOF STATE]
proof (state)
this:
<\<nu>x>a{x}.(P' \<parallel> Q) \<in> expandSet P Q

goal (2 subgoals):
 1. \<And>P'. \<lbrakk>P \<longmapsto> a<\<nu>x> \<prec> P'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
 2. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
<\<nu>x>a{x}.(P' \<parallel> Q) \<in> expandSet P Q

goal (2 subgoals):
 1. \<And>P'. \<lbrakk>P \<longmapsto> a<\<nu>x> \<prec> P'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
 2. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "<\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto>a<\<nu>x> \<prec> (P' \<parallel> Q)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. <\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
[PROOF STEP]
using \<open>a \<noteq> x\<close>
[PROOF STATE]
proof (prove)
using this:
a \<noteq> x

goal (1 subgoal):
 1. <\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
[PROOF STEP]
by(blast intro: Open Output)
[PROOF STATE]
proof (state)
this:
<\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q

goal (2 subgoals):
 1. \<And>P'. \<lbrakk>P \<longmapsto> a<\<nu>x> \<prec> P'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
 2. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
<\<nu>x>a{x}.(P' \<parallel> Q) \<in> expandSet P Q
<\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
<\<nu>x>a{x}.(P' \<parallel> Q) \<in> expandSet P Q
<\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
<\<nu>x>a{x}.(P' \<parallel> Q) \<in> expandSet P Q
<\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<\<nu>x> \<prec> P' \<parallel> Q

goal (1 subgoal):
 1. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
case(cPar2 Q')
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<\<nu>x> \<prec> Q'
a \<noteq> x

goal (1 subgoal):
 1. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "Q \<longmapsto>a<\<nu>x> \<prec> Q'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<longmapsto> a<\<nu>x> \<prec> Q'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<\<nu>x> \<prec> Q'

goal (1 subgoal):
 1. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
with Qhnf \<open>a \<noteq> x\<close>
[PROOF STATE]
proof (chain)
picking this:
hnf Q
a \<noteq> x
Q \<longmapsto> a<\<nu>x> \<prec> Q'
[PROOF STEP]
have "<\<nu>x>a{x}.Q' \<in> summands Q"
[PROOF STATE]
proof (prove)
using this:
hnf Q
a \<noteq> x
Q \<longmapsto> a<\<nu>x> \<prec> Q'

goal (1 subgoal):
 1. <\<nu>x>a{x}.Q' \<in> summands Q
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
<\<nu>x>a{x}.Q' \<in> summands Q

goal (1 subgoal):
 1. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
<\<nu>x>a{x}.Q' \<in> summands Q

goal (1 subgoal):
 1. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "x \<sharp> P"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<sharp> P
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
x \<sharp> P

goal (1 subgoal):
 1. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
<\<nu>x>a{x}.Q' \<in> summands Q
x \<sharp> P
[PROOF STEP]
have "<\<nu>x>a{x}.(P \<parallel> Q') \<in> expandSet P Q"
[PROOF STATE]
proof (prove)
using this:
<\<nu>x>a{x}.Q' \<in> summands Q
x \<sharp> P

goal (1 subgoal):
 1. <\<nu>x>a{x}.(P \<parallel> Q') \<in> expandSet P Q
[PROOF STEP]
by(simp add: expandSet_def, blast)
[PROOF STATE]
proof (state)
this:
<\<nu>x>a{x}.(P \<parallel> Q') \<in> expandSet P Q

goal (1 subgoal):
 1. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
<\<nu>x>a{x}.(P \<parallel> Q') \<in> expandSet P Q

goal (1 subgoal):
 1. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
have "<\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto>a<\<nu>x> \<prec> (P \<parallel> Q')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. <\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
using \<open>a \<noteq> x\<close>
[PROOF STATE]
proof (prove)
using this:
a \<noteq> x

goal (1 subgoal):
 1. <\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
by(blast intro: Open Output)
[PROOF STATE]
proof (state)
this:
<\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'

goal (1 subgoal):
 1. \<And>Q'. \<lbrakk>Q \<longmapsto> a<\<nu>x> \<prec> Q'; a \<noteq> x\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
<\<nu>x>a{x}.(P \<parallel> Q') \<in> expandSet P Q
<\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
<\<nu>x>a{x}.(P \<parallel> Q') \<in> expandSet P Q
<\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
using Exp
[PROOF STATE]
proof (prove)
using this:
<\<nu>x>a{x}.(P \<parallel> Q') \<in> expandSet P Q
<\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
(R, expandSet P Q) \<in> sumComposeSet

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'
[PROOF STEP]
by(blast intro: expandAction)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<\<nu>x> \<prec> P \<parallel> Q'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<\<nu>x> \<prec> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<\<nu>xa__> \<prec> P'a__ \<Longrightarrow> R \<longmapsto> a<\<nu>xa__> \<prec> P'a__
 2. R \<longmapsto> a<\<nu>xa__> \<prec> P'a__ \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>xa__> \<prec> P'a__
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<lbrakk>P \<parallel> Q \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2; ?xb2 \<sharp> P; ?xb2 \<sharp> Q; a \<noteq> ?xb2\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P'
 2. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<lbrakk>P \<parallel> Q \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2; ?xb2 \<sharp> P; ?xb2 \<sharp> Q; a \<noteq> ?xb2\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P'
 2. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
obtain y::name where "y \<sharp> P" and "y \<sharp> Q" and "y \<sharp> P'" and "y \<noteq> a"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>y. \<lbrakk>y \<sharp> P; y \<sharp> Q; y \<sharp> P'; y \<noteq> a\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(generate_fresh "name") auto
[PROOF STATE]
proof (state)
this:
y \<sharp> P
y \<sharp> Q
y \<sharp> P'
y \<noteq> a

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P'
 2. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume "P \<parallel> Q \<longmapsto>a<\<nu>x> \<prec> P'"
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P'
 2. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
with \<open>y \<sharp> P'\<close>
[PROOF STATE]
proof (chain)
picking this:
y \<sharp> P'
P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
have "P \<parallel> Q \<longmapsto>a<\<nu>y> \<prec> ([(x, y)] \<bullet> P')"
[PROOF STATE]
proof (prove)
using this:
y \<sharp> P'
P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
by(simp add: alphaBoundResidual)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P'
 2. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P \<parallel> Q \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2; ?xb2 \<sharp> P; ?xb2 \<sharp> Q; a \<noteq> ?xb2\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
have "R \<longmapsto>a<\<nu>y> \<prec> ([(x, y)] \<bullet> P')"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P \<parallel> Q \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2; ?xb2 \<sharp> P; ?xb2 \<sharp> Q; a \<noteq> ?xb2\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
using \<open>y \<sharp> P\<close> \<open>y \<sharp> Q\<close> \<open>y \<noteq> a\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P \<parallel> Q \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2; ?xb2 \<sharp> P; ?xb2 \<sharp> Q; a \<noteq> ?xb2\<rbrakk> \<Longrightarrow> R \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
y \<sharp> P
y \<sharp> Q
y \<noteq> a

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'

goal (2 subgoals):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> R \<longmapsto> a<\<nu>x> \<prec> P'
 2. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
thus "R \<longmapsto>a<\<nu>x> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
using \<open>y \<sharp> P'\<close>
[PROOF STATE]
proof (prove)
using this:
R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
y \<sharp> P'

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
by(simp add: alphaBoundResidual)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<\<nu>x> \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
{
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
fix R x P'
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. Ra__ \<longmapsto> a<\<nu>xa__> \<prec> P'a__ \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>xa__> \<prec> P'a__
[PROOF STEP]
assume "R \<longmapsto>a<\<nu>x> \<prec> P'" and "R \<in> expandSet P Q" and "x \<sharp> R" and "x \<sharp> P" and "x \<sharp> Q"
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<\<nu>x> \<prec> P'
R \<in> expandSet P Q
x \<sharp> R
x \<sharp> P
x \<sharp> Q

goal (1 subgoal):
 1. Ra__ \<longmapsto> a<\<nu>xa__> \<prec> P'a__ \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>xa__> \<prec> P'a__
[PROOF STEP]
hence "P \<parallel> Q \<longmapsto>a<\<nu>x> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
R \<longmapsto> a<\<nu>x> \<prec> P'
R \<in> expandSet P Q
x \<sharp> R
x \<sharp> P
x \<sharp> Q

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
proof(auto simp add: expandSet_def)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>a x P'. \<lbrakk><\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P' \<parallel> Q); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P' \<parallel> Q); <\<nu>x>a{x}.P' \<in> summands P; x \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
 2. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
fix a' y P''
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>a x P'. \<lbrakk><\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P' \<parallel> Q); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P' \<parallel> Q); <\<nu>x>a{x}.P' \<in> summands P; x \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
 2. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume "<\<nu>y>a'{y}.P'' \<in> summands P"
[PROOF STATE]
proof (state)
this:
<\<nu>y>a'{y}.P'' \<in> summands P

goal (2 subgoals):
 1. \<And>a x P'. \<lbrakk><\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P' \<parallel> Q); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P' \<parallel> Q); <\<nu>x>a{x}.P' \<in> summands P; x \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
 2. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
<\<nu>y>a'{y}.P'' \<in> summands P

goal (2 subgoals):
 1. \<And>a x P'. \<lbrakk><\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P' \<parallel> Q); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P' \<parallel> Q); <\<nu>x>a{x}.P' \<in> summands P; x \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
 2. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
hence "a' \<noteq> y"
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a'{y}.P'' \<in> summands P

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

goal (2 subgoals):
 1. \<And>a x P'. \<lbrakk><\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P' \<parallel> Q); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P' \<parallel> Q); <\<nu>x>a{x}.P' \<in> summands P; x \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
 2. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
<\<nu>y>a'{y}.P'' \<in> summands P
a' \<noteq> y
[PROOF STEP]
have "P \<longmapsto>a'<\<nu>y> \<prec> P''"
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a'{y}.P'' \<in> summands P
a' \<noteq> y

goal (1 subgoal):
 1. P \<longmapsto> a'<\<nu>y> \<prec> P''
[PROOF STEP]
using Phnf
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a'{y}.P'' \<in> summands P
a' \<noteq> y
hnf P

goal (1 subgoal):
 1. P \<longmapsto> a'<\<nu>y> \<prec> P''
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a'<\<nu>y> \<prec> P''

goal (2 subgoals):
 1. \<And>a x P'. \<lbrakk><\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P' \<parallel> Q); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P' \<parallel> Q); <\<nu>x>a{x}.P' \<in> summands P; x \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
 2. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a'<\<nu>y> \<prec> P''

goal (2 subgoals):
 1. \<And>a x P'. \<lbrakk><\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P' \<parallel> Q); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P' \<parallel> Q); <\<nu>x>a{x}.P' \<in> summands P; x \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
 2. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume "y \<sharp> Q"
[PROOF STATE]
proof (state)
this:
y \<sharp> Q

goal (2 subgoals):
 1. \<And>a x P'. \<lbrakk><\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P' \<parallel> Q); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P' \<parallel> Q); <\<nu>x>a{x}.P' \<in> summands P; x \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
 2. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> a'<\<nu>y> \<prec> P''
y \<sharp> Q
[PROOF STEP]
have PQTrans: "P \<parallel> Q \<longmapsto>a'<\<nu>y> \<prec> P'' \<parallel> Q"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a'<\<nu>y> \<prec> P''
y \<sharp> Q

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a'<\<nu>y> \<prec> P'' \<parallel> Q
[PROOF STEP]
by(rule Par1B)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a'<\<nu>y> \<prec> P'' \<parallel> Q

goal (2 subgoals):
 1. \<And>a x P'. \<lbrakk><\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P' \<parallel> Q); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P' \<parallel> Q); <\<nu>x>a{x}.P' \<in> summands P; x \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
 2. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume ResTrans: "<\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto>a<\<nu>x> \<prec> P'" and "x \<sharp> [y].a'{y}.(P'' \<parallel> Q)"
[PROOF STATE]
proof (state)
this:
<\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'
x \<sharp> [y].a'{y}.(P'' \<parallel> Q)

goal (2 subgoals):
 1. \<And>a x P'. \<lbrakk><\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P' \<parallel> Q); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P' \<parallel> Q); <\<nu>x>a{x}.P' \<in> summands P; x \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
 2. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
with ResTrans \<open>a' \<noteq> y\<close> \<open>x \<sharp> P\<close> \<open>x \<sharp> Q\<close>
[PROOF STATE]
proof (chain)
picking this:
<\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'
a' \<noteq> y
x \<sharp> P
x \<sharp> Q
<\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'
x \<sharp> [y].a'{y}.(P'' \<parallel> Q)
[PROOF STEP]
have "a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q"
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'
a' \<noteq> y
x \<sharp> P
x \<sharp> Q
<\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'
x \<sharp> [y].a'{y}.(P'' \<parallel> Q)

goal (1 subgoal):
 1. a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
[PROOF STEP]
apply(case_tac "x=y")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x = y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
 2. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x \<noteq> y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
[PROOF STEP]
defer
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x \<noteq> y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
 2. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x = y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
[PROOF STEP]
apply(erule_tac resCasesB)
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<lbrakk>a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x \<noteq> y\<rbrakk> \<Longrightarrow> x \<noteq> y
 2. \<lbrakk>a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x \<noteq> y\<rbrakk> \<Longrightarrow> x \<sharp> a'{y}.(P'' \<parallel> Q)
 3. \<And>b P'. \<lbrakk>a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x \<noteq> y; a'{y}.(P'' \<parallel> Q) \<longmapsto> b[y] \<prec> P'; b \<noteq> y; BoundOutputS a = BoundOutputS b\<rbrakk> \<Longrightarrow> b<\<nu>x> \<prec> [(x, y)] \<bullet> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
 4. \<And>P'. \<lbrakk>a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x \<noteq> y; a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; y \<sharp> BoundOutputS a\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> <\<nu>y>P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
 5. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x = y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<lbrakk>a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x \<noteq> y\<rbrakk> \<Longrightarrow> x \<sharp> a'{y}.(P'' \<parallel> Q)
 2. \<And>b P'. \<lbrakk>a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x \<noteq> y; a'{y}.(P'' \<parallel> Q) \<longmapsto> b[y] \<prec> P'; b \<noteq> y; BoundOutputS a = BoundOutputS b\<rbrakk> \<Longrightarrow> b<\<nu>x> \<prec> [(x, y)] \<bullet> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
 3. \<And>P'. \<lbrakk>a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x \<noteq> y; a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; y \<sharp> BoundOutputS a\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> <\<nu>y>P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
 4. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x = y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
[PROOF STEP]
apply(simp add: abs_fresh)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>b P'. \<lbrakk>a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x \<noteq> y; a'{y}.(P'' \<parallel> Q) \<longmapsto> b[y] \<prec> P'; b \<noteq> y; BoundOutputS a = BoundOutputS b\<rbrakk> \<Longrightarrow> b<\<nu>x> \<prec> [(x, y)] \<bullet> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
 2. \<And>P'. \<lbrakk>a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x \<noteq> y; a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; y \<sharp> BoundOutputS a\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> <\<nu>y>P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
 3. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; x \<sharp> P; x \<sharp> Q; <\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P'' \<parallel> Q); x = y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
[PROOF STEP]
apply(auto simp add: residual.inject alpha' calc_atm fresh_left abs_fresh elim: outputCases)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y\<rbrakk> \<Longrightarrow> a = a'
 2. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply(ind_cases "<\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>y> \<prec> P'")
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>P a b P'. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; <\<nu>y>a'{y}.(P'' \<parallel> Q) = <\<nu>b>P; a<\<nu>y> \<prec> P' = a<\<nu>b> \<prec> P'; P \<longmapsto> a[b] \<prec> P'; a \<noteq> b\<rbrakk> \<Longrightarrow> a = a'
 2. \<And>P a x P' ya. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; <\<nu>y>a'{y}.(P'' \<parallel> Q) = <\<nu>ya>P; a<\<nu>y> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> <\<nu>ya>P'; P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; ya \<sharp> a; ya \<noteq> x; x \<sharp> P; x \<sharp> a\<rbrakk> \<Longrightarrow> a = a'
 3. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply(simp add: pi.inject alpha' residual.inject abs_fresh eqvts calc_atm)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>P b P'. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; y = b \<and> a'{y}.(P'' \<parallel> Q) = P \<or> y \<noteq> b \<and> (if b = a' then y else if y = a' then b else a'){(if b = y then y else if y = y then b else y)}.(([(b, y)] \<bullet> P'') \<parallel> ([(b, y)] \<bullet> Q)) = P \<and> b \<noteq> a' \<and> b \<noteq> y \<and> b \<sharp> P'' \<and> b \<sharp> Q; y = b \<and> P' = P' \<or> y \<noteq> b \<and> [(b, y)] \<bullet> P' = P' \<and> b \<sharp> P'; P \<longmapsto> a[b] \<prec> P'; a \<noteq> b\<rbrakk> \<Longrightarrow> a = a'
 2. \<And>P a x P' ya. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; <\<nu>y>a'{y}.(P'' \<parallel> Q) = <\<nu>ya>P; a<\<nu>y> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> <\<nu>ya>P'; P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; ya \<sharp> a; ya \<noteq> x; x \<sharp> P; x \<sharp> a\<rbrakk> \<Longrightarrow> a = a'
 3. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply(auto elim: outputCases)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>P a x P' ya. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; <\<nu>y>a'{y}.(P'' \<parallel> Q) = <\<nu>ya>P; a<\<nu>y> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> <\<nu>ya>P'; P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; ya \<sharp> a; ya \<noteq> x; x \<sharp> P; x \<sharp> a\<rbrakk> \<Longrightarrow> a = a'
 2. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply(simp add: pi.inject residual.inject alpha' calc_atm)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>P x P' ya. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; y = ya \<and> a'{y}.(P'' \<parallel> Q) = P \<or> y \<noteq> ya \<and> (if ya = a' then y else if y = a' then ya else a'){(if ya = y then y else if y = y then ya else y)}.(([(ya, y)] \<bullet> P'') \<parallel> ([(ya, y)] \<bullet> Q)) = P \<and> ya \<noteq> a' \<and> ya \<noteq> y \<and> ya \<sharp> P'' \<and> ya \<sharp> Q; y = x \<and> P' = <\<nu>ya>P' \<or> y \<noteq> x \<and> [(x, y)] \<bullet> P' = <\<nu>ya>P' \<and> x \<sharp> P'; P \<longmapsto> a<\<nu>x> \<prec> P'; ya \<noteq> a; ya \<noteq> x; x \<sharp> P; x \<noteq> a\<rbrakk> \<Longrightarrow> a = a'
 2. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply auto
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk><\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply(ind_cases "<\<nu>y>a'{y}.(P'' \<parallel> Q) \<longmapsto> a<\<nu>y> \<prec> P'")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>P a b P'. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; <\<nu>y>a'{y}.(P'' \<parallel> Q) = <\<nu>b>P; a<\<nu>y> \<prec> P' = a<\<nu>b> \<prec> P'; P \<longmapsto> a[b] \<prec> P'; a \<noteq> b\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
 2. \<And>P a x P' ya. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; <\<nu>y>a'{y}.(P'' \<parallel> Q) = <\<nu>ya>P; a<\<nu>y> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> <\<nu>ya>P'; P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; ya \<sharp> a; ya \<noteq> x; x \<sharp> P; x \<sharp> a\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply(auto simp add: pi.inject alpha' residual.inject abs_fresh eqvts calc_atm)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; a'{y}.(P'' \<parallel> Q) \<longmapsto> a[y] \<prec> P'; a \<noteq> y\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
 2. \<And>b. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; a'{b}.(([(b, y)] \<bullet> P'') \<parallel> Q) \<longmapsto> a[b] \<prec> [(b, y)] \<bullet> P'; a \<noteq> b; b \<noteq> a'; b \<sharp> P''; b \<sharp> Q; y \<noteq> b; b \<sharp> P'\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply(auto elim: outputCases)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>b. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; a'{b}.(([(b, y)] \<bullet> P'') \<parallel> Q) \<longmapsto> a[b] \<prec> [(b, y)] \<bullet> P'; a \<noteq> b; b \<noteq> a'; b \<sharp> P''; b \<sharp> Q; y \<noteq> b; b \<sharp> P'\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply(erule_tac outputCases)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>b. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; a \<noteq> b; b \<noteq> a'; b \<sharp> P''; b \<sharp> Q; y \<noteq> b; b \<sharp> P'; a[b] = a'[b]; ([(b, y)] \<bullet> P'') \<parallel> Q = [(b, y)] \<bullet> P'\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply(auto simp add: freeRes.inject)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>b. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; x = y; b \<noteq> a'; b \<sharp> P''; b \<sharp> Q; y \<noteq> b; b \<sharp> P'; a = a'; ([(b, y)] \<bullet> P'') \<parallel> Q = [(b, y)] \<bullet> P'\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply hypsubst_thin
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>b. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; b \<noteq> a'; b \<sharp> P''; b \<sharp> Q; y \<noteq> b; b \<sharp> P'; ([(b, y)] \<bullet> P'') \<parallel> Q = [(b, y)] \<bullet> P'\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
apply(drule_tac pi="[(b, y)]" in pt_bij3)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>b. \<lbrakk>a' \<noteq> y; y \<sharp> P; y \<sharp> Q; b \<noteq> a'; b \<sharp> P''; b \<sharp> Q; y \<noteq> b; b \<sharp> P'; [(b, y)] \<bullet> ([(b, y)] \<bullet> P'') \<parallel> Q = [(b, y)] \<bullet> [(b, y)] \<bullet> P'\<rbrakk> \<Longrightarrow> P' = P'' \<parallel> Q
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q

goal (2 subgoals):
 1. \<And>a x P'. \<lbrakk><\<nu>x>a{x}.(P' \<parallel> Q) \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P' \<parallel> Q); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P' \<parallel> Q); <\<nu>x>a{x}.P' \<in> summands P; x \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
 2. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> a'<\<nu>y> \<prec> P'' \<parallel> Q
a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a'<\<nu>y> \<prec> P'' \<parallel> Q
a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P'' \<parallel> Q

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'

goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
fix a' y Q'
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume "<\<nu>y>a'{y}.Q' \<in> summands Q"
[PROOF STATE]
proof (state)
this:
<\<nu>y>a'{y}.Q' \<in> summands Q

goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
<\<nu>y>a'{y}.Q' \<in> summands Q

goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
hence "a' \<noteq> y"
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a'{y}.Q' \<in> summands Q

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

goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
<\<nu>y>a'{y}.Q' \<in> summands Q
a' \<noteq> y
[PROOF STEP]
have "Q \<longmapsto>a'<\<nu>y> \<prec> Q'"
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a'{y}.Q' \<in> summands Q
a' \<noteq> y

goal (1 subgoal):
 1. Q \<longmapsto> a'<\<nu>y> \<prec> Q'
[PROOF STEP]
using Qhnf
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a'{y}.Q' \<in> summands Q
a' \<noteq> y
hnf Q

goal (1 subgoal):
 1. Q \<longmapsto> a'<\<nu>y> \<prec> Q'
[PROOF STEP]
by(simp add: summandTransition)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a'<\<nu>y> \<prec> Q'

goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a'<\<nu>y> \<prec> Q'

goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume "y \<sharp> P"
[PROOF STATE]
proof (state)
this:
y \<sharp> P

goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> a'<\<nu>y> \<prec> Q'
y \<sharp> P
[PROOF STEP]
have PQTrans: "P \<parallel> Q \<longmapsto>a'<\<nu>y> \<prec> P \<parallel> Q'"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a'<\<nu>y> \<prec> Q'
y \<sharp> P

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a'<\<nu>y> \<prec> P \<parallel> Q'
[PROOF STEP]
by(rule Par2B)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a'<\<nu>y> \<prec> P \<parallel> Q'

goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume ResTrans: "<\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto>a<\<nu>x> \<prec> P'" and "x \<sharp> [y].a'{y}.(P \<parallel> Q')"
[PROOF STATE]
proof (state)
this:
<\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'
x \<sharp> [y].a'{y}.(P \<parallel> Q')

goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
with ResTrans \<open>a' \<noteq> y\<close>
[PROOF STATE]
proof (chain)
picking this:
<\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'
a' \<noteq> y
<\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'
x \<sharp> [y].a'{y}.(P \<parallel> Q')
[PROOF STEP]
have "a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'"
[PROOF STATE]
proof (prove)
using this:
<\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'
a' \<noteq> y
<\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'
x \<sharp> [y].a'{y}.(P \<parallel> Q')

goal (1 subgoal):
 1. a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
[PROOF STEP]
apply(case_tac "x=y")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x = y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
 2. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x \<noteq> y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
[PROOF STEP]
defer
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x \<noteq> y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
 2. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x = y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
[PROOF STEP]
apply(erule_tac resCasesB)
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<lbrakk>a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x \<noteq> y\<rbrakk> \<Longrightarrow> x \<noteq> y
 2. \<lbrakk>a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x \<noteq> y\<rbrakk> \<Longrightarrow> x \<sharp> a'{y}.(P \<parallel> Q')
 3. \<And>b P'. \<lbrakk>a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x \<noteq> y; a'{y}.(P \<parallel> Q') \<longmapsto> b[y] \<prec> P'; b \<noteq> y; BoundOutputS a = BoundOutputS b\<rbrakk> \<Longrightarrow> b<\<nu>x> \<prec> [(x, y)] \<bullet> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
 4. \<And>P'. \<lbrakk>a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x \<noteq> y; a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; y \<sharp> BoundOutputS a\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> <\<nu>y>P' = a'<\<nu>y> \<prec> P \<parallel> Q'
 5. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x = y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<lbrakk>a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x \<noteq> y\<rbrakk> \<Longrightarrow> x \<sharp> a'{y}.(P \<parallel> Q')
 2. \<And>b P'. \<lbrakk>a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x \<noteq> y; a'{y}.(P \<parallel> Q') \<longmapsto> b[y] \<prec> P'; b \<noteq> y; BoundOutputS a = BoundOutputS b\<rbrakk> \<Longrightarrow> b<\<nu>x> \<prec> [(x, y)] \<bullet> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
 3. \<And>P'. \<lbrakk>a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x \<noteq> y; a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; y \<sharp> BoundOutputS a\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> <\<nu>y>P' = a'<\<nu>y> \<prec> P \<parallel> Q'
 4. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x = y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
[PROOF STEP]
apply(simp add: abs_fresh)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>b P'. \<lbrakk>a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x \<noteq> y; a'{y}.(P \<parallel> Q') \<longmapsto> b[y] \<prec> P'; b \<noteq> y; BoundOutputS a = BoundOutputS b\<rbrakk> \<Longrightarrow> b<\<nu>x> \<prec> [(x, y)] \<bullet> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
 2. \<And>P'. \<lbrakk>a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x \<noteq> y; a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; y \<sharp> BoundOutputS a\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> <\<nu>y>P' = a'<\<nu>y> \<prec> P \<parallel> Q'
 3. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; a' \<noteq> y; <\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [y].a'{y}.(P \<parallel> Q'); x = y\<rbrakk> \<Longrightarrow> a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
[PROOF STEP]
apply(auto simp add: residual.inject alpha' calc_atm fresh_left abs_fresh elim: outputCases)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; x = y\<rbrakk> \<Longrightarrow> a = a'
 2. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; x = y\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply(ind_cases "<\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>y> \<prec> P'")
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>P a b P'. \<lbrakk>a' \<noteq> y; x = y; <\<nu>y>a'{y}.(P \<parallel> Q') = <\<nu>b>P; a<\<nu>y> \<prec> P' = a<\<nu>b> \<prec> P'; P \<longmapsto> a[b] \<prec> P'; a \<noteq> b\<rbrakk> \<Longrightarrow> a = a'
 2. \<And>P a x P' ya. \<lbrakk>a' \<noteq> y; x = y; <\<nu>y>a'{y}.(P \<parallel> Q') = <\<nu>ya>P; a<\<nu>y> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> <\<nu>ya>P'; P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; ya \<sharp> a; ya \<noteq> x; x \<sharp> P; x \<sharp> a\<rbrakk> \<Longrightarrow> a = a'
 3. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; x = y\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply(simp add: pi.inject alpha' residual.inject abs_fresh eqvts calc_atm)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>P b P'. \<lbrakk>a' \<noteq> y; x = y; y = b \<and> a'{y}.(P \<parallel> Q') = P \<or> y \<noteq> b \<and> (if b = a' then y else if y = a' then b else a'){(if b = y then y else if y = y then b else y)}.(([(b, y)] \<bullet> P) \<parallel> ([(b, y)] \<bullet> Q')) = P \<and> b \<noteq> a' \<and> b \<noteq> y \<and> b \<sharp> P \<and> b \<sharp> Q'; y = b \<and> P' = P' \<or> y \<noteq> b \<and> [(b, y)] \<bullet> P' = P' \<and> b \<sharp> P'; P \<longmapsto> a[b] \<prec> P'; a \<noteq> b\<rbrakk> \<Longrightarrow> a = a'
 2. \<And>P a x P' ya. \<lbrakk>a' \<noteq> y; x = y; <\<nu>y>a'{y}.(P \<parallel> Q') = <\<nu>ya>P; a<\<nu>y> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> <\<nu>ya>P'; P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; ya \<sharp> a; ya \<noteq> x; x \<sharp> P; x \<sharp> a\<rbrakk> \<Longrightarrow> a = a'
 3. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; x = y\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply(auto elim: outputCases)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>P a x P' ya. \<lbrakk>a' \<noteq> y; x = y; <\<nu>y>a'{y}.(P \<parallel> Q') = <\<nu>ya>P; a<\<nu>y> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> <\<nu>ya>P'; P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; ya \<sharp> a; ya \<noteq> x; x \<sharp> P; x \<sharp> a\<rbrakk> \<Longrightarrow> a = a'
 2. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; x = y\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply(simp add: pi.inject residual.inject alpha' calc_atm)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>P x P' ya. \<lbrakk>a' \<noteq> y; x = y; y = ya \<and> a'{y}.(P \<parallel> Q') = P \<or> y \<noteq> ya \<and> (if ya = a' then y else if y = a' then ya else a'){(if ya = y then y else if y = y then ya else y)}.(([(ya, y)] \<bullet> P) \<parallel> ([(ya, y)] \<bullet> Q')) = P \<and> ya \<noteq> a' \<and> ya \<noteq> y \<and> ya \<sharp> P \<and> ya \<sharp> Q'; y = x \<and> P' = <\<nu>ya>P' \<or> y \<noteq> x \<and> [(x, y)] \<bullet> P' = <\<nu>ya>P' \<and> x \<sharp> P'; P \<longmapsto> a<\<nu>x> \<prec> P'; ya \<noteq> a; ya \<noteq> x; x \<sharp> P; x \<noteq> a\<rbrakk> \<Longrightarrow> a = a'
 2. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; x = y\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply auto
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk><\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>y> \<prec> P'; a' \<noteq> y; x = y\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply(ind_cases "<\<nu>y>a'{y}.(P \<parallel> Q') \<longmapsto> a<\<nu>y> \<prec> P'")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>P a b P'. \<lbrakk>a' \<noteq> y; x = y; <\<nu>y>a'{y}.(P \<parallel> Q') = <\<nu>b>P; a<\<nu>y> \<prec> P' = a<\<nu>b> \<prec> P'; P \<longmapsto> a[b] \<prec> P'; a \<noteq> b\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
 2. \<And>P a x P' ya. \<lbrakk>a' \<noteq> y; x = y; <\<nu>y>a'{y}.(P \<parallel> Q') = <\<nu>ya>P; a<\<nu>y> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> <\<nu>ya>P'; P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; ya \<sharp> a; ya \<noteq> x; x \<sharp> P; x \<sharp> a\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply(auto simp add: pi.inject alpha' residual.inject abs_fresh eqvts calc_atm)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>a' \<noteq> y; x = y; a'{y}.(P \<parallel> Q') \<longmapsto> a[y] \<prec> P'; a \<noteq> y\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
 2. \<And>b. \<lbrakk>a' \<noteq> y; x = y; a'{b}.(([(b, y)] \<bullet> P) \<parallel> ([(b, y)] \<bullet> Q')) \<longmapsto> a[b] \<prec> [(b, y)] \<bullet> P'; a \<noteq> b; b \<noteq> a'; b \<sharp> P; b \<sharp> Q'; y \<noteq> b; b \<sharp> P'\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply(auto elim: outputCases)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>b. \<lbrakk>a' \<noteq> y; x = y; a'{b}.(([(b, y)] \<bullet> P) \<parallel> ([(b, y)] \<bullet> Q')) \<longmapsto> a[b] \<prec> [(b, y)] \<bullet> P'; a \<noteq> b; b \<noteq> a'; b \<sharp> P; b \<sharp> Q'; y \<noteq> b; b \<sharp> P'\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply(erule_tac outputCases)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>b. \<lbrakk>a' \<noteq> y; x = y; a \<noteq> b; b \<noteq> a'; b \<sharp> P; b \<sharp> Q'; y \<noteq> b; b \<sharp> P'; a[b] = a'[b]; ([(b, y)] \<bullet> P) \<parallel> ([(b, y)] \<bullet> Q') = [(b, y)] \<bullet> P'\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply(auto simp add: freeRes.inject)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>b. \<lbrakk>a' \<noteq> y; x = y; b \<noteq> a'; b \<sharp> P; b \<sharp> Q'; y \<noteq> b; b \<sharp> P'; a = a'; ([(b, y)] \<bullet> P) \<parallel> ([(b, y)] \<bullet> Q') = [(b, y)] \<bullet> P'\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply hypsubst_thin
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>b. \<lbrakk>a' \<noteq> y; b \<noteq> a'; b \<sharp> P; b \<sharp> Q'; y \<noteq> b; b \<sharp> P'; ([(b, y)] \<bullet> P) \<parallel> ([(b, y)] \<bullet> Q') = [(b, y)] \<bullet> P'\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
apply(drule_tac pi="[(b, y)]" in pt_bij3)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>b. \<lbrakk>a' \<noteq> y; b \<noteq> a'; b \<sharp> P; b \<sharp> Q'; y \<noteq> b; b \<sharp> P'; [(b, y)] \<bullet> ([(b, y)] \<bullet> P) \<parallel> ([(b, y)] \<bullet> Q') = [(b, y)] \<bullet> [(b, y)] \<bullet> P'\<rbrakk> \<Longrightarrow> P' = P \<parallel> Q'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'

goal (1 subgoal):
 1. \<And>a x Q'. \<lbrakk><\<nu>x>a{x}.(P \<parallel> Q') \<longmapsto> a<\<nu>x> \<prec> P'; x \<sharp> [x].a{x}.(P \<parallel> Q'); x \<sharp> P; x \<sharp> Q; R = <\<nu>x>a{x}.(P \<parallel> Q'); <\<nu>x>a{x}.Q' \<in> summands Q; x \<sharp> P\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
with PQTrans
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> a'<\<nu>y> \<prec> P \<parallel> Q'
a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a'<\<nu>y> \<prec> P \<parallel> Q'
a<\<nu>x> \<prec> P' = a'<\<nu>y> \<prec> P \<parallel> Q'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'

goal (1 subgoal):
 1. Ra__ \<longmapsto> a<\<nu>xa__> \<prec> P'a__ \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>xa__> \<prec> P'a__
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<lbrakk>?Rb2 \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2; ?Rb2 \<in> expandSet P Q; ?xb2 \<sharp> ?Rb2; ?xb2 \<sharp> P; ?xb2 \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<lbrakk>?Rb2 \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2; ?Rb2 \<in> expandSet P Q; ?xb2 \<sharp> ?Rb2; ?xb2 \<sharp> P; ?xb2 \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
assume "R \<longmapsto>a<\<nu>x> \<prec> P'"
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<\<nu>x> \<prec> P'

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
with Exp
[PROOF STATE]
proof (chain)
picking this:
(R, expandSet P Q) \<in> sumComposeSet
R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
obtain R where "R \<in> expandSet P Q" and "R \<longmapsto>a<\<nu>x> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
(R, expandSet P Q) \<in> sumComposeSet
R \<longmapsto> a<\<nu>x> \<prec> P'

goal (1 subgoal):
 1. (\<And>R. \<lbrakk>R \<in> expandSet P Q; R \<longmapsto> a<\<nu>x> \<prec> P'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
apply(drule_tac expandAction')
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>\<And>R. \<lbrakk>R \<in> expandSet P Q; R \<longmapsto> a<\<nu>x> \<prec> P'\<rbrakk> \<Longrightarrow> thesis; R \<longmapsto> a<\<nu>x> \<prec> P'\<rbrakk> \<Longrightarrow> R \<longmapsto> ?Rs4
 2. \<lbrakk>\<And>R. \<lbrakk>R \<in> expandSet P Q; R \<longmapsto> a<\<nu>x> \<prec> P'\<rbrakk> \<Longrightarrow> thesis; R \<longmapsto> a<\<nu>x> \<prec> P'; \<exists>P\<in>expandSet P Q. P \<longmapsto> ?Rs4\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
R \<in> expandSet P Q
R \<longmapsto> a<\<nu>x> \<prec> P'

goal (1 subgoal):
 1. Ra__ \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
R \<in> expandSet P Q
R \<longmapsto> a<\<nu>x> \<prec> P'

goal (1 subgoal):
 1. Ra__ \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
obtain y::name where "y \<sharp> P" and "y \<sharp> Q" and "y \<sharp> R" and "y \<sharp> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>y. \<lbrakk>y \<sharp> P; y \<sharp> Q; y \<sharp> R; y \<sharp> P'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(generate_fresh "name") auto
[PROOF STATE]
proof (state)
this:
y \<sharp> P
y \<sharp> Q
y \<sharp> R
y \<sharp> P'

goal (1 subgoal):
 1. Ra__ \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
y \<sharp> P
y \<sharp> Q
y \<sharp> R
y \<sharp> P'

goal (1 subgoal):
 1. Ra__ \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
with \<open>y \<sharp> P'\<close> \<open>R \<longmapsto>a<\<nu>x> \<prec> P'\<close>
[PROOF STATE]
proof (chain)
picking this:
y \<sharp> P'
R \<longmapsto> a<\<nu>x> \<prec> P'
y \<sharp> P
y \<sharp> Q
y \<sharp> R
y \<sharp> P'
[PROOF STEP]
have "R \<longmapsto>a<\<nu>y> \<prec> ([(x, y)] \<bullet> P')"
[PROOF STATE]
proof (prove)
using this:
y \<sharp> P'
R \<longmapsto> a<\<nu>x> \<prec> P'
y \<sharp> P
y \<sharp> Q
y \<sharp> R
y \<sharp> P'

goal (1 subgoal):
 1. R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
by(simp add: alphaBoundResidual)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. Ra__ \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>?Rb2 \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2; ?Rb2 \<in> expandSet P Q; ?xb2 \<sharp> ?Rb2; ?xb2 \<sharp> P; ?xb2 \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2
R \<in> expandSet P Q
R \<longmapsto> a<\<nu>x> \<prec> P'
y \<sharp> P
y \<sharp> Q
y \<sharp> R
y \<sharp> P'
R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
have "P \<parallel> Q \<longmapsto>a<\<nu>y> \<prec> ([(x, y)] \<bullet> P')"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?Rb2 \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2; ?Rb2 \<in> expandSet P Q; ?xb2 \<sharp> ?Rb2; ?xb2 \<sharp> P; ?xb2 \<sharp> Q\<rbrakk> \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>?xb2> \<prec> ?P'b2
R \<in> expandSet P Q
R \<longmapsto> a<\<nu>x> \<prec> P'
y \<sharp> P
y \<sharp> Q
y \<sharp> R
y \<sharp> P'
R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. Ra__ \<longmapsto> a<\<nu>x> \<prec> P' \<Longrightarrow> P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
thus "P \<parallel> Q \<longmapsto>a<\<nu>x> \<prec> P'"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
using \<open>y \<sharp> P'\<close>
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
y \<sharp> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
by(simp add: alphaBoundResidual)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>(?R, expandSet ?P ?Q) \<in> sumComposeSet; hnf ?P; hnf ?Q; ?a \<noteq> ?x\<rbrakk> \<Longrightarrow> ?P \<parallel> ?Q \<longmapsto> ?a<\<nu>?x> \<prec> ?P' = ?R \<longmapsto> ?a<\<nu>?x> \<prec> ?P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
obtain y where yineqx: "a \<noteq> y" and yFreshP': "y \<sharp> P'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>y. \<lbrakk>a \<noteq> y; y \<sharp> P'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(force intro: name_exists_fresh[of "(a, P')"] simp add: fresh_prod)
[PROOF STATE]
proof (state)
this:
a \<noteq> y
y \<sharp> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
from Exp Phnf Qhnf yineqx
[PROOF STATE]
proof (chain)
picking this:
(R, expandSet P Q) \<in> sumComposeSet
hnf P
hnf Q
a \<noteq> y
[PROOF STEP]
have "(P \<parallel> Q \<longmapsto>a<\<nu>y> \<prec> [(x, y)] \<bullet> P') = (R \<longmapsto>a<\<nu>y> \<prec> [(x, y)] \<bullet> P')"
[PROOF STATE]
proof (prove)
using this:
(R, expandSet P Q) \<in> sumComposeSet
hnf P
hnf Q
a \<noteq> y

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P' = R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
by(rule Goal)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P' = R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P' = R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
with yFreshP'
[PROOF STATE]
proof (chain)
picking this:
y \<sharp> P'
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P' = R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
[PROOF STEP]
have "x \<sharp> [(x, y)] \<bullet> P'"
[PROOF STATE]
proof (prove)
using this:
y \<sharp> P'
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P' = R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. x \<sharp> [(x, y)] \<bullet> P'
[PROOF STEP]
by(simp add: name_fresh_left name_calc)
[PROOF STATE]
proof (state)
this:
x \<sharp> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P' = R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
x \<sharp> [(x, y)] \<bullet> P'
[PROOF STEP]
show "(P \<parallel> Q \<longmapsto>a<\<nu>x> \<prec> P') = (R \<longmapsto>a<\<nu>x> \<prec> P')"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> Q \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P' = R \<longmapsto> a<\<nu>y> \<prec> [(x, y)] \<bullet> P'
x \<sharp> [(x, y)] \<bullet> P'

goal (1 subgoal):
 1. P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'
[PROOF STEP]
by(simp add: alphaBoundResidual name_swap)
[PROOF STATE]
proof (state)
this:
P \<parallel> Q \<longmapsto> a<\<nu>x> \<prec> P' = R \<longmapsto> a<\<nu>x> \<prec> P'

goal:
No subgoals!
[PROOF STEP]
qed