[STATEMENT]
lemma fin_substn_nrename:
  assumes a: "fin M x" "x\<noteq>y" "x\<sharp>P"
  shows "M[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P (x).(M{y:=<c>.P})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. M[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.M{y:=<c>.P}
[PROOF STEP]
using a [[simproc del: defined_all]]
[PROOF STATE]
proof (prove)
using this:
fin M x
x \<noteq> y
x \<sharp> P

goal (1 subgoal):
 1. M[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.M{y:=<c>.P}
[PROOF STEP]
apply(nominal_induct M avoiding: x y c P rule: trm.strong_induct)
[PROOF STATE]
proof (prove)
goal (12 subgoals):
 1. \<And>name coname x y c P. \<lbrakk>fin (Ax name coname) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> Ax name coname[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.Ax name coname{y:=<c>.P}
 2. \<And>coname trm1 name trm2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname \<sharp> trm2; name \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (Cut <coname>.trm1 name.trm2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> Cut <coname>.trm1 name.trm2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.Cut <coname>.trm1 name.trm2{y:=<c>.P}
 3. \<And>name trm coname x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; name \<sharp> coname; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotR name.trm coname) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotR name.trm coname[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotR name.trm coname{y:=<c>.P}
 4. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; coname \<sharp> name; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotL <coname>.trm name) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotL <coname>.trm name[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotL <coname>.trm name{y:=<c>.P}
 5. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 6. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 7. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 8. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 10. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
A total of 12 subgoals...
[PROOF STEP]
apply(drule fin_Ax_elim)
[PROOF STATE]
proof (prove)
goal (12 subgoals):
 1. \<And>name coname x y c P. \<lbrakk>x \<noteq> y; x \<sharp> P; name = x\<rbrakk> \<Longrightarrow> Ax name coname[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.Ax name coname{y:=<c>.P}
 2. \<And>coname trm1 name trm2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname \<sharp> trm2; name \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (Cut <coname>.trm1 name.trm2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> Cut <coname>.trm1 name.trm2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.Cut <coname>.trm1 name.trm2{y:=<c>.P}
 3. \<And>name trm coname x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; name \<sharp> coname; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotR name.trm coname) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotR name.trm coname[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotR name.trm coname{y:=<c>.P}
 4. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; coname \<sharp> name; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotL <coname>.trm name) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotL <coname>.trm name[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotL <coname>.trm name{y:=<c>.P}
 5. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 6. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 7. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 8. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 10. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
A total of 12 subgoals...
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (12 subgoals):
 1. \<And>name coname x y c P. \<lbrakk>x \<noteq> y; x \<sharp> P; name = x\<rbrakk> \<Longrightarrow> Cut <c>.P y.Ax y coname = Cut <c>.P x.Ax x coname
 2. \<And>coname trm1 name trm2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname \<sharp> trm2; name \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (Cut <coname>.trm1 name.trm2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> Cut <coname>.trm1 name.trm2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.Cut <coname>.trm1 name.trm2{y:=<c>.P}
 3. \<And>name trm coname x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; name \<sharp> coname; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotR name.trm coname) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotR name.trm coname[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotR name.trm coname{y:=<c>.P}
 4. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; coname \<sharp> name; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotL <coname>.trm name) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotL <coname>.trm name[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotL <coname>.trm name{y:=<c>.P}
 5. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 6. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 7. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 8. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 10. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
A total of 12 subgoals...
[PROOF STEP]
apply(simp add: trm.inject)
[PROOF STATE]
proof (prove)
goal (12 subgoals):
 1. \<And>name coname x y P. \<lbrakk>x \<noteq> y; x \<sharp> P; name = x\<rbrakk> \<Longrightarrow> [y].Ax y coname = [x].Ax x coname
 2. \<And>coname trm1 name trm2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname \<sharp> trm2; name \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (Cut <coname>.trm1 name.trm2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> Cut <coname>.trm1 name.trm2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.Cut <coname>.trm1 name.trm2{y:=<c>.P}
 3. \<And>name trm coname x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; name \<sharp> coname; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotR name.trm coname) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotR name.trm coname[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotR name.trm coname{y:=<c>.P}
 4. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; coname \<sharp> name; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotL <coname>.trm name) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotL <coname>.trm name[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotL <coname>.trm name{y:=<c>.P}
 5. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 6. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 7. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 8. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 10. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
A total of 12 subgoals...
[PROOF STEP]
apply(simp add: alpha calc_atm fresh_atm)
[PROOF STATE]
proof (prove)
goal (11 subgoals):
 1. \<And>coname trm1 name trm2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname \<sharp> trm2; name \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (Cut <coname>.trm1 name.trm2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> Cut <coname>.trm1 name.trm2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.Cut <coname>.trm1 name.trm2{y:=<c>.P}
 2. \<And>name trm coname x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; name \<sharp> coname; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotR name.trm coname) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotR name.trm coname[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotR name.trm coname{y:=<c>.P}
 3. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; coname \<sharp> name; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotL <coname>.trm name) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotL <coname>.trm name[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotL <coname>.trm name{y:=<c>.P}
 4. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 6. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 9. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 10. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
A total of 11 subgoals...
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (11 subgoals):
 1. \<And>coname trm1 name trm2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname \<sharp> trm2; name \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (Cut <coname>.trm1 name.trm2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> (trm1 = Ax y coname \<longrightarrow> Cut <coname>.Ax y coname name.trm2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.Cut <c>.P name.trm2{y:=<c>.P}) \<and> (trm1 \<noteq> Ax y coname \<longrightarrow> Cut <coname>.trm1[x\<turnstile>n>y] name.trm2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.Cut <coname>.trm1{y:=<c>.P} name.trm2{y:=<c>.P})
 2. \<And>name trm coname x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; name \<sharp> coname; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotR name.trm coname) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotR name.trm coname[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotR name.trm coname{y:=<c>.P}
 3. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; coname \<sharp> name; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotL <coname>.trm name) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotL <coname>.trm name[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotL <coname>.trm name{y:=<c>.P}
 4. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 6. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 9. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 10. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
A total of 11 subgoals...
[PROOF STEP]
apply(drule fin_rest_elims)
[PROOF STATE]
proof (prove)
goal (11 subgoals):
 1. \<And>coname trm1 name trm2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname \<sharp> trm2; name \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; False\<rbrakk> \<Longrightarrow> (trm1 = Ax y coname \<longrightarrow> Cut <coname>.Ax y coname name.trm2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.Cut <c>.P name.trm2{y:=<c>.P}) \<and> (trm1 \<noteq> Ax y coname \<longrightarrow> Cut <coname>.trm1[x\<turnstile>n>y] name.trm2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.Cut <coname>.trm1{y:=<c>.P} name.trm2{y:=<c>.P})
 2. \<And>name trm coname x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; name \<sharp> coname; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotR name.trm coname) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotR name.trm coname[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotR name.trm coname{y:=<c>.P}
 3. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; coname \<sharp> name; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotL <coname>.trm name) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotL <coname>.trm name[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotL <coname>.trm name{y:=<c>.P}
 4. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 6. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 9. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 10. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
A total of 11 subgoals...
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>name trm coname x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; name \<sharp> coname; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotR name.trm coname) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotR name.trm coname[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotR name.trm coname{y:=<c>.P}
 2. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; coname \<sharp> name; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotL <coname>.trm name) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotL <coname>.trm name[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotL <coname>.trm name{y:=<c>.P}
 3. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 9. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 10. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(drule fin_rest_elims)
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>name trm coname x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; name \<sharp> coname; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; False\<rbrakk> \<Longrightarrow> NotR name.trm coname[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotR name.trm coname{y:=<c>.P}
 2. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; coname \<sharp> name; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotL <coname>.trm name) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotL <coname>.trm name[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotL <coname>.trm name{y:=<c>.P}
 3. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 9. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 10. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; coname \<sharp> name; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (NotL <coname>.trm name) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> NotL <coname>.trm name[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotL <coname>.trm name{y:=<c>.P}
 2. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 8. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(drule fin_NotL_elim)
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; coname \<sharp> name; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> NotL <coname>.trm name[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.NotL <coname>.trm name{y:=<c>.P}
 2. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 8. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>x'. Cut <c>.P x'.NotL <coname>.trm[x\<turnstile>n>y]{y:=<c>.P} x') = Cut <c>.P x.NotL <coname>.trm{y:=<c>.P} x
 2. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 8. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(subgoal_tac "\<exists>z::name. z\<sharp>(trm,y,x,P,trm[x\<turnstile>n>y]{y:=<c>.P})")
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm; \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>x'. Cut <c>.P x'.NotL <coname>.trm[x\<turnstile>n>y]{y:=<c>.P} x') = Cut <c>.P x.NotL <coname>.trm{y:=<c>.P} x
 2. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})
 3. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 9. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 10. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(erule exE, simp add: fresh_prod)
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>coname trm name x y c P z. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm; z \<sharp> trm \<and> z \<sharp> y \<and> z \<sharp> x \<and> z \<sharp> P \<and> z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>x'. Cut <c>.P x'.NotL <coname>.trm[x\<turnstile>n>y]{y:=<c>.P} x') = Cut <c>.P x.NotL <coname>.trm{y:=<c>.P} x
 2. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})
 3. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 9. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 10. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(erule conjE)+
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>coname trm name x y c P z. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x; name \<sharp> trm; z \<sharp> trm; z \<sharp> y; z \<sharp> x; z \<sharp> P; z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>x'. Cut <c>.P x'.NotL <coname>.trm[x\<turnstile>n>y]{y:=<c>.P} x') = Cut <c>.P x.NotL <coname>.trm{y:=<c>.P} x
 2. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})
 3. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 9. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 10. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: fresh_fun_simp_NotL)
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>coname trm name x y c P z. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x; x \<sharp> trm; z \<sharp> trm; z \<sharp> y; z \<sharp> x; z \<sharp> P; z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> Cut <c>.P z.NotL <coname>.trm[x\<turnstile>n>y]{y:=<c>.P} z = Cut <c>.P x.NotL <coname>.trm{y:=<c>.P} x
 2. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})
 3. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 9. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 10. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: trm.inject alpha fresh_atm calc_atm abs_fresh)
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>coname trm name x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x; x \<sharp> trm; z \<sharp> trm; z \<noteq> y; z \<noteq> x; z \<sharp> P; z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> trm[x\<turnstile>n>y]{y:=<c>.P} = [(z, x)] \<bullet> trm{y:=<c>.P} \<and> z \<sharp> trm{y:=<c>.P}
 2. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})
 3. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 9. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 10. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule conjI)
