src/ZF/OrdQuant.thy
author paulson
Tue, 18 Jun 2002 10:52:08 +0200
changeset 13218 3732064ccbd1
parent 13175 81082cfa5618
child 13244 7b37e218f298
permissions -rw-r--r--
conversion of Fixedpt to Isar script
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
     1
(*  Title:      ZF/AC/OrdQuant.thy
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
     2
    ID:         $Id$
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
     3
    Authors:    Krzysztof Grabczewski and L C Paulson
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
     4
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
     5
Quantifiers and union operator for ordinals. 
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
     6
*)
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
     7
12620
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
     8
theory OrdQuant = Ordinal:
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
     9
12620
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    10
constdefs
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    11
  
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    12
  (* Ordinal Quantifiers *)
12620
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    13
  oall :: "[i, i => o] => o"
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    14
    "oall(A, P) == ALL x. x<A --> P(x)"
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    15
  
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    16
  oex :: "[i, i => o] => o"
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    17
    "oex(A, P)  == EX x. x<A & P(x)"
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    18
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    19
  (* Ordinal Union *)
12620
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    20
  OUnion :: "[i, i => i] => i"
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    21
    "OUnion(i,B) == {z: UN x:i. B(x). Ord(i)}"
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    22
  
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    23
syntax
12620
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    24
  "@oall"     :: "[idt, i, o] => o"        ("(3ALL _<_./ _)" 10)
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    25
  "@oex"      :: "[idt, i, o] => o"        ("(3EX _<_./ _)" 10)
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    26
  "@OUNION"   :: "[idt, i, i] => i"        ("(3UN _<_./ _)" 10)
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    27
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    28
translations
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    29
  "ALL x<a. P"  == "oall(a, %x. P)"
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    30
  "EX x<a. P"   == "oex(a, %x. P)"
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    31
  "UN x<a. B"   == "OUnion(a, %x. B)"
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    32
12114
a8e860c86252 eliminated old "symbols" syntax, use "xsymbols" instead;
wenzelm
parents: 6093
diff changeset
    33
syntax (xsymbols)
12620
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    34
  "@oall"     :: "[idt, i, o] => o"        ("(3\<forall>_<_./ _)" 10)
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    35
  "@oex"      :: "[idt, i, o] => o"        ("(3\<exists>_<_./ _)" 10)
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    36
  "@OUNION"   :: "[idt, i, i] => i"        ("(3\<Union>_<_./ _)" 10)
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    37
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    38
12825
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    39
(** simplification of the new quantifiers **)
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    40
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    41
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
    42
(*MOST IMPORTANT that this is added to the simpset BEFORE Ord_atomize
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
    43
  is proved.  Ord_atomize would convert this rule to 
12825
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    44
    x < 0 ==> P(x) == True, which causes dire effects!*)
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    45
lemma [simp]: "(ALL x<0. P(x))"
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    46
by (simp add: oall_def) 
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    47
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    48
lemma [simp]: "~(EX x<0. P(x))"
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    49
by (simp add: oex_def) 
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    50
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    51
lemma [simp]: "(ALL x<succ(i). P(x)) <-> (Ord(i) --> P(i) & (ALL x<i. P(x)))"
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    52
apply (simp add: oall_def le_iff) 
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    53
apply (blast intro: lt_Ord2) 
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    54
done
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    55
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    56
lemma [simp]: "(EX x<succ(i). P(x)) <-> (Ord(i) & (P(i) | (EX x<i. P(x))))"
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    57
apply (simp add: oex_def le_iff) 
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    58
apply (blast intro: lt_Ord2) 
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    59
done
f1f7964ed05c new simprules and classical rules
paulson
parents: 12820
diff changeset
    60
13118
336b0bcbd27c new lemmas
paulson
parents: 12825
diff changeset
    61
(** Now some very basic ZF theorems **)
336b0bcbd27c new lemmas
paulson
parents: 12825
diff changeset
    62
13172
03a5afa7b888 tidying up
paulson
parents: 13170
diff changeset
    63
(*FIXME: move to Rel.thy*)
13118
336b0bcbd27c new lemmas
paulson
parents: 12825
diff changeset
    64
lemma trans_imp_trans_on: "trans(r) ==> trans[A](r)"
336b0bcbd27c new lemmas
paulson
parents: 12825
diff changeset
    65
by (unfold trans_def trans_on_def, blast)
336b0bcbd27c new lemmas
paulson
parents: 12825
diff changeset
    66
12620
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    67
lemma Ord_OUN [intro,simp]:
13162
660a71e712af New theorems from Constructible, and moving some Isar material from Main
paulson
parents: 13149
diff changeset
    68
     "[| !!x. x<A ==> Ord(B(x)) |] ==> Ord(\<Union>x<A. B(x))"
