src/CTT/ex/equal.ML
author paulson
Sat, 10 Jan 1998 17:59:32 +0100
changeset 4552 bb8ff763c93d
parent 3837 d7f033c74b38
child 9251 bd57acd44fc1
permissions -rw-r--r--
Simplified proofs by omitting PA = {|XA, ...|} from RA2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1459
d12da312eff4 expanded tabs
clasohm
parents: 1294
diff changeset
     1
(*  Title:      CTT/ex/equal
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
1459
d12da312eff4 expanded tabs
clasohm
parents: 1294
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
Equality reasoning by rewriting.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
val prems =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
goal CTT.thy "p : Sum(A,B) ==> split(p,pair) = p : Sum(A,B)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
by (rtac EqE 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    12
by (resolve_tac elim_rls 1  THEN  resolve_tac prems 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
by (rew_tac prems);
1294
1358dc040edb added calls of init_html and make_chart;
clasohm
parents: 0
diff changeset
    14
qed "split_eq";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
val prems =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
goal CTT.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
    "[| A type;  B type;  p : A+B |] ==> when(p,inl,inr) = p : A + B";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
by (rtac EqE 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
by (resolve_tac elim_rls 1  THEN  resolve_tac prems 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
by (rew_tac prems);
1294
1358dc040edb added calls of init_html and make_chart;
clasohm
parents: 0
diff changeset
    22
qed "when_eq";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
(*in the "rec" formulation of addition, 0+n=n *)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
val prems =
3837
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    27
goal CTT.thy "p:N ==> rec(p,0, %y z. succ(y)) = p : N";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
by (rtac EqE 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
by (resolve_tac elim_rls 1  THEN  resolve_tac prems 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
by (rew_tac prems);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    33
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    34
(*the harder version, n+0=n: recursive, uses induction hypothesis*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    35
val prems =
3837
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    36
goal CTT.thy "p:N ==> rec(p,0, %y z. succ(z)) = p : N";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    37
by (rtac EqE 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
by (resolve_tac elim_rls 1  THEN  resolve_tac prems 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
by (hyp_rew_tac prems);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    40
result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    42
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
(*Associativity of addition*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
val prems =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    45
goal CTT.thy
3837
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    46
   "[| a:N;  b:N;  c:N |] ==> rec(rec(a, b, %x y. succ(y)), c, %x y. succ(y)) = \
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    47
\                   rec(a, rec(b, c, %x y. succ(y)), %x y. succ(y)) : N";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    48
by (NE_tac "a" 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
by (hyp_rew_tac prems);
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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    53
(*Martin-Lof (1984) page 62: pairing is surjective*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    54
val prems =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    55
goal CTT.thy
3837
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    56
    "p : Sum(A,B) ==> <split(p,%x y. x), split(p,%x y. y)> = p : Sum(A,B)";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    57
by (rtac EqE 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    58
by (resolve_tac elim_rls 1  THEN  resolve_tac prems 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    59
by (DEPTH_SOLVE_1 (rew_tac prems));   (*!!!!!!!*)
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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    63
val prems =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    64
goal CTT.thy "[| a : A;  b : B |] ==> \
3837
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    65
\    (lam u. split(u, %v w.<w,v>)) ` <a,b> = <b,a> : SUM x:B. A";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    66
by (rew_tac prems);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    67
result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    68
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    69
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    70
(*a contrived, complicated simplication, requires sum-elimination also*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    71
val prems =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    72
goal CTT.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    73
   "(lam f. lam x. f`(f`x)) ` (lam u. split(u, %v w.<w,v>)) =  \
3837
d7f033c74b38 fixed dots;
wenzelm
parents: 1459
diff changeset
    74
\     lam x. x  :  PROD x:(SUM y:N. N). (SUM y:N. N)";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    75
by (resolve_tac reduction_rls 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    76
by (resolve_tac intrL_rls 3);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    77
by (rtac EqE 4);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    78
by (rtac SumE 4  THEN  assume_tac 4);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    79
(*order of unifiers is essential here*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    80
by (rew_tac prems);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    81
result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    82
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    83
writeln"Reached end of file.";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    84
(*28 August 1988: loaded this file in 34 seconds*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    85
(*2 September 1988: loaded this file in 48 seconds*)