src/CTT/ex/typechk.ML
author oheimb
Fri, 02 Jun 2000 17:46:32 +0200
changeset 9020 1056cbbaeb29
parent 3837 d7f033c74b38
child 9251 bd57acd44fc1
permissions -rw-r--r--
added split_eta_SetCompr2 (also to simpset), generalized SetCompr_Sigma_eq
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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
goal CTT.thy "?A type";
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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
goal CTT.thy "PROD z:?A . N + ?B(z) type";
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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
goal CTT.thy "PROD w:N. N + N type";
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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    35
goal CTT.thy "<0, succ(0)> : ?A";
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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
goal CTT.thy "PROD w:N . Eq(?A,w,w) type";
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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
goal CTT.thy "PROD x:N . PROD y:N . Eq(?A,x,y) type";
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";
3837
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    48
goal CTT.thy "(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";
3837
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    53
goal CTT.thy "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";
3837
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    58
goal CTT.thy "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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    66
goal CTT.thy "lam w. <w,w> : ?A";
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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    71
goal CTT.thy "lam x. lam y. x : ?A";
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) ";
3837
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    77
goal CTT.thy "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.";