src/ZF/pair.ML
author paulson
Tue, 18 Jun 2002 10:52:08 +0200
changeset 13218 3732064ccbd1
parent 12836 5ef96e63fba6
permissions -rw-r--r--
conversion of Fixedpt to Isar script
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1105
diff changeset
     1
(*  Title:      ZF/pair
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1105
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     4
    Copyright   1992  University of Cambridge
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     5
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     6
Ordered pairs in Zermelo-Fraenkel Set Theory 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
(** Lemmas for showing that <a,b> uniquely determines a and b **)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    11
Goal "{a} = {b} <-> a=b";
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    12
by (resolve_tac [extension RS iff_trans] 1);
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    13
by (Blast_tac 1) ;
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    14
qed "singleton_eq_iff";
12814
paulson
parents: 12199
diff changeset
    15
AddIffs [singleton_eq_iff];
822
8d5748202c53 Added Krzysztof's theorems singleton_eq_iff, fst_type, snd_type
lcp
parents: 782
diff changeset
    16
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    17
Goal "{a,b} = {c,d} <-> (a=c & b=d) | (a=d & b=c)";
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    18
by (resolve_tac [extension RS iff_trans] 1);
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    19
by (Blast_tac 1) ;
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    20
qed "doubleton_eq_iff";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
9211
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    22
Goalw [Pair_def] "<a,b> = <c,d> <-> a=c & b=d";
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    23
by (simp_tac (simpset() addsimps [doubleton_eq_iff]) 1);
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    24
by (Blast_tac 1) ;
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    25
qed "Pair_iff";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    27
Addsimps [Pair_iff];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    28
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    29
bind_thm ("Pair_inject", Pair_iff RS iffD1 RS conjE);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    31
AddSEs [Pair_inject];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    32
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    33
bind_thm ("Pair_inject1", Pair_iff RS iffD1 RS conjunct1);
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    34
bind_thm ("Pair_inject2", Pair_iff RS iffD1 RS conjunct2);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    35
9211
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    36
Goalw [Pair_def]  "<a,b> ~= 0";
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    37
by (blast_tac (claset() addEs [equalityE]) 1) ;
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    38
qed "Pair_not_0";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    40
bind_thm ("Pair_neq_0", Pair_not_0 RS notE);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    42
AddSEs [Pair_neq_0, sym RS Pair_neq_0];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    43
9211
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    44
Goalw [Pair_def]  "<a,b>=a ==> P";
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    45
by (rtac (consI1 RS mem_asym RS FalseE) 1);
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    46
by (etac subst 1);
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    47
by (rtac consI1 1) ;
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    48
qed "Pair_neq_fst";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
9211
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    50
Goalw [Pair_def]  "<a,b>=b ==> P";
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    51
by (rtac (consI1 RS consI2 RS mem_asym RS FalseE) 1);
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    52
by (etac subst 1);
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    53
by (rtac (consI1 RS consI2) 1) ;
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    54
qed "Pair_neq_snd";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    55
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    56
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    57
(*** Sigma: Disjoint union of a family of sets
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    58
     Generalizes Cartesian product ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    59
9211
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    60
Goalw [Sigma_def]  "<a,b>: Sigma(A,B) <-> a:A & b:B(a)";
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    61
by (Blast_tac 1) ;
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    62
qed "Sigma_iff";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    63
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    64
Addsimps [Sigma_iff];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    65
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    66
Goal "[| a:A;  b:B(a) |] ==> <a,b> : Sigma(A,B)";
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    67
by (Asm_simp_tac 1);
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    68
qed "SigmaI";
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    69
6153
bff90585cce5 new typechecking solver for the simplifier
paulson
parents: 6112
diff changeset
    70
AddTCs [SigmaI];
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    71
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    72
bind_thm ("SigmaD1", Sigma_iff RS iffD1 RS conjunct1);
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    73
bind_thm ("SigmaD2", Sigma_iff RS iffD1 RS conjunct2);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    74
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    75
(*The general elimination rule*)
9211
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    76
val major::prems= Goalw [Sigma_def] 
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    77
    "[| c: Sigma(A,B);  \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    78
\       !!x y.[| x:A;  y:B(x);  c=<x,y> |] ==> P \
9211
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    79
\    |] ==> P";
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    80
by (cut_facts_tac [major] 1);
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    81
by (REPEAT (eresolve_tac [UN_E, singletonE] 1 ORELSE ares_tac prems 1)) ;
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    82
qed "SigmaE";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    83
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    84
val [major,minor]= Goal
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    85
    "[| <a,b> : Sigma(A,B);    \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    86
\       [| a:A;  b:B(a) |] ==> P   \
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    87
\    |] ==> P";
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    88
by (rtac minor 1);
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    89
by (rtac (major RS SigmaD1) 1);
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    90
by (rtac (major RS SigmaD2) 1) ;
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
    91
qed "SigmaE2";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    92
9211
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    93
val prems= Goalw [Sigma_def] 
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    94
    "[| A=A';  !!x. x:A' ==> B(x)=B'(x) |] ==> \
9211
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    95
\    Sigma(A,B) = Sigma(A',B')";
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    96
by (simp_tac (simpset() addsimps prems) 1) ;
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
    97
qed "Sigma_cong";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
    98
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    99
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   100
(*Sigma_cong, Pi_cong NOT given to Addcongs: they cause
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   101
  flex-flex pairs and the "Check your prover" error.  Most
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   102
  Sigmas and Pis are abbreviated as * or -> *)
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   103
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   104
AddSIs [SigmaI];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   105
AddSEs [SigmaE2, SigmaE];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   106
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   107
Goal "Sigma(0,B) = 0";
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   108
by (Blast_tac 1) ;
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   109
qed "Sigma_empty1";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   110
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   111
Goal "A*0 = 0";
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   112
by (Blast_tac 1) ;
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   113
qed "Sigma_empty2";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   114
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   115
Addsimps [Sigma_empty1, Sigma_empty2];
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   116
5264
7538fce1fe37 New result from AC directory
paulson
parents: 4477
diff changeset
   117
