src/HOL/MiniML/MiniML.thy
changeset 1476 608483c2122a
parent 1400 5d909faf0e04
child 1525 d127436567d0
equal deleted inserted replaced
1475:7f5a4cd08209 1476:608483c2122a
     8 
     8 
     9 MiniML = Type + 
     9 MiniML = Type + 
    10 
    10 
    11 (* expressions *)
    11 (* expressions *)
    12 datatype
    12 datatype
    13 	expr = Var nat | Abs expr | App expr expr
    13         expr = Var nat | Abs expr | App expr expr
    14 
    14 
    15 (* type inference rules *)
    15 (* type inference rules *)
    16 consts
    16 consts
    17 	has_type :: "(typ list * expr * typ)set"
    17         has_type :: "(typ list * expr * typ)set"
    18 syntax
    18 syntax
    19         "@has_type" :: [typ list, expr, typ] => bool
    19         "@has_type" :: [typ list, expr, typ] => bool
    20                        ("((_) |-/ (_) :: (_))" 60)
    20                        ("((_) |-/ (_) :: (_))" 60)
    21 translations 
    21 translations 
    22         "a |- e :: t" == "(a,e,t):has_type"
    22         "a |- e :: t" == "(a,e,t):has_type"
    23 
    23 
    24 inductive "has_type"
    24 inductive "has_type"
    25 intrs
    25 intrs
    26 	VarI "[| n < length a |] ==> a |- Var n :: nth n a"
    26         VarI "[| n < length a |] ==> a |- Var n :: nth n a"
    27 	AbsI "[| t1#a |- e :: t2 |] ==> a |- Abs e :: t1 -> t2"
    27         AbsI "[| t1#a |- e :: t2 |] ==> a |- Abs e :: t1 -> t2"
    28 	AppI "[| a |- e1 :: t2 -> t1; a |- e2 :: t2 |] 
    28         AppI "[| a |- e1 :: t2 -> t1; a |- e2 :: t2 |] 
    29      	      ==> a |- App e1 e2 :: t1"
    29               ==> a |- App e1 e2 :: t1"
    30 
    30 
    31 end
    31 end
    32 
    32