definition
wfrec :: "[i, i, [i,i]==>i] ==>i"where (*public version. Does not require r to be transitive*) "wfrec(r,a,H) ≡ wftrec(r^+, a, λx f. H(x, restrict(f,r-``{x})))"
definition
wfrec_on :: "[i, i, i, [i,i]==>i] ==>i" (‹(‹open_block notation=‹mixfix wfrec_on››wfrec[_]'(_,_,_'))›) where"wfrec[A](r,a,H) ≡ wfrec(r ∩ A*A, a, H)"
subsection‹Well-Founded Relations›
subsubsection‹Equivalences between term‹wf› and term‹wf_on››
lemma wf_imp_wf_on: "wf(r) ==> wf[A](r)" by (unfold wf_def wf_on_def, force)
lemma wf_on_imp_wf: "[wf[A](r); r ⊆ A*A]==> wf(r)" by (simp add: wf_on_def subset_Int_iff)
lemma wf_on_field_imp_wf: "wf[field(r)](r) ==> wf(r)" by (unfold wf_def wf_on_def, fast)
lemma wf_iff_wf_on_field: "wf(r) ⟷ wf[field(r)](r)" by (blast intro: wf_imp_wf_on wf_on_field_imp_wf)
lemma wf_on_subset_A: "[wf[A](r); B<=A]==> wf[B](r)" by (unfold wf_on_def wf_def, fast)
lemma wf_on_subset_r: "[wf[A](r); s<=r]==> wf[A](s)" by (unfold wf_on_def wf_def, fast)
lemma wf_subset: "[wf(s); r<=s]==> wf(r)" by (simp add: wf_def, fast)
subsubsection‹Introduction Rules for term‹wf_on››
text‹If every non-empty subset of term‹A› has an term‹r›-minimal element
then we have term‹wf[A](r)›.› lemma wf_onI: assumes prem: "∧Z u. [Z<=A; u ∈ Z; ∀x∈Z. ∃y∈Z. ⟨y,x⟩:r]==> False" shows"wf[A](r)" unfolding wf_on_def wf_def apply (rule equals0I [THEN disjCI, THEN allI]) apply (rule_tac Z = Z in prem, blast+) done
text‹If term‹r› allows well-founded induction over term‹A›
then we have term‹wf[A](r)›. Premise is equivalent to prop‹∧B. ∀x∈A. (∀y. ⟨y,x⟩: r ⟶ y ∈ B) ⟶ x ∈ B ==> A<=B›› lemma wf_onI2: assumes prem: "∧y B. [∀x∈A. (∀y∈A. ⟨y,x⟩:r ⟶ y ∈ B) ⟶ x ∈ B; y ∈ A] ==> y ∈ B" shows"wf[A](r)" apply (rule wf_onI) apply (rule_tac c=u in prem [THEN DiffE]) prefer3apply blast apply fast+ done
subsubsection‹Well-founded Induction›
text‹Consider the least term‹z› in term‹domain(r)› such that term‹P(z)› does not hold...› lemma wf_induct_raw: "[wf(r); ∧x.[∀y. ⟨y,x⟩: r ⟶ P(y)]==> P(x)] ==> P(a)" unfolding wf_def apply (erule_tac x = "{z ∈ domain(r). ¬ P(z)}"in allE) apply blast done
text‹The form of this rule is designed to match ‹wfI›› lemma wf_induct2: "[wf(r); a ∈ A; field(r)<=A; ∧x.[x ∈ A; ∀y. ⟨y,x⟩: r ⟶ P(y)]==> P(x)] ==> P(a)" apply (erule_tac P="a ∈ A"in rev_mp) apply (erule_tac a=a in wf_induct, blast) done
lemma field_Int_square: "field(r ∩ A*A) ⊆ A" by blast
lemma wf_on_induct [consumes 2, case_names step, induct set: wf_on]: "wf[A](r) ==> a ∈ A ==> (∧x. x ∈ A ==> (∧y. y ∈ A ==>⟨y, x⟩∈ r ==> P(y)) ==> P(x)) ==> P(a)" using wf_on_induct_raw [of A r a P] by simp
text‹If term‹r› allows well-founded induction
then we have term‹wf(r)›.› lemma wfI: "[field(r)<=A; ∧y B. [∀x∈A. (∀y∈A. ⟨y,x⟩:r ⟶ y ∈ B) ⟶ x ∈ B; y ∈ A] ==> y ∈ B] ==> wf(r)" apply (rule wf_on_subset_A [THEN wf_on_field_imp_wf]) apply (rule wf_onI2) prefer2apply blast apply blast done
subsection‹Basic Properties of Well-Founded Relations›
lemma wf_not_refl: "wf(r) ==>⟨a,a⟩∉ r" by (erule_tac a=a in wf_induct, blast)
lemma wf_not_sym [rule_format]: "wf(r) ==>∀x. ⟨a,x⟩:r ⟶⟨x,a⟩∉ r" by (erule_tac a=a in wf_induct, blast)
lemma apply_recfun: "[is_recfun(r,a,H,f); ⟨x,a⟩:r]==> f`x = H(x, restrict(f,r-``{x}))" unfolding is_recfun_def txt‹replace f only on the left-hand side› apply (erule_tac P = "λx. t(x) = u"for t u in ssubst) apply (simp add: underI) done
lemma is_recfun_equal [rule_format]: "[wf(r); trans(r); is_recfun(r,a,H,f); is_recfun(r,b,H,g)] ==>⟨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 wf_induct) apply (intro impI) apply (elim ssubst) apply (simp (no_asm_simp) add: vimage_singleton_iff restrict_def) apply (rule_tac t = "λz. H (x, z)"for x in subst_context) apply (subgoal_tac "∀y∈r-``{x}. ∀z. ⟨y,z⟩:f ⟷⟨y,z⟩:g") apply (blast dest: transD) apply (simp add: apply_iff) apply (blast dest: transD intro: sym) done
(*If some f satisfies is_recfun(r,a,H,-) then so does the_recfun(r,a,H) *) lemma is_the_recfun: "[is_recfun(r,a,H,f); wf(r); trans(r)] ==> is_recfun(r, a, H, the_recfun(r,a,H))" by (simp add: the_recfun_eq)
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.