src/ZF/Constructible/Formula.thy
changeset 13298 b4f370679c65
parent 13291 a73ab154f75c
child 13306 6eebcddee32b
--- a/src/ZF/Constructible/Formula.thy	Thu Jul 04 16:48:21 2002 +0200
+++ b/src/ZF/Constructible/Formula.thy	Thu Jul 04 16:59:54 2002 +0200
@@ -95,7 +95,7 @@
 
 declare satisfies.simps [simp del]; 
 
-subsubsection{*Dividing line between primitive and derived connectives*}
+subsection{*Dividing line between primitive and derived connectives*}
 
 lemma sats_Or_iff [simp]:
   "env \<in> list(A) 
@@ -125,6 +125,11 @@
        ==> (x\<in>y) <-> sats(A, Member(i,j), env)" 
 by (simp add: satisfies.simps)
 
+lemma equal_iff_sats:
+      "[| nth(i,env) = x; nth(j,env) = y; env \<in> list(A)|]
+       ==> (x=y) <-> sats(A, Equal(i,j), env)" 
+by (simp add: satisfies.simps)
+
 lemma conj_iff_sats:
       "[| P <-> sats(A,p,env); Q <-> sats(A,q,env); env \<in> list(A)|]
        ==> (P & Q) <-> sats(A, And(p,q), env)"
@@ -161,22 +166,6 @@
 by (simp add: sats_Exists_iff) 
 
 
-
-(*pretty but unnecessary
-constdefs sat     :: "[i,i] => o"
-  "sat(A,p) == satisfies(A,p)`[] = 1"
-
-syntax "_sat"  :: "[i,i] => o"    (infixl "|=" 50)
-translations "A |= p" == "sat(A,p)"
-
-lemma [simp]: "(A |= Neg(p)) <-> ~ (A |= p)"
-by (simp add: sat_def)
-
-lemma [simp]: "(A |= And(p,q)) <-> A|=p & A|=q"
-by (simp add: sat_def)
-*) 
-
-
 constdefs incr_var :: "[i,i]=>i"
     "incr_var(x,lev) == if x<lev then x else succ(x)"
 
@@ -355,7 +344,7 @@
 done
 
 
-(**** TRYING INCR_BV1 AGAIN ****)
+subsection{*Renaming all but the first bound variable*}
 
 constdefs incr_bv1 :: "i => i"
     "incr_bv1(p) == incr_bv(p)`1"
@@ -398,7 +387,7 @@
    ==> arity(incr_bv1^n(p)) =
          (if 1 < arity(p) then n #+ arity(p) else arity(p))"
 apply (induct_tac n) 
-apply (simp_all add: arity_incr_bv1_eq )
+apply (simp_all add: arity_incr_bv1_eq)
 apply (simp add: not_lt_iff_le)
 apply (blast intro: le_trans add_le_self2 arity_type) 
 done
@@ -520,6 +509,76 @@
 oops
 *)
 
+
+subsection{*Internalized formulas for basic concepts*}
+
+subsubsection{*The subset relation*}
+
+lemma lt_length_in_nat:
+   "[|x < length(xs); xs \<in> list(A)|] ==> x \<in> nat"
+apply (frule lt_nat_in_nat, typecheck) 
+done
+
+constdefs subset_fm :: "[i,i]=>i"
+    "subset_fm(x,y) == Forall(Implies(Member(0,succ(x)), Member(0,succ(y))))"
+
+lemma subset_type [TC]: "[| x \<in> nat; y \<in> nat |] ==> subset_fm(x,y) \<in> formula"
+by (simp add: subset_fm_def) 
+
+lemma arity_subset_fm [simp]:
+     "[| x \<in> nat; y \<in> nat |] ==> arity(subset_fm(x,y)) = succ(x) \<union> succ(y)"
+by (simp add: subset_fm_def succ_Un_distrib [symmetric]) 
+
+lemma sats_subset_fm [simp]:
+   "[|x < length(env); y \<in> nat; env \<in> list(A); Transset(A)|]
+    ==> sats(A, subset_fm(x,y), env) <-> nth(x,env) \<subseteq> nth(y,env)"
+apply (frule lt_length_in_nat, assumption)  
+apply (simp add: subset_fm_def Transset_def) 
+apply (blast intro: nth_type) 
+done
+
+subsubsection{*Transitive sets*}
+
+constdefs transset_fm :: "i=>i"
+   "transset_fm(x) == Forall(Implies(Member(0,succ(x)), subset_fm(0,succ(x))))"
+
+lemma transset_type [TC]: "x \<in> nat ==> transset_fm(x) \<in> formula"
+by (simp add: transset_fm_def) 
+
+lemma arity_transset_fm [simp]:
+     "x \<in> nat ==> arity(transset_fm(x)) = succ(x)"
+by (simp add: transset_fm_def succ_Un_distrib [symmetric]) 
+
+lemma sats_transset_fm [simp]:
+   "[|x < length(env); env \<in> list(A); Transset(A)|]
+    ==> sats(A, transset_fm(x), env) <-> Transset(nth(x,env))"
+apply (frule lt_nat_in_nat, erule length_type) 
+apply (simp add: transset_fm_def Transset_def) 
+apply (blast intro: nth_type) 
+done
+
+subsubsection{*Ordinals*}
+
+constdefs ordinal_fm :: "i=>i"
+   "ordinal_fm(x) == 
+      And(transset_fm(x), Forall(Implies(Member(0,succ(x)), transset_fm(0))))"
+
+lemma ordinal_type [TC]: "x \<in> nat ==> ordinal_fm(x) \<in> formula"
+by (simp add: ordinal_fm_def) 
+
+lemma arity_ordinal_fm [simp]:
+     "x \<in> nat ==> arity(ordinal_fm(x)) = succ(x)"
+by (simp add: ordinal_fm_def succ_Un_distrib [symmetric]) 
+
+lemma sats_ordinal_fm [simp]:
+   "[|x < length(env); env \<in> list(A); Transset(A)|]
+    ==> sats(A, ordinal_fm(x), env) <-> Ord(nth(x,env))"
+apply (frule lt_nat_in_nat, erule length_type) 
+apply (simp add: ordinal_fm_def Ord_def Transset_def)
+apply (blast intro: nth_type) 
+done
+
+
 subsection{* Constant Lset: Levels of the Constructible Universe *}
 
 constdefs Lset :: "i=>i"
