src/ZF/upair.thy
author paulson
Sun, 14 Jul 2002 15:14:43 +0200
changeset 13356 c9cfe1638bf2
parent 13259 01fa0c8dbc92
child 13357 6f54e992777e
permissions -rw-r--r--
improved presentation markup
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 124
diff changeset
     1
(*  Title:      ZF/upair.thy
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 124
diff changeset
     2
    ID:         $Id$
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 124
diff changeset
     3
    Author:     Lawrence C Paulson and Martin D Coen, CU Computer Laboratory
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 124
diff changeset
     4
    Copyright   1993  University of Cambridge
13259
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
     5
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
     6
UNORDERED pairs in Zermelo-Fraenkel Set Theory 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
     7
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
     8
Observe the order of dependence:
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
     9
    Upair is defined in terms of Replace
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    10
    Un is defined in terms of Upair and Union (similarly for Int)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    11
    cons is defined in terms of Upair and Un
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    12
    Ordered pairs and descriptions are defined using cons ("set notation")
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 124
diff changeset
    13
*)
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 124
diff changeset
    14
9570
e16e168984e1 installation of cancellation simprocs for the integers
paulson
parents: 6153
diff changeset
    15
theory upair = ZF
e16e168984e1 installation of cancellation simprocs for the integers
paulson
parents: 6153
diff changeset
    16
files "Tools/typechk":
6153
bff90585cce5 new typechecking solver for the simplifier
paulson
parents: 3924
diff changeset
    17
9907
473a6604da94 tuned ML code (the_context, bind_thms(s));
wenzelm
parents: 9570
diff changeset
    18
setup TypeCheck.setup
11770
b6bb7a853dd2 moved rulify to ObjectLogic;
wenzelm
parents: 9907
diff changeset
    19
declare atomize_ball [symmetric, rulify]
6153
bff90585cce5 new typechecking solver for the simplifier
paulson
parents: 3924
diff changeset
    20
13356
c9cfe1638bf2 improved presentation markup
paulson
parents: 13259
diff changeset
    21
(*belongs to theory ZF*)
c9cfe1638bf2 improved presentation markup
paulson
parents: 13259
diff changeset
    22
declare bspec [dest?]
c9cfe1638bf2 improved presentation markup
paulson
parents: 13259
diff changeset
    23
13259
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    24
(*** Lemmas about power sets  ***)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    25
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    26
lemmas Pow_bottom = empty_subsetI [THEN PowI] (* 0 : Pow(B) *)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    27
lemmas Pow_top = subset_refl [THEN PowI] (* A : Pow(A) *)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    28
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    29
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    30
(*** Unordered pairs - Upair ***)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    31
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    32
lemma Upair_iff [simp]: "c : Upair(a,b) <-> (c=a | c=b)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    33
by (unfold Upair_def, blast)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    34
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    35
lemma UpairI1: "a : Upair(a,b)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    36
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    37
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    38
lemma UpairI2: "b : Upair(a,b)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    39
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    40
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    41
lemma UpairE:
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    42
    "[| a : Upair(b,c);  a=b ==> P;  a=c ==> P |] ==> P"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    43
apply simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    44
apply blast 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    45
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    46
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    47
(*** Rules for binary union -- Un -- defined via Upair ***)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    48
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    49
lemma Un_iff [simp]: "c : A Un B <-> (c:A | c:B)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    50
apply (simp add: Un_def)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    51
apply (blast intro: UpairI1 UpairI2 elim: UpairE)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    52
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    53
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    54
lemma UnI1: "c : A ==> c : A Un B"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    55
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    56
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    57
lemma UnI2: "c : B ==> c : A Un B"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    58
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    59
13356
c9cfe1638bf2 improved presentation markup
paulson
parents: 13259
diff changeset
    60
(*belongs to theory upair*)
c9cfe1638bf2 improved presentation markup
paulson
parents: 13259
diff changeset
    61
declare UnI1 [elim?]  UnI2 [elim?]
c9cfe1638bf2 improved presentation markup
paulson
parents: 13259
diff changeset
    62
