doc-src/Logics/CTT-eg.txt
author lcp
Fri, 07 Apr 1995 10:12:01 +0200
changeset 1022 c4921e635bf7
parent 359 b5a2e9503a7a
child 5151 1e944fe5ce96
permissions -rw-r--r--
Local version of (original) hypsubst: needs no simplifier
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     1
(**** CTT examples -- process using Doc/tout CTT-eg.txt  ****)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     2
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     3
Pretty.setmargin 72;  (*existing macros just allow this margin*)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     4
print_depth 0;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     5
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     6
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     7
(*** Type inference, from CTT/ex/typechk.ML ***)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     8
115
745affa0262b Misc updates
lcp
parents: 104
diff changeset
     9
goal CTT.thy "lam n. rec(n, 0, %x y.x) : ?A";
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    10
by (resolve_tac [ProdI] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    11
by (eresolve_tac [NE] 2);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    12
by (resolve_tac [NI0] 2);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    13
by (assume_tac 2);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    14
by (resolve_tac [NF] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    15
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    16
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    17
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    18
(*** Logical reasoning, from CTT/ex/elim.ML ***)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    19
115
745affa0262b Misc updates
lcp
parents: 104
diff changeset
    20
val prems = goal CTT.thy
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    21
    "[| A type;  \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    22
\       !!x. x:A ==> B(x) type;       \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    23
\       !!x. x:A ==> C(x) type;       \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    24
\       p: SUM x:A. B(x) + C(x)       \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    25
\    |] ==>  ?a : (SUM x:A. B(x)) + (SUM x:A. C(x))";
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    26
by (resolve_tac (prems RL [SumE]) 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    27
by (eresolve_tac [PlusE] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    28
by (resolve_tac [PlusI_inl] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    29
by (resolve_tac [SumI] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    30
by (assume_tac 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    31
by (assume_tac 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    32
by (typechk_tac prems);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    33
by (pc_tac prems 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    34
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    35
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    36
(*** Currying, from CTT/ex/elim.ML ***)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    37
115
745affa0262b Misc updates
lcp
parents: 104
diff changeset
    38
val prems = goal CTT.thy
359
b5a2e9503a7a final Springer version
lcp
parents: 115
diff changeset
    39
    "[| A type; !!x. x:A ==> B(x) type; 			\
b5a2e9503a7a final Springer version
lcp
parents: 115
diff changeset
    40
\               !!z. z: (SUM x:A. B(x)) ==> C(z) type 		\
b5a2e9503a7a final Springer version
lcp
parents: 115
diff changeset
    41
\    |] ==> ?a : PROD f: (PROD z : (SUM x:A . B(x)) . C(z)).	\
b5a2e9503a7a final Springer version
lcp
parents: 115
diff changeset
    42
\                     (PROD x:A . PROD y:B(x) . C(<x,y>))";
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    43
by (intr_tac prems);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    44
by (eresolve_tac [ProdE] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    45
by (intr_tac prems);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    46
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    47
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    48
(*** Axiom of Choice ***)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    49
115
745affa0262b Misc updates
lcp
parents: 104
diff changeset
    50
val prems = goal CTT.thy   
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    51
    "[| A type;  !!x. x:A ==> B(x) type;  \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    52
\       !!x y.[| x:A;  y:B(x) |] ==> C(x,y) type  \
359
b5a2e9503a7a final Springer version
lcp
parents: 115
diff changeset
    53
\    |] ==> ?a : PROD h: (PROD x:A. SUM y:B(x). C(x,y)).    \
b5a2e9503a7a final Springer version
lcp
parents: 115
diff changeset
    54
\                        (SUM f: (PROD x:A. B(x)). PROD x:A. C(x, f`x))";
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    55
by (intr_tac prems);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    56
by (eresolve_tac [ProdE RS SumE_fst] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    57
by (assume_tac 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    58
by (resolve_tac [replace_type] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    59
by (resolve_tac [subst_eqtyparg] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    60
by (resolve_tac [ProdC] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    61
by (typechk_tac (SumE_fst::prems));
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    62
by (eresolve_tac [ProdE RS SumE_snd] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    63
by (typechk_tac prems);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    64
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    65
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    66
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    67
115
745affa0262b Misc updates
lcp
parents: 104
diff changeset
    68
> goal CTT.thy "lam n. rec(n, 0, %x y.x) : ?A";
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    69
Level 0
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    70
lam n. rec(n,0,%x y. x) : ?A
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    71
 1. lam n. rec(n,0,%x y. x) : ?A
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    72
> by (resolve_tac [ProdI] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    73
Level 1
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    74
lam n. rec(n,0,%x y. x) : PROD x:?A1. ?B1(x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    75
 1. ?A1 type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    76
 2. !!n. n : ?A1 ==> rec(n,0,%x y. x) : ?B1(n)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    77
> by (eresolve_tac [NE] 2);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    78
Level 2
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    79
lam n. rec(n,0,%x y. x) : PROD x:N. ?C2(x,x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    80
 1. N type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    81
 2. !!n. 0 : ?C2(n,0)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    82
 3. !!n x y. [| x : N; y : ?C2(n,x) |] ==> x : ?C2(n,succ(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    83
> by (resolve_tac [NI0] 2);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    84
Level 3
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    85
lam n. rec(n,0,%x y. x) : N --> N
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    86
 1. N type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    87
 2. !!n x y. [| x : N; y : N |] ==> x : N
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    88
> by (assume_tac 2);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    89
Level 4
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    90
lam n. rec(n,0,%x y. x) : N --> N
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    91
 1. N type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    92
> by (resolve_tac [NF] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    93
Level 5
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    94
lam n. rec(n,0,%x y. x) : N --> N
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    95
No subgoals!
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    96
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    97
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    98
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    99
115
745affa0262b Misc updates
lcp
parents: 104
diff changeset
   100
> val prems = goal CTT.thy
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   101
#     "[| A type;  \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   102
# \       !!x. x:A ==> B(x) type;       \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   103
# \       !!x. x:A ==> C(x) type;       \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   104
# \       p: SUM x:A. B(x) + C(x)       \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   105
# \    |] ==>  ?a : (SUM x:A. B(x)) + (SUM x:A. C(x))";
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   106
Level 0
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   107
?a : (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   108
 1. ?a : (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   109
> by (resolve_tac (prems RL [SumE]) 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   110
Level 1
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   111
split(p,?c1) : (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   112
 1. !!x y.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   113
       [| x : A; y : B(x) + C(x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   114
       ?c1(x,y) : (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   115
> by (eresolve_tac [PlusE] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   116
Level 2
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   117
split(p,%x y. when(y,?c2(x,y),?d2(x,y)))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   118
: (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   119
 1. !!x y xa.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   120
       [| x : A; xa : B(x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   121
       ?c2(x,y,xa) : (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   122
 2. !!x y ya.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   123
       [| x : A; ya : C(x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   124
       ?d2(x,y,ya) : (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   125
> by (resolve_tac [PlusI_inl] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   126
Level 3
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   127
split(p,%x y. when(y,%xa. inl(?a3(x,y,xa)),?d2(x,y)))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   128
: (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   129
 1. !!x y xa. [| x : A; xa : B(x) |] ==> ?a3(x,y,xa) : SUM x:A. B(x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   130
 2. !!x y xa. [| x : A; xa : B(x) |] ==> SUM x:A. C(x) type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   131
 3. !!x y ya.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   132
       [| x : A; ya : C(x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   133
       ?d2(x,y,ya) : (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   134
> by (resolve_tac [SumI] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   135
Level 4
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   136
split(p,%x y. when(y,%xa. inl(<?a4(x,y,xa),?b4(x,y,xa)>),?d2(x,y)))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   137
: (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   138
 1. !!x y xa. [| x : A; xa : B(x) |] ==> ?a4(x,y,xa) : A
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   139
 2. !!x y xa. [| x : A; xa : B(x) |] ==> ?b4(x,y,xa) : B(?a4(x,y,xa))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   140
 3. !!x y xa. [| x : A; xa : B(x) |] ==> SUM x:A. C(x) type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   141
 4. !!x y ya.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   142
       [| x : A; ya : C(x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   143
       ?d2(x,y,ya) : (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   144
> by (assume_tac 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   145
Level 5
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   146
split(p,%x y. when(y,%xa. inl(<x,?b4(x,y,xa)>),?d2(x,y)))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   147
: (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   148
 1. !!x y xa. [| x : A; xa : B(x) |] ==> ?b4(x,y,xa) : B(x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   149
 2. !!x y xa. [| x : A; xa : B(x) |] ==> SUM x:A. C(x) type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   150
 3. !!x y ya.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   151
       [| x : A; ya : C(x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   152
       ?d2(x,y,ya) : (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   153
> by (assume_tac 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   154
Level 6
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   155
split(p,%x y. when(y,%xa. inl(<x,xa>),?d2(x,y)))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   156
: (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   157
 1. !!x y xa. [| x : A; xa : B(x) |] ==> SUM x:A. C(x) type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   158
 2. !!x y ya.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   159
       [| x : A; ya : C(x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   160
       ?d2(x,y,ya) : (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   161
> by (typechk_tac prems);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   162
Level 7
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   163
split(p,%x y. when(y,%xa. inl(<x,xa>),?d2(x,y)))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   164
: (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   165
 1. !!x y ya.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   166
       [| x : A; ya : C(x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   167
       ?d2(x,y,ya) : (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   168
> by (pc_tac prems 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   169
Level 8
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   170
split(p,%x y. when(y,%xa. inl(<x,xa>),%y. inr(<x,y>)))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   171
: (SUM x:A. B(x)) + (SUM x:A. C(x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   172
No subgoals!
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   173
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   174
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   175
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   176
115
745affa0262b Misc updates
lcp
parents: 104
diff changeset
   177
> val prems = goal CTT.thy
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   178
#     "[| A type; !!x. x:A ==> B(x) type; \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   179
# \               !!z. z: (SUM x:A. B(x)) ==> C(z) type |] \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   180
# \    ==> ?a : (PROD z : (SUM x:A . B(x)) . C(z)) \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   181
# \         --> (PROD x:A . PROD y:B(x) . C(<x,y>))";
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   182
Level 0
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   183
?a : (PROD z:SUM x:A. B(x). C(z)) --> (PROD x:A. PROD y:B(x). C(<x,y>))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   184
 1. ?a : (PROD z:SUM x:A. B(x). C(z)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   185
         (PROD x:A. PROD y:B(x). C(<x,y>))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   186
> by (intr_tac prems);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   187
Level 1
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   188
lam x xa xb. ?b7(x,xa,xb)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   189
: (PROD z:SUM x:A. B(x). C(z)) --> (PROD x:A. PROD y:B(x). C(<x,y>))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   190
 1. !!uu x y.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   191
       [| uu : PROD z:SUM x:A. B(x). C(z); x : A; y : B(x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   192
       ?b7(uu,x,y) : C(<x,y>)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   193
> by (eresolve_tac [ProdE] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   194
Level 2
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   195
lam x xa xb. x ` <xa,xb>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   196
: (PROD z:SUM x:A. B(x). C(z)) --> (PROD x:A. PROD y:B(x). C(<x,y>))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   197
 1. !!uu x y. [| x : A; y : B(x) |] ==> <x,y> : SUM x:A. B(x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   198
> by (intr_tac prems);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   199
Level 3
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   200
lam x xa xb. x ` <xa,xb>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   201
: (PROD z:SUM x:A. B(x). C(z)) --> (PROD x:A. PROD y:B(x). C(<x,y>))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   202
No subgoals!
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   203
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   204
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   205
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   206
115
745affa0262b Misc updates
lcp
parents: 104
diff changeset
   207
> val prems = goal CTT.thy
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   208
#     "[| A type;  !!x. x:A ==> B(x) type;  \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   209
# \       !!x y.[| x:A;  y:B(x) |] ==> C(x,y) type  \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   210
# \    |] ==> ?a :    (PROD x:A. SUM y:B(x). C(x,y))    \
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   211
# \               --> (SUM f: (PROD x:A. B(x)). PROD x:A. C(x, f`x))";
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   212
Level 0
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   213
?a : (PROD x:A. SUM y:B(x). C(x,y)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   214
     (SUM f:PROD x:A. B(x). PROD x:A. C(x,f ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   215
 1. ?a : (PROD x:A. SUM y:B(x). C(x,y)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   216
         (SUM f:PROD x:A. B(x). PROD x:A. C(x,f ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   217
> by (intr_tac prems);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   218
Level 1
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   219
lam x. <lam xa. ?b7(x,xa),lam xa. ?b8(x,xa)>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   220
: (PROD x:A. SUM y:B(x). C(x,y)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   221
  (SUM f:PROD x:A. B(x). PROD x:A. C(x,f ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   222
 1. !!uu x.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   223
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   224
       ?b7(uu,x) : B(x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   225
 2. !!uu x.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   226
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   227
       ?b8(uu,x) : C(x,(lam x. ?b7(uu,x)) ` x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   228
> by (eresolve_tac [ProdE RS SumE_fst] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   229
Level 2
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   230
lam x. <lam xa. fst(x ` xa),lam xa. ?b8(x,xa)>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   231
: (PROD x:A. SUM y:B(x). C(x,y)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   232
  (SUM f:PROD x:A. B(x). PROD x:A. C(x,f ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   233
 1. !!uu x. x : A ==> x : A
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   234
 2. !!uu x.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   235
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   236
       ?b8(uu,x) : C(x,(lam x. fst(uu ` x)) ` x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   237
> by (assume_tac 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   238
Level 3
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   239
lam x. <lam xa. fst(x ` xa),lam xa. ?b8(x,xa)>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   240
: (PROD x:A. SUM y:B(x). C(x,y)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   241
  (SUM f:PROD x:A. B(x). PROD x:A. C(x,f ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   242
 1. !!uu x.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   243
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   244
       ?b8(uu,x) : C(x,(lam x. fst(uu ` x)) ` x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   245
> by (resolve_tac [replace_type] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   246
Level 4
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   247
lam x. <lam xa. fst(x ` xa),lam xa. ?b8(x,xa)>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   248
: (PROD x:A. SUM y:B(x). C(x,y)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   249
  (SUM f:PROD x:A. B(x). PROD x:A. C(x,f ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   250
 1. !!uu x.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   251
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   252
       C(x,(lam x. fst(uu ` x)) ` x) = ?A13(uu,x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   253
 2. !!uu x.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   254
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   255
       ?b8(uu,x) : ?A13(uu,x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   256
> by (resolve_tac [subst_eqtyparg] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   257
Level 5
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   258
lam x. <lam xa. fst(x ` xa),lam xa. ?b8(x,xa)>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   259
: (PROD x:A. SUM y:B(x). C(x,y)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   260
  (SUM f:PROD x:A. B(x). PROD x:A. C(x,f ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   261
 1. !!uu x.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   262
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   263
       (lam x. fst(uu ` x)) ` x = ?c14(uu,x) : ?A14(uu,x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   264
 2. !!uu x z.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   265
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   266
          z : ?A14(uu,x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   267
       C(x,z) type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   268
 3. !!uu x.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   269
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   270
       ?b8(uu,x) : C(x,?c14(uu,x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   271
> by (resolve_tac [ProdC] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   272
Level 6
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   273
lam x. <lam xa. fst(x ` xa),lam xa. ?b8(x,xa)>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   274
: (PROD x:A. SUM y:B(x). C(x,y)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   275
  (SUM f:PROD x:A. B(x). PROD x:A. C(x,f ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   276
 1. !!uu x.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   277
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A |] ==> x : ?A15(uu,x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   278
 2. !!uu x xa.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   279
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   280
          xa : ?A15(uu,x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   281
       fst(uu ` xa) : ?B15(uu,x,xa)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   282
 3. !!uu x z.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   283
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   284
          z : ?B15(uu,x,x) |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   285
       C(x,z) type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   286
 4. !!uu x.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   287
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   288
       ?b8(uu,x) : C(x,fst(uu ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   289
> by (typechk_tac (SumE_fst::prems));
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   290
Level 7
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   291
lam x. <lam xa. fst(x ` xa),lam xa. ?b8(x,xa)>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   292
: (PROD x:A. SUM y:B(x). C(x,y)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   293
  (SUM f:PROD x:A. B(x). PROD x:A. C(x,f ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   294
 1. !!uu x.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   295
       [| uu : PROD x:A. SUM y:B(x). C(x,y); x : A |] ==>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   296
       ?b8(uu,x) : C(x,fst(uu ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   297
> by (eresolve_tac [ProdE RS SumE_snd] 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   298
Level 8
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   299
lam x. <lam xa. fst(x ` xa),lam xa. snd(x ` xa)>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   300
: (PROD x:A. SUM y:B(x). C(x,y)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   301
  (SUM f:PROD x:A. B(x). PROD x:A. C(x,f ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   302
 1. !!uu x. x : A ==> x : A
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   303
 2. !!uu x. x : A ==> B(x) type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   304
 3. !!uu x xa. [| x : A; xa : B(x) |] ==> C(x,xa) type
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   305
> by (typechk_tac prems);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   306
Level 9
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   307
lam x. <lam xa. fst(x ` xa),lam xa. snd(x ` xa)>
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   308
: (PROD x:A. SUM y:B(x). C(x,y)) -->
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   309
  (SUM f:PROD x:A. B(x). PROD x:A. C(x,f ` x))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   310
No subgoals!