src/HOL/MiniML/I.thy
author nipkow
Wed, 25 Oct 1995 09:46:46 +0100
changeset 1300 c7a8f374339b
child 1376 92f83b9d17e1
permissions -rw-r--r--
New theory: type inference for let-free MiniML
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1300
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
     1
(*   Title:         MiniML.thy
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
     2
     Author:        Thomas Stauner
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
     3
     Copyright      1995 TU Muenchen
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
     4
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
     5
     Recursive definition of type inference algorithm I for Mini_ML.
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
     6
*)
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
     7
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
     8
I = W +
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
     9
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    10
consts
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    11
	I :: "[expr, type_expr list, nat, subst] => result_W"
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    12
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    13
primrec I expr
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    14
        I_Var	"I (Var i) a n s = (if i < length a then Ok(s, nth i a, n)
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    15
                                    else Fail)"
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    16
        I_Abs	"I (Abs e) a n s = I e ((TVar n)#a) (Suc n) s   bind
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    17
                                   (%(s,t,m). Ok(s, Fun (TVar n) t, m) )"
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    18
        I_App	"I (App e1 e2) a n s =
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    19
 		 I e1 a n s   bind
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    20
		 (%(s1,t1,m1). I e2 a m1 s1  bind   
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    21
		 (%(s2,t2,m2). mgu ($s2 t1) (Fun ($s2 t2) (TVar m2)) bind
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    22
		 (%u. Ok($u o s2, TVar m2, Suc m2) ) ))"
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    23
c7a8f374339b New theory: type inference for let-free MiniML
nipkow
parents:
diff changeset
    24
end