@@ -661,63 +720,7 @@
 done
 
 
-
-text{*Kunen's VI, 1.9 (b)*}
-
-constdefs subset_fm :: "[i,i]=>i"
-    "subset_fm(x,y) == Forall(Implies(Member(0,succ(x)), Member(0,succ(y))))"
-
-lemma subset_type [TC]: "[| x \<in> nat; y \<in> nat |] ==> subset_fm(x,y) \<in> formula"
-by (simp add: subset_fm_def) 
-
-lemma arity_subset_fm [simp]:
-     "[| x \<in> nat; y \<in> nat |] ==> arity(subset_fm(x,y)) = succ(x) \<union> succ(y)"
-by (simp add: subset_fm_def succ_Un_distrib [symmetric]) 
-
-lemma sats_subset_fm [simp]:
-   "[|x < length(env); y \<in> nat; env \<in> list(A); Transset(A)|]
-    ==> sats(A, subset_fm(x,y), env) <-> nth(x,env) \<subseteq> nth(y,env)"
-apply (frule lt_nat_in_nat, erule length_type) 
-apply (simp add: subset_fm_def Transset_def) 
-apply (blast intro: nth_type ) 
-done
-
-constdefs transset_fm :: "i=>i"
-   "transset_fm(x) == Forall(Implies(Member(0,succ(x)), subset_fm(0,succ(x))))"
-
-lemma transset_type [TC]: "x \<in> nat ==> transset_fm(x) \<in> formula"
-by (simp add: transset_fm_def) 
-
-lemma arity_transset_fm [simp]:
-     "x \<in> nat ==> arity(transset_fm(x)) = succ(x)"
-by (simp add: transset_fm_def succ_Un_distrib [symmetric]) 
-
-lemma sats_transset_fm [simp]:
-   "[|x < length(env); env \<in> list(A); Transset(A)|]
-    ==> sats(A, transset_fm(x), env) <-> Transset(nth(x,env))"
-apply (frule lt_nat_in_nat, erule length_type) 
-apply (simp add: transset_fm_def Transset_def) 
-apply (blast intro: nth_type ) 
-done
-
-constdefs ordinal_fm :: "i=>i"
-   "ordinal_fm(x) == 
-      And(transset_fm(x), Forall(Implies(Member(0,succ(x)), transset_fm(0))))"
-
-lemma ordinal_type [TC]: "x \<in> nat ==> ordinal_fm(x) \<in> formula"
-by (simp add: ordinal_fm_def) 
-
-lemma arity_ordinal_fm [simp]:
-     "x \<in> nat ==> arity(ordinal_fm(x)) = succ(x)"
-by (simp add: ordinal_fm_def succ_Un_distrib [symmetric]) 
-
-lemma sats_ordinal_fm [simp]:
-   "[|x < length(env); env \<in> list(A); Transset(A)|]
-    ==> sats(A, ordinal_fm(x), env) <-> Ord(nth(x,env))"
-apply (frule lt_nat_in_nat, erule length_type) 
-apply (simp add: ordinal_fm_def Ord_def Transset_def)
-apply (blast intro: nth_type ) 
-done
+subsection{*Constructible Ordinals: Kunen's VI, 1.9 (b)*}
 
 text{*The subset consisting of the ordinals is definable.*}
 lemma Ords_in_DPow: "Transset(A) ==> {x \<in> A. Ord(x)} \<in> DPow(A)"