src/ZF/Constructible/Normal.thy
author skalberg
Thu, 28 Aug 2003 01:56:40 +0200
changeset 14171 0cab06e3bbd0
parent 13634 99a593b49b04
child 16417 9bc16273c2d4
permissions -rw-r--r--
Extended the notion of letter and digit, such that now one may use greek, gothic, euler, or calligraphic letters as normal letters.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13505
52a16cb7fefb Relativized right up to L satisfies V=L!
paulson
parents: 13428
diff changeset
     1
(*  Title:      ZF/Constructible/Normal.thy
52a16cb7fefb Relativized right up to L satisfies V=L!
paulson
parents: 13428
diff changeset
     2
    ID:         $Id$
52a16cb7fefb Relativized right up to L satisfies V=L!
paulson
parents: 13428
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
52a16cb7fefb Relativized right up to L satisfies V=L!
paulson
parents: 13428
diff changeset
     4
*)
52a16cb7fefb Relativized right up to L satisfies V=L!
paulson
parents: 13428
diff changeset
     5
13223
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
     6
header {*Closed Unbounded Classes and Normal Functions*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
     7
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
     8
theory Normal = Main:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
     9
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    10
text{*
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    11
One source is the book
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    12
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    13
Frank R. Drake.
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    14
\emph{Set Theory: An Introduction to Large Cardinals}.
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    15
North-Holland, 1974.
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    16
*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    17
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    18
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    19
subsection {*Closed and Unbounded (c.u.) Classes of Ordinals*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    20
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    21
constdefs
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    22
  Closed :: "(i=>o) => o"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    23
    "Closed(P) == \<forall>I. I \<noteq> 0 --> (\<forall>i\<in>I. Ord(i) \<and> P(i)) --> P(\<Union>(I))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    24
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    25
  Unbounded :: "(i=>o) => o"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    26
    "Unbounded(P) == \<forall>i. Ord(i) --> (\<exists>j. i<j \<and> P(j))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    27
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    28
  Closed_Unbounded :: "(i=>o) => o"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    29
    "Closed_Unbounded(P) == Closed(P) \<and> Unbounded(P)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    30
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    31
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    32
subsubsection{*Simple facts about c.u. classes*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    33
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    34
lemma ClosedI:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    35
     "[| !!I. [| I \<noteq> 0; \<forall>i\<in>I. Ord(i) \<and> P(i) |] ==> P(\<Union>(I)) |] 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    36
      ==> Closed(P)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    37
by (simp add: Closed_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    38
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    39
lemma ClosedD:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    40
     "[| Closed(P); I \<noteq> 0; !!i. i\<in>I ==> Ord(i); !!i. i\<in>I ==> P(i) |] 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    41
      ==> P(\<Union>(I))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    42
by (simp add: Closed_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    43
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    44
lemma UnboundedD:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    45
     "[| Unbounded(P);  Ord(i) |] ==> \<exists>j. i<j \<and> P(j)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    46
by (simp add: Unbounded_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    47
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    48
lemma Closed_Unbounded_imp_Unbounded: "Closed_Unbounded(C) ==> Unbounded(C)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    49
by (simp add: Closed_Unbounded_def) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    50
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    51
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    52
text{*The universal class, V, is closed and unbounded.
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    53
      A bit odd, since C. U. concerns only ordinals, but it's used below!*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    54
theorem Closed_Unbounded_V [simp]: "Closed_Unbounded(\<lambda>x. True)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    55
by (unfold Closed_Unbounded_def Closed_def Unbounded_def, blast)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    56
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    57
text{*The class of ordinals, @{term Ord}, is closed and unbounded.*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    58
theorem Closed_Unbounded_Ord   [simp]: "Closed_Unbounded(Ord)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    59
by (unfold Closed_Unbounded_def Closed_def Unbounded_def, blast)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    60
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    61
text{*The class of limit ordinals, @{term Limit}, is closed and unbounded.*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    62
theorem Closed_Unbounded_Limit [simp]: "Closed_Unbounded(Limit)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    63
apply (simp add: Closed_Unbounded_def Closed_def Unbounded_def Limit_Union, 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    64
       clarify)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    65
apply (rule_tac x="i++nat" in exI)  
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    66
apply (blast intro: oadd_lt_self oadd_LimitI Limit_nat Limit_has_0) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    67
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    68
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    69
text{*The class of cardinals, @{term Card}, is closed and unbounded.*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    70
theorem Closed_Unbounded_Card  [simp]: "Closed_Unbounded(Card)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    71
apply (simp add: Closed_Unbounded_def Closed_def Unbounded_def Card_Union)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    72
apply (blast intro: lt_csucc Card_csucc)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    73
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    74
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    75
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    76
subsubsection{*The intersection of any set-indexed family of c.u. classes is
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    77
      c.u.*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    78
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    79
text{*The constructions below come from Kunen, \emph{Set Theory}, page 78.*}
13428
99e52e78eb65 eliminate open locales and special ML code;
wenzelm
parents: 13382
diff changeset
    80
locale cub_family =
13223
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    81
  fixes P and A
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    82
  fixes next_greater -- "the next ordinal satisfying class @{term A}"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    83
  fixes sup_greater  -- "sup of those ordinals over all @{term A}"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    84
  assumes closed:    "a\<in>A ==> Closed(P(a))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    85
      and unbounded: "a\<in>A ==> Unbounded(P(a))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    86
      and A_non0: "A\<noteq>0"
14171
0cab06e3bbd0 Extended the notion of letter and digit, such that now one may use greek,
skalberg
parents: 13634
diff changeset
    87
  defines "next_greater(a,x) == \<mu> y. x<y \<and> P(a,y)"
13223
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    88
      and "sup_greater(x) == \<Union>a\<in>A. next_greater(a,x)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    89
 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    90
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    91
text{*Trivial that the intersection is closed.*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    92
lemma (in cub_family) Closed_INT: "Closed(\<lambda>x. \<forall>i\<in>A. P(i,x))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    93
by (blast intro: ClosedI ClosedD [OF closed])
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    94
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    95
text{*All remaining effort goes to show that the intersection is unbounded.*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    96
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    97
lemma (in cub_family) Ord_sup_greater:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    98
     "Ord(sup_greater(x))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
    99
by (simp add: sup_greater_def next_greater_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   100
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   101
lemma (in cub_family) Ord_next_greater:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   102
     "Ord(next_greater(a,x))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   103
by (simp add: next_greater_def Ord_Least)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   104
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   105
text{*@{term next_greater} works as expected: it returns a larger value
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   106
and one that belongs to class @{term "P(a)"}. *}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   107
lemma (in cub_family) next_greater_lemma:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   108
     "[| Ord(x); a\<in>A |] ==> P(a, next_greater(a,x)) \<and> x < next_greater(a,x)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   109
apply (simp add: next_greater_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   110
apply (rule exE [OF UnboundedD [OF unbounded]])
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   111
  apply assumption+
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   112
apply (blast intro: LeastI2 lt_Ord2) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   113
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   114
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   115
lemma (in cub_family) next_greater_in_P:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   116
     "[| Ord(x); a\<in>A |] ==> P(a, next_greater(a,x))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   117
by (blast dest: next_greater_lemma)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   118
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   119
lemma (in cub_family) next_greater_gt:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   120
     "[| Ord(x); a\<in>A |] ==> x < next_greater(a,x)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   121
by (blast dest: next_greater_lemma)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   122
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   123
lemma (in cub_family) sup_greater_gt:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   124
     "Ord(x) ==> x < sup_greater(x)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   125
apply (simp add: sup_greater_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   126
apply (insert A_non0)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   127
apply (blast intro: UN_upper_lt next_greater_gt Ord_next_greater)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   128
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   129
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   130
lemma (in cub_family) next_greater_le_sup_greater:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   131
     "a\<in>A ==> next_greater(a,x) \<le> sup_greater(x)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   132
apply (simp add: sup_greater_def) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   133
apply (blast intro: UN_upper_le Ord_next_greater)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   134
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   135
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   136
lemma (in cub_family) omega_sup_greater_eq_UN:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   137
     "[| Ord(x); a\<in>A |] 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   138
      ==> sup_greater^\<omega> (x) = 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   139
          (\<Union>n\<in>nat. next_greater(a, sup_greater^n (x)))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   140
apply (simp add: iterates_omega_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   141
apply (rule le_anti_sym)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   142
apply (rule le_implies_UN_le_UN) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   143
apply (blast intro: leI next_greater_gt Ord_iterates Ord_sup_greater)  
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   144
txt{*Opposite bound:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   145
@{subgoals[display,indent=0,margin=65]}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   146
*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   147
apply (rule UN_least_le) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   148
apply (blast intro: Ord_UN Ord_iterates Ord_sup_greater)  
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   149
apply (rule_tac a="succ(n)" in UN_upper_le)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   150
apply (simp_all add: next_greater_le_sup_greater) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   151
apply (blast intro: Ord_UN Ord_iterates Ord_sup_greater)  
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   152
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   153
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   154
lemma (in cub_family) P_omega_sup_greater:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   155
     "[| Ord(x); a\<in>A |] ==> P(a, sup_greater^\<omega> (x))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   156
apply (simp add: omega_sup_greater_eq_UN)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   157
apply (rule ClosedD [OF closed]) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   158
apply (blast intro: ltD, auto)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   159
apply (blast intro: Ord_iterates Ord_next_greater Ord_sup_greater)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   160
apply (blast intro: next_greater_in_P Ord_iterates Ord_sup_greater)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   161
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   162
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   163
lemma (in cub_family) omega_sup_greater_gt:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   164
     "Ord(x) ==> x < sup_greater^\<omega> (x)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   165
apply (simp add: iterates_omega_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   166
apply (rule UN_upper_lt [of 1], simp_all) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   167
 apply (blast intro: sup_greater_gt) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   168
apply (blast intro: Ord_UN Ord_iterates Ord_sup_greater)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   169
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   170
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   171
lemma (in cub_family) Unbounded_INT: "Unbounded(\<lambda>x. \<forall>a\<in>A. P(a,x))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   172
apply (unfold Unbounded_def)  
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   173
apply (blast intro!: omega_sup_greater_gt P_omega_sup_greater) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   174
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   175
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   176
lemma (in cub_family) Closed_Unbounded_INT: 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   177
     "Closed_Unbounded(\<lambda>x. \<forall>a\<in>A. P(a,x))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   178
by (simp add: Closed_Unbounded_def Closed_INT Unbounded_INT)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   179
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   180
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   181
theorem Closed_Unbounded_INT:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   182
    "(!!a. a\<in>A ==> Closed_Unbounded(P(a)))
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   183
     ==> Closed_Unbounded(\<lambda>x. \<forall>a\<in>A. P(a, x))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   184
apply (case_tac "A=0", simp)
13428
99e52e78eb65 eliminate open locales and special ML code;
wenzelm
parents: 13382
diff changeset
   185
apply (rule cub_family.Closed_Unbounded_INT [OF cub_family.intro])
13223
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   186
apply (simp_all add: Closed_Unbounded_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   187
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   188
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   189
lemma Int_iff_INT2:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   190
     "P(x) \<and> Q(x)  <->  (\<forall>i\<in>2. (i=0 --> P(x)) \<and> (i=1 --> Q(x)))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   191
by auto
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   192
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   193
theorem Closed_Unbounded_Int:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   194
     "[| Closed_Unbounded(P); Closed_Unbounded(Q) |] 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   195
      ==> Closed_Unbounded(\<lambda>x. P(x) \<and> Q(x))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   196
apply (simp only: Int_iff_INT2)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   197
apply (rule Closed_Unbounded_INT, auto) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   198
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   199
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   200
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   201
subsection {*Normal Functions*} 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   202
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   203
constdefs
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   204
  mono_le_subset :: "(i=>i) => o"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   205
    "mono_le_subset(M) == \<forall>i j. i\<le>j --> M(i) \<subseteq> M(j)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   206
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   207
  mono_Ord :: "(i=>i) => o"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   208
    "mono_Ord(F) == \<forall>i j. i<j --> F(i) < F(j)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   209
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   210
  cont_Ord :: "(i=>i) => o"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   211
    "cont_Ord(F) == \<forall>l. Limit(l) --> F(l) = (\<Union>i<l. F(i))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   212
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   213
  Normal :: "(i=>i) => o"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   214
    "Normal(F) == mono_Ord(F) \<and> cont_Ord(F)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   215
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   216
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   217
subsubsection{*Immediate properties of the definitions*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   218
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   219
lemma NormalI:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   220
     "[|!!i j. i<j ==> F(i) < F(j);  !!l. Limit(l) ==> F(l) = (\<Union>i<l. F(i))|]
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   221
      ==> Normal(F)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   222
by (simp add: Normal_def mono_Ord_def cont_Ord_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   223
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   224
lemma mono_Ord_imp_Ord: "[| Ord(i); mono_Ord(F) |] ==> Ord(F(i))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   225
apply (simp add: mono_Ord_def) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   226
apply (blast intro: lt_Ord) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   227
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   228
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   229
lemma mono_Ord_imp_mono: "[| i<j; mono_Ord(F) |] ==> F(i) < F(j)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   230
by (simp add: mono_Ord_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   231
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   232
lemma Normal_imp_Ord [simp]: "[| Normal(F); Ord(i) |] ==> Ord(F(i))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   233
by (simp add: Normal_def mono_Ord_imp_Ord) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   234
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   235
lemma Normal_imp_cont: "[| Normal(F); Limit(l) |] ==> F(l) = (\<Union>i<l. F(i))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   236
by (simp add: Normal_def cont_Ord_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   237
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   238
lemma Normal_imp_mono: "[| i<j; Normal(F) |] ==> F(i) < F(j)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   239
by (simp add: Normal_def mono_Ord_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   240
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   241
lemma Normal_increasing: "[| Ord(i); Normal(F) |] ==> i\<le>F(i)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   242
apply (induct i rule: trans_induct3_rule)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   243
  apply (simp add: subset_imp_le)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   244
 apply (subgoal_tac "F(x) < F(succ(x))")
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   245
  apply (force intro: lt_trans1)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   246
 apply (simp add: Normal_def mono_Ord_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   247
apply (subgoal_tac "(\<Union>y<x. y) \<le> (\<Union>y<x. F(y))")
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   248
 apply (simp add: Normal_imp_cont Limit_OUN_eq) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   249
apply (blast intro: ltD le_implies_OUN_le_OUN)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   250
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   251
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   252
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   253
subsubsection{*The class of fixedpoints is closed and unbounded*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   254
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   255
text{*The proof is from Drake, pages 113--114.*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   256
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   257
lemma mono_Ord_imp_le_subset: "mono_Ord(F) ==> mono_le_subset(F)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   258
apply (simp add: mono_le_subset_def, clarify)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   259
apply (subgoal_tac "F(i)\<le>F(j)", blast dest: le_imp_subset) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   260
apply (simp add: le_iff) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   261
apply (blast intro: lt_Ord2 mono_Ord_imp_Ord mono_Ord_imp_mono) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   262
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   263
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   264
text{*The following equation is taken for granted in any set theory text.*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   265
lemma cont_Ord_Union:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   266
     "[| cont_Ord(F); mono_le_subset(F); X=0 --> F(0)=0; \<forall>x\<in>X. Ord(x) |] 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   267
      ==> F(Union(X)) = (\<Union>y\<in>X. F(y))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   268
apply (frule Ord_set_cases)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   269
apply (erule disjE, force) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   270
apply (thin_tac "X=0 --> ?Q", auto)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   271
 txt{*The trival case of @{term "\<Union>X \<in> X"}*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   272
 apply (rule equalityI, blast intro: Ord_Union_eq_succD) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   273
 apply (simp add: mono_le_subset_def UN_subset_iff le_subset_iff) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   274
 apply (blast elim: equalityE)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   275
txt{*The limit case, @{term "Limit(\<Union>X)"}:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   276
@{subgoals[display,indent=0,margin=65]}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   277
*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   278
apply (simp add: OUN_Union_eq cont_Ord_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   279
apply (rule equalityI) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   280
txt{*First inclusion:*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   281
 apply (rule UN_least [OF OUN_least])
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   282
 apply (simp add: mono_le_subset_def, blast intro: leI) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   283
txt{*Second inclusion:*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   284
apply (rule UN_least) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   285
apply (frule Union_upper_le, blast, blast intro: Ord_Union)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   286
apply (erule leE, drule ltD, elim UnionE)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   287
 apply (simp add: OUnion_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   288
 apply blast+
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   289
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   290
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   291
lemma Normal_Union:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   292
     "[| X\<noteq>0; \<forall>x\<in>X. Ord(x); Normal(F) |] ==> F(Union(X)) = (\<Union>y\<in>X. F(y))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   293
apply (simp add: Normal_def) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   294
apply (blast intro: mono_Ord_imp_le_subset cont_Ord_Union) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   295
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   296
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   297
lemma Normal_imp_fp_Closed: "Normal(F) ==> Closed(\<lambda>i. F(i) = i)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   298
apply (simp add: Closed_def ball_conj_distrib, clarify)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   299
apply (frule Ord_set_cases)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   300
apply (auto simp add: Normal_Union)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   301
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   302
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   303
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   304
lemma iterates_Normal_increasing:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   305
     "[| n\<in>nat;  x < F(x);  Normal(F) |] 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   306
      ==> F^n (x) < F^(succ(n)) (x)"  
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   307
apply (induct n rule: nat_induct)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   308
apply (simp_all add: Normal_imp_mono)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   309
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   310
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   311
lemma Ord_iterates_Normal:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   312
     "[| n\<in>nat;  Normal(F);  Ord(x) |] ==> Ord(F^n (x))"  
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   313
by (simp add: Ord_iterates) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   314
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   315
text{*THIS RESULT IS UNUSED*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   316
lemma iterates_omega_Limit:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   317
     "[| Normal(F);  x < F(x) |] ==> Limit(F^\<omega> (x))"  
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   318
apply (frule lt_Ord) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   319
apply (simp add: iterates_omega_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   320
apply (rule increasing_LimitI) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   321
   --"this lemma is @{thm increasing_LimitI [no_vars]}"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   322
 apply (blast intro: UN_upper_lt [of "1"]   Normal_imp_Ord
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   323
                     Ord_UN Ord_iterates lt_imp_0_lt
13268
240509babf00 more use of relativized quantifiers
paulson
parents: 13223
diff changeset
   324
                     iterates_Normal_increasing, clarify)
13223
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   325
apply (rule bexI) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   326
 apply (blast intro: Ord_in_Ord [OF Ord_iterates_Normal]) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   327
apply (rule UN_I, erule nat_succI) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   328
apply (blast intro:  iterates_Normal_increasing Ord_iterates_Normal
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   329
                     ltD [OF lt_trans1, OF succ_leI, OF ltI]) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   330
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   331
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   332
lemma iterates_omega_fixedpoint:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   333
     "[| Normal(F); Ord(a) |] ==> F(F^\<omega> (a)) = F^\<omega> (a)" 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   334
apply (frule Normal_increasing, assumption)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   335
apply (erule leE) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   336
 apply (simp_all add: iterates_omega_triv [OF sym])  (*for subgoal 2*)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   337
apply (simp add:  iterates_omega_def Normal_Union) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   338
apply (rule equalityI, force simp add: nat_succI) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   339
txt{*Opposite inclusion:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   340
@{subgoals[display,indent=0,margin=65]}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   341
*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   342
apply clarify
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   343
apply (rule UN_I, assumption) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   344
apply (frule iterates_Normal_increasing, assumption, assumption, simp)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   345
apply (blast intro: Ord_trans ltD Ord_iterates_Normal Normal_imp_Ord [of F]) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   346
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   347
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   348
lemma iterates_omega_increasing:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   349
     "[| Normal(F); Ord(a) |] ==> a \<le> F^\<omega> (a)"   
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   350
apply (unfold iterates_omega_def)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   351
apply (rule UN_upper_le [of 0], simp_all)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   352
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   353
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   354
lemma Normal_imp_fp_Unbounded: "Normal(F) ==> Unbounded(\<lambda>i. F(i) = i)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   355
apply (unfold Unbounded_def, clarify)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   356
apply (rule_tac x="F^\<omega> (succ(i))" in exI)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   357
apply (simp add: iterates_omega_fixedpoint) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   358
apply (blast intro: lt_trans2 [OF _ iterates_omega_increasing])
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   359
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   360
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   361
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   362
theorem Normal_imp_fp_Closed_Unbounded: 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   363
     "Normal(F) ==> Closed_Unbounded(\<lambda>i. F(i) = i)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   364
by (simp add: Closed_Unbounded_def Normal_imp_fp_Closed
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   365
              Normal_imp_fp_Unbounded)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   366
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   367
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   368
subsubsection{*Function @{text normalize}*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   369
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   370
text{*Function @{text normalize} maps a function @{text F} to a 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   371
      normal function that bounds it above.  The result is normal if and
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   372
      only if @{text F} is continuous: succ is not bounded above by any 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   373
      normal function, by @{thm [source] Normal_imp_fp_Unbounded}.
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   374
*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   375
constdefs
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   376
  normalize :: "[i=>i, i] => i"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   377
    "normalize(F,a) == transrec2(a, F(0), \<lambda>x r. F(succ(x)) Un succ(r))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   378
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   379
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   380
lemma Ord_normalize [simp, intro]:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   381
     "[| Ord(a); !!x. Ord(x) ==> Ord(F(x)) |] ==> Ord(normalize(F, a))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   382
apply (induct a rule: trans_induct3_rule)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   383
apply (simp_all add: ltD def_transrec2 [OF normalize_def])
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   384
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   385
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   386
lemma normalize_lemma [rule_format]:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   387
     "[| Ord(b); !!x. Ord(x) ==> Ord(F(x)) |] 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   388
      ==> \<forall>a. a < b --> normalize(F, a) < normalize(F, b)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   389
apply (erule trans_induct3)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   390
  apply (simp_all add: le_iff def_transrec2 [OF normalize_def])
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   391
 apply clarify
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   392
apply (rule Un_upper2_lt) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   393
  apply auto
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   394
 apply (drule spec, drule mp, assumption) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   395
 apply (erule leI) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   396
apply (drule Limit_has_succ, assumption)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   397
apply (blast intro!: Ord_normalize intro: OUN_upper_lt ltD lt_Ord)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   398
done  
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   399
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   400
lemma normalize_increasing:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   401
     "[| a < b;  !!x. Ord(x) ==> Ord(F(x)) |] 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   402
      ==> normalize(F, a) < normalize(F, b)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   403
by (blast intro!: normalize_lemma intro: lt_Ord2) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   404
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   405
theorem Normal_normalize:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   406
     "(!!x. Ord(x) ==> Ord(F(x))) ==> Normal(normalize(F))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   407
apply (rule NormalI) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   408
apply (blast intro!: normalize_increasing)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   409
apply (simp add: def_transrec2 [OF normalize_def])
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   410
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   411
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   412
theorem le_normalize:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   413
     "[| Ord(a); cont_Ord(F); !!x. Ord(x) ==> Ord(F(x)) |] 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   414
      ==> F(a) \<le> normalize(F,a)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   415
apply (erule trans_induct3) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   416
apply (simp_all add: def_transrec2 [OF normalize_def])
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   417
apply (simp add: Un_upper1_le) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   418
apply (simp add: cont_Ord_def) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   419
apply (blast intro: ltD le_implies_OUN_le_OUN)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   420
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   421
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   422
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   423
subsection {*The Alephs*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   424
text {*This is the well-known transfinite enumeration of the cardinal 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   425
numbers.*}
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   426
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   427
constdefs
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   428
  Aleph :: "i => i"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   429
    "Aleph(a) == transrec2(a, nat, \<lambda>x r. csucc(r))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   430
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   431
syntax (xsymbols)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   432
  Aleph :: "i => i"   ("\<aleph>_" [90] 90)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   433
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   434
lemma Card_Aleph [simp, intro]:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   435
     "Ord(a) ==> Card(Aleph(a))"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   436
apply (erule trans_induct3) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   437
apply (simp_all add: Card_csucc Card_nat Card_is_Ord
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   438
                     def_transrec2 [OF Aleph_def])
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   439
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   440
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   441
lemma Aleph_lemma [rule_format]:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   442
     "Ord(b) ==> \<forall>a. a < b --> Aleph(a) < Aleph(b)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   443
apply (erule trans_induct3) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   444
apply (simp_all add: le_iff def_transrec2 [OF Aleph_def])  
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   445
apply (blast intro: lt_trans lt_csucc Card_is_Ord, clarify)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   446
apply (drule Limit_has_succ, assumption)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   447
apply (blast intro: Card_is_Ord Card_Aleph OUN_upper_lt ltD lt_Ord)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   448
done  
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   449
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   450
lemma Aleph_increasing:
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   451
     "a < b ==> Aleph(a) < Aleph(b)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   452
by (blast intro!: Aleph_lemma intro: lt_Ord2) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   453
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   454
theorem Normal_Aleph: "Normal(Aleph)"
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   455
apply (rule NormalI) 
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   456
apply (blast intro!: Aleph_increasing)
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   457
apply (simp add: def_transrec2 [OF Aleph_def])
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   458
done
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   459
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   460
end
45be08fbdcff new theory of inner models
paulson
parents:
diff changeset
   461