src/HOL/Prolog/Type.thy
author wenzelm
Tue, 13 Dec 2005 19:32:05 +0100
changeset 18398 5d63a8b35688
parent 17311 5b1d47d920ce
child 21425 c11ab38b78a7
permissions -rw-r--r--
tuned proofs;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13208
965f95a3abd9 added the usual file headers
oheimb
parents: 12338
diff changeset
     1
(*  Title:    HOL/Prolog/Type.thy
965f95a3abd9 added the usual file headers
oheimb
parents: 12338
diff changeset
     2
    ID:       $Id$
965f95a3abd9 added the usual file headers
oheimb
parents: 12338
diff changeset
     3
    Author:   David von Oheimb (based on a lecture on Lambda Prolog by Nadathur)
965f95a3abd9 added the usual file headers
oheimb
parents: 12338
diff changeset
     4
*)
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     5
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     6
header {* Type inference *}
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     7
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     8
theory Type
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     9
imports Func
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    10
begin
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    11
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    12
typedecl ty
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    13
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    14
consts
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    15
  bool    :: ty
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    16
  nat     :: ty
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    17
  "->"    :: "ty => ty => ty"       (infixr 20)
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    18
  typeof  :: "[tm, ty] => bool"
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    19
  anyterm :: tm
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    20
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    21
axioms  common_typeof:   "
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    22
typeof (app M N) B       :- typeof M (A -> B) & typeof N A..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    23
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    24
typeof (cond C L R) A :- typeof C bool & typeof L A & typeof R A..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    25
typeof (fix F)   A       :- (!x. typeof x A => typeof (F  x) A)..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    26
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    27
typeof true  bool..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    28
typeof false bool..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    29
typeof (M and N) bool :- typeof M bool & typeof N bool..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    30
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    31
typeof (M eq  N) bool :- typeof M T    & typeof N T   ..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    32
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    33
typeof  Z    nat..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    34
typeof (S N) nat :- typeof N nat..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    35
typeof (M + N) nat :- typeof M nat & typeof N nat..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    36
typeof (M - N) nat :- typeof M nat & typeof N nat..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    37
typeof (M * N) nat :- typeof M nat & typeof N nat"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    38
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    39
axioms good_typeof:     "
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    40
typeof (abs Bo) (A -> B) :- (!x. typeof x A => typeof (Bo x) B)"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    41
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    42
axioms bad1_typeof:     "
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    43
typeof (abs Bo) (A -> B) :- (typeof varterm A => typeof (Bo varterm) B)"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    44
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    45
axioms bad2_typeof:     "
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    46
typeof (abs Bo) (A -> B) :- (typeof anyterm A => typeof (Bo anyterm) B)"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    47
17311
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    48
ML {* use_legacy_bindings (the_context ()) *}
5b1d47d920ce converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    49
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    50
end