src/ZF/Constructible/Satisfies_absolute.thy
changeset 13504 59066e97b551
parent 13503 d93f41fe35d2
child 13505 52a16cb7fefb
equal deleted inserted replaced
13503:d93f41fe35d2 13504:59066e97b551
   217 
   217 
   218 
   218 
   219 text{*This locale packages the premises of the following theorems,
   219 text{*This locale packages the premises of the following theorems,
   220       which is the normal purpose of locales.  It doesn't accumulate
   220       which is the normal purpose of locales.  It doesn't accumulate
   221       constraints on the class @{term M}, as in most of this deveopment.*}
   221       constraints on the class @{term M}, as in most of this deveopment.*}
   222 locale M_formula_rec = M_eclose +
   222 locale Formula_Rec = M_eclose +
   223   fixes a and is_a and b and is_b and c and is_c and d and is_d and MH
   223   fixes a and is_a and b and is_b and c and is_c and d and is_d and MH
   224   defines
   224   defines
   225       "MH(u::i,f,z) ==
   225       "MH(u::i,f,z) ==
   226 	\<forall>fml[M]. is_formula(M,fml) -->
   226 	\<forall>fml[M]. is_formula(M,fml) -->
   227              is_lambda
   227              is_lambda
   246            "M(g) ==>
   246            "M(g) ==>
   247             strong_replacement
   247             strong_replacement
   248 	      (M, \<lambda>x y. x \<in> formula &
   248 	      (M, \<lambda>x y. x \<in> formula &
   249 		  y = \<langle>x, formula_rec_case(a,b,c,d,g,x)\<rangle>)";
   249 		  y = \<langle>x, formula_rec_case(a,b,c,d,g,x)\<rangle>)";
   250 
   250 
   251 lemma (in M_formula_rec) formula_rec_case_closed:
   251 lemma (in Formula_Rec) formula_rec_case_closed:
   252     "[|M(g); p \<in> formula|] ==> M(formula_rec_case(a, b, c, d, g, p))"
   252     "[|M(g); p \<in> formula|] ==> M(formula_rec_case(a, b, c, d, g, p))"
   253 by (simp add: formula_rec_case_def a_closed b_closed c_closed d_closed) 
   253 by (simp add: formula_rec_case_def a_closed b_closed c_closed d_closed) 
   254 
   254 
   255 lemma (in M_formula_rec) formula_rec_lam_closed:
   255 lemma (in Formula_Rec) formula_rec_lam_closed:
   256     "M(g) ==> M(Lambda (formula, formula_rec_case(a,b,c,d,g)))"
   256     "M(g) ==> M(Lambda (formula, formula_rec_case(a,b,c,d,g)))"
   257 by (simp add: lam_closed2 fr_lam_replace formula_rec_case_closed)
   257 by (simp add: lam_closed2 fr_lam_replace formula_rec_case_closed)
   258 
   258 
   259 lemma (in M_formula_rec) MH_rel2:
   259 lemma (in Formula_Rec) MH_rel2:
   260      "relativize2 (M, MH,
   260      "relativize2 (M, MH,
   261              \<lambda>x h. Lambda (formula, formula_rec_case(a,b,c,d,h)))"
   261              \<lambda>x h. Lambda (formula, formula_rec_case(a,b,c,d,h)))"
   262 apply (simp add: relativize2_def MH_def, clarify) 
   262 apply (simp add: relativize2_def MH_def, clarify) 
   263 apply (rule lambda_abs2) 
   263 apply (rule lambda_abs2) 
   264 apply (rule fr_lam_replace, assumption)
   264 apply (rule fr_lam_replace, assumption)
   265 apply (rule Relativize1_formula_rec_case)  
   265 apply (rule Relativize1_formula_rec_case)  
   266 apply (simp_all add: a_rel b_rel c_rel d_rel formula_rec_case_closed) 
   266 apply (simp_all add: a_rel b_rel c_rel d_rel formula_rec_case_closed) 
   267 done
   267 done
   268 
   268 
   269 lemma (in M_formula_rec) fr_transrec_closed:
   269 lemma (in Formula_Rec) fr_transrec_closed:
   270     "n \<in> nat
   270     "n \<in> nat
   271      ==> M(transrec
   271      ==> M(transrec
   272           (n, \<lambda>x h. Lambda(formula, formula_rec_case(a, b, c, d, h))))"
   272           (n, \<lambda>x h. Lambda(formula, formula_rec_case(a, b, c, d, h))))"
   273 by (simp add: transrec_closed [OF fr_replace MH_rel2]  
   273 by (simp add: transrec_closed [OF fr_replace MH_rel2]  
   274               nat_into_M formula_rec_lam_closed) 
   274               nat_into_M formula_rec_lam_closed) 
   275 
   275 
   276 text{*The main two results: @{term formula_rec} is absolute for @{term M}.*}
   276 text{*The main two results: @{term formula_rec} is absolute for @{term M}.*}
   277 theorem (in M_formula_rec) formula_rec_closed:
   277 theorem (in Formula_Rec) formula_rec_closed:
   278     "p \<in> formula ==> M(formula_rec(a,b,c,d,p))"
   278     "p \<in> formula ==> M(formula_rec(a,b,c,d,p))"
   279 by (simp add: formula_rec_eq2 fr_transrec_closed 
   279 by (simp add: formula_rec_eq2 fr_transrec_closed 
   280               transM [OF _ formula_closed])
   280               transM [OF _ formula_closed])
   281 
   281 
   282 theorem (in M_formula_rec) formula_rec_abs:
   282 theorem (in Formula_Rec) formula_rec_abs:
   283   "[| p \<in> formula; M(z)|] 
   283   "[| p \<in> formula; M(z)|] 
   284    ==> is_formula_rec(M,MH,p,z) <-> z = formula_rec(a,b,c,d,p)" 
   284    ==> is_formula_rec(M,MH,p,z) <-> z = formula_rec(a,b,c,d,p)" 
   285 by (simp add: is_formula_rec_def formula_rec_eq2 transM [OF _ formula_closed]
   285 by (simp add: is_formula_rec_def formula_rec_eq2 transM [OF _ formula_closed]
   286               transrec_abs [OF fr_replace MH_rel2] depth_type
   286               transrec_abs [OF fr_replace MH_rel2] depth_type
   287               fr_transrec_closed formula_rec_lam_closed eq_commute)
   287               fr_transrec_closed formula_rec_lam_closed eq_commute)
   306 
   306 
   307 text{*There is at present some redundancy between the relativizations in
   307 text{*There is at present some redundancy between the relativizations in
   308  e.g. @{text satisfies_is_a} and those in e.g. @{text Member_replacement}.*}
   308  e.g. @{text satisfies_is_a} and those in e.g. @{text Member_replacement}.*}
   309 
   309 
   310 text{*These constants let us instantiate the parameters @{term a}, @{term b},
   310 text{*These constants let us instantiate the parameters @{term a}, @{term b},
   311       @{term c}, @{term d}, etc., of the locale @{text M_formula_rec}.*}
   311       @{term c}, @{term d}, etc., of the locale @{text Formula_Rec}.*}
   312 constdefs
   312 constdefs
   313   satisfies_a :: "[i,i,i]=>i"
   313   satisfies_a :: "[i,i,i]=>i"
   314    "satisfies_a(A) == 
   314    "satisfies_a(A) == 
   315     \<lambda>x y. \<lambda>env \<in> list(A). bool_of_o (nth(x,env) \<in> nth(y,env))"
   315     \<lambda>x y. \<lambda>env \<in> list(A). bool_of_o (nth(x,env) \<in> nth(y,env))"
   316 
   316 
   565                  formula_case_abs [OF a_rel b_rel c_rel d_rel]) 
   565                  formula_case_abs [OF a_rel b_rel c_rel d_rel]) 
   566 done
   566 done
   567 
   567 
   568 
   568 
   569 
   569 
   570 text{*Instantiate locale @{text M_formula_rec} for the 
   570 text{*Instantiate locale @{text Formula_Rec} for the 
   571       Function @{term satisfies}*}
   571       Function @{term satisfies}*}
   572 
   572 
   573 lemma (in M_satisfies) M_formula_rec_axioms_M:
   573 lemma (in M_satisfies) Formula_Rec_axioms_M:
   574    "M(A) ==>
   574    "M(A) ==>
   575     M_formula_rec_axioms(M, satisfies_a(A), satisfies_is_a(M,A), 
   575     Formula_Rec_axioms(M, satisfies_a(A), satisfies_is_a(M,A), 
   576                             satisfies_b(A), satisfies_is_b(M,A), 
   576 			  satisfies_b(A), satisfies_is_b(M,A), 
   577                             satisfies_c(A), satisfies_is_c(M,A), 
   577 			  satisfies_c(A), satisfies_is_c(M,A), 
   578                             satisfies_d(A), satisfies_is_d(M,A))"
   578 			  satisfies_d(A), satisfies_is_d(M,A))"
   579 apply (rule M_formula_rec_axioms.intro)
   579 apply (rule Formula_Rec_axioms.intro)
   580 apply (assumption | 
   580 apply (assumption | 
   581        rule a_closed a_rel b_closed b_rel c_closed c_rel d_closed d_rel
   581        rule a_closed a_rel b_closed b_rel c_closed c_rel d_closed d_rel
   582        fr_replace [unfolded satisfies_MH_def]
   582        fr_replace [unfolded satisfies_MH_def]
   583        fr_lam_replace) +
   583        fr_lam_replace) +
   584 done
   584 done
   585 
   585 
   586 
   586 
   587 theorem (in M_satisfies) M_formula_rec_M: 
   587 theorem (in M_satisfies) Formula_Rec_M: 
   588     "M(A) ==>
   588     "M(A) ==>
   589      PROP M_formula_rec(M, satisfies_a(A), satisfies_is_a(M,A), 
   589      PROP Formula_Rec(M, satisfies_a(A), satisfies_is_a(M,A), 
   590                             satisfies_b(A), satisfies_is_b(M,A), 
   590 			 satisfies_b(A), satisfies_is_b(M,A), 
   591                             satisfies_c(A), satisfies_is_c(M,A), 
   591 			 satisfies_c(A), satisfies_is_c(M,A), 
   592                             satisfies_d(A), satisfies_is_d(M,A))"
   592 			 satisfies_d(A), satisfies_is_d(M,A))"
   593 apply (rule M_formula_rec.intro, assumption+)
   593 apply (rule Formula_Rec.intro, assumption+)
   594 apply (erule M_formula_rec_axioms_M) 
   594 apply (erule Formula_Rec_axioms_M) 
   595 done
   595 done
   596 
   596 
   597 lemmas (in M_satisfies) 
   597 lemmas (in M_satisfies) 
   598    satisfies_closed = M_formula_rec.formula_rec_closed [OF M_formula_rec_M]
   598     satisfies_closed = Formula_Rec.formula_rec_closed [OF Formula_Rec_M]
   599 and
   599 and satisfies_abs    = Formula_Rec.formula_rec_abs [OF Formula_Rec_M]
   600    satisfies_abs = M_formula_rec.formula_rec_abs [OF M_formula_rec_M];
       
   601 
   600 
   602 
   601 
   603 lemma (in M_satisfies) satisfies_closed:
   602 lemma (in M_satisfies) satisfies_closed:
   604   "[|M(A); p \<in> formula|] ==> M(satisfies(A,p))"
   603   "[|M(A); p \<in> formula|] ==> M(satisfies(A,p))"
   605 by (simp add: M_formula_rec.formula_rec_closed [OF M_formula_rec_M]  
   604 by (simp add: Formula_Rec.formula_rec_closed [OF Formula_Rec_M]  
   606               satisfies_eq) 
   605               satisfies_eq) 
   607 
   606 
   608 lemma (in M_satisfies) satisfies_abs:
   607 lemma (in M_satisfies) satisfies_abs:
   609   "[|M(A); M(z); p \<in> formula|] 
   608   "[|M(A); M(z); p \<in> formula|] 
   610    ==> is_satisfies(M,A,p,z) <-> z = satisfies(A,p)"
   609    ==> is_satisfies(M,A,p,z) <-> z = satisfies(A,p)"
   611 by (simp only: M_formula_rec.formula_rec_abs [OF M_formula_rec_M]  
   610 by (simp only: Formula_Rec.formula_rec_abs [OF Formula_Rec_M]  
   612                satisfies_eq is_satisfies_def satisfies_MH_def)
   611                satisfies_eq is_satisfies_def satisfies_MH_def)
   613 
   612 
   614 
   613 
   615 subsection{*Internalizations Needed to Instantiate @{text "M_satisfies"}*}
   614 subsection{*Internalizations Needed to Instantiate @{text "M_satisfies"}*}
   616 
   615 
  1196 apply (rule M_satisfies.intro) 
  1195 apply (rule M_satisfies.intro) 
  1197      apply (rule M_eclose.axioms [OF M_eclose_L])+
  1196      apply (rule M_eclose.axioms [OF M_eclose_L])+
  1198 apply (rule M_satisfies_axioms_L) 
  1197 apply (rule M_satisfies_axioms_L) 
  1199 done
  1198 done
  1200 
  1199 
       
  1200 text{*Finally: the point of the whole theory!*}
       
  1201 lemmas satisfies_closed = M_satisfies.satisfies_closed [OF M_satisfies_L]
       
  1202    and satisfies_abs = M_satisfies.satisfies_abs [OF M_satisfies_L]
       
  1203 
  1201 end
  1204 end