lemma not_fic_crename_aux: assumes a: "fic M c""c\(a,b)" shows"fic (M[a\c>b]) c" using a apply(nominal_induct M avoiding: c a b rule: trm.strong_induct) apply(auto dest!: fic_elims intro!: fic.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh) done
lemma not_fic_crename: assumes a: "\(fic (M[a\c>b]) c)""c\(a,b)" shows"\(fic M c)" using a apply(auto dest: not_fic_crename_aux) done
lemma not_fin_crename_aux: assumes a: "fin M y" shows"fin (M[a\c>b]) y" using a apply(nominal_induct M avoiding: a b rule: trm.strong_induct) apply(auto dest!: fin_elims intro!: fin.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh) done
lemma not_fin_crename: assumes a: "\(fin (M[a\c>b]) y)" shows"\(fin M y)" using a apply(auto dest: not_fin_crename_aux) done
lemma crename_fresh_interesting1: fixes c::"coname" assumes a: "c\(M[a\c>b])""c\(a,b)" shows"c\M" using a apply(nominal_induct M avoiding: c a b rule: trm.strong_induct) apply(auto split: if_splits simp add: abs_fresh) done
lemma crename_fresh_interesting2: fixes x::"name" assumes a: "x\(M[a\c>b])" shows"x\M" using a apply(nominal_induct M avoiding: x a b rule: trm.strong_induct) apply(auto split: if_splits simp add: abs_fresh abs_supp fin_supp fresh_atm) done
lemma fic_crename: assumes a: "fic (M[a\c>b]) c""c\(a,b)" shows"fic M c" using a apply(nominal_induct M avoiding: c a b rule: trm.strong_induct) apply(auto dest!: fic_elims intro!: fic.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh
split: if_splits) apply(auto dest: crename_fresh_interesting1 simp add: fresh_prod fresh_atm) done
lemma fin_crename: assumes a: "fin (M[a\c>b]) x" shows"fin M x" using a apply(nominal_induct M avoiding: x a b rule: trm.strong_induct) apply(auto dest!: fin_elims intro!: fin.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh
split: if_splits) apply(auto dest: crename_fresh_interesting2 simp add: fresh_prod fresh_atm) done
lemma crename_NotR: assumes a: "R[a\c>b] = NotR (x).N c""x\R""c\(a,b)" shows"\N'. (R = NotR (x).N' c) \ N'[a\c>b] = N" using a apply(nominal_induct R avoiding: a b c x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name,x)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma crename_NotR': assumes a: "R[a\c>b] = NotR (x).N c""x\R""c\a" shows"(\N'. (R = NotR (x).N' c) \ N'[a\c>b] = N) \ (\N'. (R = NotR (x).N' a) \ b=c \ N'[a\c>b] = N)" using a apply(nominal_induct R avoiding: a b c x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm abs_fresh alpha trm.inject) apply(rule_tac x="[(name,x)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) apply(rule_tac x="[(name,x)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma crename_NotR_aux: assumes a: "R[a\c>b] = NotR (x).N c" shows"(a=c \ a=b) \ (a\c)" using a apply(nominal_induct R avoiding: a b c x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done
lemma crename_NotL: assumes a: "R[a\c>b] = NotL .N y""c\(R,a,b)" shows"\N'. (R = NotL .N' y) \ N'[a\c>b] = N" using a apply(nominal_induct R avoiding: a b c y N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname,c)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_coname_inst,OF at_coname_inst]) apply(simp add: eqvts calc_atm) done
lemma crename_AndL1: assumes a: "R[a\c>b] = AndL1 (x).N y""x\R" shows"\N'. (R = AndL1 (x).N' y) \ N'[a\c>b] = N" using a apply(nominal_induct R avoiding: a b x y N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name1,x)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma crename_AndL2: assumes a: "R[a\c>b] = AndL2 (x).N y""x\R" shows"\N'. (R = AndL2 (x).N' y) \ N'[a\c>b] = N" using a apply(nominal_induct R avoiding: a b x y N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name1,x)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma crename_AndR_aux: assumes a: "R[a\c>b] = AndR .M .N e" shows"(a=e \ a=b) \ (a\e)" using a apply(nominal_induct R avoiding: a b c d e M N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done
lemma crename_OrR1_aux: assumes a: "R[a\c>b] = OrR1 .M e" shows"(a=e \ a=b) \ (a\e)" using a apply(nominal_induct R avoiding: a b c e M rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done
lemma crename_OrR1: assumes a: "R[a\c>b] = OrR1 .N d""c\(R,a,b)""d\(a,b)" shows"\N'. (R = OrR1 .N' d) \ N'[a\c>b] = N" using a apply(nominal_induct R avoiding: a b c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname1,c)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_coname_inst,OF at_coname_inst]) apply(simp add: eqvts calc_atm) done
lemma crename_OrR2_aux: assumes a: "R[a\c>b] = OrR2 .M e" shows"(a=e \ a=b) \ (a\e)" using a apply(nominal_induct R avoiding: a b c e M rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done
lemma crename_OrR2: assumes a: "R[a\c>b] = OrR2 .N d""c\(R,a,b)""d\(a,b)" shows"\N'. (R = OrR2 .N' d) \ N'[a\c>b] = N" using a apply(nominal_induct R avoiding: a b c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname1,c)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_coname_inst,OF at_coname_inst]) apply(simp add: eqvts calc_atm) done
lemma crename_OrL: assumes a: "R[a\c>b] = OrL (x).M (y).N z""x\(y,z,N,R)""y\(x,z,M,R)" shows"\M' N'. R = OrL (x).M' (y).N' z \ M'[a\c>b] = M \ N'[a\c>b] = N \ x\N' \ y\M'" using a apply(nominal_induct R avoiding: a b x y z M N rule: trm.strong_induct) apply(auto split: if_splits simp add: trm.inject alpha) apply(rule_tac x="[(name2,y)]\trm2"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(rule_tac x="[(name1,x)]\trm1"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(rule_tac x="[(name1,x)]\trm1"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(rule_tac x="[(name2,y)]\trm2"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(drule sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) apply(drule_tac s="trm2[a\c>b]"in sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma crename_ImpL: assumes a: "R[a\c>b] = ImpL .M (y).N z""c\(a,b,N,R)""y\(z,M,R)" shows"\M' N'. R = ImpL .M' (y).N' z \ M'[a\c>b] = M \ N'[a\c>b] = N \ c\N' \ y\M'" using a apply(nominal_induct R avoiding: a b c y z M N rule: trm.strong_induct) apply(auto split: if_splits simp add: trm.inject alpha) apply(rule_tac x="[(name1,y)]\trm2"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(rule_tac x="[(coname,c)]\trm1"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(rule_tac x="[(coname,c)]\trm1"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(rule_tac x="[(name1,y)]\trm2"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(drule sym) apply(drule pt_bij1[OF pt_coname_inst,OF at_coname_inst]) apply(simp add: eqvts calc_atm) apply(drule_tac s="trm2[a\c>b]"in sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma crename_ImpR_aux: assumes a: "R[a\c>b] = ImpR (x)..M e" shows"(a=e \ a=b) \ (a\e)" using a apply(nominal_induct R avoiding: x a b c e M rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done
lemma crename_ImpR: assumes a: "R[a\c>b] = ImpR (x)..N d""c\(R,a,b)""d\(a,b)""x\R" shows"\N'. (R = ImpR (x)..N' d) \ N'[a\c>b] = N" using a apply(nominal_induct R avoiding: a b x c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm abs_perm alpha abs_fresh trm.inject) apply(rule_tac x="[(name,x)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(rule_tac x="[(name,x)]\[(coname1, c)]\trm"in exI) apply(perm_simp) apply(simp add: abs_supp fin_supp abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_coname_inst,OF at_coname_inst]) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma crename_ax2: assumes a: "N[a\c>b] = Ax x c" shows"\d. N = Ax x d" using a apply(nominal_induct N avoiding: a b rule: trm.strong_induct) apply(auto split: if_splits) apply(simp add: trm.inject) done
lemma crename_interesting1: assumes a: "distinct [a,b,c]" shows"M[a\c>c][c\c>b] = M[c\c>b][a\c>b]" using a apply(nominal_induct M avoiding: a c b rule: trm.strong_induct) apply(auto simp add: rename_fresh simp add: trm.inject alpha) apply(blast) apply(rotate_tac 12) apply(drule_tac x="a"in meta_spec) apply(rotate_tac 15) apply(drule_tac x="c"in meta_spec) apply(rotate_tac 15) apply(drule_tac x="b"in meta_spec) apply(blast) apply(blast) apply(blast) done
lemma crename_interesting2: assumes a: "a\c""a\d""a\b""c\d""b\c" shows"M[a\c>b][c\c>d] = M[c\c>d][a\c>b]" using a apply(nominal_induct M avoiding: a c b d rule: trm.strong_induct) apply(auto simp add: rename_fresh simp add: trm.inject alpha) done
lemma crename_interesting3: shows"M[a\c>c][x\n>y] = M[x\n>y][a\c>c]" apply(nominal_induct M avoiding: a c x y rule: trm.strong_induct) apply(auto simp add: rename_fresh simp add: trm.inject alpha) done
lemma nrename_interesting2: assumes a: "x\z""x\u""x\y""z\u""y\z" shows"M[x\n>y][z\n>u] = M[z\n>u][x\n>y]" using a apply(nominal_induct M avoiding: x y z u rule: trm.strong_induct) apply(auto simp add: rename_fresh simp add: trm.inject alpha) done
lemma not_fic_nrename_aux: assumes a: "fic M c" shows"fic (M[x\n>y]) c" using a apply(nominal_induct M avoiding: c x y rule: trm.strong_induct) apply(auto dest!: fic_elims intro!: fic.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh) done
lemma not_fic_nrename: assumes a: "\(fic (M[x\n>y]) c)" shows"\(fic M c)" using a apply(auto dest: not_fic_nrename_aux) done
lemma fin_nrename: assumes a: "fin M z""z\(x,y)" shows"fin (M[x\n>y]) z" using a apply(nominal_induct M avoiding: x y z rule: trm.strong_induct) apply(auto dest!: fin_elims intro!: fin.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh
split: if_splits) done
lemma nrename_fresh_interesting1: fixes z::"name" assumes a: "z\(M[x\n>y])""z\(x,y)" shows"z\M" using a apply(nominal_induct M avoiding: x y z rule: trm.strong_induct) apply(auto split: if_splits simp add: abs_fresh abs_supp fin_supp) done
lemma nrename_fresh_interesting2: fixes c::"coname" assumes a: "c\(M[x\n>y])" shows"c\M" using a apply(nominal_induct M avoiding: x y c rule: trm.strong_induct) apply(auto split: if_splits simp add: abs_fresh abs_supp fin_supp fresh_atm) done
lemma fin_nrename2: assumes a: "fin (M[x\n>y]) z""z\(x,y)" shows"fin M z" using a apply(nominal_induct M avoiding: x y z rule: trm.strong_induct) apply(auto dest!: fin_elims intro!: fin.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh
split: if_splits) apply(auto dest: nrename_fresh_interesting1 simp add: fresh_atm fresh_prod) done
lemma nrename_Cut: assumes a: "R[x\n>y] = Cut .M (z).N""c\(N,R)""z\(x,y,M,R)" shows"\M' N'. R = Cut .M' (z).N' \ M'[x\n>y] = M \ N'[x\n>y] = N \ c\N' \ z\M'" using a apply(nominal_induct R avoiding: c y x z M N rule: trm.strong_induct) apply(auto split: if_splits) apply(simp add: trm.inject) apply(auto simp add: alpha fresh_atm) apply(rule_tac x="[(coname,c)]\trm1"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(rule_tac x="[(name,z)]\trm2"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(rule conjI) apply(drule sym) apply(drule pt_bij1[OF pt_coname_inst,OF at_coname_inst]) apply(simp add: eqvts calc_atm) apply(auto simp add: fresh_atm)[1] apply(drule sym) apply(drule sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma nrename_NotR: assumes a: "R[x\n>y] = NotR (z).N c""z\(R,x,y)" shows"\N'. (R = NotR (z).N' c) \ N'[x\n>y] = N" using a apply(nominal_induct R avoiding: x y c z N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name,z)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma nrename_NotL: assumes a: "R[x\n>y] = NotL .N z""c\R""z\(x,y)" shows"\N'. (R = NotL .N' z) \ N'[x\n>y] = N" using a apply(nominal_induct R avoiding: x y c z N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname,c)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_coname_inst,OF at_coname_inst]) apply(simp add: eqvts calc_atm) done
lemma nrename_NotL_aux: assumes a: "R[x\n>y] = NotL .N u" shows"(x=u \ x=y) \ (x\u)" using a apply(nominal_induct R avoiding: y u c x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done
lemma nrename_AndL1: assumes a: "R[x\n>y] = AndL1 (z).N u""z\(R,x,y)""u\(x,y)" shows"\N'. (R = AndL1 (z).N' u) \ N'[x\n>y] = N" using a apply(nominal_induct R avoiding: z u x y N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name1,z)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma nrename_AndL1_aux: assumes a: "R[x\n>y] = AndL1 (v).N u" shows"(x=u \ x=y) \ (x\u)" using a apply(nominal_induct R avoiding: y u v x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done
lemma nrename_AndL2: assumes a: "R[x\n>y] = AndL2 (z).N u""z\(R,x,y)""u\(x,y)" shows"\N'. (R = AndL2 (z).N' u) \ N'[x\n>y] = N" using a apply(nominal_induct R avoiding: z u x y N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name1,z)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma nrename_AndL2_aux: assumes a: "R[x\n>y] = AndL2 (v).N u" shows"(x=u \ x=y) \ (x\u)" using a apply(nominal_induct R avoiding: y u v x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done
lemma nrename_AndR: assumes a: "R[x\n>y] = AndR .M .N e""c\(d,e,N,R)""d\(c,e,M,R)" shows"\M' N'. R = AndR .M' .N' e \ M'[x\n>y] = M \ N'[x\n>y] = N \ c\N' \ d\M'" using a apply(nominal_induct R avoiding: x y c d e M N rule: trm.strong_induct) apply(auto split: if_splits simp add: trm.inject alpha) apply(simp add: fresh_atm fresh_prod) apply(rule_tac x="[(coname1,c)]\trm1"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(rule_tac x="[(coname1,c)]\trm1"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(rule_tac x="[(coname2,d)]\trm2"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(drule sym) apply(drule pt_bij1[OF pt_coname_inst,OF at_coname_inst]) apply(simp add: eqvts calc_atm) apply(drule_tac s="trm2[x\n>y]"in sym) apply(drule pt_bij1[OF pt_coname_inst,OF at_coname_inst]) apply(simp add: eqvts calc_atm) done
lemma nrename_OrR1: assumes a: "R[x\n>y] = OrR1 .N d""c\(R,d)" shows"\N'. (R = OrR1 .N' d) \ N'[x\n>y] = N" using a apply(nominal_induct R avoiding: x y c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname1,c)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_coname_inst,OF at_coname_inst]) apply(simp add: eqvts calc_atm) done
lemma nrename_OrR2: assumes a: "R[x\n>y] = OrR2 .N d""c\(R,d)" shows"\N'. (R = OrR2 .N' d) \ N'[x\n>y] = N" using a apply(nominal_induct R avoiding: x y c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname1,c)]\trm"in exI) apply(perm_simp) apply(simp add: abs_fresh fresh_left calc_atm fresh_prod) apply(drule sym) apply(drule pt_bij1[OF pt_coname_inst,OF at_coname_inst]) apply(simp add: eqvts calc_atm) done
lemma nrename_OrL: assumes a: "R[u\n>v] = OrL (x).M (y).N z""x\(y,z,u,v,N,R)""y\(x,z,u,v,M,R)""z\(u,v)" shows"\M' N'. R = OrL (x).M' (y).N' z \ M'[u\n>v] = M \ N'[u\n>v] = N \ x\N' \ y\M'" using a apply(nominal_induct R avoiding: u v x y z M N rule: trm.strong_induct) apply(auto split: if_splits simp add: trm.inject alpha fresh_prod fresh_atm) apply(rule_tac x="[(name1,x)]\trm1"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(rule_tac x="[(name2,y)]\trm2"in exI) apply(perm_simp) apply(auto simp add: abs_fresh fresh_left calc_atm fresh_prod fresh_atm)[1] apply(drule sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) apply(drule_tac s="trm2[u\n>v]"in sym) apply(drule pt_bij1[OF pt_name_inst,OF at_name_inst]) apply(simp add: eqvts calc_atm) done
lemma nrename_OrL_aux: assumes a: "R[x\n>y] = OrL (v).M (w).N u" shows"(x=u \ x=y) \ (x\u)" using a apply(nominal_induct R avoiding: y x w u v M N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.