Goal "A*B=0 <-> A=0 | B=0";
7538fce1fe37 New result from AC directory
paulson
parents: 4477
diff changeset
   118
by (Blast_tac 1);
7538fce1fe37 New result from AC directory
paulson
parents: 4477
diff changeset
   119
qed "Sigma_empty_iff";
7538fce1fe37 New result from AC directory
paulson
parents: 4477
diff changeset
   120
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   121
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   122
(*** Projections: fst, snd ***)
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   123
9211
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
   124
Goalw [fst_def]  "fst(<a,b>) = a";
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
   125
by (Blast_tac 1) ;
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
   126
qed "fst_conv";
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   127
9211
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
   128
Goalw [snd_def]  "snd(<a,b>) = b";
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
   129
by (Blast_tac 1) ;
6236c5285bd8 removal of batch-style proofs
paulson
parents: 9180
diff changeset
   130
qed "snd_conv";
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   131
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   132
Addsimps [fst_conv,snd_conv];
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   133
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   134
Goal "p:Sigma(A,B) ==> fst(p) : A";
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   135
by (Auto_tac) ;
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   136
qed "fst_type";
12836
5ef96e63fba6 A few more standard simprules, TCs, etc.
paulson
parents: 12814
diff changeset
   137
AddTCs [fst_type];
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   138
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   139
Goal "p:Sigma(A,B) ==> snd(p) : B(fst(p))";
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   140
by (Auto_tac) ;
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   141
qed "snd_type";
12836
5ef96e63fba6 A few more standard simprules, TCs, etc.
paulson
parents: 12814
diff changeset
   142
AddTCs [snd_type];
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   143
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   144
Goal "a: Sigma(A,B) ==> <fst(a),snd(a)> = a";
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   145
by (Auto_tac) ;
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   146
qed "Pair_fst_snd_eq";
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   147
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   148
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   149
(*** Eliminator - split ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   150
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   151
(*A META-equality, so that it applies to higher types as well...*)
6112
5e4871c5136b datatype package improvements
paulson
parents: 5505
diff changeset
   152
Goalw [split_def] "split(%x y. c(x,y), <a,b>) == c(a,b)";
5e4871c5136b datatype package improvements
paulson
parents: 5505
diff changeset
   153
by (Simp_tac 1);
5e4871c5136b datatype package improvements
paulson
parents: 5505
diff changeset
   154
qed "split";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   155
Addsimps [split];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   156
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   157
val major::prems= Goal
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   158
    "[|  p:Sigma(A,B);   \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   159
\        !!x y.[| x:A; y:B(x) |] ==> c(x,y):C(<x,y>) \
9180
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   160
\    |] ==> split(%x y. c(x,y), p) : C(p)";
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   161
by (rtac (major RS SigmaE) 1);
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   162
by (asm_simp_tac (simpset() addsimps prems) 1);
3bda56c0d70d tidying and unbatchifying
paulson
parents: 6153
diff changeset
   163
qed "split_type";
6153
bff90585cce5 new typechecking solver for the simplifier
paulson
parents: 6112
diff changeset
   164
AddTCs [split_type];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   165
5325
f7a5e06adea1 Yet more removal of "goal" commands, especially "goal ZF.thy", so ZF.thy
paulson
parents: 5264
diff changeset
   166
Goalw [split_def]
f7a5e06adea1 Yet more removal of "goal" commands, especially "goal ZF.thy", so ZF.thy
paulson
parents: 5264
diff changeset
   167
  "u: A*B ==>   \
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents: 6
diff changeset
   168
\       R(split(c,u)) <-> (ALL x:A. ALL y:B. u = <x,y> --> R(c(x,y)))";
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4091
diff changeset
   169
by Auto_tac;
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 533
diff changeset
   170
qed "expand_split";
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents: 6
diff changeset
   171
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents: 6
diff changeset
   172
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   173
(*** split for predicates: result type o ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   174
5325
f7a5e06adea1 Yet more removal of "goal" commands, especially "goal ZF.thy", so ZF.thy
paulson
parents: 5264
diff changeset
   175
Goalw [split_def] "R(a,b) ==> split(R, <a,b>)";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   176
by (Asm_simp_tac 1);
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   177
qed "splitI";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   178
5325
f7a5e06adea1 Yet more removal of "goal" commands, especially "goal ZF.thy", so ZF.thy
paulson
parents: 5264
diff changeset
   179
val major::sigma::prems = Goalw [split_def]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1105
diff changeset
   180
    "[| split(R,z);  z:Sigma(A,B);                      \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1105
diff changeset
   181
\       !!x y. [| z = <x,y>;  R(x,y) |] ==> P           \
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   182
\    |] ==> P";
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   183
by (rtac (sigma RS SigmaE) 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   184
by (cut_facts_tac [major] 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   185
by (REPEAT (ares_tac prems 1));
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   186
by (Asm_full_simp_tac 1);
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   187
qed "splitE";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   188
5325
f7a5e06adea1 Yet more removal of "goal" commands, especially "goal ZF.thy", so ZF.thy
paulson
parents: 5264
diff changeset
   189
Goalw [split_def] "split(R,<a,b>) ==> R(a,b)";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1461
diff changeset
   190
by (Full_simp_tac 1);
1105
136b05aa77ed Modified proofs for (q)split, fst, snd for new
lcp
parents: 860
diff changeset
   191
qed "splitD";