Nominal/ExLeroy.thy
changeset 1773 c0eac04ae3b4
parent 1772 48c2eb84d5ce
child 1774 c34347ec7ab3
equal deleted inserted replaced
1772:48c2eb84d5ce 1773:c0eac04ae3b4
     1 theory ExLeroy
       
     2 imports "Parser"
       
     3 begin
       
     4 
       
     5 (* example form Leroy 96 about modules; OTT *)
       
     6 
       
     7 atom_decl name
       
     8 
       
     9 ML {* val _ = recursive := false  *}
       
    10 nominal_datatype mexp =
       
    11   Acc "path"
       
    12 | Stru "body"
       
    13 | Funct x::"name" "sexp" m::"mexp"    bind x in m
       
    14 | FApp "mexp" "path"
       
    15 | Ascr "mexp" "sexp"
       
    16 and body =
       
    17   Empty
       
    18 | Seq c::defn d::"body"     bind "cbinders c" in d
       
    19 and defn =
       
    20   Type "name" "tyty"
       
    21 | Dty "name"
       
    22 | DStru "name" "mexp"
       
    23 | Val "name" "trmtrm"
       
    24 and sexp =
       
    25   Sig sbody
       
    26 | SFunc "name" "sexp" "sexp"
       
    27 and sbody =
       
    28   SEmpty
       
    29 | SSeq C::spec D::sbody    bind "Cbinders C" in D
       
    30 and spec =
       
    31   Type1 "name"
       
    32 | Type2 "name" "tyty"
       
    33 | SStru "name" "sexp"
       
    34 | SVal "name" "tyty"
       
    35 and tyty =
       
    36   Tyref1 "name"
       
    37 | Tyref2 "path" "tyty"
       
    38 | Fun "tyty" "tyty"
       
    39 and path =
       
    40   Sref1 "name"
       
    41 | Sref2 "path" "name"
       
    42 and trmtrm =
       
    43   Tref1 "name"
       
    44 | Tref2 "path" "name"
       
    45 | Lam' v::"name" "tyty" M::"trmtrm"  bind v in M
       
    46 | App' "trmtrm" "trmtrm"
       
    47 | Let' "body" "trmtrm"
       
    48 binder
       
    49     cbinders :: "defn \<Rightarrow> atom set"
       
    50 and Cbinders :: "spec \<Rightarrow> atom set"
       
    51 where
       
    52   "cbinders (Type t T) = {atom t}"
       
    53 | "cbinders (Dty t) = {atom t}"
       
    54 | "cbinders (DStru x s) = {atom x}"
       
    55 | "cbinders (Val v M) = {atom v}"
       
    56 | "Cbinders (Type1 t) = {atom t}"
       
    57 | "Cbinders (Type2 t T) = {atom t}"
       
    58 | "Cbinders (SStru x S) = {atom x}"
       
    59 | "Cbinders (SVal v T) = {atom v}"
       
    60 
       
    61 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm.fv
       
    62 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm.eq_iff
       
    63 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm.bn
       
    64 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm.perm
       
    65 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm.induct
       
    66 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm.inducts
       
    67 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm.distinct
       
    68 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm.supp
       
    69 thm mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm.fv[simplified mexp_body_defn_sexp_sbody_spec_tyty_path_trmtrm.supp]
       
    70 
       
    71 end
       
    72 
       
    73 
       
    74