src/ZF/Constructible/Reflection.thy
changeset 13382 b37764a46b16
parent 13292 f504f5d284d3
child 13428 99e52e78eb65
equal deleted inserted replaced
13381:60bc63b13857 13382:b37764a46b16
    23 @{term "\<forall>y\<in>Mset(a). \<forall>z\<in>Mset(a). P(<y,z>) <-> Q(a,<y,z>)"}, removing most
    23 @{term "\<forall>y\<in>Mset(a). \<forall>z\<in>Mset(a). P(<y,z>) <-> Q(a,<y,z>)"}, removing most
    24 uses of @{term Pair_in_Mset}.  But there isn't much point in doing so, since 
    24 uses of @{term Pair_in_Mset}.  But there isn't much point in doing so, since 
    25 ultimately the @{text ex_reflection} proof is packaged up using the
    25 ultimately the @{text ex_reflection} proof is packaged up using the
    26 predicate @{text Reflects}.
    26 predicate @{text Reflects}.
    27 *}
    27 *}
    28 locale reflection =
    28 locale (open) reflection =
    29   fixes Mset and M and Reflects
    29   fixes Mset and M and Reflects
    30   assumes Mset_mono_le : "mono_le_subset(Mset)"
    30   assumes Mset_mono_le : "mono_le_subset(Mset)"
    31       and Mset_cont    : "cont_Ord(Mset)"
    31       and Mset_cont    : "cont_Ord(Mset)"
    32       and Pair_in_Mset : "[| x \<in> Mset(a); y \<in> Mset(a); Limit(a) |] 
    32       and Pair_in_Mset : "[| x \<in> Mset(a); y \<in> Mset(a); Limit(a) |] 
    33                           ==> <x,y> \<in> Mset(a)"
    33                           ==> <x,y> \<in> Mset(a)"
   122 done
   122 done
   123 
   123 
   124 
   124 
   125 text{*Locale for the induction hypothesis*}
   125 text{*Locale for the induction hypothesis*}
   126 
   126 
   127 locale ex_reflection = reflection +
   127 locale (open) ex_reflection = reflection +
   128   fixes P  --"the original formula"
   128   fixes P  --"the original formula"
   129   fixes Q  --"the reflected formula"
   129   fixes Q  --"the reflected formula"
   130   fixes Cl --"the class of reflecting ordinals"
   130   fixes Cl --"the class of reflecting ordinals"
   131   assumes Cl_reflects: "[| Cl(a); Ord(a) |] ==> \<forall>x\<in>Mset(a). P(x) <-> Q(a,x)"
   131   assumes Cl_reflects: "[| Cl(a); Ord(a) |] ==> \<forall>x\<in>Mset(a). P(x) <-> Q(a,x)"
   132 
   132 
   190                    \<lambda>x. \<exists>z. M(z) \<and> P0(<x,z>), 
   190                    \<lambda>x. \<exists>z. M(z) \<and> P0(<x,z>), 
   191                    \<lambda>a x. \<exists>z\<in>Mset(a). Q0(a,<x,z>))" 
   191                    \<lambda>a x. \<exists>z\<in>Mset(a). Q0(a,<x,z>))" 
   192 apply (simp add: Reflects_def) 
   192 apply (simp add: Reflects_def) 
   193 apply (intro conjI Closed_Unbounded_Int)
   193 apply (intro conjI Closed_Unbounded_Int)
   194   apply blast 
   194   apply blast 
   195  apply (rule reflection.Closed_Unbounded_ClEx [of Cl P0 Q0], blast, clarify) 
   195  apply (rule Closed_Unbounded_ClEx [of Cl P0 Q0], blast, clarify) 
   196 apply (rule_tac Cl=Cl in  ClEx_iff, assumption+, blast) 
   196 apply (rule_tac Cl=Cl in  ClEx_iff, assumption+, blast) 
   197 done
   197 done
   198 
   198 
   199 lemma (in reflection) All_reflection_0:
   199 lemma (in reflection) All_reflection_0:
   200      "Reflects(Cl,P0,Q0) 
   200      "Reflects(Cl,P0,Q0)