diff -r 118a0ca16381 -r 387fcbd33820 Nominal/Ex/Classical.thy --- a/Nominal/Ex/Classical.thy Tue Jun 01 15:46:07 2010 +0200 +++ b/Nominal/Ex/Classical.thy Wed Jun 02 11:37:51 2010 +0200 @@ -4,26 +4,23 @@ (* example from my Urban's PhD *) -(* - alpha_trm_raw is incorrectly defined, therefore the equivalence proof - does not go through; below the correct definition is given -*) - atom_decl name atom_decl coname -ML {* val _ = cheat_equivp := true *} +declare [[STEPS = 9]] nominal_datatype trm = Ax "name" "coname" -| Cut n::"coname" t1::"trm" c::"coname" t2::"trm" bind n in t1, bind c in t2 -| AndR c1::"coname" t1::"trm" c2::"coname" t2::"trm" "coname" bind c1 in t1, bind c2 in t2 -| AndL1 n::"name" t::"trm" "name" bind n in t -| AndL2 n::"name" t::"trm" "name" bind n in t -| ImpL c::"coname" t1::"trm" n::"name" t2::"trm" "name" bind c in t1, bind n in t2 -| ImpR c::"coname" n::"name" t::"trm" "coname" bind n c in t +| Cut n::"coname" t1::"trm" c::"coname" t2::"trm" bind_set n in t1, bind_set c in t2 +| AndR c1::"coname" t1::"trm" c2::"coname" t2::"trm" "coname" bind_set c1 in t1, bind_set c2 in t2 +| AndL1 n::"name" t::"trm" "name" bind_set n in t +| AndL2 n::"name" t::"trm" "name" bind_set n in t +| ImpL c::"coname" t1::"trm" n::"name" t2::"trm" "name" bind_set c in t1, bind_set n in t2 +| ImpR c::"coname" n::"name" t::"trm" "coname" bind_set n c in t +thm alpha_trm_raw.intros[no_vars] +(* thm trm.fv thm trm.eq_iff thm trm.bn @@ -31,44 +28,7 @@ thm trm.induct thm trm.distinct thm trm.fv[simplified trm.supp] - -(* correct alpha definition *) - -inductive - alpha -where - "\name = namea; coname = conamea\ \ - alpha (Ax_raw name coname) (Ax_raw namea conamea)" -| "\\pi. ({atom coname1}, trm_raw1) \gen alpha fv_trm_raw pi ({atom coname1a}, trm_raw1a); - \pia. ({atom coname2}, trm_raw2) \gen alpha fv_trm_raw pia ({atom coname2a}, trm_raw2a)\ \ - alpha (Cut_raw coname1 trm_raw1 coname2 trm_raw2) - (Cut_raw coname1a trm_raw1a coname2a trm_raw2a)" -| "\\pi. ({atom coname1}, trm_raw1) \gen alpha fv_trm_raw pi ({atom coname1a}, trm_raw1a); - \pia. ({atom coname2}, trm_raw2) \gen alpha fv_trm_raw pia ({atom coname2a}, trm_raw2a); - coname3 = coname3a\ \ - alpha (AndR_raw coname1 trm_raw1 coname2 trm_raw2 coname3) - (AndR_raw coname1a trm_raw1a coname2a trm_raw2a coname3a)" -| "\\pi. ({atom name1}, trm_raw) \gen alpha fv_trm_raw pi ({atom name1a}, trm_rawa); - name2 = name2a\ \ - alpha (AndL1_raw name1 trm_raw name2) (AndL1_raw name1a trm_rawa name2a)" -| "\\pi. ({atom name1}, trm_raw) \gen alpha fv_trm_raw pi ({atom name1a}, trm_rawa); - name2 = name2a\ \ - alpha (AndL2_raw name1 trm_raw name2) (AndL2_raw name1a trm_rawa name2a)" -| "\\pi. ({atom coname}, trm_raw1) \gen alpha fv_trm_raw pi ({atom conamea}, trm_raw1a); - \pia. ({atom name1}, trm_raw2) \gen alpha fv_trm_raw pia ({atom name1a}, trm_raw2a); - name2 = name2a\ \ - alpha (ImpL_raw coname trm_raw1 name1 trm_raw2 name2) - (ImpL_raw conamea trm_raw1a name1a trm_raw2a name2a)" -| "\\pi.({atom name} \ {atom coname1}, trm_raw) \gen alpha fv_trm_raw pi - ({atom namea} \ {atom coname1a}, trm_rawa); coname2 = coname2a\ \ - alpha (ImpR_raw coname1 name trm_raw coname2) - (ImpR_raw coname1a namea trm_rawa coname2a)" - -thm alpha.intros - -equivariance alpha - -thm eqvts_raw +*) end