[PROOF STATE]
proof (prove)
goal (11 subgoals):
 1. \<And>coname trm name x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x; x \<sharp> trm; z \<sharp> trm; z \<noteq> y; z \<noteq> x; z \<sharp> P; z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> trm[x\<turnstile>n>y]{y:=<c>.P} = [(z, x)] \<bullet> trm{y:=<c>.P}
 2. \<And>coname trm name x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x; x \<sharp> trm; z \<sharp> trm; z \<noteq> y; z \<noteq> x; z \<sharp> P; z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 3. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})
 4. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 6. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 9. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 10. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
A total of 11 subgoals...
[PROOF STEP]
apply(simp add: nsubst_eqvt calc_atm)
[PROOF STATE]
proof (prove)
goal (11 subgoals):
 1. \<And>coname trm name x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x; x \<sharp> trm; z \<sharp> trm; z \<noteq> y; z \<noteq> x; z \<sharp> P; z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> trm[x\<turnstile>n>y]{y:=<c>.P} = ([(z, x)] \<bullet> trm){y:=<c>.([(z, x)] \<bullet> P)}
 2. \<And>coname trm name x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x; x \<sharp> trm; z \<sharp> trm; z \<noteq> y; z \<noteq> x; z \<sharp> P; z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 3. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})
 4. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 6. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 9. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 10. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
