[STATEMENT]
lemma weakSimClosedAux:
  fixes \<Psi>   :: 'b
  and   P   :: "('a, 'b, 'c) psi"
  and   Rel :: "('b \<times> ('a, 'b, 'c) psi \<times> ('a, 'b, 'c) psi) set"
  and   Q   :: "('a, 'b, 'c) psi"
  and   p   :: "name prm"

  assumes EqvtRel: "eqvt Rel"
  and     PSimQ: "\<Psi> \<rhd> P \<leadsto><Rel> Q"

  shows "(p \<bullet> \<Psi>) \<rhd> (p \<bullet> P) \<leadsto><Rel> (p \<bullet> Q)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<leadsto><Rel> p \<bullet> Q
[PROOF STEP]
using EqvtRel
[PROOF STATE]
proof (prove)
using this:
eqvt Rel

goal (1 subgoal):
 1. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<leadsto><Rel> p \<bullet> Q
[PROOF STEP]
proof(induct rule: weakSimI[of _ _ _ _ "(\<Psi>, P, p)"])
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
case(cAct \<Psi>' \<alpha> Q')
[PROOF STATE]
proof (state)
this:
p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'
bn \<alpha> \<sharp>* (p \<bullet> \<Psi>)
bn \<alpha> \<sharp>* (p \<bullet> P)
bn \<alpha> \<sharp>* (p \<bullet> Q)
bn \<alpha> \<sharp>* subject \<alpha>
bn \<alpha> \<sharp>* (\<Psi>, P, p)
distinct (bn \<alpha>)
\<alpha> \<noteq> \<tau>

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
from \<open>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto>\<alpha> \<prec> Q'\<close>
[PROOF STATE]
proof (chain)
picking this:
p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'
[PROOF STEP]
have "(rev p \<bullet> p \<bullet> \<Psi>) \<rhd> (rev p \<bullet> p \<bullet> Q) \<longmapsto>(rev p \<bullet> (\<alpha> \<prec> Q'))"
[PROOF STATE]
proof (prove)
using this:
p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'

goal (1 subgoal):
 1. rev p \<bullet> p \<bullet> \<Psi> \<rhd> rev p \<bullet> p \<bullet> Q \<longmapsto> rev p \<bullet> \<alpha> \<prec> Q'
[PROOF STEP]
by(blast dest: semantics.eqvt)
[PROOF STATE]
proof (state)
this:
rev p \<bullet> p \<bullet> \<Psi> \<rhd> rev p \<bullet> p \<bullet> Q \<longmapsto> rev p \<bullet> \<alpha> \<prec> Q'

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
hence "\<Psi> \<rhd> Q \<longmapsto>(rev p \<bullet> \<alpha>) \<prec> (rev p \<bullet> Q')"
[PROOF STATE]
proof (prove)
using this:
rev p \<bullet> p \<bullet> \<Psi> \<rhd> rev p \<bullet> p \<bullet> Q \<longmapsto> rev p \<bullet> \<alpha> \<prec> Q'

goal (1 subgoal):
 1. \<Psi> \<rhd> Q \<longmapsto> rev p \<bullet> \<alpha> \<prec> rev p \<bullet> Q'
[PROOF STEP]
by(simp add: eqvts)
[PROOF STATE]
proof (state)
this:
\<Psi> \<rhd> Q \<longmapsto> rev p \<bullet> \<alpha> \<prec> rev p \<bullet> Q'

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<Psi> \<rhd> Q \<longmapsto> rev p \<bullet> \<alpha> \<prec> rev p \<bullet> Q'

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
with \<open>bn \<alpha> \<sharp>* (\<Psi>, P, p)\<close>
[PROOF STATE]
proof (chain)
picking this:
bn \<alpha> \<sharp>* (\<Psi>, P, p)
\<Psi> \<rhd> Q \<longmapsto> rev p \<bullet> \<alpha> \<prec> rev p \<bullet> Q'
[PROOF STEP]
have "bn \<alpha>  \<sharp>* \<Psi>" and "bn \<alpha>  \<sharp>* P" and "bn \<alpha>  \<sharp>* p"
[PROOF STATE]
proof (prove)
using this:
bn \<alpha> \<sharp>* (\<Psi>, P, p)
\<Psi> \<rhd> Q \<longmapsto> rev p \<bullet> \<alpha> \<prec> rev p \<bullet> Q'

