src/CTT/ex/typechk.ML
author webertj
Sun, 14 Nov 2004 01:40:27 +0100
changeset 15283 f21466450330
parent 9251 bd57acd44fc1
permissions -rw-r--r--
DOCTYPE declaration added
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1459
d12da312eff4 expanded tabs
clasohm
parents: 0
diff changeset
     1
(*  Title:      CTT/ex/typechk
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
1459
d12da312eff4 expanded tabs
clasohm
parents: 0
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     4
    Copyright   1991  University of Cambridge
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     5
  
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     6
Easy examples: type checking and type deduction
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
writeln"Single-step proofs: verifying that a type is well-formed";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    11
Goal "?A type";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    12
by (resolve_tac form_rls 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    14
writeln"getting a second solution";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
back();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
by (resolve_tac form_rls 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
by (resolve_tac form_rls 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    20
Goal "PROD z:?A . N + ?B(z) type";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
by (resolve_tac form_rls 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
by (resolve_tac form_rls 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
by (resolve_tac form_rls 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
by (resolve_tac form_rls 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
by (resolve_tac form_rls 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
uresult(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
writeln"Multi-step proofs: Type inference";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    31
Goal "PROD w:N. N + N type";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
by form_tac;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    33
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    34
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    35
Goal "<0, succ(0)> : ?A";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    36
by (intr_tac[]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    37
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    39
Goal "PROD w:N . Eq(?A,w,w) type";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    40
by (typechk_tac[]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    42
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    43
Goal "PROD x:N . PROD y:N . Eq(?A,x,y) type";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
by (typechk_tac[]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    45
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    46
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    47
writeln"typechecking an application of fst";
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    48
Goal "(lam u. split(u, %v w. v)) ` <0, succ(0)> : ?A";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
by (typechk_tac[]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    50
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    51
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
writeln"typechecking the predecessor function";
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    53
Goal "lam n. rec(n, 0, %x y. x) : ?A";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    54
by (typechk_tac[]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    55
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    56
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    57
writeln"typechecking the addition function";
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    58
Goal "lam n. lam m. rec(n, m, %x y. succ(y)) : ?A";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    59
by (typechk_tac[]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    60
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    61
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    62
(*Proofs involving arbitrary types.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    63
  For concreteness, every type variable left over is forced to be N*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    64
val N_tac = TRYALL (rtac NF);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    65
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    66
Goal "lam w. <w,w> : ?A";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    67
by (typechk_tac[]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    68
by N_tac;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    69
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    70
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    71
Goal "lam x. lam y. x : ?A";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    72
by (typechk_tac[]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    73
by N_tac;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    74
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    75
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    76
writeln"typechecking fst (as a function object) ";
9251
bd57acd44fc1 more tidying. also generalized some tactics to prove "Type A" and
paulson
parents: 3837
diff changeset
    77
Goal "lam i. split(i, %j k. j) : ?A";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    78
by (typechk_tac[]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    79
by N_tac;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    80
result(); 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    81
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    82
writeln"Reached end of file.";