A total of 11 subgoals...
[PROOF STEP]
apply(simp add: perm_fresh_fresh)
[PROOF STATE]
proof (prove)
goal (11 subgoals):
 1. \<And>coname trm name x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x; x \<sharp> trm; z \<sharp> trm; z \<noteq> y; z \<noteq> x; z \<sharp> P; z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> trm[x\<turnstile>n>y]{y:=<c>.P} = trm{y:=<c>.P}
 2. \<And>coname trm name x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x; x \<sharp> trm; z \<sharp> trm; z \<noteq> y; z \<noteq> x; z \<sharp> P; z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 3. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})
 4. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 6. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 9. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 10. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
A total of 11 subgoals...
[PROOF STEP]
apply(simp add: nrename_fresh)
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>coname trm name x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x; x \<sharp> trm; z \<sharp> trm; z \<noteq> y; z \<noteq> x; z \<sharp> P; z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 2. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})
 3. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 9. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 10. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule subst_fresh)
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>coname trm name x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x; x \<sharp> trm; z \<sharp> trm; z \<noteq> y; z \<noteq> x; z \<sharp> P; z \<sharp> trm[x\<turnstile>n>y]{y:=<c>.P}\<rbrakk> \<Longrightarrow> z \<sharp> (trm, P)
 2. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})
 3. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 5. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 8. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 9. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 10. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P})
 2. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 8. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule exists_fresh')
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>coname trm name x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name = x \<and> name \<sharp> trm\<rbrakk> \<Longrightarrow> finite (supp (trm, y, x, P, trm[x\<turnstile>n>y]{y:=<c>.P}))
 2. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 8. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule fin_supp)
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (AndR <coname1>.trm1 <coname2>.trm2 coname3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(drule fin_rest_elims)
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>coname1 trm1 coname2 trm2 coname3 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname2 \<sharp> x; coname2 \<sharp> y; coname2 \<sharp> c; coname2 \<sharp> P; coname2 \<noteq> coname1; coname1 \<sharp> trm2; coname1 \<sharp> coname3; coname2 \<sharp> trm1; coname2 \<sharp> coname3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; False\<rbrakk> \<Longrightarrow> AndR <coname1>.trm1 <coname2>.trm2 coname3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndR <coname1>.trm1 <coname2>.trm2 coname3{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL1 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(drule fin_AndL1_elim)
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> AndL1 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL1 name1.trm name2{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.AndL1 name1.trm[name2\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name2.AndL1 name1.trm{y:=<c>.P} name2
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(subgoal_tac "\<exists>z::name. z\<sharp>(name2,name1,P,trm[name2\<turnstile>n>y]{y:=<c>.P},y,P,trm)")
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm; \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.AndL1 name1.trm[name2\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name2.AndL1 name1.trm{y:=<c>.P} name2
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(erule exE, simp add: fresh_prod)
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm; z \<sharp> name2 \<and> z \<sharp> name1 \<and> z \<sharp> P \<and> z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P} \<and> z \<sharp> y \<and> z \<sharp> P \<and> z \<sharp> trm\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.AndL1 name1.trm[name2\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name2.AndL1 name1.trm{y:=<c>.P} name2
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(erule conjE)+
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; x \<sharp> [name1].trm; z \<sharp> name2; z \<sharp> name1; z \<sharp> P; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<sharp> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.AndL1 name1.trm[name2\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name2.AndL1 name1.trm{y:=<c>.P} name2
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: fresh_fun_simp_AndL1)
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> [name1].trm; z \<sharp> name2; z \<sharp> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<sharp> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> Cut <c>.P z.AndL1 name1.trm[name2\<turnstile>n>y]{y:=<c>.P} z = Cut <c>.P name2.AndL1 name1.trm{y:=<c>.P} name2
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: trm.inject alpha fresh_atm calc_atm abs_fresh)
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> trm[name2\<turnstile>n>y]{y:=<c>.P} = [(z, name2)] \<bullet> trm{y:=<c>.P} \<and> z \<sharp> trm{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule conjI)
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> trm[name2\<turnstile>n>y]{y:=<c>.P} = [(z, name2)] \<bullet> trm{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 8. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: nsubst_eqvt calc_atm)
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> trm[name2\<turnstile>n>y]{y:=<c>.P} = ([(z, name2)] \<bullet> trm){y:=<c>.([(z, name2)] \<bullet> P)}
 2. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 8. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: perm_fresh_fresh)
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> trm[name2\<turnstile>n>y]{y:=<c>.P} = trm{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 4. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 7. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 8. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 9. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: nrename_fresh)
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule subst_fresh)
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> z \<sharp> (trm, P)
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule exists_fresh')
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> finite (supp (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm))
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule fin_supp)
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (AndL2 name1.trm name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 2. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 5. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(drule fin_AndL2_elim)
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> AndL2 name1.trm name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.AndL2 name1.trm name2{y:=<c>.P}
 2. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 5. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.AndL2 name1.trm[name2\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name2.AndL2 name1.trm{y:=<c>.P} name2
 2. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 5. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(subgoal_tac "\<exists>z::name. z\<sharp>(name2,name1,P,trm[name2\<turnstile>n>y]{y:=<c>.P},y,P,trm)")
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm; \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.AndL2 name1.trm[name2\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name2.AndL2 name1.trm{y:=<c>.P} name2
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(erule exE, simp add: fresh_prod)
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm; z \<sharp> name2 \<and> z \<sharp> name1 \<and> z \<sharp> P \<and> z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P} \<and> z \<sharp> y \<and> z \<sharp> P \<and> z \<sharp> trm\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.AndL2 name1.trm[name2\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name2.AndL2 name1.trm{y:=<c>.P} name2
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(erule conjE)+
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; x \<sharp> [name1].trm; z \<sharp> name2; z \<sharp> name1; z \<sharp> P; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<sharp> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.AndL2 name1.trm[name2\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name2.AndL2 name1.trm{y:=<c>.P} name2
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: fresh_fun_simp_AndL2)
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> [name1].trm; z \<sharp> name2; z \<sharp> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<sharp> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> Cut <c>.P z.AndL2 name1.trm[name2\<turnstile>n>y]{y:=<c>.P} z = Cut <c>.P name2.AndL2 name1.trm{y:=<c>.P} name2
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: trm.inject alpha fresh_atm calc_atm abs_fresh)
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> trm[name2\<turnstile>n>y]{y:=<c>.P} = [(z, name2)] \<bullet> trm{y:=<c>.P} \<and> z \<sharp> trm{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule conjI)
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> trm[name2\<turnstile>n>y]{y:=<c>.P} = [(z, name2)] \<bullet> trm{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: nsubst_eqvt calc_atm)
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> trm[name2\<turnstile>n>y]{y:=<c>.P} = ([(z, name2)] \<bullet> trm){y:=<c>.([(z, name2)] \<bullet> P)}
 2. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: perm_fresh_fresh)
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> trm[name2\<turnstile>n>y]{y:=<c>.P} = trm{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 3. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 6. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 7. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 8. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: nrename_fresh)
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> z \<sharp> trm{y:=<c>.P}
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule subst_fresh)
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>name1 trm name2 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name1 \<noteq> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2; name2 \<sharp> trm; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm[name2\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm\<rbrakk> \<Longrightarrow> z \<sharp> (trm, P)
 2. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 5. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 6. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 7. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm)
 2. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 5. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule exists_fresh')
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<And>name1 trm name2 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; name2 \<noteq> y; name2 \<sharp> P; x = name2 \<and> x \<sharp> [name1].trm\<rbrakk> \<Longrightarrow> finite (supp (name2, name1, P, trm[name2\<turnstile>n>y]{y:=<c>.P}, y, P, trm))
 2. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 3. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 4. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 5. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 6. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule fin_supp)
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR1 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 2. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 3. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 4. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(drule fin_rest_elims)
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; False\<rbrakk> \<Longrightarrow> OrR1 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR1 <coname1>.trm coname2{y:=<c>.P}
 2. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 3. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 4. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (OrR2 <coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 2. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 3. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(drule fin_rest_elims)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>coname1 trm coname2 x y c P. \<lbrakk>coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; False\<rbrakk> \<Longrightarrow> OrR2 <coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrR2 <coname1>.trm coname2{y:=<c>.P}
 2. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 3. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (OrL name1.trm1 name2.trm2 name3) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 2. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 3. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(drule fin_OrL_elim)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> x; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; x = name3 \<and> x \<sharp> [name1].trm1 \<and> x \<sharp> [name2].trm2\<rbrakk> \<Longrightarrow> OrL name1.trm1 name2.trm2 name3[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.OrL name1.trm1 name2.trm2 name3{y:=<c>.P}
 2. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 3. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: abs_fresh)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> OrL name1.trm1[name3\<turnstile>n>y] name2.trm2[name3\<turnstile>n>y] y{y:=<c>.P} = Cut <c>.P name3.OrL name1.trm1{y:=<c>.P} name2.trm2{y:=<c>.P} name3
 2. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 3. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: subst_fresh rename_fresh)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.OrL name1.trm1[name3\<turnstile>n>y]{y:=<c>.P} name2.trm2[name3\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name3.OrL name1.trm1{y:=<c>.P} name2.trm2{y:=<c>.P} name3
 2. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 3. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(subgoal_tac "\<exists>z::name. z\<sharp>(name3,name2,name1,P,trm1[name3\<turnstile>n>y]{y:=<c>.P},trm2[name3\<turnstile>n>y]{y:=<c>.P},y,P,trm1,trm2)")
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2); \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.OrL name1.trm1[name3\<turnstile>n>y]{y:=<c>.P} name2.trm2[name3\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name3.OrL name1.trm1{y:=<c>.P} name2.trm2{y:=<c>.P} name3
 2. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 3. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(erule exE, simp add: fresh_prod)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2); z \<sharp> name3 \<and> z \<sharp> name2 \<and> z \<sharp> name1 \<and> z \<sharp> P \<and> z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P} \<and> z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P} \<and> z \<sharp> y \<and> z \<sharp> P \<and> z \<sharp> trm1 \<and> z \<sharp> trm2\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.OrL name1.trm1[name3\<turnstile>n>y]{y:=<c>.P} name2.trm2[name3\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name3.OrL name1.trm1{y:=<c>.P} name2.trm2{y:=<c>.P} name3
 2. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 3. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(erule conjE)+
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<sharp> name3; x = name1 \<or> x \<sharp> trm1; x = name2 \<or> x \<sharp> trm2; z \<sharp> name2; z \<sharp> name1; z \<sharp> P; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.OrL name1.trm1[name3\<turnstile>n>y]{y:=<c>.P} name2.trm2[name3\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P name3.OrL name1.trm1{y:=<c>.P} name2.trm2{y:=<c>.P} name3
 2. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 3. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: fresh_fun_simp_OrL)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<sharp> name3; name3 = name1 \<or> name3 \<sharp> trm1; name3 = name2 \<or> name3 \<sharp> trm2; z \<sharp> name2; z \<sharp> name1; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> Cut <c>.P z.OrL name1.trm1[name3\<turnstile>n>y]{y:=<c>.P} name2.trm2[name3\<turnstile>n>y]{y:=<c>.P} z = Cut <c>.P name3.OrL name1.trm1{y:=<c>.P} name2.trm2{y:=<c>.P} name3
 2. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 3. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: trm.inject alpha fresh_atm calc_atm abs_fresh)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name2 \<noteq> y; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<noteq> name3; name2 \<sharp> trm1; name2 \<noteq> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<noteq> name3; name3 \<sharp> trm1; name3 \<sharp> trm2; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm1[name3\<turnstile>n>y]{y:=<c>.P} = [(z, name3)] \<bullet> trm1{y:=<c>.P} \<and> trm2[name3\<turnstile>n>y]{y:=<c>.P} = [(z, name3)] \<bullet> trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 2. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 3. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule conjI)
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name2 \<noteq> y; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<noteq> name3; name2 \<sharp> trm1; name2 \<noteq> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<noteq> name3; name3 \<sharp> trm1; name3 \<sharp> trm2; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm1[name3\<turnstile>n>y]{y:=<c>.P} = [(z, name3)] \<bullet> trm1{y:=<c>.P}
 2. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name2 \<noteq> y; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<noteq> name3; name2 \<sharp> trm1; name2 \<noteq> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<noteq> name3; name3 \<sharp> trm1; name3 \<sharp> trm2; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[name3\<turnstile>n>y]{y:=<c>.P} = [(z, name3)] \<bullet> trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 3. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 4. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: nsubst_eqvt calc_atm)
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name2 \<noteq> y; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<noteq> name3; name2 \<sharp> trm1; name2 \<noteq> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<noteq> name3; name3 \<sharp> trm1; name3 \<sharp> trm2; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm1[name3\<turnstile>n>y]{y:=<c>.P} = ([(z, name3)] \<bullet> trm1){y:=<c>.([(z, name3)] \<bullet> P)}
 2. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name2 \<noteq> y; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<noteq> name3; name2 \<sharp> trm1; name2 \<noteq> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<noteq> name3; name3 \<sharp> trm1; name3 \<sharp> trm2; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[name3\<turnstile>n>y]{y:=<c>.P} = [(z, name3)] \<bullet> trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 3. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 4. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: perm_fresh_fresh)
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name2 \<noteq> y; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<noteq> name3; name2 \<sharp> trm1; name2 \<noteq> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<noteq> name3; name3 \<sharp> trm1; name3 \<sharp> trm2; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm1[name3\<turnstile>n>y]{y:=<c>.P} = trm1{y:=<c>.P}
 2. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name2 \<noteq> y; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<noteq> name3; name2 \<sharp> trm1; name2 \<noteq> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<noteq> name3; name3 \<sharp> trm1; name3 \<sharp> trm2; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[name3\<turnstile>n>y]{y:=<c>.P} = [(z, name3)] \<bullet> trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 3. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 4. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 5. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: nrename_fresh)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name2 \<noteq> y; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<noteq> name3; name2 \<sharp> trm1; name2 \<noteq> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<noteq> name3; name3 \<sharp> trm1; name3 \<sharp> trm2; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[name3\<turnstile>n>y]{y:=<c>.P} = [(z, name3)] \<bullet> trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 2. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 3. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: nsubst_eqvt calc_atm)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name2 \<noteq> y; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<noteq> name3; name2 \<sharp> trm1; name2 \<noteq> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<noteq> name3; name3 \<sharp> trm1; name3 \<sharp> trm2; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[name3\<turnstile>n>y]{y:=<c>.P} = ([(z, name3)] \<bullet> trm2){y:=<c>.([(z, name3)] \<bullet> P)} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 2. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 3. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: perm_fresh_fresh)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P z. \<lbrakk>name1 \<noteq> y; name1 \<sharp> P; name2 \<noteq> y; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<noteq> name3; name2 \<sharp> trm1; name2 \<noteq> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3; z \<noteq> name3; name3 \<sharp> trm1; name3 \<sharp> trm2; z \<noteq> name2; z \<noteq> name1; z \<sharp> trm1[name3\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[name3\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[name3\<turnstile>n>y]{y:=<c>.P} = trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 2. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 3. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 4. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: nrename_fresh)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
 2. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 3. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule exists_fresh')
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>name1 trm1 name2 trm2 name3 x y c P. \<lbrakk>name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; name2 \<sharp> y; name2 \<sharp> c; name2 \<sharp> P; name2 \<noteq> name1; name1 \<sharp> trm2; name1 \<sharp> name3; name2 \<sharp> trm1; name2 \<sharp> name3; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; name3 \<noteq> y; name3 \<sharp> P; x = name3 \<and> (x = name1 \<or> x \<sharp> trm1) \<and> (x = name2 \<or> x \<sharp> trm2)\<rbrakk> \<Longrightarrow> finite (supp (name3, name2, name1, P, trm1[name3\<turnstile>n>y]{y:=<c>.P}, trm2[name3\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2))
 2. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 3. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(rule fin_supp)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; fin (ImpR name.<coname1>.trm coname2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 2. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(drule fin_rest_elims)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>name coname1 trm coname2 x y c P. \<lbrakk>name \<sharp> x; name \<sharp> y; name \<sharp> c; name \<sharp> P; coname1 \<sharp> x; coname1 \<sharp> y; coname1 \<sharp> c; coname1 \<sharp> P; name \<sharp> coname2; coname1 \<sharp> coname2; \<And>b ba bb bc. \<lbrakk>fin trm b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; False\<rbrakk> \<Longrightarrow> ImpR name.<coname1>.trm coname2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpR name.<coname1>.trm coname2{y:=<c>.P}
 2. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; fin (ImpL <coname>.trm1 name1.trm2 name2) x; x \<noteq> y; x \<sharp> P\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(drule fin_ImpL_elim)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; coname \<sharp> name2; name1 \<sharp> trm1; name1 \<sharp> name2; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> name2 \<sharp> [name1].trm2\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1 name1.trm2 name2[x\<turnstile>n>y]{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1 name1.trm2 name2{y:=<c>.P}
[PROOF STEP]
apply(simp add: abs_fresh)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> ImpL <coname>.trm1[x\<turnstile>n>y] name1.trm2[x\<turnstile>n>y] y{y:=<c>.P} = Cut <c>.P x.ImpL <coname>.trm1{y:=<c>.P} name1.trm2{y:=<c>.P} x
[PROOF STEP]
apply(simp add: subst_fresh rename_fresh)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.ImpL <coname>.trm1[x\<turnstile>n>y]{y:=<c>.P} name1.trm2[x\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P x.ImpL <coname>.trm1{y:=<c>.P} name1.trm2{y:=<c>.P} x
[PROOF STEP]
apply(subgoal_tac "\<exists>z::name. z\<sharp>(name1,x,P,trm1[x\<turnstile>n>y]{y:=<c>.P},trm2[x\<turnstile>n>y]{y:=<c>.P},y,P,trm1,trm2)")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2); \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.ImpL <coname>.trm1[x\<turnstile>n>y]{y:=<c>.P} name1.trm2[x\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P x.ImpL <coname>.trm1{y:=<c>.P} name1.trm2{y:=<c>.P} x
 2. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(erule exE, simp add: fresh_prod)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2); z \<sharp> name1 \<and> z \<sharp> x \<and> z \<sharp> P \<and> z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P} \<and> z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P} \<and> z \<sharp> y \<and> z \<sharp> P \<and> z \<sharp> trm1 \<and> z \<sharp> trm2\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.ImpL <coname>.trm1[x\<turnstile>n>y]{y:=<c>.P} name1.trm2[x\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P x.ImpL <coname>.trm1{y:=<c>.P} name1.trm2{y:=<c>.P} x
 2. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(erule conjE)+
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<sharp> name1; name2 \<sharp> trm1; name2 = name1 \<or> name2 \<sharp> trm2; z \<sharp> x; z \<sharp> P; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> fresh_fun (\<lambda>z'. Cut <c>.P z'.ImpL <coname>.trm1[x\<turnstile>n>y]{y:=<c>.P} name1.trm2[x\<turnstile>n>y]{y:=<c>.P} z') = Cut <c>.P x.ImpL <coname>.trm1{y:=<c>.P} name1.trm2{y:=<c>.P} x
 2. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(simp add: fresh_fun_simp_ImpL)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<sharp> name1; x \<sharp> trm1; x = name1 \<or> x \<sharp> trm2; z \<sharp> x; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> Cut <c>.P z.ImpL <coname>.trm1[x\<turnstile>n>y]{y:=<c>.P} name1.trm2[x\<turnstile>n>y]{y:=<c>.P} z = Cut <c>.P x.ImpL <coname>.trm1{y:=<c>.P} name1.trm2{y:=<c>.P} x
 2. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(simp add: trm.inject alpha fresh_atm calc_atm abs_fresh)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; name1 \<noteq> x; name1 \<noteq> y; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<noteq> name1; x \<sharp> trm1; x \<sharp> trm2; z \<noteq> x; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm1[x\<turnstile>n>y]{y:=<c>.P} = [(z, x)] \<bullet> trm1{y:=<c>.P} \<and> trm2[x\<turnstile>n>y]{y:=<c>.P} = [(z, x)] \<bullet> trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 2. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(rule conjI)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; name1 \<noteq> x; name1 \<noteq> y; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<noteq> name1; x \<sharp> trm1; x \<sharp> trm2; z \<noteq> x; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm1[x\<turnstile>n>y]{y:=<c>.P} = [(z, x)] \<bullet> trm1{y:=<c>.P}
 2. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; name1 \<noteq> x; name1 \<noteq> y; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<noteq> name1; x \<sharp> trm1; x \<sharp> trm2; z \<noteq> x; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[x\<turnstile>n>y]{y:=<c>.P} = [(z, x)] \<bullet> trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 3. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(simp add: nsubst_eqvt calc_atm)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; name1 \<noteq> x; name1 \<noteq> y; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<noteq> name1; x \<sharp> trm1; x \<sharp> trm2; z \<noteq> x; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm1[x\<turnstile>n>y]{y:=<c>.P} = ([(z, x)] \<bullet> trm1){y:=<c>.([(z, x)] \<bullet> P)}
 2. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; name1 \<noteq> x; name1 \<noteq> y; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<noteq> name1; x \<sharp> trm1; x \<sharp> trm2; z \<noteq> x; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[x\<turnstile>n>y]{y:=<c>.P} = [(z, x)] \<bullet> trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 3. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(simp add: perm_fresh_fresh)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; name1 \<noteq> x; name1 \<noteq> y; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<noteq> name1; x \<sharp> trm1; x \<sharp> trm2; z \<noteq> x; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm1[x\<turnstile>n>y]{y:=<c>.P} = trm1{y:=<c>.P}
 2. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; name1 \<noteq> x; name1 \<noteq> y; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<noteq> name1; x \<sharp> trm1; x \<sharp> trm2; z \<noteq> x; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[x\<turnstile>n>y]{y:=<c>.P} = [(z, x)] \<bullet> trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 3. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(simp add: nrename_fresh)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; name1 \<noteq> x; name1 \<noteq> y; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<noteq> name1; x \<sharp> trm1; x \<sharp> trm2; z \<noteq> x; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[x\<turnstile>n>y]{y:=<c>.P} = [(z, x)] \<bullet> trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 2. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(simp add: nsubst_eqvt calc_atm)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; name1 \<noteq> x; name1 \<noteq> y; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<noteq> name1; x \<sharp> trm1; x \<sharp> trm2; z \<noteq> x; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[x\<turnstile>n>y]{y:=<c>.P} = ([(z, x)] \<bullet> trm2){y:=<c>.([(z, x)] \<bullet> P)} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 2. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(simp add: perm_fresh_fresh)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>coname trm1 name1 trm2 name2 x y c P z. \<lbrakk>coname \<noteq> c; coname \<sharp> P; name1 \<noteq> x; name1 \<noteq> y; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x; z \<noteq> name1; x \<sharp> trm1; x \<sharp> trm2; z \<noteq> x; z \<sharp> trm1[x\<turnstile>n>y]{y:=<c>.P}; z \<sharp> trm2[x\<turnstile>n>y]{y:=<c>.P}; z \<noteq> y; z \<sharp> P; z \<sharp> trm1; z \<sharp> trm2\<rbrakk> \<Longrightarrow> trm2[x\<turnstile>n>y]{y:=<c>.P} = trm2{y:=<c>.P} \<and> z \<sharp> trm1{y:=<c>.P} \<and> z \<sharp> trm2{y:=<c>.P}
 2. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(simp add: nrename_fresh)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> \<exists>z. z \<sharp> (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2)
[PROOF STEP]
apply(rule exists_fresh')
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>coname trm1 name1 trm2 name2 x y c P. \<lbrakk>coname \<sharp> x; coname \<sharp> y; coname \<sharp> c; coname \<sharp> P; name1 \<sharp> x; name1 \<sharp> y; name1 \<sharp> c; name1 \<sharp> P; coname \<sharp> trm2; name1 \<sharp> trm1; \<And>b ba bb bc. \<lbrakk>fin trm1 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm1[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm1{ba:=<bb>.bc}; \<And>b ba bb bc. \<lbrakk>fin trm2 b; b \<noteq> ba; b \<sharp> bc\<rbrakk> \<Longrightarrow> trm2[b\<turnstile>n>ba]{ba:=<bb>.bc} = Cut <bb>.bc b.trm2{ba:=<bb>.bc}; x \<noteq> y; x \<sharp> P; name2 = x \<and> name2 \<sharp> trm1 \<and> (name2 = name1 \<or> name2 \<sharp> trm2)\<rbrakk> \<Longrightarrow> finite (supp (name1, x, P, trm1[x\<turnstile>n>y]{y:=<c>.P}, trm2[x\<turnstile>n>y]{y:=<c>.P}, y, P, trm1, trm2))
[PROOF STEP]
apply(rule fin_supp)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done