12620
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    69
by (simp add: OUnion_def ltI Ord_UN) 
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    70
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    71
lemma OUN_upper_lt:
13162
660a71e712af New theorems from Constructible, and moving some Isar material from Main
paulson
parents: 13149
diff changeset
    72
     "[| a<A;  i < b(a);  Ord(\<Union>x<A. b(x)) |] ==> i < (\<Union>x<A. b(x))"
12620
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    73
by (unfold OUnion_def lt_def, blast )
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    74
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    75
lemma OUN_upper_le:
13162
660a71e712af New theorems from Constructible, and moving some Isar material from Main
paulson
parents: 13149
diff changeset
    76
     "[| a<A;  i\<le>b(a);  Ord(\<Union>x<A. b(x)) |] ==> i \<le> (\<Union>x<A. b(x))"
12820
02e2ff3e4d37 lexical tidying
paulson
parents: 12763
diff changeset
    77
apply (unfold OUnion_def, auto)
12620
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    78
apply (rule UN_upper_le )
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    79
apply (auto simp add: lt_def) 
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    80
done
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
    81
12620
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    82
lemma Limit_OUN_eq: "Limit(i) ==> (UN x<i. x) = i"
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    83
by (simp add: OUnion_def Limit_Union_eq Limit_is_Ord)
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    84
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    85
(* No < version; consider (UN i:nat.i)=nat *)
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    86
lemma OUN_least:
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    87
     "(!!x. x<A ==> B(x) \<subseteq> C) ==> (UN x<A. B(x)) \<subseteq> C"
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    88
by (simp add: OUnion_def UN_least ltI)
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    89
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    90
(* No < version; consider (UN i:nat.i)=nat *)
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    91
lemma OUN_least_le:
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    92
     "[| Ord(i);  !!x. x<A ==> b(x) \<le> i |] ==> (UN x<A. b(x)) \<le> i"
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    93
by (simp add: OUnion_def UN_least_le ltI Ord_0_le)
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    94
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    95
lemma le_implies_OUN_le_OUN:
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    96
     "[| !!x. x<A ==> c(x) \<le> d(x) |] ==> (UN x<A. c(x)) \<le> (UN x<A. d(x))"
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    97
by (blast intro: OUN_least_le OUN_upper_le le_Ord2 Ord_OUN)
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    98
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
    99
lemma OUN_UN_eq:
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
   100
     "(!!x. x:A ==> Ord(B(x)))
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
   101
      ==> (UN z < (UN x:A. B(x)). C(z)) = (UN  x:A. UN z < B(x). C(z))"
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
   102
by (simp add: OUnion_def) 
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
   103
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
   104
lemma OUN_Union_eq:
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
   105
     "(!!x. x:X ==> Ord(x))
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
   106
      ==> (UN z < Union(X). C(z)) = (UN x:X. UN z < x. C(z))"
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
   107
by (simp add: OUnion_def) 
4e6626725e21 Some new theorems for ordinals
paulson
parents: 12552
diff changeset
   108
12763
6cecd9dfd53f now [rule_format] knows about ospec
paulson
parents: 12667
diff changeset
   109
(*So that rule_format will get rid of ALL x<A...*)
6cecd9dfd53f now [rule_format] knows about ospec
paulson
parents: 12667
diff changeset
   110
lemma atomize_oall [symmetric, rulify]:
6cecd9dfd53f now [rule_format] knows about ospec
paulson
parents: 12667
diff changeset
   111
     "(!!x. x<A ==> P(x)) == Trueprop (ALL x<A. P(x))"
6cecd9dfd53f now [rule_format] knows about ospec
paulson
parents: 12667
diff changeset
   112
by (simp add: oall_def atomize_all atomize_imp)
6cecd9dfd53f now [rule_format] knows about ospec
paulson
parents: 12667
diff changeset
   113
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   114
(*** universal quantifier for ordinals ***)
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   115
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   116
lemma oallI [intro!]:
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   117
    "[| !!x. x<A ==> P(x) |] ==> ALL x<A. P(x)"
13170
paulson
parents: 13169
diff changeset
   118
by (simp add: oall_def) 
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   119
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   120
lemma ospec: "[| ALL x<A. P(x);  x<A |] ==> P(x)"
13170
paulson
parents: 13169
diff changeset
   121
by (simp add: oall_def) 
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   122
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   123
lemma oallE:
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   124
    "[| ALL x<A. P(x);  P(x) ==> Q;  ~x<A ==> Q |] ==> Q"
13170
paulson
parents: 13169
diff changeset
   125
apply (simp add: oall_def, blast) 
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   126
done
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   127
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   128
lemma rev_oallE [elim]:
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   129
    "[| ALL x<A. P(x);  ~x<A ==> Q;  P(x) ==> Q |] ==> Q"
13170
paulson
parents: 13169
diff changeset
   130
