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 |