| 
1300
 | 
     1  | 
(* Title:     HOL/MiniML/MiniML.thy
  | 
| 
 | 
     2  | 
   ID:        $Id$
  | 
| 
2525
 | 
     3  | 
   Author:    Wolfgang Naraschewski and Tobias Nipkow
  | 
| 
 | 
     4  | 
   Copyright  1996 TU Muenchen
  | 
| 
1300
 | 
     5  | 
  | 
| 
 | 
     6  | 
Mini_ML with type inference rules.
  | 
| 
 | 
     7  | 
*)
  | 
| 
 | 
     8  | 
  | 
| 
2525
 | 
     9  | 
MiniML = Generalize + 
  | 
| 
1300
 | 
    10  | 
  | 
| 
 | 
    11  | 
(* expressions *)
  | 
| 
 | 
    12  | 
datatype
  | 
| 
2525
 | 
    13  | 
        expr = Var nat | Abs expr | App expr expr | LET expr expr
  | 
| 
1300
 | 
    14  | 
  | 
| 
 | 
    15  | 
(* type inference rules *)
  | 
| 
 | 
    16  | 
consts
  | 
| 
2525
 | 
    17  | 
        has_type :: "(ctxt * expr * typ)set"
  | 
| 
1300
 | 
    18  | 
syntax
  | 
| 
2525
 | 
    19  | 
        "@has_type" :: [ctxt, expr, typ] => bool
  | 
| 
1525
 | 
    20  | 
                       ("((_) |-/ (_) :: (_))" [60,0,60] 60)
 | 
| 
1300
 | 
    21  | 
translations 
  | 
| 
2525
 | 
    22  | 
        "A |- e :: t" == "(A,e,t):has_type"
  | 
| 
1300
 | 
    23  | 
  | 
| 
1790
 | 
    24  | 
inductive has_type
  | 
| 
1300
 | 
    25  | 
intrs
  | 
| 
4502
 | 
    26  | 
        VarI "[| n < length A; t <| A!n |] ==> A |- Var n :: t"
  | 
| 
2525
 | 
    27  | 
        AbsI "[| (mk_scheme t1)#A |- e :: t2 |] ==> A |- Abs e :: t1 -> t2"
  | 
| 
 | 
    28  | 
        AppI "[| A |- e1 :: t2 -> t1; A |- e2 :: t2 |] 
  | 
| 
 | 
    29  | 
              ==> A |- App e1 e2 :: t1"
  | 
| 
 | 
    30  | 
        LETI "[| A |- e1 :: t1; (gen A t1)#A |- e2 :: t |] ==> A |- LET e1 e2 :: t"
  | 
| 
1300
 | 
    31  | 
  | 
| 
 | 
    32  | 
end
  |