[STATEMENT]
lemma bangPres:
  fixes P    :: pi
  and   Q    :: pi
  and   Rel  :: "(pi \<times> pi) set"

  assumes PRelQ:    "(P, Q) \<in> Rel"
  and     Sim:      "\<And>P Q. (P, Q) \<in> Rel \<Longrightarrow> P \<leadsto>[Rel] Q"
  and     eqvtRel:  "eqvt Rel"

  shows "!P \<leadsto>[bangRel Rel] !Q"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
let ?Sim = "\<lambda>P Rs. (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> P \<longrightarrow> (\<exists>P'. P \<longmapsto>a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and>
                     (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. P \<longmapsto>\<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
from eqvtRel
[PROOF STATE]
proof (chain)
picking this:
eqvt Rel
[PROOF STEP]
have EqvtBangRel: "eqvt(bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
eqvt Rel

goal (1 subgoal):
 1. eqvt (bangRel Rel)
[PROOF STEP]
by(rule eqvtBangRel)
[PROOF STATE]
proof (state)
this:
eqvt (bangRel Rel)

goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
eqvt (bangRel Rel)

goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
fix Pa Rs
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
assume "!Q \<longmapsto> Rs" and "(Pa, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (state)
this:
!Q \<longmapsto> Rs
(Pa, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
hence "?Sim Pa Rs"
[PROOF STATE]
proof (prove)
using this:
!Q \<longmapsto> Rs
(Pa, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
using PRelQ
[PROOF STATE]
proof (prove)
using this:
!Q \<longmapsto> Rs
(Pa, !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (1 subgoal):
 1. (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
proof(nominal_induct avoiding: Pa P rule: bangInduct)
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. \<And>a x P' Pa P. \<lbrakk>Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> !Q = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>\<alpha> P' Pa P. \<lbrakk>Q \<longmapsto> \<alpha> \<prec> P'; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' \<parallel> !Q = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 8. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 9. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
case(cPar1B a x Q' Pa P)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> Q'
x \<sharp> Q
x \<sharp> Pa
x \<sharp> P
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (9 subgoals):
 1. \<And>a x P' Pa P. \<lbrakk>Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> !Q = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>\<alpha> P' Pa P. \<lbrakk>Q \<longmapsto> \<alpha> \<prec> P'; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' \<parallel> !Q = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 8. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 9. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have QTrans: "Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> Q'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> Q'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> Q'

goal (9 subgoals):
 1. \<And>a x P' Pa P. \<lbrakk>Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> !Q = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>\<alpha> P' Pa P. \<lbrakk>Q \<longmapsto> \<alpha> \<prec> P'; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' \<parallel> !Q = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 8. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 9. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have "(Pa, Q \<parallel> !Q) \<in> bangRel Rel" and "x \<sharp> Pa"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (Pa, Q \<parallel> !Q) \<in> bangRel Rel &&& x \<sharp> Pa
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
x \<sharp> Pa

goal (9 subgoals):
 1. \<And>a x P' Pa P. \<lbrakk>Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> !Q = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>\<alpha> P' Pa P. \<lbrakk>Q \<longmapsto> \<alpha> \<prec> P'; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' \<parallel> !Q = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 8. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 9. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
thus "?Sim Pa (a\<guillemotleft>x\<guillemotright> \<prec> (Q' \<parallel> !Q))"
[PROOF STATE]
proof (prove)
using this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
x \<sharp> Pa

goal (1 subgoal):
 1. (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(induct rule: BRParCases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
case(BRPar P R)
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel
x \<sharp> P \<parallel> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have PRelQ: "(P, Q) \<in> Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (P, Q) \<in> Rel
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have PBRQ: "(R, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (R, !Q) \<in> bangRel Rel
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have "x \<sharp> P \<parallel> R"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<sharp> P \<parallel> R
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
x \<sharp> P \<parallel> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
hence xFreshP: "x \<sharp> P" and xFreshR: "x \<sharp> R"
[PROOF STATE]
proof (prove)
using this:
x \<sharp> P \<parallel> R

goal (1 subgoal):
 1. x \<sharp> P &&& x \<sharp> R
[PROOF STEP]
by simp+
[PROOF STATE]
proof (state)
this:
x \<sharp> P
x \<sharp> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(auto simp add: residual.inject alpha')
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q' \<parallel> !Q) a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
from PRelQ
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
[PROOF STEP]
have "P \<leadsto>[Rel] Q"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. P \<leadsto>[Rel] Q
[PROOF STEP]
by(rule Sim)
[PROOF STATE]
proof (state)
this:
P \<leadsto>[Rel] Q

goal (2 subgoals):
 1. \<lbrakk>x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q' \<parallel> !Q) a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
with QTrans xFreshP
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> Q'
x \<sharp> P
P \<leadsto>[Rel] Q
[PROOF STEP]
obtain P' where PTrans: "P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'" and P'RelQ': "derivative P' Q' a x Rel"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> Q'
x \<sharp> P
P \<leadsto>[Rel] Q

goal (1 subgoal):
 1. (\<And>P'. \<lbrakk>P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; derivative P' Q' a x Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(blast dest: simE)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'
derivative P' Q' a x Rel

goal (2 subgoals):
 1. \<lbrakk>x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q' \<parallel> !Q) a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
from PTrans xFreshR
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'
x \<sharp> R
[PROOF STEP]
have "P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> (P' \<parallel> R)"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'
x \<sharp> R

goal (1 subgoal):
 1. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> R
[PROOF STEP]
by(force intro: Late_Semantics.Par1B)
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> R

goal (2 subgoals):
 1. \<lbrakk>x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q' \<parallel> !Q) a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> R

goal (2 subgoals):
 1. \<lbrakk>x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q' \<parallel> !Q) a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
from P'RelQ' PBRQ \<open>x \<sharp> Q\<close> \<open>x \<sharp> R\<close>
[PROOF STATE]
proof (chain)
picking this:
derivative P' Q' a x Rel
(R, !Q) \<in> bangRel Rel
x \<sharp> Q
x \<sharp> R
[PROOF STEP]
have "derivative (P' \<parallel> R) (Q' \<parallel> !Q) a x (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
derivative P' Q' a x Rel
(R, !Q) \<in> bangRel Rel
x \<sharp> Q
x \<sharp> R

goal (1 subgoal):
 1. derivative (P' \<parallel> R) (Q' \<parallel> !Q) a x (bangRel Rel)
[PROOF STEP]
by(cases a) (auto simp add: derivative_def forget intro: Rel.BRPar)
[PROOF STATE]
proof (state)
this:
derivative (P' \<parallel> R) (Q' \<parallel> !Q) a x (bangRel Rel)

goal (2 subgoals):
 1. \<lbrakk>x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q' \<parallel> !Q) a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> R
derivative (P' \<parallel> R) (Q' \<parallel> !Q) a x (bangRel Rel)
[PROOF STEP]
show "\<exists>P'. P \<parallel> R \<longmapsto>a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q' \<parallel> !Q) a x (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<parallel> R
derivative (P' \<parallel> R) (Q' \<parallel> !Q) a x (bangRel Rel)

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q' \<parallel> !Q) a x (bangRel Rel)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q' \<parallel> !Q) a x (bangRel Rel)

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
fix y
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
assume "(y::name) \<sharp> Q'" and "y \<sharp> P" and "y \<sharp> R" and "y \<sharp> Q"
[PROOF STATE]
proof (state)
this:
y \<sharp> Q'
y \<sharp> P
y \<sharp> R
y \<sharp> Q

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
from QTrans \<open>y \<sharp> Q'\<close>
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> Q'
y \<sharp> Q'
[PROOF STEP]
have "Q \<longmapsto>a\<guillemotleft>y\<guillemotright> \<prec> ([(x, y)] \<bullet> Q')"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> Q'
y \<sharp> Q'

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

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q'

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
from PRelQ
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
[PROOF STEP]
have "P \<leadsto>[Rel] Q"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. P \<leadsto>[Rel] Q
[PROOF STEP]
by(rule Sim)
[PROOF STATE]
proof (state)
this:
P \<leadsto>[Rel] Q

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q'
P \<leadsto>[Rel] Q
[PROOF STEP]
obtain P' where PTrans: "P \<longmapsto>a\<guillemotleft>y\<guillemotright> \<prec> P'" and P'RelQ': "derivative P' ([(x, y)] \<bullet> Q') a y Rel"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q'
P \<leadsto>[Rel] Q

goal (1 subgoal):
 1. (\<And>P'. \<lbrakk>P \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P'; derivative P' ([(x, y)] \<bullet> Q') a y Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using \<open>y \<sharp> P\<close>
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q'
P \<leadsto>[Rel] Q
y \<sharp> P

goal (1 subgoal):
 1. (\<And>P'. \<lbrakk>P \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P'; derivative P' ([(x, y)] \<bullet> Q') a y Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(blast dest: simE)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P'
derivative P' ([(x, y)] \<bullet> Q') a y Rel

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
from PTrans \<open>y \<sharp> R\<close>
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P'
y \<sharp> R
[PROOF STEP]
have "P \<parallel> R \<longmapsto>a\<guillemotleft>y\<guillemotright> \<prec> (P' \<parallel> R)"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P'
y \<sharp> R

goal (1 subgoal):
 1. P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P' \<parallel> R
[PROOF STEP]
by(force intro: Late_Semantics.Par1B)
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P' \<parallel> R

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P' \<parallel> R

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
from P'RelQ' PBRQ \<open>y \<sharp> Q\<close> \<open>y \<sharp> R\<close>
[PROOF STATE]
proof (chain)
picking this:
derivative P' ([(x, y)] \<bullet> Q') a y Rel
(R, !Q) \<in> bangRel Rel
y \<sharp> Q
y \<sharp> R
[PROOF STEP]
have "derivative (P' \<parallel> R) (([(x, y)] \<bullet> Q') \<parallel> !Q) a y (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
derivative P' ([(x, y)] \<bullet> Q') a y Rel
(R, !Q) \<in> bangRel Rel
y \<sharp> Q
y \<sharp> R

goal (1 subgoal):
 1. derivative (P' \<parallel> R) (([(x, y)] \<bullet> Q') \<parallel> !Q) a y (bangRel Rel)
[PROOF STEP]
by(cases a) (auto simp add: derivative_def forget intro: Rel.BRPar)
[PROOF STATE]
proof (state)
this:
derivative (P' \<parallel> R) (([(x, y)] \<bullet> Q') \<parallel> !Q) a y (bangRel Rel)

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
with \<open>x \<sharp> Q\<close> \<open>y \<sharp> Q\<close>
[PROOF STATE]
proof (chain)
picking this:
x \<sharp> Q
y \<sharp> Q
derivative (P' \<parallel> R) (([(x, y)] \<bullet> Q') \<parallel> !Q) a y (bangRel Rel)
[PROOF STEP]
have "derivative (P' \<parallel> R) (([(y, x)] \<bullet> Q') \<parallel> !([(y, x)] \<bullet> Q)) a y (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
x \<sharp> Q
y \<sharp> Q
derivative (P' \<parallel> R) (([(x, y)] \<bullet> Q') \<parallel> !Q) a y (bangRel Rel)

goal (1 subgoal):
 1. derivative (P' \<parallel> R) (([(y, x)] \<bullet> Q') \<parallel> !([(y, x)] \<bullet> Q)) a y (bangRel Rel)
