text‹For ‹is_recfun› we need only pay attention to functions
whose domains are initial segments of term‹r›.› lemma is_recfun_cong: "[r = r'; a = a'; f = f'; ∧x g. [<x,a'> ∈ r'; relation(g); domain(g) ⊆ r' -``{x}] ==> H(x,g) = H'(x,g)] ==> is_recfun(r,a,H,f) ⟷ is_recfun(r',a',H',f')" apply (rule iffI) txt‹Messy: fast and blast don't work for some reason› apply (erule is_recfun_cong_lemma, auto) apply (erule is_recfun_cong_lemma) apply (blast intro: sym)+ done
subsection‹Reworking of the Recursion Theory Within term‹M››
lemma (in M_basic) is_recfun_separation': "[f ∈ r -`` {a} → range(f); g ∈ r -`` {b} → range(g); M(r); M(f); M(g); M(a); M(b)] ==> separation(M, λx. ¬ (⟨x, a⟩∈ r ⟶⟨x, b⟩∈ r ⟶ f ` x = g ` x))" apply (insert is_recfun_separation [of r f g a b]) apply (simp add: vimage_singleton_iff) done
text‹Stated using term‹trans(r)› rather than term‹transitive_rel(M,A,r)› because the latter rewrites to
the former anyway, by ‹transitive_rel_abs›.
As always, theorems should be expressed in simplified form.
The last three M-premises are redundant because of term‹M(r)›,
but without them we'd have to undertake
more work to set up the induction formula.› lemma (in M_basic) is_recfun_equal [rule_format]: "[is_recfun(r,a,H,f); is_recfun(r,b,H,g); wellfounded(M,r); trans(r); M(f); M(g); M(r); M(x); M(a); M(b)] ==>⟨x,a⟩∈ r ⟶⟨x,b⟩∈ r ⟶ f`x=g`x" apply (frule_tac f=f in is_recfun_type) apply (frule_tac f=g in is_recfun_type) apply (simp add: is_recfun_def) apply (erule_tac a=x in wellfounded_induct, assumption+) txt‹Separation to justify the induction› apply (blast intro: is_recfun_separation') txt‹Now the inductive argument itself› apply clarify apply (erule ssubst)+ apply (simp (no_asm_simp) add: vimage_singleton_iff restrict_def) apply (rename_tac x1) apply (rule_tac t="λz. H(x1,z)"in subst_context) apply (subgoal_tac "∀y ∈ r-``{x1}. ∀z. ⟨y,z⟩∈f ⟷⟨y,z⟩∈g") apply (blast intro: transD) apply (simp add: apply_iff) apply (blast intro: transD sym) done
lemma M_is_recfun_cong [cong]: "[r = r'; a = a'; f = f'; ∧x g y. [M(x); M(g); M(y)]==> MH(x,g,y) ⟷ MH'(x,g,y)] ==> M_is_recfun(M,MH,r,a,f) ⟷ M_is_recfun(M,MH',r',a',f')" by (simp add: M_is_recfun_def)
lemma (in M_basic) is_wfrec_abs: "[∀x[M]. ∀g[M]. function(g) ⟶ M(H(x,g)); relation2(M,MH,H); M(r); M(a); M(z)] ==> is_wfrec(M,MH,r,a,z) ⟷ (∃g[M]. is_recfun(r,a,H,g) ∧ z = H(a,g))" by (simp add: is_wfrec_def relation2_def is_recfun_abs)
text‹Relating term‹wfrec_replacement› to native constructs› lemma (in M_basic) wfrec_replacement': "[wfrec_replacement(M,MH,r); ∀x[M]. ∀g[M]. function(g) ⟶ M(H(x,g)); relation2(M,MH,H); M(r)] ==> strong_replacement(M, λx z. ∃y[M]. pair(M,x,y,z) ∧ (∃g[M]. is_recfun(r,x,H,g) ∧ y = H(x,g)))" by (simp add: wfrec_replacement_def is_wfrec_abs)
lemma wfrec_replacement_cong [cong]: "[∧x y z. [M(x); M(y); M(z)]==> MH(x,y,z) ⟷ MH'(x,y,z); r=r'] ==> wfrec_replacement(M, λx y. MH(x,y), r) ⟷ wfrec_replacement(M, λx y. MH'(x,y), r')" by (simp add: is_wfrec_def wfrec_replacement_def)
end
Messung V0.5 in Prozent
¤ 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.0.12Bemerkung:
(vorverarbeitet am 2026-09-28)
¤