(* Title: HOL/Proofs/Extraction/Util.thy Author: Stefan Berghofer, TU Muenchen
*)
section ‹Auxiliary lemmas used in program extraction examples›
theory Util imports Main begin
text‹Decidability of equality on natural numbers.›
lemma nat_eq_dec: "\n::nat. m = n \ m \ n" apply (induct m) apply (case_tac n) apply (case_tac [3] n) apply (simp only: nat.simps, iprover?)+ done
text‹
Well-founded induction on natural numbers, derived using the standard
structural induction rule. ›
lemma nat_wf_ind: assumes R: "\x::nat. (\y. y < x \ P y) \ P x" shows"P z" proof (rule R) show"\y. y < z \ P y" proof (induct z) case 0 thenshow ?caseby simp next case (Suc n y) from nat_eq_dec show ?case proof assume ny: "n = y" have"P n" by (rule R) (rule Suc) with ny show ?caseby simp next assume"n \ y" with Suc have"y < n"by simp thenshow ?caseby (rule Suc) qed qed qed
text‹Bounded search for a natural number satisfying a decidable predicate.›
lemma search: assumes dec: "\x::nat. P x \ \ P x" shows"(\x \ (\x proof (induct y) case 0 show ?caseby simp next case (Suc z) thenshow ?case proof assume"\x thenobtain x where le: "x < z"and P: "P x"by iprover from le have"x < Suc z"by simp with P show ?caseby iprover next assume nex: "\ (\x from dec show ?case proof assume P: "P z" have"z < Suc z"by simp with P show ?thesis by iprover next assume nP: "\ P z" have"\ (\x proof assume"\x thenobtain x where le: "x < Suc z"and P: "P x"by iprover have"x < z" proof (cases "x = z") case True with nP and P show ?thesis by simp next case False with le show ?thesis by simp qed with P have"\xby iprover with nex show False .. qed thenshow ?caseby iprover qed qed qed
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.