src/HOL/Nominal/Examples/Class2.thy
changeset 44193 013f7b14f6ff
parent 41893 dde7df1176b7
child 46008 c296c75f4cf4
equal deleted inserted replaced
44192:a32ca9165928 44193:013f7b14f6ff
  3243 proof (nominal_induct B rule: ty.strong_induct)
  3243 proof (nominal_induct B rule: ty.strong_induct)
  3244   case (PR X)
  3244   case (PR X)
  3245   { case 1 show ?case 
  3245   { case 1 show ?case 
  3246       apply -
  3246       apply -
  3247       apply(simp add: lfp_eqvt)
  3247       apply(simp add: lfp_eqvt)
  3248       apply(simp add: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3248       apply(simp add: perm_fun_def [where 'a="ntrm set"])
  3249       apply(simp add: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name)
  3249       apply(simp add: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name)
  3250       apply(perm_simp)
  3250       apply(perm_simp)
  3251     done
  3251     done
  3252   next
  3252   next
  3253     case 2 show ?case
  3253     case 2 show ?case
  3254       apply -
  3254       apply -
  3255       apply(simp only: NEGc_simps)
  3255       apply(simp only: NEGc_simps)
  3256       apply(simp add: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name)
  3256       apply(simp add: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name)
  3257       apply(simp add: lfp_eqvt)
  3257       apply(simp add: lfp_eqvt)
  3258       apply(simp add: comp_def)
  3258       apply(simp add: comp_def)
  3259       apply(simp add: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3259       apply(simp add: perm_fun_def [where 'a="ntrm set"])
  3260       apply(simp add: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name)
  3260       apply(simp add: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name)
  3261       apply(perm_simp)
  3261       apply(perm_simp)
  3262       done
  3262       done
  3263   }
  3263   }
  3264 next
  3264 next
  3267   have ih2: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3267   have ih2: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3268   have g: "pi\<bullet>(\<parallel>(NOT B)\<parallel>) = (\<parallel>(NOT B)\<parallel>)"
  3268   have g: "pi\<bullet>(\<parallel>(NOT B)\<parallel>) = (\<parallel>(NOT B)\<parallel>)"
  3269     apply -
  3269     apply -
  3270     apply(simp only: lfp_eqvt)
  3270     apply(simp only: lfp_eqvt)
  3271     apply(simp only: comp_def)
  3271     apply(simp only: comp_def)
  3272     apply(simp only: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3272     apply(simp only: perm_fun_def [where 'a="ntrm set"])
  3273     apply(simp only: NEGc.simps NEGn.simps)
  3273     apply(simp only: NEGc.simps NEGn.simps)
  3274     apply(simp only: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name NOTRIGHT_eqvt_name NOTLEFT_eqvt_name)
  3274     apply(simp only: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name NOTRIGHT_eqvt_name NOTLEFT_eqvt_name)
  3275     apply(perm_simp add: ih1 ih2)
  3275     apply(perm_simp add: ih1 ih2)
  3276     done
  3276     done
  3277   { case 1 show ?case by (rule g)
  3277   { case 1 show ?case by (rule g)
  3287   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3287   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3288   have g: "pi\<bullet>(\<parallel>(A AND B)\<parallel>) = (\<parallel>(A AND B)\<parallel>)"
  3288   have g: "pi\<bullet>(\<parallel>(A AND B)\<parallel>) = (\<parallel>(A AND B)\<parallel>)"
  3289     apply -
  3289     apply -
  3290     apply(simp only: lfp_eqvt)
  3290     apply(simp only: lfp_eqvt)
  3291     apply(simp only: comp_def)
  3291     apply(simp only: comp_def)
  3292     apply(simp only: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3292     apply(simp only: perm_fun_def [where 'a="ntrm set"])
  3293     apply(simp only: NEGc.simps NEGn.simps)
  3293     apply(simp only: NEGc.simps NEGn.simps)
  3294     apply(simp only: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name ANDRIGHT_eqvt_name 
  3294     apply(simp only: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name ANDRIGHT_eqvt_name 
  3295                      ANDLEFT2_eqvt_name ANDLEFT1_eqvt_name)
  3295                      ANDLEFT2_eqvt_name ANDLEFT1_eqvt_name)
  3296     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3296     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3297     done
  3297     done
  3309   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3309   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3310   have g: "pi\<bullet>(\<parallel>(A OR B)\<parallel>) = (\<parallel>(A OR B)\<parallel>)"
  3310   have g: "pi\<bullet>(\<parallel>(A OR B)\<parallel>) = (\<parallel>(A OR B)\<parallel>)"
  3311     apply -
  3311     apply -
  3312     apply(simp only: lfp_eqvt)
  3312     apply(simp only: lfp_eqvt)
  3313     apply(simp only: comp_def)
  3313     apply(simp only: comp_def)
  3314     apply(simp only: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3314     apply(simp only: perm_fun_def [where 'a="ntrm set"])
  3315     apply(simp only: NEGc.simps NEGn.simps)
  3315     apply(simp only: NEGc.simps NEGn.simps)
  3316     apply(simp only: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name ORRIGHT1_eqvt_name 
  3316     apply(simp only: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name ORRIGHT1_eqvt_name 
  3317                      ORRIGHT2_eqvt_name ORLEFT_eqvt_name)
  3317                      ORRIGHT2_eqvt_name ORLEFT_eqvt_name)
  3318     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3318     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3319     done
  3319     done
  3331   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3331   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3332   have g: "pi\<bullet>(\<parallel>(A IMP B)\<parallel>) = (\<parallel>(A IMP B)\<parallel>)"
  3332   have g: "pi\<bullet>(\<parallel>(A IMP B)\<parallel>) = (\<parallel>(A IMP B)\<parallel>)"
  3333     apply -
  3333     apply -
  3334     apply(simp only: lfp_eqvt)
  3334     apply(simp only: lfp_eqvt)
  3335     apply(simp only: comp_def)
  3335     apply(simp only: comp_def)
  3336     apply(simp only: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3336     apply(simp only: perm_fun_def [where 'a="ntrm set"])
  3337     apply(simp only: NEGc.simps NEGn.simps)
  3337     apply(simp only: NEGc.simps NEGn.simps)
  3338     apply(simp only: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name IMPRIGHT_eqvt_name IMPLEFT_eqvt_name)
  3338     apply(simp only: union_eqvt AXIOMS_eqvt_name BINDING_eqvt_name IMPRIGHT_eqvt_name IMPLEFT_eqvt_name)
  3339     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3339     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3340     done
  3340     done
  3341   { case 1 show ?case by (rule g)
  3341   { case 1 show ?case by (rule g)
  3353 proof (nominal_induct B rule: ty.strong_induct)
  3353 proof (nominal_induct B rule: ty.strong_induct)
  3354   case (PR X)
  3354   case (PR X)
  3355   { case 1 show ?case 
  3355   { case 1 show ?case 
  3356       apply -
  3356       apply -
  3357       apply(simp add: lfp_eqvt)
  3357       apply(simp add: lfp_eqvt)
  3358       apply(simp add: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3358       apply(simp add: perm_fun_def [where 'a="ntrm set"])
  3359       apply(simp add: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname)
  3359       apply(simp add: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname)
  3360       apply(perm_simp)
  3360       apply(perm_simp)
  3361     done
  3361     done
  3362   next
  3362   next
  3363     case 2 show ?case
  3363     case 2 show ?case
  3364       apply -
  3364       apply -
  3365       apply(simp only: NEGc_simps)
  3365       apply(simp only: NEGc_simps)
  3366       apply(simp add: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname)
  3366       apply(simp add: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname)
  3367       apply(simp add: lfp_eqvt)
  3367       apply(simp add: lfp_eqvt)
  3368       apply(simp add: comp_def)
  3368       apply(simp add: comp_def)
  3369       apply(simp add: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3369       apply(simp add: perm_fun_def [where 'a="ntrm set"])
  3370       apply(simp add: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname)
  3370       apply(simp add: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname)
  3371       apply(perm_simp)
  3371       apply(perm_simp)
  3372       done
  3372       done
  3373   }
  3373   }
  3374 next
  3374 next
  3377   have ih2: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3377   have ih2: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3378   have g: "pi\<bullet>(\<parallel>(NOT B)\<parallel>) = (\<parallel>(NOT B)\<parallel>)"
  3378   have g: "pi\<bullet>(\<parallel>(NOT B)\<parallel>) = (\<parallel>(NOT B)\<parallel>)"
  3379     apply -
  3379     apply -
  3380     apply(simp only: lfp_eqvt)
  3380     apply(simp only: lfp_eqvt)
  3381     apply(simp only: comp_def)
  3381     apply(simp only: comp_def)
  3382     apply(simp only: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3382     apply(simp only: perm_fun_def [where 'a="ntrm set"])
  3383     apply(simp only: NEGc.simps NEGn.simps)
  3383     apply(simp only: NEGc.simps NEGn.simps)
  3384     apply(simp only: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname 
  3384     apply(simp only: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname 
  3385             NOTRIGHT_eqvt_coname NOTLEFT_eqvt_coname)
  3385             NOTRIGHT_eqvt_coname NOTLEFT_eqvt_coname)
  3386     apply(perm_simp add: ih1 ih2)
  3386     apply(perm_simp add: ih1 ih2)
  3387     done
  3387     done
  3399   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3399   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3400   have g: "pi\<bullet>(\<parallel>(A AND B)\<parallel>) = (\<parallel>(A AND B)\<parallel>)"
  3400   have g: "pi\<bullet>(\<parallel>(A AND B)\<parallel>) = (\<parallel>(A AND B)\<parallel>)"
  3401     apply -
  3401     apply -
  3402     apply(simp only: lfp_eqvt)
  3402     apply(simp only: lfp_eqvt)
  3403     apply(simp only: comp_def)
  3403     apply(simp only: comp_def)
  3404     apply(simp only: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3404     apply(simp only: perm_fun_def [where 'a="ntrm set"])
  3405     apply(simp only: NEGc.simps NEGn.simps)
  3405     apply(simp only: NEGc.simps NEGn.simps)
  3406     apply(simp only: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname ANDRIGHT_eqvt_coname 
  3406     apply(simp only: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname ANDRIGHT_eqvt_coname 
  3407                      ANDLEFT2_eqvt_coname ANDLEFT1_eqvt_coname)
  3407                      ANDLEFT2_eqvt_coname ANDLEFT1_eqvt_coname)
  3408     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3408     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3409     done
  3409     done
  3421   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3421   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3422   have g: "pi\<bullet>(\<parallel>(A OR B)\<parallel>) = (\<parallel>(A OR B)\<parallel>)"
  3422   have g: "pi\<bullet>(\<parallel>(A OR B)\<parallel>) = (\<parallel>(A OR B)\<parallel>)"
  3423     apply -
  3423     apply -
  3424     apply(simp only: lfp_eqvt)
  3424     apply(simp only: lfp_eqvt)
  3425     apply(simp only: comp_def)
  3425     apply(simp only: comp_def)
  3426     apply(simp only: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3426     apply(simp only: perm_fun_def [where 'a="ntrm set"])
  3427     apply(simp only: NEGc.simps NEGn.simps)
  3427     apply(simp only: NEGc.simps NEGn.simps)
  3428     apply(simp only: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname ORRIGHT1_eqvt_coname 
  3428     apply(simp only: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname ORRIGHT1_eqvt_coname 
  3429                      ORRIGHT2_eqvt_coname ORLEFT_eqvt_coname)
  3429                      ORRIGHT2_eqvt_coname ORLEFT_eqvt_coname)
  3430     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3430     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3431     done
  3431     done
  3443   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3443   have ih4: "pi\<bullet>(\<parallel><B>\<parallel>) = (\<parallel><B>\<parallel>)" by fact
  3444   have g: "pi\<bullet>(\<parallel>(A IMP B)\<parallel>) = (\<parallel>(A IMP B)\<parallel>)"
  3444   have g: "pi\<bullet>(\<parallel>(A IMP B)\<parallel>) = (\<parallel>(A IMP B)\<parallel>)"
  3445     apply -
  3445     apply -
  3446     apply(simp only: lfp_eqvt)
  3446     apply(simp only: lfp_eqvt)
  3447     apply(simp only: comp_def)
  3447     apply(simp only: comp_def)
  3448     apply(simp only: perm_fun_def [where 'a="ntrm \<Rightarrow> bool"])
  3448     apply(simp only: perm_fun_def [where 'a="ntrm set"])
  3449     apply(simp only: NEGc.simps NEGn.simps)
  3449     apply(simp only: NEGc.simps NEGn.simps)
  3450     apply(simp only: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname IMPRIGHT_eqvt_coname 
  3450     apply(simp only: union_eqvt AXIOMS_eqvt_coname BINDING_eqvt_coname IMPRIGHT_eqvt_coname 
  3451          IMPLEFT_eqvt_coname)
  3451          IMPLEFT_eqvt_coname)
  3452     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3452     apply(perm_simp add: ih1 ih2 ih3 ih4)
  3453     done
  3453     done