apply (simp add: oall_def, blast)  
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   131
done
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   132
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   133
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   134
(*Trival rewrite rule;   (ALL x<a.P)<->P holds only if a is not 0!*)
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   135
lemma oall_simp [simp]: "(ALL x<a. True) <-> True"
13170
paulson
parents: 13169
diff changeset
   136
by blast
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   137
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   138
(*Congruence rule for rewriting*)
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   139
lemma oall_cong [cong]:
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   140
    "[| a=a';  !!x. x<a' ==> P(x) <-> P'(x) |] ==> oall(a,P) <-> oall(a',P')"
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   141
by (simp add: oall_def)
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   142
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   143
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   144
(*** existential quantifier for ordinals ***)
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   145
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   146
lemma oexI [intro]:
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   147
    "[| P(x);  x<A |] ==> EX x<A. P(x)"
13170
paulson
parents: 13169
diff changeset
   148
apply (simp add: oex_def, blast) 
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   149
done
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   150
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   151
(*Not of the general form for such rules; ~EX has become ALL~ *)
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   152
lemma oexCI:
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   153
   "[| ALL x<A. ~P(x) ==> P(a);  a<A |] ==> EX x<A. P(x)"
13170
paulson
parents: 13169
diff changeset
   154
apply (simp add: oex_def, blast) 
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   155
done
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   156
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   157
lemma oexE [elim!]:
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   158
    "[| EX x<A. P(x);  !!x. [| x<A; P(x) |] ==> Q |] ==> Q"
13170
paulson
parents: 13169
diff changeset
   159
apply (simp add: oex_def, blast) 
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   160
done
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   161
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   162
lemma oex_cong [cong]:
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   163
    "[| a=a';  !!x. x<a' ==> P(x) <-> P'(x) |] ==> oex(a,P) <-> oex(a',P')"
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   164
apply (simp add: oex_def cong add: conj_cong)
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   165
done
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   166
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   167
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   168
(*** Rules for Ordinal-Indexed Unions ***)
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   170
lemma OUN_I [intro]: "[| a<i;  b: B(a) |] ==> b: (UN z<i. B(z))"
13170
paulson
parents: 13169
diff changeset
   171
by (unfold OUnion_def lt_def, blast)
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   172
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   173
lemma OUN_E [elim!]:
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   174
    "[| b : (UN z<i. B(z));  !!a.[| b: B(a);  a<i |] ==> R |] ==> R"
13170
paulson
parents: 13169
diff changeset
   175
apply (unfold OUnion_def lt_def, blast)
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   176
done
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   177
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   178
lemma OUN_iff: "b : (UN x<i. B(x)) <-> (EX x<i. b : B(x))"
13170
paulson
parents: 13169
diff changeset
   179
by (unfold OUnion_def oex_def lt_def, blast)
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   180
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   181
lemma OUN_cong [cong]:
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   182
    "[| i=j;  !!x. x<j ==> C(x)=D(x) |] ==> (UN x<i. C(x)) = (UN x<j. D(x))"
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   183
by (simp add: OUnion_def lt_def OUN_iff)
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   184
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   185
lemma lt_induct: 
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   186
    "[| i<k;  !!x.[| x<k;  ALL y<x. P(y) |] ==> P(x) |]  ==>  P(i)"
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   187
apply (simp add: lt_def oall_def)
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   188
apply (erule conjE) 
13170
paulson
parents: 13169
diff changeset
   189
apply (erule Ord_induct, assumption, blast) 
13169
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   190
done
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   191
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   192
ML
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   193
{*
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   194
val oall_def = thm "oall_def"
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   195
val oex_def = thm "oex_def"
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   196
val OUnion_def = thm "OUnion_def"
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   197
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   198
val oallI = thm "oallI";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   199
val ospec = thm "ospec";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   200
val oallE = thm "oallE";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   201
val rev_oallE = thm "rev_oallE";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   202
val oall_simp = thm "oall_simp";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   203
val oall_cong = thm "oall_cong";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   204
val oexI = thm "oexI";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   205
val oexCI = thm "oexCI";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   206
val oexE = thm "oexE";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   207
val oex_cong = thm "oex_cong";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   208
val OUN_I = thm "OUN_I";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   209
val OUN_E = thm "OUN_E";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   210
val OUN_iff = thm "OUN_iff";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   211
val OUN_cong = thm "OUN_cong";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   212
val lt_induct = thm "lt_induct";
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   213
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   214
val Ord_atomize =
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   215
    atomize (("OrdQuant.oall", [ospec])::ZF_conn_pairs, ZF_mem_pairs);
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   216
simpset_ref() := simpset() setmksimps (map mk_eq o Ord_atomize o gen_all);
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   217
*}
394a6c649547 conversion of OrdQuant.ML to Isar
paulson
parents: 13162
diff changeset
   218
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents:
diff changeset
   219
end