text\<open>Reduces the original comprehension to the reflected one\<close> lemma reflection_imp_L_separation: "\\x\Lset(j). P(x) \ Q(x);
{x \<in> Lset(j) . Q(x)} \<in> DPow(Lset(j));
Ord(j); z \<in> Lset(j)\<rbrakk> \<Longrightarrow> L({x \<in> z . P(x)})" apply (rule_tac i = "succ(j)"in L_I) prefer 2 apply simp apply (subgoal_tac "{x \ z. P(x)} = {x \ Lset(j). x \ z \ (Q(x))}") prefer 2 apply (blast dest: mem_Lset_imp_subset_Lset) apply (simp add: Lset_succ Collect_conj_in_DPow_Lset) done
text\<open>Encapsulates the standard proof script for proving instances of
Separation.\<close> lemma gen_separation: assumes reflection: "REFLECTS [P,Q]" and Lu: "L(u)" and collI: "\j. u \ Lset(j) \<Longrightarrow> Collect(Lset(j), Q(j)) \<in> DPow(Lset(j))" shows"separation(L,P)" apply (rule separation_CollectI) apply (rule_tac A="{u,z}"in subset_LsetE, blast intro: Lu) apply (rule ReflectsE [OF reflection], assumption) apply (drule subset_Lset_ltD, assumption) apply (erule reflection_imp_L_separation) apply (simp_all add: lt_Ord2, clarify) apply (rule collI, assumption) done
text\<open>As above, but typically \<^term>\<open>u\<close> is a finite enumeration such as \<^term>\<open>{a,b}\<close>; thus the new subgoal gets the assumption \<^term>\<open>{a,b} \<subseteq> Lset(i)\<close>, which is logically equivalent to \<^term>\<open>a \<in> Lset(i)\<close> and \<^term>\<open>b \<in> Lset(i)\<close>.\<close> lemma gen_separation_multi: assumes reflection: "REFLECTS [P,Q]" and Lu: "L(u)" and collI: "\j. u \ Lset(j) \<Longrightarrow> Collect(Lset(j), Q(j)) \<in> DPow(Lset(j))" shows"separation(L,P)" apply (rule gen_separation [OF reflection Lu]) apply (drule mem_Lset_imp_subset_Lset) apply (erule collI) done
subsection\<open>Separation for Intersection\<close>
lemma Inter_Reflects: "REFLECTS[\x. \y[L]. y\A \ x \ y, \<lambda>i x. \<forall>y\<in>Lset(i). y\<in>A \<longrightarrow> x \<in> y]" by (intro FOL_reflections)
lemma Inter_separation: "L(A) \ separation(L, \x. \y[L]. y\A \ x\y)" apply (rule gen_separation [OF Inter_Reflects], simp) apply (rule DPow_LsetI) txt\<open>I leave this one example of a manual proof. The tedium of manually
instantiating \<^term>\<open>i\<close>, \<^term>\<open>j\<close> and \<^term>\<open>env\<close> is obvious.\<close> apply (rule ball_iff_sats) apply (rule imp_iff_sats) apply (rule_tac [2] i=1 and j=0 and env="[y,x,A]"in mem_iff_sats) apply (rule_tac i=0 and j=2 in mem_iff_sats) apply (simp_all add: succ_Un_distrib [symmetric]) done
subsection\<open>Separation for Set Difference\<close>
lemma Diff_Reflects: "REFLECTS[\x. x \ B, \i x. x \ B]" by (intro FOL_reflections)
subsection\<open>Instantiating the locale \<open>M_basic\<close>\<close> text\<open>Separation (and Strong Replacement) for basic set-theoretic constructions
such as intersection, Cartesian Product and image.\<close>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.