src/HOL/Prolog/Type.thy
author wenzelm
Sat, 01 Dec 2001 18:52:32 +0100
changeset 12338 de0f4a63baa5
parent 9015 8006e9009621
child 13208 965f95a3abd9
permissions -rw-r--r--
renamed class "term" to "type" (actually "HOL.type");
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     1
(* type inference *)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     2
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     3
Type = Func +
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     4
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     5
types ty
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     6
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 9015
diff changeset
     7
arities ty :: type
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     8
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     9
consts  bool	:: ty
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    10
	nat	:: ty
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    11
	"->"	:: ty => ty => ty	(infixr 20)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    12
	typeof	:: [tm, ty] => bool
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    13
        anyterm :: tm
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    14
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    15
rules	common_typeof	"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    16
typeof (app M N) B       :- typeof M (A -> B) & typeof N A..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    17
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    18
typeof (cond C L R) A :- typeof C bool & typeof L A & typeof R A..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    19
typeof (fix F)   A       :- (!x. typeof x A => typeof (F  x) A)..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    20
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    21
typeof true  bool..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    22
typeof false bool..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    23
typeof (M and N) bool :- typeof M bool & typeof N bool..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    24
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    25
typeof (M eq  N) bool :- typeof M T    & typeof N T   ..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    26
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    27
typeof  Z    nat..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    28
typeof (S N) nat :- typeof N nat..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    29
typeof (M + N) nat :- typeof M nat & typeof N nat..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    30
typeof (M - N) nat :- typeof M nat & typeof N nat..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    31
typeof (M * N) nat :- typeof M nat & typeof N nat"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    32
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    33
rules	good_typeof	"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    34
typeof (abs Bo) (A -> B) :- (!x. typeof x A => typeof (Bo x) B)"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    35
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    36
rules	bad1_typeof	"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    37
typeof (abs Bo) (A -> B) :- (typeof varterm A => typeof (Bo varterm) B)"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    38
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    39
rules	bad2_typeof	"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    40
typeof (abs Bo) (A -> B) :- (typeof anyterm A => typeof (Bo anyterm) B)"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    41
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    42
end