src/ZF/domrange.ML
author wenzelm
Tue, 20 May 1997 19:29:50 +0200
changeset 3257 4e3724e0659f
parent 2877 6476784dba1c
child 4091 771b1f6422a8
permissions -rw-r--r--
README generation;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 795
diff changeset
     1
(*  Title:      ZF/domrange
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 795
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
Converse, domain, range of a relation or function
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
(*** converse ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    11
qed_goalw "converse_iff" ZF.thy [converse_def]
687
91bc4b9eee1d ZF/domrange/converse_iff: new
lcp
parents: 674
diff changeset
    12
    "<a,b>: converse(r) <-> <b,a>:r"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    13
 (fn _ => [ (Blast_tac 1) ]);
687
91bc4b9eee1d ZF/domrange/converse_iff: new
lcp
parents: 674
diff changeset
    14
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    15
qed_goalw "converseI" ZF.thy [converse_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
    "!!a b r. <a,b>:r ==> <b,a>:converse(r)"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    17
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    19
qed_goalw "converseD" ZF.thy [converse_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
    "!!a b r. <a,b> : converse(r) ==> <b,a> : r"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    21
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    23
qed_goalw "converseE" ZF.thy [converse_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
    "[| yx : converse(r);  \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
\       !!x y. [| yx=<y,x>;  <x,y>:r |] ==> P \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
\    |] ==> P"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
 (fn [major,minor]=>
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
  [ (rtac (major RS ReplaceE) 1),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
    (REPEAT (eresolve_tac [exE, conjE, minor] 1)),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
    (hyp_subst_tac 1),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
    (assume_tac 1) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
    33
Addsimps [converse_iff];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
    34
AddSIs [converseI];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
    35
AddSEs [converseD,converseE];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    36
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    37
qed_goal "converse_converse" ZF.thy
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
    "!!A B r. r<=Sigma(A,B) ==> converse(converse(r)) = r"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    39
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    40
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    41
qed_goal "converse_type" ZF.thy "!!A B r. r<=A*B ==> converse(r)<=B*A"
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    42
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    44
qed_goal "converse_prod" ZF.thy "converse(A*B) = B*A"
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    45
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    46
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    47
qed_goal "converse_empty" ZF.thy "converse(0) = 0"
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    48
 (fn _ => [ (Blast_tac 1) ]);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
    49
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
    50
Addsimps [converse_prod, converse_empty];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    51
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
(*** domain ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    53
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    54
qed_goalw "domain_iff" ZF.thy [domain_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    55
    "a: domain(r) <-> (EX y. <a,y>: r)"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    56
 (fn _=> [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    57
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    58
qed_goal "domainI" ZF.thy "!!a b r. <a,b>: r ==> a: domain(r)"
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
    59
 (fn _=> [ (etac (exI RS (domain_iff RS iffD2)) 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    60
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    61
qed_goal "domainE" ZF.thy
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    62
    "[| a : domain(r);  !!y. <a,y>: r ==> P |] ==> P"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    63
 (fn prems=>
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    64
  [ (rtac (domain_iff RS iffD1 RS exE) 1),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    65
    (REPEAT (ares_tac prems 1)) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    66
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
    67
AddIs  [domainI];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
    68
AddSEs [domainE];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    69
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    70
qed_goal "domain_subset" ZF.thy "domain(Sigma(A,B)) <= A"
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    71
 (fn _=> [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    72
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    73
(*** range ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    74
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    75
qed_goalw "rangeI" ZF.thy [range_def] "!!a b r.<a,b>: r ==> b : range(r)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    76
 (fn _ => [ (etac (converseI RS domainI) 1) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    77
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    78
qed_goalw "rangeE" ZF.thy [range_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    79
    "[| b : range(r);  !!x. <x,b>: r ==> P |] ==> P"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    80
 (fn major::prems=>
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    81
  [ (rtac (major RS domainE) 1),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    82
    (resolve_tac prems 1),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    83
    (etac converseD 1) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    84
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
    85
AddIs  [rangeI];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
    86
AddSEs [rangeE];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
    87
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    88
qed_goalw "range_subset" ZF.thy [range_def] "range(A*B) <= B"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    89
 (fn _ =>
2033
639de962ded4 Ran expandshort; used stac instead of ssubst
paulson
parents: 1461
diff changeset
    90
  [ (stac converse_prod 1),
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    91
    (rtac domain_subset 1) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    92
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    93
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    94
(*** field ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    95
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    96
qed_goalw "fieldI1" ZF.thy [field_def] "!!r. <a,b>: r ==> a : field(r)"
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    97
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    98
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
    99
qed_goalw "fieldI2" ZF.thy [field_def] "!!r. <a,b>: r ==> b : field(r)"
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   100
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   101
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   102
qed_goalw "fieldCI" ZF.thy [field_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   103
    "(~ <c,a>:r ==> <a,b>: r) ==> a : field(r)"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   104
 (fn [prem]=> [ (blast_tac (!claset addIs [prem]) 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   105
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   106
qed_goalw "fieldE" ZF.thy [field_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   107
     "[| a : field(r);  \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   108
\        !!x. <a,x>: r ==> P;  \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   109
\        !!x. <x,a>: r ==> P        |] ==> P"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   110
 (fn major::prems=>
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   111
  [ (rtac (major RS UnE) 1),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   112
    (REPEAT (eresolve_tac (prems@[domainE,rangeE]) 1)) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   113
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   114
AddIs  [fieldCI];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   115
AddSEs [fieldE];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   116
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   117
qed_goal "field_subset" ZF.thy "field(A*B) <= A Un B"
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   118
 (fn _ => [ (Blast_tac 1) ]);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   119
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   120
qed_goalw "domain_subset_field" ZF.thy [field_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   121
    "domain(r) <= field(r)"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   122
 (fn _ => [ (rtac Un_upper1 1) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   123
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   124
qed_goalw "range_subset_field" ZF.thy [field_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   125
    "range(r) <= field(r)"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   126
 (fn _ => [ (rtac Un_upper2 1) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   127
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   128
qed_goal "domain_times_range" ZF.thy
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   129
    "!!A B r. r <= Sigma(A,B) ==> r <= domain(r)*range(r)"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   130
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   131
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   132
qed_goal "field_times_field" ZF.thy
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   133
    "!!A B r. r <= Sigma(A,B) ==> r <= field(r)*field(r)"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   134
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   135
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   136
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   137
(*** Image of a set under a function/relation ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   138
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   139
qed_goalw "image_iff" ZF.thy [image_def] "b : r``A <-> (EX x:A. <x,b>:r)"
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   140
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   141
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   142
qed_goal "image_singleton_iff" ZF.thy    "b : r``{a} <-> <a,b>:r"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   143
 (fn _ => [ rtac (image_iff RS iff_trans) 1,
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   144
            Blast_tac 1 ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   145
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   146
qed_goalw "imageI" ZF.thy [image_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   147
    "!!a b r. [| <a,b>: r;  a:A |] ==> b : r``A"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   148
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   149
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   150
qed_goalw "imageE" ZF.thy [image_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   151
    "[| b: r``A;  !!x.[| <x,b>: r;  x:A |] ==> P |] ==> P"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   152
 (fn major::prems=>
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   153
  [ (rtac (major RS CollectE) 1),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   154
    (REPEAT (etac bexE 1 ORELSE ares_tac prems 1)) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   155
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   156
AddIs  [imageI];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   157
AddSEs [imageE];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   158
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   159
qed_goal "image_subset" ZF.thy "!!A B r. r <= A*B ==> r``C <= B"
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   160
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   161
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   162
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   163
(*** Inverse image of a set under a function/relation ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   164
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   165
qed_goalw "vimage_iff" ZF.thy [vimage_def,image_def,converse_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   166
    "a : r-``B <-> (EX y:B. <a,y>:r)"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   167
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   168
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   169
qed_goal "vimage_singleton_iff" ZF.thy
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   170
    "a : r-``{b} <-> <a,b>:r"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   171
 (fn _ => [ rtac (vimage_iff RS iff_trans) 1,
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   172
            Blast_tac 1 ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   173
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   174
qed_goalw "vimageI" ZF.thy [vimage_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   175
    "!!A B r. [| <a,b>: r;  b:B |] ==> a : r-``B"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   176
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   177
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   178
qed_goalw "vimageE" ZF.thy [vimage_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   179
    "[| a: r-``B;  !!x.[| <a,x>: r;  x:B |] ==> P |] ==> P"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   180
 (fn major::prems=>
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   181
  [ (rtac (major RS imageE) 1),
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   182
    (REPEAT (etac converseD 1 ORELSE ares_tac prems 1)) ]);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   183
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   184
qed_goalw "vimage_subset" ZF.thy [vimage_def]
14
1c0926788772 ex/{bin.ML,comb.ML,prop.ML}: replaced NewSext by Syntax.simple_sext
lcp
parents: 0
diff changeset
   185
    "!!A B r. r <= A*B ==> r-``C <= A"
1c0926788772 ex/{bin.ML,comb.ML,prop.ML}: replaced NewSext by Syntax.simple_sext
lcp
parents: 0
diff changeset
   186
 (fn _ => [ (etac (converse_type RS image_subset) 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   187
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   188
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   189
(** Theorem-proving for ZF set theory **)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   190
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   191
AddIs  [vimageI];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   192
AddSEs [vimageE];
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   193
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2469
diff changeset
   194
val ZF_cs = !claset delrules [equalityI];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   195
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   196
(** The Union of a set of relations is a relation -- Lemma for fun_Union **)
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   197
goal ZF.thy "!!S. (ALL x:S. EX A B. x <= A*B) ==>  \
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   198
\                 Union(S) <= domain(Union(S)) * range(Union(S))";
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   199
by (Blast_tac 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 687
diff changeset
   200
qed "rel_Union";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   201
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   202
(** The Union of 2 relations is a relation (Lemma for fun_Un)  **)
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   203
qed_goal "rel_Un" ZF.thy
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   204
    "!!r s. [| r <= A*B;  s <= C*D |] ==> (r Un s) <= (A Un C) * (B Un D)"
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   205
 (fn _ => [ (Blast_tac 1) ]);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   206
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   207
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   208
goal ZF.thy "!!r. [| <a,c> : r; c~=b |] ==> domain(r-{<a,b>}) = domain(r)";
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   209
by (Blast_tac 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   210
qed "domain_Diff_eq";
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   211
2877
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   212
goal ZF.thy "!!r. [| <c,b> : r; c~=a |] ==> range(r-{<a,b>}) = range(r)";
6476784dba1c Converted to call blast_tac.
paulson
parents: 2493
diff changeset
   213
by (Blast_tac 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   214
qed "range_Diff_eq";
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2033
diff changeset
   215