goal (1 subgoal):
 1. bn \<alpha> \<sharp>* \<Psi> &&& bn \<alpha> \<sharp>* P &&& bn \<alpha> \<sharp>* p
[PROOF STEP]
by simp+
[PROOF STATE]
proof (state)
this:
bn \<alpha> \<sharp>* \<Psi>
bn \<alpha> \<sharp>* P
bn \<alpha> \<sharp>* p

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
bn \<alpha> \<sharp>* \<Psi>
bn \<alpha> \<sharp>* P
bn \<alpha> \<sharp>* p

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
from \<open>\<alpha> \<noteq> \<tau>\<close>
[PROOF STATE]
proof (chain)
picking this:
\<alpha> \<noteq> \<tau>
[PROOF STEP]
have "(rev p \<bullet> \<alpha>) \<noteq> \<tau>"
[PROOF STATE]
proof (prove)
using this:
\<alpha> \<noteq> \<tau>

goal (1 subgoal):
 1. rev p \<bullet> \<alpha> \<noteq> \<tau>
[PROOF STEP]
by(cases rule: actionCases[where \<alpha>=\<alpha>]) auto
[PROOF STATE]
proof (state)
this:
rev p \<bullet> \<alpha> \<noteq> \<tau>

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<Psi> \<rhd> Q \<longmapsto> rev p \<bullet> \<alpha> \<prec> rev p \<bullet> Q'
bn \<alpha> \<sharp>* \<Psi>
bn \<alpha> \<sharp>* P
bn \<alpha> \<sharp>* p
rev p \<bullet> \<alpha> \<noteq> \<tau>
[PROOF STEP]
obtain P'' P' where PTrans: "\<Psi> : Q \<rhd> P \<Longrightarrow>(rev p \<bullet> \<alpha>) \<prec> P''"
                          and P''Chain: "\<Psi> \<otimes> (rev p \<bullet> \<Psi>') \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P'" and P'RelQ': "(\<Psi> \<otimes> (rev p \<bullet> \<Psi>'), P', rev p \<bullet> Q') \<in> Rel"
[PROOF STATE]
proof (prove)
using this:
\<Psi> \<rhd> Q \<longmapsto> rev p \<bullet> \<alpha> \<prec> rev p \<bullet> Q'
bn \<alpha> \<sharp>* \<Psi>
bn \<alpha> \<sharp>* P
bn \<alpha> \<sharp>* p
rev p \<bullet> \<alpha> \<noteq> \<tau>

goal (1 subgoal):
 1. (\<And>P'' P'. \<lbrakk>\<Psi> : Q \<rhd> P \<Longrightarrow>rev p \<bullet> \<alpha> \<prec> P''; \<Psi> \<otimes> (rev p \<bullet> \<Psi>') \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P'; (\<Psi> \<otimes> (rev p \<bullet> \<Psi>'), P', rev p \<bullet> Q') \<in> Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using \<open>\<alpha> \<noteq> \<tau>\<close> PSimQ
[PROOF STATE]
proof (prove)
using this:
\<Psi> \<rhd> Q \<longmapsto> rev p \<bullet> \<alpha> \<prec> rev p \<bullet> Q'
bn \<alpha> \<sharp>* \<Psi>
bn \<alpha> \<sharp>* P
bn \<alpha> \<sharp>* p
rev p \<bullet> \<alpha> \<noteq> \<tau>
\<alpha> \<noteq> \<tau>
\<Psi> \<rhd> P \<leadsto><Rel> Q

