text‹Summing up the first ‹x› natural numbers in variable ‹y›.›
fun sum :: "int ==> int"where "sum i = (if i ≤ 0 then 0 else sum (i - 1) + i)"
lemma sum_simps[simp]: "0 < i ==> sum i = sum (i - 1) + i" "i ≤ 0 ==> sum i = 0" by(simp_all)
declare sum.simps[simp del]
abbreviation"wsum == WHILE Less (N 0) (V ''x'') DO (''y'' ::= Plus (V ''y'') (V ''x'');; ''x'' ::= Plus (V ''x'') (N (- 1)))"
subsubsection‹Proof by Operational Semantics›
text‹The behaviour of the loop is proved by induction:›
lemma while_sum: "(wsum, s) ==> t ==> t ''y'' = s ''y'' + sum(s ''x'')" apply(induction wsum s t rule: big_step_induct) apply(auto) done
text‹We were lucky that the proof was automatic, except for the induction. In general, such proofs will not be so easy. The automation is partly due to the right inversion rules that we set up as automatic elimination rules that decompose big-step premises. Now we prefix the loop with the necessary initialization:›
lemma sum_via_bigstep: assumes"(''y'' ::= N 0;; wsum, s) ==> t" shows"t ''y'' = sum (s ''x'')" proof - from assms have"(wsum,s(''y'':=0)) ==> t"by auto from while_sum[OF this] show ?thesis by simp qed
subsubsection‹Proof by Hoare Logic›
text‹Note that we deal with sequences of commands from right to left, pulling back the postcondition towards the precondition.›
lemma"⊨ {λs. s ''x'' = n} ''y'' ::= N 0;; wsum {λs. s ''y'' = sum n}" apply(rule Seq) prefer 2 apply(rule While' [where P = "λs. (s ''y'' = sum n - sum(s ''x''))"]) apply(rule Seq) prefer 2 apply(rule Assign) apply(rule Assign') apply simp apply simp apply(rule Assign') apply simp done
text‹The proof is intentionally an apply script because it merely composes the rules of Hoare logic. Of course, in a few places side conditions have to be proved. But since those proofs are 1-liners, a structured proof is overkill. In fact, we shall learn later that the application of the Hoare rules can be automated completely and all that is left for the user is to provide the loop invariants and prove the side-conditions.›
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-04-30)
¤
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.