[PROOF STEP]
by(simp add: name_fresh_fresh name_swap)
[PROOF STATE]
proof (state)
this:
derivative (P' \<parallel> R) (([(y, x)] \<bullet> Q') \<parallel> !([(y, x)] \<bullet> Q)) a y (bangRel Rel)

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>x \<noteq> xa; xa \<sharp> Q'; xa \<sharp> Q; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (([(xa, x)] \<bullet> Q') \<parallel> !([(xa, x)] \<bullet> Q)) a xa (bangRel Rel)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P' \<parallel> R
derivative (P' \<parallel> R) (([(y, x)] \<bullet> Q') \<parallel> !([(y, x)] \<bullet> Q)) a y (bangRel Rel)
[PROOF STEP]
show "\<exists>P'. P \<parallel> R \<longmapsto>a\<guillemotleft>y\<guillemotright> \<prec> P' \<and> derivative P' (([(y, x)] \<bullet> Q') \<parallel> !([(y, x)] \<bullet> Q)) a y (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P' \<parallel> R
derivative (P' \<parallel> R) (([(y, x)] \<bullet> Q') \<parallel> !([(y, x)] \<bullet> Q)) a y (bangRel Rel)

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P' \<and> derivative P' (([(y, x)] \<bullet> Q') \<parallel> !([(y, x)] \<bullet> Q)) a y (bangRel Rel)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P' \<and> derivative P' (([(y, x)] \<bullet> Q') \<parallel> !([(y, x)] \<bullet> Q)) a y (bangRel Rel)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' \<parallel> !Q = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (8 subgoals):
 1. \<And>\<alpha> P' Pa P. \<lbrakk>Q \<longmapsto> \<alpha> \<prec> P'; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' \<parallel> !Q = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 8. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (8 subgoals):
 1. \<And>\<alpha> P' Pa P. \<lbrakk>Q \<longmapsto> \<alpha> \<prec> P'; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' \<parallel> !Q = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 8. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
