lemma sats_hcomp_fm: assumes
f_iff_sats:"∧a b z. a∈nat ==> b∈nat ==> z∈M ==> is_f(nth(a,Cons(z,env)),nth(b,Cons(z,env))) ⟷ sats(M,pf(a,b),Cons(z,env))" and
g_iff_sats:"∧a b z. a∈nat ==> b∈nat ==> z∈M ==> is_g(nth(a,Cons(z,env)),nth(b,Cons(z,env))) ⟷ sats(M,pg(a,b),Cons(z,env))" and "a∈nat""w∈nat""env∈list(M)" shows "sats(M,hcomp_fm(pf,pg,a,w),env) ⟷ is_hcomp(##M,is_f,is_g,nth(a,env),nth(w,env))" proof - have"sats(M, pf(0, succ(w)), Cons(x, env)) ⟷ is_f(x,nth(w,env))"if"x∈M""w∈nat"for x w using f_iff_sats[of 0"succ(w)" x] that by simp moreover have"sats(M, pg(succ(a), 0), Cons(x, env)) ⟷ is_g(nth(a,env),x)"if"x∈M""a∈nat"for x a using g_iff_sats[of "succ(a)"0 x] that by simp ultimately show ?thesis unfolding hcomp_fm_def is_hcomp_def using assms by simp qed
lemma ecloseNI1 : assumes"x ∈ eclose(n1) ∨ x∈eclose(n2)" shows"x ∈ ecloseN(⟨f,n1,n2,c⟩)" unfolding ecloseN_def eclose_n_def using assms eclose_sing names_simp by auto
lemmas ecloseNI = ecloseNI1
lemma ecloseN_mono : assumes"u ∈ ecloseN(x)""name1(x) ∈ ecloseN(y)""name2(x) ∈ ecloseN(y)" shows"u ∈ ecloseN(y)" proof - from‹u∈_›
consider (a) "u∈eclose({name1(x)})" | (b) "u ∈ eclose({name2(x)})" unfolding ecloseN_def eclose_n_def by auto then show ?thesis proof cases case a with‹name1(x) ∈ _› show ?thesis unfolding ecloseN_def eclose_n_def using eclose_singE[OF a] mem_eclose_trans[of u "name1(x)" ] by auto next case b with‹name2(x) ∈ _› show ?thesis unfolding ecloseN_def eclose_n_def using eclose_singE[OF b] mem_eclose_trans[of u "name2(x)"] by auto qed qed
(* ftype(p) \<equiv> THE a. \<exists>b. p = \<langle>a, b\<rangle> *)
(* Third item of Kunen observations about the trcl relation in p. 257. *) lemma eq_ftypep_not_frecrR: assumes"ftype(x) = ftype(y)" shows"¬ frecR(x,y)" using assms frecR_ftypeD by force
definition
rank_names :: "i ==> i"where "rank_names(x) ≡ max(rank(name1(x)),rank(name2(x)))"
lemma rank_names_types [TC]: shows"Ord(rank_names(x))" unfolding rank_names_def max_def using Ord_rank Ord_Un by auto
definition
mtype_form :: "i ==> i"where "mtype_form(x) ≡ if rank(name1(x)) < rank(name2(x)) then 0 else 2"
definition
type_form :: "i ==> i"where "type_form(x) ≡ if ftype(x) = 0 then 1 else mtype_form(x)"
lemma type_form_tc [TC]: shows"type_form(x) ∈ 3" unfolding type_form_def mtype_form_def by auto
lemma frecR_le_rnk_names : assumes"frecR(x,y)" shows"rank_names(x)≤rank_names(y)" proof - obtain a b c d where
H: "a = name1(x)""b = name2(x)" "c = name1(y)""d = name2(y)" "(a ∈ domain(c)∪domain(d) ∧ (b=c ∨ b = d)) ∨ (a = c ∧ b ∈ domain(d))" using assms unfolding frecR_def by force then
consider
(m) "a ∈ domain(c) ∧ (b = c ∨ b = d) "
| (n) "a ∈ domain(d) ∧ (b = c ∨ b = d)"
| (o) "b ∈ domain(d) ∧ a = c" by auto thenshow ?thesis proof(cases) case m then have"rank(a) < rank(c)" using eclose_rank_lt in_dom_in_eclose by simp with‹rank(a) < rank(c)› H m show ?thesis unfolding rank_names_def using Ord_rank max_cong max_cong2 leI by auto next case n then have"rank(a) < rank(d)" using eclose_rank_lt in_dom_in_eclose by simp with‹rank(a) < rank(d)› H n show ?thesis unfolding rank_names_def using Ord_rank max_cong2 max_cong max_commutes[of "rank(c)""rank(d)"] leI by auto next case o then have"rank(b) < rank(d)" (is"?b < ?d") "rank(a) = rank(c)" (is"?a = _") using eclose_rank_lt in_dom_in_eclose by simp_all with H show ?thesis unfolding rank_names_def using Ord_rank max_commutes max_cong2[OF leI[OF ‹?b < ?d›], of ?a] by simp qed qed
lemma Γ_mono : assumes"frecR(x,y)" shows"Γ(x) < Γ(y)" proof - have F: "type_form(x) < 3""type_form(y) < 3" using ltI by simp_all from assms have A: "rank_names(x) ≤ rank_names(y)" (is"?x ≤ ?y") using frecR_le_rnk_names by simp then have"Ord(?y)"unfolding rank_names_def using Ord_rank max_def by simp note leE[OF ‹?x≤?y›] then show ?thesis proof(cases) case1 then show ?thesis unfolding Γ_defusing oadd_lt_mono2 ‹?x < ?y› F by auto next case2
consider (a) "ftype(x) = 0 ∧ ftype(y) = 1" | (b) "ftype(x) = 1 ∧ ftype(y) = 0" using frecR_ftypeD[OF ‹frecR(x,y)›] by auto thenshow ?thesis proof(cases) case b then have"type_form(y) = 1" using type_form_def by simp from b have H: "name2(x) = name1(y) ∨ name2(x) = name2(y) " (is"?τ = ?σ' ∨ ?τ = ?τ'") "name1(x) ∈ domain(name1(y)) ∪ domain(name2(y))"
(is"?σ ∈ domain(?σ') ∪ domain(?τ')") using assms unfolding type_form_def frecR_def by auto then have E: "rank(?τ) = rank(?σ') ∨ rank(?τ) = rank(?τ')"by auto from H
consider (a) "rank(?σ) < rank(?σ')" | (b) "rank(?σ) < rank(?τ')" using eclose_rank_lt in_dom_in_eclose by force then have"rank(?σ) < rank(?τ)"proof (cases) case a with‹rank_names(x) = rank_names(y) › show ?thesis unfolding rank_names_def mtype_form_def type_form_def using max_D2[OF E a]
E assms Ord_rank by simp next case b with‹rank_names(x) = rank_names(y) › show ?thesis unfolding rank_names_def mtype_form_def type_form_def using max_D2[OF _ b] max_commutes E assms Ord_rank disj_commute by auto qed with b have"type_form(x) = 0"unfolding type_form_def mtype_form_def by simp with‹rank_names(x) = rank_names(y) ›‹type_form(y) = 1›‹type_form(x) = 0› show ?thesis unfolding Γ_defby auto next case a then have"name1(x) = name1(y)" (is"?σ = ?σ'") "name2(x) ∈ domain(name2(y))" (is"?τ ∈ domain(?τ')") "type_form(x) = 1" using assms unfolding type_form_def frecR_def by auto then have"rank(?σ) = rank(?σ')""rank(?τ) < rank(?τ')" using eclose_rank_lt in_dom_in_eclose by simp_all with‹rank_names(x) = rank_names(y) › have"rank(?τ') ≤ rank(?σ')" unfolding rank_names_def using Ord_rank max_D1 by simp with a have"type_form(y) = 2" unfolding type_form_def mtype_form_def using not_lt_iff_le assms by simp with‹rank_names(x) = rank_names(y) ›‹type_form(y) = 2›‹type_form(x) = 1› show ?thesis unfolding Γ_defby auto qed qed qed
definition
frecrel :: "i ==> i"where "frecrel(A) ≡ Rrel(frecR,A)"
lemma frecrelI : assumes"x ∈ A""y∈A""frecR(x,y)" shows"⟨x,y⟩∈frecrel(A)" using assms unfolding frecrel_def Rrel_def by auto
lemma wf_frecrel : shows"wf(frecrel(A))" proof - have"frecrel(A) ⊆ measure(A,Γ)" unfolding frecrel_def Rrel_def measure_def using Γ_mono by force thenshow ?thesis using wf_subset wf_measure by auto qed
lemma core_induction_aux: fixes A1 A2 :: "i" assumes "Transset(A1)" "∧τ θ p. p ∈ A2 ==>[∧q σ. [ q∈A2 ; σ∈domain(θ)]==> Q(0,τ,σ,q)]==> Q(1,τ,θ,p)" "∧τ θ p. p ∈ A2 ==>[∧q σ. [ q∈A2 ; σ∈domain(τ) ∪ domain(θ)]==> Q(1,σ,τ,q) ∧ Q(1,σ,θ,q)]==> Q(0,τ,θ,p)" shows"a∈2×A1×A1×A2 ==> Q(ftype(a),name1(a),name2(a),cond_of(a))" proof (induct a rule:wf_induct[OF wf_frecrel[of "2×A1×A1×A2"]]) case (1 x) let ?τ = "name1(x)" let ?θ = "name2(x)" let ?D = "2×A1×A1×A2" assume"x ∈ ?D" then have"cond_of(x)∈A2" by (auto simp add:components_simp) from‹x∈?D›
consider (eq) "ftype(x)=0" | (mem) "ftype(x)=1" by (auto simp add:components_simp) then show ?case proof cases case eq then have"Q(1, σ, ?τ, q) ∧ Q(1, σ, ?θ, q)"if"σ ∈ domain(?τ) ∪ domain(?θ)"and"q∈A2"for q σ proof - from1 have A: "?τ∈A1""?θ∈A1""?τ∈eclose(A1)""?θ∈eclose(A1)" using arg_into_eclose by (auto simp add:components_simp) with‹Transset(A1)› that(1) have"σ∈eclose(?τ) ∪ eclose(?θ)" using in_dom_in_eclose by auto then have"σ∈A1" using mem_eclose_subset[OF ‹?τ∈A1›] mem_eclose_subset[OF ‹?θ∈A1›]
Transset_eclose_eq_arg[OF ‹Transset(A1)›] by auto with‹q∈A2›‹?θ ∈ A1›‹cond_of(x)∈A2›‹?τ∈A1› have"frecR(⟨1, σ, ?τ, q⟩, x)" (is"frecR(?T,_)") "frecR(⟨1, σ, ?θ, q⟩, x)" (is"frecR(?U,_)") using frecRI1'[OF that(1)] frecR_DI ‹ftype(x) = 0›
frecRI2'[OF that(1)] by (auto simp add:components_simp) with‹x∈?D›‹σ∈A1›‹q∈A2› have"⟨?T,x⟩∈ frecrel(?D)""⟨?U,x⟩∈ frecrel(?D)" using frecrelI[of ?T ?D x] frecrelI[of ?U ?D x] by (auto simp add:components_simp) with‹q∈A2›‹σ∈A1›‹?τ∈A1›‹?θ∈A1› have"Q(1, σ, ?τ, q)"using1by (force simp add:components_simp) moreoverfrom‹q∈A2›‹σ∈A1›‹?τ∈A1›‹?θ∈A1›‹⟨?U,x⟩∈ frecrel(?D)› have"Q(1, σ, ?θ, q)"using1by (force simp add:components_simp) ultimately show ?thesis using A by simp qed thenshow ?thesis using assms(3) ‹ftype(x) = 0›‹cond_of(x)∈A2›by auto next case mem have"Q(0, ?τ, σ, q)"if"σ ∈ domain(?θ)"and"q∈A2"for q σ proof - from1 assms have"?τ∈A1""?θ∈A1""cond_of(x)∈A2""?τ∈eclose(A1)""?θ∈eclose(A1)" using arg_into_eclose by (auto simp add:components_simp) with‹Transset(A1)› that(1) have"σ∈ eclose(?θ)" using in_dom_in_eclose by auto then have"σ∈A1" using mem_eclose_subset[OF ‹?θ∈A1›] Transset_eclose_eq_arg[OF ‹Transset(A1)›] by auto with‹q∈A2›‹?θ ∈ A1›‹cond_of(x)∈A2›‹?τ∈A1› have"frecR(⟨0, ?τ, σ, q⟩, x)" (is"frecR(?T,_)") using frecRI3'[OF that(1)] frecR_DI ‹ftype(x) = 1› by (auto simp add:components_simp) with‹x∈?D›‹σ∈A1›‹q∈A2›‹?τ∈A1› have"⟨?T,x⟩∈ frecrel(?D)""?T∈?D" using frecrelI[of ?T ?D x] by (auto simp add:components_simp) with‹q∈A2›‹σ∈A1›‹?τ∈A1›‹?θ∈A1›1 show ?thesis by (force simp add:components_simp) qed thenshow ?thesis using assms(2) ‹ftype(x) = 1›‹cond_of(x)∈A2›by auto qed qed
lemma def_frecrel : "frecrel(A) = {z∈A×A. ∃x y. z = ⟨x, y⟩∧ frecR(x,y)}" unfolding frecrel_def Rrel_def ..
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 und die Messung sind noch experimentell.