coinductive inf :: "('a ==> 'a ==> bool) ==> 'a ==> bool"for r where
inf_step: "r x y ==> inf r y ==> inf r x"
coinductive inf_wf :: "('a ==> 'a ==> bool) ==> ('b ==> 'b ==> bool) ==> 'b ==> 'a ==> bool"for r order where
inf_wf: "order n m ==> inf_wf r order n x ==> inf_wf r order m x" |
inf_wf_step: "r++ x y ==> inf_wf r order n y ==> inf_wf r order m x"
lemma inf_wf_to_step_inf_wf: assumes"wfp order" shows"inf_wf r order n x ==>∃y m. r x y ∧ inf_wf r order m y" proof (induction n arbitrary: x rule: wfp_induct_rule[OF assms(1)]) case (1 n) from"1.prems"(1) show ?case proof (induction rule: inf_wf.cases) case (inf_wf m n' x') thenshow ?caseusing"1.IH"by simp next case (inf_wf_step x' y m n') thenshow ?case by (metis converse_tranclpE inf_wf.inf_wf_step) qed qed
lemma inf_wf_to_inf: assumes"wfp order" shows"inf_wf r order n x ==> inf r x" proof (coinduction arbitrary: x n rule: inf.coinduct) case (inf x n) thenobtain y m where"r x y"and"inf_wf r order m y" using inf_wf_to_step_inf_wf[OF assms(1) inf(1)] by metis thus ?caseby auto qed
lemma step_inf: assumes"right_unique r" shows"r x y ==> inf r x ==> inf r y" using right_uniqueD[OF ‹right_unique r›] by (metis inf.cases)
lemma star_inf: assumes"right_unique r" shows"r** x y ==> inf r x ==> inf r y" proof (induction y rule: rtranclp_induct) case base thenshow ?caseby assumption next case (step y z) thenshow ?case using step_inf[OF ‹right_unique r›] by metis qed
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-10)
¤
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.