goal (1 subgoal):
 1. (\<And>P'' P'. \<lbrakk>\<Psi> : Q \<rhd> P \<Longrightarrow>rev p \<bullet> \<alpha> \<prec> P''; \<Psi> \<otimes> (rev p \<bullet> \<Psi>') \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P'; (\<Psi> \<otimes> (rev p \<bullet> \<Psi>'), P', rev p \<bullet> Q') \<in> Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(drule_tac \<Psi>'="rev p \<bullet> \<Psi>'" in weakSimE(1)) (auto simp add: freshChainPermSimp bnEqvt[symmetric])
[PROOF STATE]
proof (state)
this:
\<Psi> : Q \<rhd> P \<Longrightarrow>rev p \<bullet> \<alpha> \<prec> P''
\<Psi> \<otimes> (rev p \<bullet> \<Psi>') \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P'
(\<Psi> \<otimes> (rev p \<bullet> \<Psi>'), P', rev p \<bullet> Q') \<in> Rel

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
from PTrans
[PROOF STATE]
proof (chain)
picking this:
\<Psi> : Q \<rhd> P \<Longrightarrow>rev p \<bullet> \<alpha> \<prec> P''
[PROOF STEP]
have "(p \<bullet> \<Psi>) : (p \<bullet> Q) \<rhd> (p \<bullet> P) \<Longrightarrow>(p \<bullet> (rev p \<bullet> \<alpha>)) \<prec> (p \<bullet> P'')"
[PROOF STATE]
proof (prove)
using this:
\<Psi> : Q \<rhd> P \<Longrightarrow>rev p \<bullet> \<alpha> \<prec> P''

goal (1 subgoal):
 1. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>p \<bullet> rev p \<bullet> \<alpha> \<prec> p \<bullet> P''
[PROOF STEP]
by(rule eqvts)
[PROOF STATE]
proof (state)
this:
p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>p \<bullet> rev p \<bullet> \<alpha> \<prec> p \<bullet> P''

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
hence "(p \<bullet> \<Psi>) : (p \<bullet> Q) \<rhd> (p \<bullet> P) \<Longrightarrow>\<alpha> \<prec> (p \<bullet> P'')"
[PROOF STATE]
proof (prove)
using this:
p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>p \<bullet> rev p \<bullet> \<alpha> \<prec> p \<bullet> P''

goal (1 subgoal):
 1. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> p \<bullet> P''
[PROOF STEP]
by(simp add: eqvts freshChainPermSimp)
[PROOF STATE]
proof (state)
this:
p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> p \<bullet> P''

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> p \<bullet> P''

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
from P''Chain
[PROOF STATE]
proof (chain)
picking this:
\<Psi> \<otimes> (rev p \<bullet> \<Psi>') \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P'
[PROOF STEP]
have  "(p \<bullet> (\<Psi> \<otimes> (rev p \<bullet> \<Psi>'))) \<rhd> (p \<bullet> P'') \<Longrightarrow>\<^sup>^\<^sub>\<tau> (p \<bullet> P')"
[PROOF STATE]
proof (prove)
using this:
\<Psi> \<otimes> (rev p \<bullet> \<Psi>') \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P'

goal (1 subgoal):
 1. p \<bullet> \<Psi> \<otimes> (rev p \<bullet> \<Psi>') \<rhd> p \<bullet> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'
[PROOF STEP]
by(rule eqvts)
[PROOF STATE]
proof (state)
this:
p \<bullet> \<Psi> \<otimes> (rev p \<bullet> \<Psi>') \<rhd> p \<bullet> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
hence "(p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> (p \<bullet> P'') \<Longrightarrow>\<^sup>^\<^sub>\<tau> (p \<bullet> P')"
[PROOF STATE]
proof (prove)
using this:
p \<bullet> \<Psi> \<otimes> (rev p \<bullet> \<Psi>') \<rhd> p \<bullet> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'

goal (1 subgoal):
 1. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> p \<bullet> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'
[PROOF STEP]
by(simp add: eqvts)
[PROOF STATE]
proof (state)
this:
(p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> p \<bullet> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
(p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> p \<bullet> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
from P'RelQ' EqvtRel
[PROOF STATE]
proof (chain)
picking this:
(\<Psi> \<otimes> (rev p \<bullet> \<Psi>'), P', rev p \<bullet> Q') \<in> Rel
eqvt Rel
[PROOF STEP]
have "(p \<bullet> ((\<Psi> \<otimes> (rev p \<bullet> \<Psi>')), P', rev p \<bullet> Q')) \<in> Rel"
[PROOF STATE]
proof (prove)
using this:
(\<Psi> \<otimes> (rev p \<bullet> \<Psi>'), P', rev p \<bullet> Q') \<in> Rel
eqvt Rel

goal (1 subgoal):
 1. p \<bullet> (\<Psi> \<otimes> (rev p \<bullet> \<Psi>'), P', rev p \<bullet> Q') \<in> Rel
[PROOF STEP]
by(simp only: eqvt_def)
[PROOF STATE]
proof (state)
this:
p \<bullet> (\<Psi> \<otimes> (rev p \<bullet> \<Psi>'), P', rev p \<bullet> Q') \<in> Rel

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
hence "((p \<bullet> \<Psi>) \<otimes> \<Psi>', p \<bullet> P', Q') \<in> Rel"
[PROOF STATE]
proof (prove)
using this:
p \<bullet> (\<Psi> \<otimes> (rev p \<bullet> \<Psi>'), P', rev p \<bullet> Q') \<in> Rel

goal (1 subgoal):
 1. ((p \<bullet> \<Psi>) \<otimes> \<Psi>', p \<bullet> P', Q') \<in> Rel
[PROOF STEP]
by(simp add: eqvts)
[PROOF STATE]
proof (state)
this:
((p \<bullet> \<Psi>) \<otimes> \<Psi>', p \<bullet> P', Q') \<in> Rel

goal (2 subgoals):
 1. \<And>\<Psi>' \<alpha> Q'. \<lbrakk>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<alpha> \<prec> Q'; bn \<alpha> \<sharp>* (p \<bullet> \<Psi>); bn \<alpha> \<sharp>* (p \<bullet> P); bn \<alpha> \<sharp>* (p \<bullet> Q); bn \<alpha> \<sharp>* subject \<alpha>; bn \<alpha> \<sharp>* (\<Psi>, P, p); distinct (bn \<alpha>); \<alpha> \<noteq> \<tau>\<rbrakk> \<Longrightarrow> \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
 2. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> p \<bullet> P''
(p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> p \<bullet> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'
((p \<bullet> \<Psi>) \<otimes> \<Psi>', p \<bullet> P', Q') \<in> Rel
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> p \<bullet> P''
(p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> p \<bullet> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'
((p \<bullet> \<Psi>) \<otimes> \<Psi>', p \<bullet> P', Q') \<in> Rel

goal (1 subgoal):
 1. \<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>P''. p \<bullet> \<Psi> : p \<bullet> Q \<rhd> p \<bullet> P \<Longrightarrow>\<alpha> \<prec> P'' \<and> (\<exists>P'. (p \<bullet> \<Psi>) \<otimes> \<Psi>' \<rhd> P'' \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> ((p \<bullet> \<Psi>) \<otimes> \<Psi>', P', Q') \<in> Rel)

goal (1 subgoal):
 1. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
case(cTau Q')
[PROOF STATE]
proof (state)
this:
p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q'

goal (1 subgoal):
 1. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
from \<open>p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto>\<tau> \<prec> Q'\<close>
[PROOF STATE]
proof (chain)
picking this:
p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q'
[PROOF STEP]
have "(rev p \<bullet> p \<bullet> \<Psi>) \<rhd> (rev p \<bullet> p \<bullet> Q) \<longmapsto>(rev p \<bullet> (\<tau> \<prec> Q'))"
[PROOF STATE]
proof (prove)
using this:
p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q'

goal (1 subgoal):
 1. rev p \<bullet> p \<bullet> \<Psi> \<rhd> rev p \<bullet> p \<bullet> Q \<longmapsto> rev p \<bullet> \<tau> \<prec> Q'
[PROOF STEP]
by(blast dest: semantics.eqvt)
[PROOF STATE]
proof (state)
this:
rev p \<bullet> p \<bullet> \<Psi> \<rhd> rev p \<bullet> p \<bullet> Q \<longmapsto> rev p \<bullet> \<tau> \<prec> Q'

goal (1 subgoal):
 1. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
hence "\<Psi> \<rhd> Q \<longmapsto>\<tau> \<prec> (rev p \<bullet> Q')"
[PROOF STATE]
proof (prove)
using this:
rev p \<bullet> p \<bullet> \<Psi> \<rhd> rev p \<bullet> p \<bullet> Q \<longmapsto> rev p \<bullet> \<tau> \<prec> Q'

goal (1 subgoal):
 1. \<Psi> \<rhd> Q \<longmapsto> \<tau> \<prec> rev p \<bullet> Q'
[PROOF STEP]
by(simp add: eqvts)
[PROOF STATE]
proof (state)
this:
\<Psi> \<rhd> Q \<longmapsto> \<tau> \<prec> rev p \<bullet> Q'

goal (1 subgoal):
 1. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
with PSimQ
[PROOF STATE]
proof (chain)
picking this:
\<Psi> \<rhd> P \<leadsto><Rel> Q
\<Psi> \<rhd> Q \<longmapsto> \<tau> \<prec> rev p \<bullet> Q'
[PROOF STEP]
obtain P' where PChain: "\<Psi> \<rhd> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P'" and P'RelQ': "(\<Psi>, P', rev p \<bullet> Q') \<in> Rel"
[PROOF STATE]
proof (prove)
using this:
\<Psi> \<rhd> P \<leadsto><Rel> Q
\<Psi> \<rhd> Q \<longmapsto> \<tau> \<prec> rev p \<bullet> Q'

goal (1 subgoal):
 1. (\<And>P'. \<lbrakk>\<Psi> \<rhd> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P'; (\<Psi>, P', rev p \<bullet> Q') \<in> Rel\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(blast dest: weakSimE)
[PROOF STATE]
proof (state)
this:
\<Psi> \<rhd> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P'
(\<Psi>, P', rev p \<bullet> Q') \<in> Rel

goal (1 subgoal):
 1. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
from PChain
[PROOF STATE]
proof (chain)
picking this:
\<Psi> \<rhd> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P'
[PROOF STEP]
have "(p \<bullet> \<Psi>) \<rhd> (p \<bullet> P) \<Longrightarrow>\<^sup>^\<^sub>\<tau> (p \<bullet> P')"
[PROOF STATE]
proof (prove)
using this:
\<Psi> \<rhd> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P'

goal (1 subgoal):
 1. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'
[PROOF STEP]
by(rule tauChainEqvt)
[PROOF STATE]
proof (state)
this:
p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'

goal (1 subgoal):
 1. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'

goal (1 subgoal):
 1. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
from P'RelQ' EqvtRel
[PROOF STATE]
proof (chain)
picking this:
(\<Psi>, P', rev p \<bullet> Q') \<in> Rel
eqvt Rel
[PROOF STEP]
have "(p \<bullet> (\<Psi>,  P', rev p \<bullet> Q')) \<in> Rel"
[PROOF STATE]
proof (prove)
using this:
(\<Psi>, P', rev p \<bullet> Q') \<in> Rel
eqvt Rel

goal (1 subgoal):
 1. p \<bullet> (\<Psi>, P', rev p \<bullet> Q') \<in> Rel
[PROOF STEP]
by(simp only: eqvt_def)
[PROOF STATE]
proof (state)
this:
p \<bullet> (\<Psi>, P', rev p \<bullet> Q') \<in> Rel

goal (1 subgoal):
 1. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
hence "(p \<bullet> \<Psi>, p \<bullet> P', Q') \<in> Rel"
[PROOF STATE]
proof (prove)
using this:
p \<bullet> (\<Psi>, P', rev p \<bullet> Q') \<in> Rel

goal (1 subgoal):
 1. (p \<bullet> \<Psi>, p \<bullet> P', Q') \<in> Rel
[PROOF STEP]
by(simp add: eqvts)
[PROOF STATE]
proof (state)
this:
(p \<bullet> \<Psi>, p \<bullet> P', Q') \<in> Rel

goal (1 subgoal):
 1. \<And>Q'. p \<bullet> \<Psi> \<rhd> p \<bullet> Q \<longmapsto> \<tau> \<prec> Q' \<Longrightarrow> \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'
(p \<bullet> \<Psi>, p \<bullet> P', Q') \<in> Rel
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> p \<bullet> P'
(p \<bullet> \<Psi>, p \<bullet> P', Q') \<in> Rel

goal (1 subgoal):
 1. \<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<exists>P'. p \<bullet> \<Psi> \<rhd> p \<bullet> P \<Longrightarrow>\<^sup>^\<^sub>\<tau> P' \<and> (p \<bullet> \<Psi>, P', Q') \<in> Rel

goal:
No subgoals!
[PROOF STEP]
qed