13259
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    63
lemma UnE [elim!]: "[| c : A Un B;  c:A ==> P;  c:B ==> P |] ==> P"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    64
apply simp 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    65
apply blast 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    66
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    67
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    68
(*Stronger version of the rule above*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    69
lemma UnE': "[| c : A Un B;  c:A ==> P;  [| c:B;  c~:A |] ==> P |] ==> P"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    70
apply simp 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    71
apply blast 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    72
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    73
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    74
(*Classical introduction rule: no commitment to A vs B*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    75
lemma UnCI [intro!]: "(c ~: B ==> c : A) ==> c : A Un B"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    76
apply simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    77
apply blast
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    78
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    79
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    80
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    81
(*** Rules for small intersection -- Int -- defined via Upair ***)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    82
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    83
lemma Int_iff [simp]: "c : A Int B <-> (c:A & c:B)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    84
apply (unfold Int_def)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    85
apply (blast intro: UpairI1 UpairI2 elim: UpairE)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    86
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    87
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    88
lemma IntI [intro!]: "[| c : A;  c : B |] ==> c : A Int B"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    89
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    90
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    91
lemma IntD1: "c : A Int B ==> c : A"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    92
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    93
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    94
lemma IntD2: "c : A Int B ==> c : B"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    95
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    96
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    97
lemma IntE [elim!]: "[| c : A Int B;  [| c:A; c:B |] ==> P |] ==> P"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    98
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
    99
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   100
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   101
(*** Rules for set difference -- defined via Upair ***)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   102
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   103
lemma Diff_iff [simp]: "c : A-B <-> (c:A & c~:B)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   104
by (unfold Diff_def, blast)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   105
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   106
lemma DiffI [intro!]: "[| c : A;  c ~: B |] ==> c : A - B"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   107
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   108
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   109
lemma DiffD1: "c : A - B ==> c : A"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   110
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   111
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   112
lemma DiffD2: "c : A - B ==> c ~: B"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   113
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   114
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   115
lemma DiffE [elim!]: "[| c : A - B;  [| c:A; c~:B |] ==> P |] ==> P"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   116
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   117
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   118
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   119
(*** Rules for cons -- defined via Un and Upair ***)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   120
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   121
lemma cons_iff [simp]: "a : cons(b,A) <-> (a=b | a:A)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   122
apply (unfold cons_def)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   123
apply (blast intro: UpairI1 UpairI2 elim: UpairE)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   124
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   125
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   126
(*risky as a typechecking rule, but solves otherwise unconstrained goals of
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   127
the form x : ?A*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   128
lemma consI1 [simp,TC]: "a : cons(a,B)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   129
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   130
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   131
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   132
lemma consI2: "a : B ==> a : cons(b,B)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   133
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   134
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   135
lemma consE [elim!]:
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   136
    "[| a : cons(b,A);  a=b ==> P;  a:A ==> P |] ==> P"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   137
apply simp 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   138
apply blast 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   139
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   140
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   141
(*Stronger version of the rule above*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   142
lemma consE':
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   143
    "[| a : cons(b,A);  a=b ==> P;  [| a:A;  a~=b |] ==> P |] ==> P"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   144
apply simp 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   145
apply blast 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   146
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   147
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   148
(*Classical introduction rule*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   149
lemma consCI [intro!]: "(a~:B ==> a=b) ==> a: cons(b,B)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   150
apply simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   151
apply blast
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   152
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   153
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   154
lemma cons_not_0 [simp]: "cons(a,B) ~= 0"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   155
by (blast elim: equalityE)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   156
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   157
lemmas cons_neq_0 = cons_not_0 [THEN notE, standard]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   158
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   159
declare cons_not_0 [THEN not_sym, simp]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   160
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   161
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   162
(*** Singletons - using cons ***)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   163
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   164
lemma singleton_iff: "a : {b} <-> a=b"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   165
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   166
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   167
lemma singletonI [intro!]: "a : {a}"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   168
by (rule consI1)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   169
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   170
lemmas singletonE = singleton_iff [THEN iffD1, elim_format, standard, elim!]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   171
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   172
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   173
(*** Rules for Descriptions ***)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   174
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   175
lemma the_equality [intro]:
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   176
    "[| P(a);  !!x. P(x) ==> x=a |] ==> (THE x. P(x)) = a"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   177
apply (unfold the_def) 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   178
apply (fast dest: subst)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   179
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   180
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   181
(* Only use this if you already know EX!x. P(x) *)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   182
lemma the_equality2: "[| EX! x. P(x);  P(a) |] ==> (THE x. P(x)) = a"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   183
by blast
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   184
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   185
lemma theI: "EX! x. P(x) ==> P(THE x. P(x))"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   186
apply (erule ex1E)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   187
apply (subst the_equality)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   188
apply (blast+)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   189
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   190
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   191
(*the_cong is no longer necessary: if (ALL y.P(y)<->Q(y)) then 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   192
  (THE x.P(x))  rewrites to  (THE x. Q(x))  *)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   193
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   194
(*If it's "undefined", it's zero!*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   195
lemma the_0: "~ (EX! x. P(x)) ==> (THE x. P(x))=0"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   196
apply (unfold the_def)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   197
apply (blast elim!: ReplaceE)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   198
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   199
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   200
(*Easier to apply than theI: conclusion has only one occurrence of P*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   201
lemma theI2:
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   202
    assumes p1: "~ Q(0) ==> EX! x. P(x)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   203
        and p2: "!!x. P(x) ==> Q(x)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   204
    shows "Q(THE x. P(x))"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   205
apply (rule classical)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   206
apply (rule p2)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   207
apply (rule theI)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   208
apply (rule classical)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   209
apply (rule p1)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   210
apply (erule the_0 [THEN subst], assumption)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   211
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   212
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   213
(*** if -- a conditional expression for formulae ***)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   214
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   215
lemma if_true [simp]: "(if True then a else b) = a"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   216
by (unfold if_def, blast)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   217
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   218
lemma if_false [simp]: "(if False then a else b) = b"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   219
by (unfold if_def, blast)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   220
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   221
(*Never use with case splitting, or if P is known to be true or false*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   222
lemma if_cong:
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   223
    "[| P<->Q;  Q ==> a=c;  ~Q ==> b=d |]  
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   224
     ==> (if P then a else b) = (if Q then c else d)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   225
by (simp add: if_def cong add: conj_cong)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   226
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   227
(*Prevents simplification of x and y: faster and allows the execution
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   228
  of functional programs. NOW THE DEFAULT.*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   229
lemma if_weak_cong: "P<->Q ==> (if P then x else y) = (if Q then x else y)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   230
by simp
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   231
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   232
(*Not needed for rewriting, since P would rewrite to True anyway*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   233
lemma if_P: "P ==> (if P then a else b) = a"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   234
by (unfold if_def, blast)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   235
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   236
(*Not needed for rewriting, since P would rewrite to False anyway*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   237
lemma if_not_P: "~P ==> (if P then a else b) = b"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   238
by (unfold if_def, blast)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   239
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   240
lemma split_if: "P(if Q then x else y) <-> ((Q --> P(x)) & (~Q --> P(y)))"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   241
(*no case_tac yet!*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   242
apply (rule_tac P=Q in case_split_thm, simp_all)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   243
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   244
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   245
(** Rewrite rules for boolean case-splitting: faster than 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   246
	addsplits[split_if]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   247
**)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   248
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   249
lemmas split_if_eq1 = split_if [of "%x. x = b", standard]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   250
lemmas split_if_eq2 = split_if [of "%x. a = x", standard]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   251
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   252
lemmas split_if_mem1 = split_if [of "%x. x : b", standard]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   253
lemmas split_if_mem2 = split_if [of "%x. a : x", standard]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   254
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   255
lemmas split_ifs = split_if_eq1 split_if_eq2 split_if_mem1 split_if_mem2
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   256
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   257
(*Logically equivalent to split_if_mem2*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   258
lemma if_iff: "a: (if P then x else y) <-> P & a:x | ~P & a:y"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   259
by (simp split add: split_if)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   260
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   261
lemma if_type [TC]:
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   262
    "[| P ==> a: A;  ~P ==> b: A |] ==> (if P then a else b): A"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   263
by (simp split add: split_if)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   264
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   265
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   266
(*** Foundation lemmas ***)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   267
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   268
(*was called mem_anti_sym*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   269
lemma mem_asym: "[| a:b;  ~P ==> b:a |] ==> P"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   270
apply (rule classical)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   271
apply (rule_tac A1 = "{a,b}" in foundation [THEN disjE])
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   272
apply (blast elim!: equalityE)+
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   273
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   274
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   275
(*was called mem_anti_refl*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   276
lemma mem_irrefl: "a:a ==> P"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   277
by (blast intro: mem_asym)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   278
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   279
(*mem_irrefl should NOT be added to default databases:
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   280
      it would be tried on most goals, making proofs slower!*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   281
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   282
lemma mem_not_refl: "a ~: a"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   283
apply (rule notI)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   284
apply (erule mem_irrefl)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   285
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   286
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   287
(*Good for proving inequalities by rewriting*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   288
lemma mem_imp_not_eq: "a:A ==> a ~= A"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   289
by (blast elim!: mem_irrefl)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   290
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   291
(*** Rules for succ ***)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   292
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   293
lemma succ_iff: "i : succ(j) <-> i=j | i:j"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   294
by (unfold succ_def, blast)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   295
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   296
lemma succI1 [simp]: "i : succ(i)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   297
by (simp add: succ_iff)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   298
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   299
lemma succI2: "i : j ==> i : succ(j)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   300
by (simp add: succ_iff)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   301
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   302
lemma succE [elim!]: 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   303
    "[| i : succ(j);  i=j ==> P;  i:j ==> P |] ==> P"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   304
apply (simp add: succ_iff, blast) 
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   305
done
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   306
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   307
(*Classical introduction rule*)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   308
lemma succCI [intro!]: "(i~:j ==> i=j) ==> i: succ(j)"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   309
by (simp add: succ_iff, blast)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   310
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   311
lemma succ_not_0 [simp]: "succ(n) ~= 0"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   312
by (blast elim!: equalityE)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   313
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   314
lemmas succ_neq_0 = succ_not_0 [THEN notE, standard, elim!]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   315
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   316
declare succ_not_0 [THEN not_sym, simp]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   317
declare sym [THEN succ_neq_0, elim!]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   318
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   319
(* succ(c) <= B ==> c : B *)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   320
lemmas succ_subsetD = succI1 [THEN [2] subsetD]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   321
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   322
(* succ(b) ~= b *)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   323
lemmas succ_neq_self = succI1 [THEN mem_imp_not_eq, THEN not_sym, standard]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   324
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   325
lemma succ_inject_iff [simp]: "succ(m) = succ(n) <-> m=n"
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   326
by (blast elim: mem_asym elim!: equalityE)
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   327
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   328
lemmas succ_inject = succ_inject_iff [THEN iffD1, standard, dest!]
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   329
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   330
ML
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   331
{*
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   332
val Pow_bottom = thm "Pow_bottom";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   333
val Pow_top = thm "Pow_top";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   334
val Upair_iff = thm "Upair_iff";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   335
val UpairI1 = thm "UpairI1";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   336
val UpairI2 = thm "UpairI2";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   337
val UpairE = thm "UpairE";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   338
val Un_iff = thm "Un_iff";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   339
val UnI1 = thm "UnI1";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   340
val UnI2 = thm "UnI2";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   341
val UnE = thm "UnE";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   342
val UnE' = thm "UnE'";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   343
val UnCI = thm "UnCI";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   344
val Int_iff = thm "Int_iff";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   345
val IntI = thm "IntI";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   346
val IntD1 = thm "IntD1";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   347
val IntD2 = thm "IntD2";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   348
val IntE = thm "IntE";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   349
val Diff_iff = thm "Diff_iff";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   350
val DiffI = thm "DiffI";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   351
val DiffD1 = thm "DiffD1";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   352
val DiffD2 = thm "DiffD2";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   353
val DiffE = thm "DiffE";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   354
val cons_iff = thm "cons_iff";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   355
val consI1 = thm "consI1";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   356
val consI2 = thm "consI2";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   357
val consE = thm "consE";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   358
val consE' = thm "consE'";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   359
val consCI = thm "consCI";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   360
val cons_not_0 = thm "cons_not_0";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   361
val cons_neq_0 = thm "cons_neq_0";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   362
val singleton_iff = thm "singleton_iff";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   363
val singletonI = thm "singletonI";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   364
val singletonE = thm "singletonE";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   365
val the_equality = thm "the_equality";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   366
val the_equality2 = thm "the_equality2";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   367
val theI = thm "theI";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   368
val the_0 = thm "the_0";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   369
val theI2 = thm "theI2";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   370
val if_true = thm "if_true";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   371
val if_false = thm "if_false";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   372
val if_cong = thm "if_cong";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   373
val if_weak_cong = thm "if_weak_cong";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   374
val if_P = thm "if_P";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   375
val if_not_P = thm "if_not_P";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   376
val split_if = thm "split_if";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   377
val split_if_eq1 = thm "split_if_eq1";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   378
val split_if_eq2 = thm "split_if_eq2";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   379
val split_if_mem1 = thm "split_if_mem1";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   380
val split_if_mem2 = thm "split_if_mem2";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   381
val if_iff = thm "if_iff";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   382
val if_type = thm "if_type";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   383
val mem_asym = thm "mem_asym";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   384
val mem_irrefl = thm "mem_irrefl";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   385
val mem_not_refl = thm "mem_not_refl";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   386
val mem_imp_not_eq = thm "mem_imp_not_eq";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   387
val succ_iff = thm "succ_iff";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   388
val succI1 = thm "succI1";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   389
val succI2 = thm "succI2";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   390
val succE = thm "succE";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   391
val succCI = thm "succCI";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   392
val succ_not_0 = thm "succ_not_0";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   393
val succ_neq_0 = thm "succ_neq_0";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   394
val succ_subsetD = thm "succ_subsetD";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   395
val succ_neq_self = thm "succ_neq_self";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   396
val succ_inject_iff = thm "succ_inject_iff";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   397
val succ_inject = thm "succ_inject";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   398
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   399
val split_ifs = thms "split_ifs";
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   400
*}
01fa0c8dbc92 conversion of many files to Isar format
paulson
parents: 11770
diff changeset
   401
6153
bff90585cce5 new typechecking solver for the simplifier
paulson
parents: 3924
diff changeset
   402
end