case(cPar1F \<alpha> Q' Pa P)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> \<alpha> \<prec> Q'
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (8 subgoals):
 1. \<And>\<alpha> P' Pa P. \<lbrakk>Q \<longmapsto> \<alpha> \<prec> P'; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' \<parallel> !Q = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 8. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have QTrans: "Q \<longmapsto>\<alpha> \<prec> Q'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q \<longmapsto> \<alpha> \<prec> Q'
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> \<alpha> \<prec> Q'

goal (8 subgoals):
 1. \<And>\<alpha> P' Pa P. \<lbrakk>Q \<longmapsto> \<alpha> \<prec> P'; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' \<parallel> !Q = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 8. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have "(Pa, Q \<parallel> !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (Pa, Q \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel

goal (8 subgoals):
 1. \<And>\<alpha> P' Pa P. \<lbrakk>Q \<longmapsto> \<alpha> \<prec> P'; (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' \<parallel> !Q = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 8. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. (\<forall>a x Q'a. \<alpha> \<prec> Q' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' \<parallel> !Q = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(induct rule: BRParCases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' \<parallel> !Q = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
case(BRPar P R)
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' \<parallel> !Q = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have PRelQ: "(P, Q) \<in> Rel" and BR: "(R, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (P, Q) \<in> Rel &&& (R, !Q) \<in> bangRel Rel
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' \<parallel> !Q = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>a x Q'a. \<alpha> \<prec> Q' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' \<parallel> !Q = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(auto simp add: residual.inject)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q' \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
from PRelQ
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
[PROOF STEP]
have "P \<leadsto>[Rel] Q"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. P \<leadsto>[Rel] Q
[PROOF STEP]
by(rule Sim)
[PROOF STATE]
proof (state)
this:
P \<leadsto>[Rel] Q

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q' \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
with QTrans
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> \<alpha> \<prec> Q'
P \<leadsto>[Rel] Q
[PROOF STEP]
obtain P' where PTrans: "P \<longmapsto> \<alpha> \<prec> P'" and RRel: "(P', Q') \<in> Rel"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> \<alpha> \<prec> Q'
P \<leadsto>[Rel] Q

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

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q' \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
from PTrans
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> \<alpha> \<prec> P'
[PROOF STEP]
have "P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<parallel> R"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> \<alpha> \<prec> P'

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

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q' \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<parallel> R

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q' \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
from RRel BR
[PROOF STATE]
proof (chain)
picking this:
(P', Q') \<in> Rel
(R, !Q) \<in> bangRel Rel
[PROOF STEP]
have "(P' \<parallel> R, Q' \<parallel> !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(P', Q') \<in> Rel
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. (P' \<parallel> R, Q' \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
by(rule Rel.BRPar)
[PROOF STATE]
proof (state)
this:
(P' \<parallel> R, Q' \<parallel> !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q' \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<parallel> R
(P' \<parallel> R, Q' \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
show "\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q' \<parallel> !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<parallel> R
(P' \<parallel> R, Q' \<parallel> !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q' \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q' \<parallel> !Q) \<in> bangRel Rel

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a x Q'a. \<alpha> \<prec> Q' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' \<parallel> !Q = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a x Q'a. \<alpha> \<prec> Q' \<parallel> !Q = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' \<parallel> !Q = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (7 subgoals):
 1. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
case(cPar2B a x Q' Pa P)
[PROOF STATE]
proof (state)
this:
!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> Q'
x \<sharp> Q
x \<sharp> Pa
x \<sharp> P
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (7 subgoals):
 1. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
hence IH: "\<And>Pa. (Pa, !Q) \<in> bangRel Rel \<Longrightarrow> ?Sim Pa (a\<guillemotleft>x\<guillemotright> \<prec> Q')"
[PROOF STATE]
proof (prove)
using this:
!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> Q'
x \<sharp> Q
x \<sharp> Pa
x \<sharp> P
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (1 subgoal):
 1. \<And>Pa. (Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (7 subgoals):
 1. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have "(Pa, Q \<parallel> !Q) \<in> bangRel Rel" and "x \<sharp> Pa"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (Pa, Q \<parallel> !Q) \<in> bangRel Rel &&& x \<sharp> Pa
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
x \<sharp> Pa

goal (7 subgoals):
 1. \<And>a x P' Pa P. \<lbrakk>!Q \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P'; x \<sharp> Q; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> P' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 7. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
thus "?Sim Pa (a\<guillemotleft>x\<guillemotright> \<prec> (Q \<parallel> Q'))"
[PROOF STATE]
proof (prove)
using this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
x \<sharp> Pa

goal (1 subgoal):
 1. (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(induct rule: BRParCases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
case(BRPar P R)
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel
x \<sharp> P \<parallel> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have PRelQ: "(P, Q) \<in> Rel" and RBRQ: "(R, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (P, Q) \<in> Rel &&& (R, !Q) \<in> bangRel Rel
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have "x \<sharp> P \<parallel> R"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<sharp> P \<parallel> R
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
x \<sharp> P \<parallel> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
hence xFreshP: "x \<sharp> P" and xFreshR: "x \<sharp> R"
[PROOF STATE]
proof (prove)
using this:
x \<sharp> P \<parallel> R

goal (1 subgoal):
 1. x \<sharp> P &&& x \<sharp> R
[PROOF STEP]
by simp+
[PROOF STATE]
proof (state)
this:
x \<sharp> P
x \<sharp> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
from EqvtBangRel \<open>x \<sharp> Q\<close>
[PROOF STATE]
proof (chain)
picking this:
eqvt (bangRel Rel)
x \<sharp> Q
[PROOF STEP]
show "?Sim (P \<parallel> R) (a\<guillemotleft>x\<guillemotright> \<prec> (Q \<parallel> Q'))"
[PROOF STATE]
proof (prove)
using this:
eqvt (bangRel Rel)
x \<sharp> Q

goal (1 subgoal):
 1. (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(auto simp add: residual.inject alpha' name_fresh_fresh)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> Q') a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
from RBRQ
[PROOF STATE]
proof (chain)
picking this:
(R, !Q) \<in> bangRel Rel
[PROOF STEP]
have "?Sim R (a\<guillemotleft>x\<guillemotright> \<prec> Q')"
[PROOF STATE]
proof (prove)
using this:
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
by(rule IH)
[PROOF STATE]
proof (state)
this:
(\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (2 subgoals):
 1. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> Q') a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
with xFreshR
[PROOF STATE]
proof (chain)
picking this:
x \<sharp> R
(\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
obtain R' where RTrans: "R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> R'" and R'BRQ': "derivative R' Q' a x (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
x \<sharp> R
(\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (1 subgoal):
 1. (\<And>R'. \<lbrakk>R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> R'; derivative R' Q' a x (bangRel Rel)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto simp add: residual.inject)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> R'
derivative R' Q' a x (bangRel Rel)

goal (2 subgoals):
 1. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> Q') a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
from RTrans xFreshP
[PROOF STATE]
proof (chain)
picking this:
R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> R'
x \<sharp> P
[PROOF STEP]
have "P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> (P \<parallel> R')"
[PROOF STATE]
proof (prove)
using this:
R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> R'
x \<sharp> P

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

goal (2 subgoals):
 1. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> Q') a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P \<parallel> R'

goal (2 subgoals):
 1. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> Q') a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
from PRelQ R'BRQ' \<open>x \<sharp> Q\<close> \<open>x \<sharp> P\<close>
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
derivative R' Q' a x (bangRel Rel)
x \<sharp> Q
x \<sharp> P
[PROOF STEP]
have "derivative (P \<parallel> R') (Q \<parallel> Q') a x (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel
derivative R' Q' a x (bangRel Rel)
x \<sharp> Q
x \<sharp> P

goal (1 subgoal):
 1. derivative (P \<parallel> R') (Q \<parallel> Q') a x (bangRel Rel)
[PROOF STEP]
by(cases a) (auto simp add: derivative_def forget intro: Rel.BRPar)
[PROOF STATE]
proof (state)
this:
derivative (P \<parallel> R') (Q \<parallel> Q') a x (bangRel Rel)

goal (2 subgoals):
 1. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<sharp> P; x \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> Q') a x (bangRel Rel)
 2. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P \<parallel> R'
derivative (P \<parallel> R') (Q \<parallel> Q') a x (bangRel Rel)
[PROOF STEP]
show "\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> Q') a x (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P \<parallel> R'
derivative (P \<parallel> R') (Q \<parallel> Q') a x (bangRel Rel)

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> Q') a x (bangRel Rel)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> Q') a x (bangRel Rel)

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
fix y
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
assume "(y::name) \<sharp> Q" and "y \<sharp> Q'" and "y \<sharp> P" and "y \<sharp> R"
[PROOF STATE]
proof (state)
this:
y \<sharp> Q
y \<sharp> Q'
y \<sharp> P
y \<sharp> R

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
from RBRQ
[PROOF STATE]
proof (chain)
picking this:
(R, !Q) \<in> bangRel Rel
[PROOF STEP]
have "?Sim R (a\<guillemotleft>x\<guillemotright> \<prec> Q')"
[PROOF STATE]
proof (prove)
using this:
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. (\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
by(rule IH)
[PROOF STATE]
proof (state)
this:
(\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
with \<open>y \<sharp> Q'\<close>
[PROOF STATE]
proof (chain)
picking this:
y \<sharp> Q'
(\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have "?Sim R (a\<guillemotleft>y\<guillemotright> \<prec> ([(x, y)] \<bullet> Q'))"
[PROOF STATE]
proof (prove)
using this:
y \<sharp> Q'
(\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (1 subgoal):
 1. (\<forall>aa xa Q'a. a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
by(simp add: alphaBoundResidual)
[PROOF STATE]
proof (state)
this:
(\<forall>aa xa Q'a. a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
with \<open>y \<sharp> R\<close>
[PROOF STATE]
proof (chain)
picking this:
y \<sharp> R
(\<forall>aa xa Q'a. a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
obtain R' where RTrans: "R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> R'" and R'BRQ': "derivative R' ([(x, y)] \<bullet> Q') a y (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
y \<sharp> R
(\<forall>aa xa Q'a. a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> R \<longrightarrow> (\<exists>P'. R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>y\<guillemotright> \<prec> [(x, y)] \<bullet> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (1 subgoal):
 1. (\<And>R'. \<lbrakk>R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> R'; derivative R' ([(x, y)] \<bullet> Q') a y (bangRel Rel)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto simp add: residual.inject)
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> R'
derivative R' ([(x, y)] \<bullet> Q') a y (bangRel Rel)

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
from RTrans \<open>y \<sharp> P\<close>
[PROOF STATE]
proof (chain)
picking this:
R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> R'
y \<sharp> P
[PROOF STEP]
have "P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> (P \<parallel> R')"
[PROOF STATE]
proof (prove)
using this:
R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> R'
y \<sharp> P

goal (1 subgoal):
 1. P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P \<parallel> R'
[PROOF STEP]
by(auto intro: Par2B)
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P \<parallel> R'

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P \<parallel> R'

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
from PRelQ R'BRQ' \<open>y \<sharp> P\<close> \<open>y \<sharp> Q\<close>
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
derivative R' ([(x, y)] \<bullet> Q') a y (bangRel Rel)
y \<sharp> P
y \<sharp> Q
[PROOF STEP]
have "derivative (P \<parallel> R') (Q \<parallel> ([(x, y)] \<bullet> Q')) a y (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel
derivative R' ([(x, y)] \<bullet> Q') a y (bangRel Rel)
y \<sharp> P
y \<sharp> Q

goal (1 subgoal):
 1. derivative (P \<parallel> R') (Q \<parallel> ([(x, y)] \<bullet> Q')) a y (bangRel Rel)
[PROOF STEP]
by(cases a) (auto simp add: derivative_def forget intro: Rel.BRPar)
[PROOF STATE]
proof (state)
this:
derivative (P \<parallel> R') (Q \<parallel> ([(x, y)] \<bullet> Q')) a y (bangRel Rel)

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
hence "derivative (P \<parallel> R') (Q \<parallel> ([(y, x)] \<bullet> Q')) a y (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
derivative (P \<parallel> R') (Q \<parallel> ([(x, y)] \<bullet> Q')) a y (bangRel Rel)

goal (1 subgoal):
 1. derivative (P \<parallel> R') (Q \<parallel> ([(y, x)] \<bullet> Q')) a y (bangRel Rel)
[PROOF STEP]
by(simp add: name_swap)
[PROOF STATE]
proof (state)
this:
derivative (P \<parallel> R') (Q \<parallel> ([(y, x)] \<bullet> Q')) a y (bangRel Rel)

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>eqvt (bangRel Rel); x \<sharp> Q; x \<noteq> xa; xa \<sharp> Q; xa \<sharp> Q'; xa \<sharp> P; xa \<sharp> R\<rbrakk> \<Longrightarrow> \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(xa, x)] \<bullet> Q')) a xa (bangRel Rel)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P \<parallel> R'
derivative (P \<parallel> R') (Q \<parallel> ([(y, x)] \<bullet> Q')) a y (bangRel Rel)
[PROOF STEP]
show "\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(y, x)] \<bullet> Q')) a y (bangRel Rel)"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P \<parallel> R'
derivative (P \<parallel> R') (Q \<parallel> ([(y, x)] \<bullet> Q')) a y (bangRel Rel)

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(y, x)] \<bullet> Q')) a y (bangRel Rel)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>y\<guillemotright> \<prec> P' \<and> derivative P' (Q \<parallel> ([(y, x)] \<bullet> Q')) a y (bangRel Rel)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>aa xa Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. a\<guillemotleft>x\<guillemotright> \<prec> Q \<parallel> Q' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (6 subgoals):
 1. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
case(cPar2F \<alpha> Q' Pa P)
[PROOF STATE]
proof (state)
this:
!Q \<longmapsto> \<alpha> \<prec> Q'
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (6 subgoals):
 1. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
hence IH: "\<And>Pa. (Pa, !Q) \<in> bangRel Rel \<Longrightarrow> ?Sim Pa (\<alpha> \<prec> Q')"
[PROOF STATE]
proof (prove)
using this:
!Q \<longmapsto> \<alpha> \<prec> Q'
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (1 subgoal):
 1. \<And>Pa. (Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (6 subgoals):
 1. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have "(Pa, Q \<parallel> !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (Pa, Q \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel

goal (6 subgoals):
 1. \<And>\<alpha> P' Pa P. \<lbrakk>!Q \<longmapsto> \<alpha> \<prec> P'; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. \<alpha> \<prec> Q \<parallel> P' = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'. \<alpha> \<prec> Q \<parallel> P' = \<alpha>' \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 6. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. (\<forall>a x Q'a. \<alpha> \<prec> Q \<parallel> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q \<parallel> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(induct rule: BRParCases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q \<parallel> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q \<parallel> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
case(BRPar P R)
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q \<parallel> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q \<parallel> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have PRelQ: "(P, Q) \<in> Rel" and RBRQ: "(R, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (P, Q) \<in> Rel &&& (R, !Q) \<in> bangRel Rel
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q \<parallel> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q \<parallel> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>a x Q'a. \<alpha> \<prec> Q \<parallel> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q \<parallel> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(auto simp add: residual.inject)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q \<parallel> Q') \<in> bangRel Rel
[PROOF STEP]
from RBRQ IH
[PROOF STATE]
proof (chain)
picking this:
(R, !Q) \<in> bangRel Rel
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have "\<exists>R'. R \<longmapsto> \<alpha> \<prec> R' \<and> (R', Q') \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(R, !Q) \<in> bangRel Rel
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>a x Q'a. \<alpha> \<prec> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (1 subgoal):
 1. \<exists>R'. R \<longmapsto> \<alpha> \<prec> R' \<and> (R', Q') \<in> bangRel Rel
[PROOF STEP]
by(metis simE)
[PROOF STATE]
proof (state)
this:
\<exists>R'. R \<longmapsto> \<alpha> \<prec> R' \<and> (R', Q') \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q \<parallel> Q') \<in> bangRel Rel
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>R'. R \<longmapsto> \<alpha> \<prec> R' \<and> (R', Q') \<in> bangRel Rel
[PROOF STEP]
obtain R' where RTrans: "R \<longmapsto> \<alpha> \<prec> R'" and R'RelQ': "(R', Q') \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
\<exists>R'. R \<longmapsto> \<alpha> \<prec> R' \<and> (R', Q') \<in> bangRel Rel

goal (1 subgoal):
 1. (\<And>R'. \<lbrakk>R \<longmapsto> \<alpha> \<prec> R'; (R', Q') \<in> bangRel Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
R \<longmapsto> \<alpha> \<prec> R'
(R', Q') \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q \<parallel> Q') \<in> bangRel Rel
[PROOF STEP]
from RTrans
[PROOF STATE]
proof (chain)
picking this:
R \<longmapsto> \<alpha> \<prec> R'
[PROOF STEP]
have "P \<parallel> R \<longmapsto> \<alpha> \<prec> P \<parallel> R'"
[PROOF STATE]
proof (prove)
using this:
R \<longmapsto> \<alpha> \<prec> R'

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

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q \<parallel> Q') \<in> bangRel Rel
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> \<alpha> \<prec> P \<parallel> R'

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q \<parallel> Q') \<in> bangRel Rel
[PROOF STEP]
from PRelQ R'RelQ'
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
(R', Q') \<in> bangRel Rel
[PROOF STEP]
have "(P \<parallel> R', Q \<parallel> Q') \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel
(R', Q') \<in> bangRel Rel

goal (1 subgoal):
 1. (P \<parallel> R', Q \<parallel> Q') \<in> bangRel Rel
[PROOF STEP]
by(rule Rel.BRPar)
[PROOF STATE]
proof (state)
this:
(P \<parallel> R', Q \<parallel> Q') \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q \<parallel> Q') \<in> bangRel Rel
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> R \<longmapsto> \<alpha> \<prec> P \<parallel> R'
(P \<parallel> R', Q \<parallel> Q') \<in> bangRel Rel
[PROOF STEP]
show " \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q \<parallel> Q') \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> R \<longmapsto> \<alpha> \<prec> P \<parallel> R'
(P \<parallel> R', Q \<parallel> Q') \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q \<parallel> Q') \<in> bangRel Rel
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q \<parallel> Q') \<in> bangRel Rel

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a x Q'a. \<alpha> \<prec> Q \<parallel> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q \<parallel> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a x Q'a. \<alpha> \<prec> Q \<parallel> Q' = a\<guillemotleft>x\<guillemotright> \<prec> Q'a \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q'a a x (bangRel Rel))) \<and> (\<forall>\<alpha>' Q'a. \<alpha> \<prec> Q \<parallel> Q' = \<alpha>' \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha>' \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (5 subgoals):
 1. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
case(cComm1 a x Q' b Q'' Pa P)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<x> \<prec> Q'
!Q \<longmapsto> a[b] \<prec> Q''
x \<sharp> Pa
x \<sharp> P
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (5 subgoals):
 1. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
hence IH: "\<And>Pa. (Pa, !Q) \<in> bangRel Rel \<Longrightarrow> ?Sim Pa (a[b] \<prec> Q'')"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a<x> \<prec> Q'
!Q \<longmapsto> a[b] \<prec> Q''
x \<sharp> Pa
x \<sharp> P
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (1 subgoal):
 1. \<And>Pa. (Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal (5 subgoals):
 1. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[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 (5 subgoals):
 1. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have "(Pa, Q \<parallel> !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (Pa, Q \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel

goal (5 subgoals):
 1. \<And>a x P' b P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a[b] \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>ba bb. \<lbrakk>(ba, !Q) \<in> bangRel Rel; (bb, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ba \<longrightarrow> (\<exists>P'. ba \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ba \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P'[x::=b] \<parallel> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 5. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. (\<forall>a xa Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
using \<open>x \<sharp> Pa\<close>
[PROOF STATE]
proof (prove)
using this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
x \<sharp> Pa

goal (1 subgoal):
 1. (\<forall>a xa Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(induct rule: BRParCases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
case(BRPar P R)
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel
x \<sharp> P \<parallel> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have PRelQ: "(P, Q) \<in> Rel" and RBRQ: "(R, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (P, Q) \<in> Rel &&& (R, !Q) \<in> bangRel Rel
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
from \<open>x \<sharp> P \<parallel> R\<close>
[PROOF STATE]
proof (chain)
picking this:
x \<sharp> P \<parallel> R
[PROOF STEP]
have "x \<sharp> P" and "x \<sharp> R"
[PROOF STATE]
proof (prove)
using this:
x \<sharp> P \<parallel> R

goal (1 subgoal):
 1. x \<sharp> P &&& x \<sharp> R
[PROOF STEP]
by simp+
[PROOF STATE]
proof (state)
this:
x \<sharp> P
x \<sharp> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>a xa Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(auto simp add: residual.inject)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel
[PROOF STEP]
from PRelQ
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
[PROOF STEP]
have "P \<leadsto>[Rel] Q"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. P \<leadsto>[Rel] Q
[PROOF STEP]
by(rule Sim)
[PROOF STATE]
proof (state)
this:
P \<leadsto>[Rel] Q

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel
[PROOF STEP]
with QTrans \<open>x \<sharp> P\<close>
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> a<x> \<prec> Q'
x \<sharp> P
P \<leadsto>[Rel] Q
[PROOF STEP]
obtain P' where PTrans: "P \<longmapsto> a<x> \<prec> P'" and P'RelQ': "(P'[x::=b], Q'[x::=b]) \<in> Rel"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a<x> \<prec> Q'
x \<sharp> P
P \<leadsto>[Rel] Q

goal (1 subgoal):
 1. (\<And>P'. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; (P'[x::=b], Q'[x::=b]) \<in> Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(drule_tac simE) (auto simp add: derivative_def)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<x> \<prec> P'
(P'[x::=b], Q'[x::=b]) \<in> Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel
[PROOF STEP]
from IH RBRQ
[PROOF STATE]
proof (chain)
picking this:
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(R, !Q) \<in> bangRel Rel
[PROOF STEP]
have RTrans: "\<exists>R'. R \<longmapsto> a[b] \<prec> R' \<and> (R', Q'') \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa x Q'. a[b] \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a[b] \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>R'. R \<longmapsto> a[b] \<prec> R' \<and> (R', Q'') \<in> bangRel Rel
[PROOF STEP]
by(auto simp add: derivative_def)
[PROOF STATE]
proof (state)
this:
\<exists>R'. R \<longmapsto> a[b] \<prec> R' \<and> (R', Q'') \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>R'. R \<longmapsto> a[b] \<prec> R' \<and> (R', Q'') \<in> bangRel Rel
[PROOF STEP]
obtain R' where RTrans: "R \<longmapsto> a[b] \<prec> R'" and R'RelQ'': "(R', Q'') \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
\<exists>R'. R \<longmapsto> a[b] \<prec> R' \<and> (R', Q'') \<in> bangRel Rel

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

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel
[PROOF STEP]
from PTrans RTrans
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> a<x> \<prec> P'
R \<longmapsto> a[b] \<prec> R'
[PROOF STEP]
have "P \<parallel> R \<longmapsto>\<tau> \<prec> P'[x::=b] \<parallel> R'"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a<x> \<prec> P'
R \<longmapsto> a[b] \<prec> R'

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

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> R'

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel
[PROOF STEP]
from P'RelQ' R'RelQ''
[PROOF STATE]
proof (chain)
picking this:
(P'[x::=b], Q'[x::=b]) \<in> Rel
(R', Q'') \<in> bangRel Rel
[PROOF STEP]
have "(P'[x::=b] \<parallel> R', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(P'[x::=b], Q'[x::=b]) \<in> Rel
(R', Q'') \<in> bangRel Rel

goal (1 subgoal):
 1. (P'[x::=b] \<parallel> R', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel
[PROOF STEP]
by(rule Rel.BRPar)
[PROOF STATE]
proof (state)
this:
(P'[x::=b] \<parallel> R', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> R'
(P'[x::=b] \<parallel> R', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel
[PROOF STEP]
show "\<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> R \<longmapsto> \<tau> \<prec> P'[x::=b] \<parallel> R'
(P'[x::=b] \<parallel> R', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q'[x::=b] \<parallel> Q'') \<in> bangRel Rel

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a xa Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a xa Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q'[x::=b] \<parallel> Q'' = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (4 subgoals):
 1. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
case(cComm2 a b Q' x Q'' Pa P)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a[b] \<prec> Q'
!Q \<longmapsto> a<x> \<prec> Q''
x \<sharp> Pa
x \<sharp> P
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> Q'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (4 subgoals):
 1. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
hence IH: "\<And>Pa. (Pa, !Q) \<in> bangRel Rel \<Longrightarrow> ?Sim Pa (a<x> \<prec> Q'')"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a[b] \<prec> Q'
!Q \<longmapsto> a<x> \<prec> Q''
x \<sharp> Pa
x \<sharp> P
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> Q'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (1 subgoal):
 1. \<And>Pa. (Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> Q'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> Q'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal (4 subgoals):
 1. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have QTrans: "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 (4 subgoals):
 1. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have "(Pa, Q \<parallel> !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (Pa, Q \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel

goal (4 subgoals):
 1. \<And>a b P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a[b] \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; x \<sharp> Pa; x \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> P' \<parallel> P''[x::=b] = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 4. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. (\<forall>a xa Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
using \<open>x \<sharp> Pa\<close>
[PROOF STATE]
proof (prove)
using this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
x \<sharp> Pa

goal (1 subgoal):
 1. (\<forall>a xa Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(induct rule: BRParCases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
case(BRPar P R)
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel
x \<sharp> P \<parallel> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have PRelQ: "(P, Q) \<in> Rel" and RBRQ: "(R, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (P, Q) \<in> Rel &&& (R, !Q) \<in> bangRel Rel
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
from \<open>x \<sharp> P \<parallel> R\<close>
[PROOF STATE]
proof (chain)
picking this:
x \<sharp> P \<parallel> R
[PROOF STEP]
have "x \<sharp> P" and "x \<sharp> R"
[PROOF STATE]
proof (prove)
using this:
x \<sharp> P \<parallel> R

goal (1 subgoal):
 1. x \<sharp> P &&& x \<sharp> R
[PROOF STEP]
by simp+
[PROOF STATE]
proof (state)
this:
x \<sharp> P
x \<sharp> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>a xa Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(auto simp add: residual.inject)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
from PRelQ
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
[PROOF STEP]
have "P \<leadsto>[Rel] Q"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. P \<leadsto>[Rel] Q
[PROOF STEP]
by(rule Sim)
[PROOF STATE]
proof (state)
this:
P \<leadsto>[Rel] Q

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
with QTrans
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> a[b] \<prec> Q'
P \<leadsto>[Rel] Q
[PROOF STEP]
obtain P' where PTrans: "P \<longmapsto> a[b] \<prec> P'" and P'RelQ': "(P', Q') \<in> Rel"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a[b] \<prec> Q'
P \<leadsto>[Rel] Q

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

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
from IH RBRQ \<open>x \<sharp> R\<close>
[PROOF STATE]
proof (chain)
picking this:
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> Q'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(R, !Q) \<in> bangRel Rel
x \<sharp> R
[PROOF STEP]
have RTrans: "\<exists>R'. R \<longmapsto> a<x> \<prec> R' \<and> (R'[x::=b], Q''[x::=b]) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> Q'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(R, !Q) \<in> bangRel Rel
x \<sharp> R

goal (1 subgoal):
 1. \<exists>R'. R \<longmapsto> a<x> \<prec> R' \<and> (R'[x::=b], Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
by(fastforce simp add: derivative_def residual.inject)
[PROOF STATE]
proof (state)
this:
\<exists>R'. R \<longmapsto> a<x> \<prec> R' \<and> (R'[x::=b], Q''[x::=b]) \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>R'. R \<longmapsto> a<x> \<prec> R' \<and> (R'[x::=b], Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
obtain R' where RTrans: "R \<longmapsto> a<x> \<prec> R'" and R'RelQ'': "(R'[x::=b], Q''[x::=b]) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
\<exists>R'. R \<longmapsto> a<x> \<prec> R' \<and> (R'[x::=b], Q''[x::=b]) \<in> bangRel Rel

goal (1 subgoal):
 1. (\<And>R'. \<lbrakk>R \<longmapsto> a<x> \<prec> R'; (R'[x::=b], Q''[x::=b]) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<x> \<prec> R'
(R'[x::=b], Q''[x::=b]) \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
from PTrans RTrans
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> a[b] \<prec> P'
R \<longmapsto> a<x> \<prec> R'
[PROOF STEP]
have "P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<parallel> R'[x::=b]"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a[b] \<prec> P'
R \<longmapsto> a<x> \<prec> R'

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

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<parallel> R'[x::=b]

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
from P'RelQ' R'RelQ''
[PROOF STATE]
proof (chain)
picking this:
(P', Q') \<in> Rel
(R'[x::=b], Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
have "(P' \<parallel> R'[x::=b], Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(P', Q') \<in> Rel
(R'[x::=b], Q''[x::=b]) \<in> bangRel Rel

goal (1 subgoal):
 1. (P' \<parallel> R'[x::=b], Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
by(rule Rel.BRPar)
[PROOF STATE]
proof (state)
this:
(P' \<parallel> R'[x::=b], Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<parallel> R'[x::=b]
(P' \<parallel> R'[x::=b], Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
show "\<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q' \<parallel> (Q''[x::=b])) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<parallel> R'[x::=b]
(P' \<parallel> R'[x::=b], Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', Q' \<parallel> Q''[x::=b]) \<in> bangRel Rel

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a xa Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a xa Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> Q' \<parallel> Q''[x::=b] = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (3 subgoals):
 1. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
case(cClose1 a x Q' y Q'' Pa P)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<x> \<prec> Q'
!Q \<longmapsto> a<\<nu>y> \<prec> Q''
y \<sharp> Q
x \<sharp> Pa
x \<sharp> P
y \<sharp> Pa
y \<sharp> P
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (3 subgoals):
 1. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
hence IH: "\<And>Pa. (Pa, !Q) \<in> bangRel Rel \<longrightarrow> ?Sim Pa (a<\<nu>y> \<prec> Q'')"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a<x> \<prec> Q'
!Q \<longmapsto> a<\<nu>y> \<prec> Q''
y \<sharp> Q
x \<sharp> Pa
x \<sharp> P
y \<sharp> Pa
y \<sharp> P
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (1 subgoal):
 1. \<And>Pa. (Pa, !Q) \<in> bangRel Rel \<longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(?Pa, !Q) \<in> bangRel Rel \<longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal (3 subgoals):
 1. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[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 (3 subgoals):
 1. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have "(Pa, Q \<parallel> !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (Pa, Q \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel

goal (3 subgoals):
 1. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel

goal (3 subgoals):
 1. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have xFreshPa: "x \<sharp> Pa"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<sharp> Pa
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
x \<sharp> Pa

goal (3 subgoals):
 1. \<And>a x P' y P'' Pa P. \<lbrakk>Q \<longmapsto> a<x> \<prec> P'; !Q \<longmapsto> a<\<nu>y> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> P'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> P'') = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 3. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
x \<sharp> Pa
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
x \<sharp> Pa

goal (1 subgoal):
 1. (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
using \<open>y \<sharp> Pa\<close>
[PROOF STATE]
proof (prove)
using this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
x \<sharp> Pa
y \<sharp> Pa

goal (1 subgoal):
 1. (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(induct rule: BRParCases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R; y \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
case(BRPar P R)
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel
x \<sharp> P \<parallel> R
y \<sharp> P \<parallel> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R; y \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have PRelQ: "(P, Q) \<in> Rel" and RBRQ: "(R, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (P, Q) \<in> Rel &&& (R, !Q) \<in> bangRel Rel
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R; y \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have "x \<sharp> P \<parallel> R" and "y \<sharp> P \<parallel> R"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<sharp> P \<parallel> R &&& y \<sharp> P \<parallel> R
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
x \<sharp> P \<parallel> R
y \<sharp> P \<parallel> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R; y \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
hence xFreshP: "x \<sharp> P" and xFreshR: "x \<sharp> R" and "y \<sharp> R" and "y \<sharp> P"
[PROOF STATE]
proof (prove)
using this:
x \<sharp> P \<parallel> R
y \<sharp> P \<parallel> R

goal (1 subgoal):
 1. (x \<sharp> P &&& x \<sharp> R) &&& y \<sharp> R &&& y \<sharp> P
[PROOF STEP]
by simp+
[PROOF STATE]
proof (state)
this:
x \<sharp> P
x \<sharp> R
y \<sharp> R
y \<sharp> P

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R; y \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(auto simp add: residual.inject)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>y>(Q'[x::=y] \<parallel> Q'')) \<in> bangRel Rel
[PROOF STEP]
from PRelQ
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
[PROOF STEP]
have "P \<leadsto>[Rel] Q"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. P \<leadsto>[Rel] Q
[PROOF STEP]
by(rule Sim)
[PROOF STATE]
proof (state)
this:
P \<leadsto>[Rel] Q

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>y>(Q'[x::=y] \<parallel> Q'')) \<in> bangRel Rel
[PROOF STEP]
with QTrans xFreshP
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> a<x> \<prec> Q'
x \<sharp> P
P \<leadsto>[Rel] Q
[PROOF STEP]
obtain P' where PTrans: "P \<longmapsto>a<x> \<prec> P'" and P'RelQ': "(P'[x::=y], Q'[x::=y]) \<in> Rel"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a<x> \<prec> Q'
x \<sharp> P
P \<leadsto>[Rel] Q

goal (1 subgoal):
 1. (\<And>P'. \<lbrakk>P \<longmapsto> a<x> \<prec> P'; (P'[x::=y], Q'[x::=y]) \<in> Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce dest: simE simp add: derivative_def)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<x> \<prec> P'
(P'[x::=y], Q'[x::=y]) \<in> Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>y>(Q'[x::=y] \<parallel> Q'')) \<in> bangRel Rel
[PROOF STEP]
from RBRQ \<open>y \<sharp> R\<close> IH
[PROOF STATE]
proof (chain)
picking this:
(R, !Q) \<in> bangRel Rel
y \<sharp> R
(?Pa, !Q) \<in> bangRel Rel \<longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have "\<exists>R'. R \<longmapsto>a<\<nu>y> \<prec> R' \<and> (R', Q'') \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(R, !Q) \<in> bangRel Rel
y \<sharp> R
(?Pa, !Q) \<in> bangRel Rel \<longrightarrow> (\<forall>aa x Q'. a<\<nu>y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<\<nu>y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal (1 subgoal):
 1. \<exists>R'. R \<longmapsto> a<\<nu>y> \<prec> R' \<and> (R', Q'') \<in> bangRel Rel
[PROOF STEP]
by(auto simp add: residual.inject derivative_def)
[PROOF STATE]
proof (state)
this:
\<exists>R'. R \<longmapsto> a<\<nu>y> \<prec> R' \<and> (R', Q'') \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>y>(Q'[x::=y] \<parallel> Q'')) \<in> bangRel Rel
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>R'. R \<longmapsto> a<\<nu>y> \<prec> R' \<and> (R', Q'') \<in> bangRel Rel
[PROOF STEP]
obtain R' where RTrans: "R \<longmapsto>a<\<nu>y> \<prec> R'" and R'RelQ'': "(R', Q'') \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
\<exists>R'. R \<longmapsto> a<\<nu>y> \<prec> R' \<and> (R', Q'') \<in> bangRel Rel

goal (1 subgoal):
 1. (\<And>R'. \<lbrakk>R \<longmapsto> a<\<nu>y> \<prec> R'; (R', Q'') \<in> bangRel Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<\<nu>y> \<prec> R'
(R', Q'') \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>y>(Q'[x::=y] \<parallel> Q'')) \<in> bangRel Rel
[PROOF STEP]
from PTrans RTrans \<open>y \<sharp> P\<close>
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> a<x> \<prec> P'
R \<longmapsto> a<\<nu>y> \<prec> R'
y \<sharp> P
[PROOF STEP]
have "P \<parallel> R \<longmapsto>\<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> R')"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a<x> \<prec> P'
R \<longmapsto> a<\<nu>y> \<prec> R'
y \<sharp> P

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

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>y>(Q'[x::=y] \<parallel> Q'')) \<in> bangRel Rel
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> \<tau> \<prec> <\<nu>y>(P'[x::=y] \<parallel> R')

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>y>(Q'[x::=y] \<parallel> Q'')) \<in> bangRel Rel
[PROOF STEP]
from P'RelQ' R'RelQ''
[PROOF STATE]
proof (chain)
picking this:
(P'[x::=y], Q'[x::=y]) \<in> Rel
(R', Q'') \<in> bangRel Rel
[PROOF STEP]
have "(<\<nu>y>(P'[x::=y] \<parallel> R'), <\<nu>y>(Q'[x::=y] \<parallel> Q'')) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(P'[x::=y], Q'[x::=y]) \<in> Rel
(R', Q'') \<in> bangRel Rel

goal (1 subgoal):
 1. (<\<nu>y>(P'[x::=y] \<parallel> R'), <\<nu>y>(Q'[x::=y] \<parallel> Q'')) \<in> bangRel Rel
[PROOF STEP]
by(force intro: Rel.BRPar BRRes)
[PROOF STATE]
proof (state)
this:
(<\<nu>y>(P'[x::=y] \<parallel> R'), <\<nu>y>(Q'[x::=y] \<parallel> Q'')) \<in> bangRel Rel

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

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

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a xa Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a xa Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>y>(Q'[x::=y] \<parallel> Q'') = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (2 subgoals):
 1. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
case(cClose2 a x Q' y Q'' Pa P)
[PROOF STATE]
proof (state)
this:
Q \<longmapsto> a<\<nu>x> \<prec> Q'
!Q \<longmapsto> a<y> \<prec> Q''
x \<sharp> Q
y \<sharp> Pa
y \<sharp> P
x \<sharp> Pa
x \<sharp> P
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (2 subgoals):
 1. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
hence IH: "\<And>Pa. (Pa, !Q) \<in> bangRel Rel \<Longrightarrow> ?Sim Pa (a<y> \<prec> Q'')"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a<\<nu>x> \<prec> Q'
!Q \<longmapsto> a<y> \<prec> Q''
x \<sharp> Q
y \<sharp> Pa
y \<sharp> P
x \<sharp> Pa
x \<sharp> P
\<lbrakk>(?b, !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa x Q'. a<y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (1 subgoal):
 1. \<And>Pa. (Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa x Q'. a<y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa x Q'. a<y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal (2 subgoals):
 1. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have QTrans: "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 (2 subgoals):
 1. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have "(Pa, Q \<parallel> !Q) \<in> bangRel Rel" and "x \<sharp> Pa" and "y \<sharp> Pa"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (Pa, Q \<parallel> !Q) \<in> bangRel Rel &&& x \<sharp> Pa &&& y \<sharp> Pa
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
x \<sharp> Pa
y \<sharp> Pa

goal (2 subgoals):
 1. \<And>a y P' x P'' Pa P. \<lbrakk>Q \<longmapsto> a<\<nu>y> \<prec> P'; !Q \<longmapsto> a<x> \<prec> P''; y \<sharp> Q; x \<sharp> Pa; x \<sharp> P; y \<sharp> Pa; y \<sharp> P; \<And>b ba. \<lbrakk>(b, !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>aa xa Q'. a<x> \<prec> P'' = aa\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> aa\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' aa xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<x> \<prec> P'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, Q \<parallel> !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q' \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q' a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. \<tau> \<prec> <\<nu>y>(P' \<parallel> P''[x::=y]) = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
 2. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
(Pa, Q \<parallel> !Q) \<in> bangRel Rel
x \<sharp> Pa
y \<sharp> Pa

goal (1 subgoal):
 1. (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(induct rule: BRParCases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R; y \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
case(BRPar P R)
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel
x \<sharp> P \<parallel> R
y \<sharp> P \<parallel> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R; y \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have PRelQ: "(P, Q) \<in> Rel" and RBRQ: "(R, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (P, Q) \<in> Rel &&& (R, !Q) \<in> bangRel Rel
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel
(R, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R; y \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
have "x \<sharp> P \<parallel> R" and "y \<sharp> P \<parallel> R"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<sharp> P \<parallel> R &&& y \<sharp> P \<parallel> R
[PROOF STEP]
by fact+
[PROOF STATE]
proof (state)
this:
x \<sharp> P \<parallel> R
y \<sharp> P \<parallel> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R; y \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
hence xFreshP: "x \<sharp> P" and xFreshR: "x \<sharp> R" and "y \<sharp> R"
[PROOF STATE]
proof (prove)
using this:
x \<sharp> P \<parallel> R
y \<sharp> P \<parallel> R

goal (1 subgoal):
 1. x \<sharp> P &&& x \<sharp> R &&& y \<sharp> R
[PROOF STEP]
by simp+
[PROOF STATE]
proof (state)
this:
x \<sharp> P
x \<sharp> R
y \<sharp> R

goal (1 subgoal):
 1. \<And>P R. \<lbrakk>(P, Q) \<in> Rel; (R, !Q) \<in> bangRel Rel; x \<sharp> P \<parallel> R; y \<sharp> P \<parallel> R\<rbrakk> \<Longrightarrow> (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>a xa Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))
[PROOF STEP]
proof(auto simp add: residual.inject)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>x>(Q' \<parallel> Q''[y::=x])) \<in> bangRel Rel
[PROOF STEP]
from PRelQ
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
[PROOF STEP]
have "P \<leadsto>[Rel] Q"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. P \<leadsto>[Rel] Q
[PROOF STEP]
by(rule Sim)
[PROOF STATE]
proof (state)
this:
P \<leadsto>[Rel] Q

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>x>(Q' \<parallel> Q''[y::=x])) \<in> bangRel Rel
[PROOF STEP]
with QTrans xFreshP
[PROOF STATE]
proof (chain)
picking this:
Q \<longmapsto> a<\<nu>x> \<prec> Q'
x \<sharp> P
P \<leadsto>[Rel] Q
[PROOF STEP]
obtain P' where PTrans: "P \<longmapsto>a<\<nu>x> \<prec> P'" and P'RelQ': "(P', Q') \<in> Rel"
[PROOF STATE]
proof (prove)
using this:
Q \<longmapsto> a<\<nu>x> \<prec> Q'
x \<sharp> P
P \<leadsto>[Rel] Q

goal (1 subgoal):
 1. (\<And>P'. \<lbrakk>P \<longmapsto> a<\<nu>x> \<prec> P'; (P', Q') \<in> Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce dest: simE simp add: derivative_def)
[PROOF STATE]
proof (state)
this:
P \<longmapsto> a<\<nu>x> \<prec> P'
(P', Q') \<in> Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>x>(Q' \<parallel> Q''[y::=x])) \<in> bangRel Rel
[PROOF STEP]
from RBRQ IH \<open>y \<sharp> R\<close>
[PROOF STATE]
proof (chain)
picking this:
(R, !Q) \<in> bangRel Rel
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa x Q'. a<y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
y \<sharp> R
[PROOF STEP]
have "\<exists>R'.  R \<longmapsto>a<y> \<prec> R' \<and> (R'[y::=x], Q''[y::=x]) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(R, !Q) \<in> bangRel Rel
(?Pa, !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>aa x Q'. a<y> \<prec> Q'' = aa\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> aa\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' aa x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. a<y> \<prec> Q'' = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
y \<sharp> R

goal (1 subgoal):
 1. \<exists>R'. R \<longmapsto> a<y> \<prec> R' \<and> (R'[y::=x], Q''[y::=x]) \<in> bangRel Rel
[PROOF STEP]
by(fastforce simp add: derivative_def residual.inject)
[PROOF STATE]
proof (state)
this:
\<exists>R'. R \<longmapsto> a<y> \<prec> R' \<and> (R'[y::=x], Q''[y::=x]) \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>x>(Q' \<parallel> Q''[y::=x])) \<in> bangRel Rel
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>R'. R \<longmapsto> a<y> \<prec> R' \<and> (R'[y::=x], Q''[y::=x]) \<in> bangRel Rel
[PROOF STEP]
obtain R' where RTrans: "R \<longmapsto>a<y> \<prec> R'" and R'RelQ'': "(R'[y::=x], Q''[y::=x]) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
\<exists>R'. R \<longmapsto> a<y> \<prec> R' \<and> (R'[y::=x], Q''[y::=x]) \<in> bangRel Rel

goal (1 subgoal):
 1. (\<And>R'. \<lbrakk>R \<longmapsto> a<y> \<prec> R'; (R'[y::=x], Q''[y::=x]) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
R \<longmapsto> a<y> \<prec> R'
(R'[y::=x], Q''[y::=x]) \<in> bangRel Rel

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>x>(Q' \<parallel> Q''[y::=x])) \<in> bangRel Rel
[PROOF STEP]
from PTrans RTrans xFreshR
[PROOF STATE]
proof (chain)
picking this:
P \<longmapsto> a<\<nu>x> \<prec> P'
R \<longmapsto> a<y> \<prec> R'
x \<sharp> R
[PROOF STEP]
have "P \<parallel> R \<longmapsto> \<tau> \<prec> <\<nu>x>(P' \<parallel> R'[y::=x])"
[PROOF STATE]
proof (prove)
using this:
P \<longmapsto> a<\<nu>x> \<prec> P'
R \<longmapsto> a<y> \<prec> R'
x \<sharp> R

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

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>x>(Q' \<parallel> Q''[y::=x])) \<in> bangRel Rel
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
P \<parallel> R \<longmapsto> \<tau> \<prec> <\<nu>x>(P' \<parallel> R'[y::=x])

goal (1 subgoal):
 1. \<exists>P'. P \<parallel> R \<longmapsto> \<tau> \<prec> P' \<and> (P', <\<nu>x>(Q' \<parallel> Q''[y::=x])) \<in> bangRel Rel
[PROOF STEP]
from P'RelQ' R'RelQ''
[PROOF STATE]
proof (chain)
picking this:
(P', Q') \<in> Rel
(R'[y::=x], Q''[y::=x]) \<in> bangRel Rel
[PROOF STEP]
have "(<\<nu>x>(P' \<parallel> R'[y::=x]), <\<nu>x>(Q' \<parallel> Q''[y::=x])) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(P', Q') \<in> Rel
(R'[y::=x], Q''[y::=x]) \<in> bangRel Rel

goal (1 subgoal):
 1. (<\<nu>x>(P' \<parallel> R'[y::=x]), <\<nu>x>(Q' \<parallel> Q''[y::=x])) \<in> bangRel Rel
[PROOF STEP]
by(force intro: Rel.BRPar BRRes)
[PROOF STATE]
proof (state)
this:
(<\<nu>x>(P' \<parallel> R'[y::=x]), <\<nu>x>(Q' \<parallel> Q''[y::=x])) \<in> bangRel Rel

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

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

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a xa Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> P \<parallel> R \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. P \<parallel> R \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a xa Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = a\<guillemotleft>xa\<guillemotright> \<prec> Q'a \<longrightarrow> xa \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>xa\<guillemotright> \<prec> P' \<and> derivative P' Q'a a xa (bangRel Rel))) \<and> (\<forall>\<alpha> Q'a. \<tau> \<prec> <\<nu>x>(Q' \<parallel> Q''[y::=x]) = \<alpha> \<prec> Q'a \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q'a) \<in> bangRel Rel))

goal (1 subgoal):
 1. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
case(cBang Rs Pa P)
[PROOF STATE]
proof (state)
this:
Q \<parallel> !Q \<longmapsto> Rs
\<lbrakk>(?b, Q \<parallel> !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(Pa, !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (1 subgoal):
 1. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
hence IH: "\<And>Pa. (Pa, Q \<parallel> !Q) \<in> bangRel Rel \<Longrightarrow> ?Sim Pa Rs"
[PROOF STATE]
proof (prove)
using this:
Q \<parallel> !Q \<longmapsto> Rs
\<lbrakk>(?b, Q \<parallel> !Q) \<in> bangRel Rel; (?ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?b \<longrightarrow> (\<exists>P'. ?b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(Pa, !Q) \<in> bangRel Rel
(P, Q) \<in> Rel

goal (1 subgoal):
 1. \<And>Pa. (Pa, Q \<parallel> !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(?Pa, Q \<parallel> !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal (1 subgoal):
 1. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have "(Pa, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (Pa, !Q) \<in> bangRel Rel
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
(Pa, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>Rs Pa P. \<lbrakk>Q \<parallel> !Q \<longmapsto> Rs; \<And>b ba. \<lbrakk>(b, Q \<parallel> !Q) \<in> bangRel Rel; (ba, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> b \<longrightarrow> (\<exists>P'. b \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. b \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel)); (Pa, !Q) \<in> bangRel Rel; (P, Q) \<in> Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
(Pa, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
proof(induct rule: BRBangCases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>P. (P, Q) \<in> Rel \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> !P \<longrightarrow> (\<exists>P'. !P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. !P \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
case(BRBang P)
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. \<And>P. (P, Q) \<in> Rel \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> !P \<longrightarrow> (\<exists>P'. !P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. !P \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
have PRelQ: "(P, Q) \<in> Rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (P, Q) \<in> Rel
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. \<And>P. (P, Q) \<in> Rel \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> !P \<longrightarrow> (\<exists>P'. !P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. !P \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
hence "(!P, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. (!P, !Q) \<in> bangRel Rel
[PROOF STEP]
by(rule Rel.BRBang)
[PROOF STATE]
proof (state)
this:
(!P, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P. (P, Q) \<in> Rel \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> !P \<longrightarrow> (\<exists>P'. !P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. !P \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
with PRelQ
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
(!P, !Q) \<in> bangRel Rel
[PROOF STEP]
have "(P \<parallel> !P, Q \<parallel> !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel
(!P, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. (P \<parallel> !P, Q \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
by(rule BRPar)
[PROOF STATE]
proof (state)
this:
(P \<parallel> !P, Q \<parallel> !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. \<And>P. (P, Q) \<in> Rel \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> !P \<longrightarrow> (\<exists>P'. !P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. !P \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
with IH
[PROOF STATE]
proof (chain)
picking this:
(?Pa, Q \<parallel> !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(P \<parallel> !P, Q \<parallel> !Q) \<in> bangRel Rel
[PROOF STEP]
have "?Sim (P \<parallel> !P) Rs"
[PROOF STATE]
proof (prove)
using this:
(?Pa, Q \<parallel> !Q) \<in> bangRel Rel \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(P \<parallel> !P, Q \<parallel> !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> P \<parallel> !P \<longrightarrow> (\<exists>P'. P \<parallel> !P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. P \<parallel> !P \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> P \<parallel> !P \<longrightarrow> (\<exists>P'. P \<parallel> !P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. P \<parallel> !P \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal (1 subgoal):
 1. \<And>P. (P, Q) \<in> Rel \<Longrightarrow> (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> !P \<longrightarrow> (\<exists>P'. !P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. !P \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
(\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> P \<parallel> !P \<longrightarrow> (\<exists>P'. P \<parallel> !P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. P \<parallel> !P \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal (1 subgoal):
 1. (\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> !P \<longrightarrow> (\<exists>P'. !P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. !P \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
[PROOF STEP]
by(force intro: Bang)
[PROOF STATE]
proof (state)
this:
(\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> !P \<longrightarrow> (\<exists>P'. !P \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. !P \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<forall>a x Q'. Rs = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> Pa \<longrightarrow> (\<exists>P'. Pa \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. Rs = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. Pa \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<lbrakk>!Q \<longmapsto> ?Rs2; (?Pa2, !Q) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. ?Rs2 = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa2 \<longrightarrow> (\<exists>P'. ?Pa2 \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. ?Rs2 = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa2 \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<lbrakk>!Q \<longmapsto> ?Rs2; (?Pa2, !Q) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. ?Rs2 = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa2 \<longrightarrow> (\<exists>P'. ?Pa2 \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. ?Rs2 = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa2 \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))

goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
from PRelQ
[PROOF STATE]
proof (chain)
picking this:
(P, Q) \<in> Rel
[PROOF STEP]
have "(!P, !Q) \<in> bangRel Rel"
[PROOF STATE]
proof (prove)
using this:
(P, Q) \<in> Rel

goal (1 subgoal):
 1. (!P, !Q) \<in> bangRel Rel
[PROOF STEP]
by(rule BRBang)
[PROOF STATE]
proof (state)
this:
(!P, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>!Q \<longmapsto> ?Rs2; (?Pa2, !Q) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. ?Rs2 = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa2 \<longrightarrow> (\<exists>P'. ?Pa2 \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. ?Rs2 = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa2 \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(!P, !Q) \<in> bangRel Rel
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>!Q \<longmapsto> ?Rs2; (?Pa2, !Q) \<in> bangRel Rel\<rbrakk> \<Longrightarrow> (\<forall>a x Q'. ?Rs2 = a\<guillemotleft>x\<guillemotright> \<prec> Q' \<longrightarrow> x \<sharp> ?Pa2 \<longrightarrow> (\<exists>P'. ?Pa2 \<longmapsto> a\<guillemotleft>x\<guillemotright> \<prec> P' \<and> derivative P' Q' a x (bangRel Rel))) \<and> (\<forall>\<alpha> Q'. ?Rs2 = \<alpha> \<prec> Q' \<longrightarrow> (\<exists>P'. ?Pa2 \<longmapsto> \<alpha> \<prec> P' \<and> (P', Q') \<in> bangRel Rel))
(!P, !Q) \<in> bangRel Rel

goal (1 subgoal):
 1. !P \<leadsto>[bangRel Rel] !Q
[PROOF STEP]
by(auto simp add: simulation_def)
[PROOF STATE]
proof (state)
this:
!P \<leadsto>[bangRel Rel] !Q

goal:
No subgoals!
[PROOF STEP]
qed