Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Isabelle/HOL/IMP/   (Beweissystem Isabelle Version 2025-1©)  Datei vom 16.11.2025 mit Größe 2 kB image not shown  

Quelle  Hoare_Examples.thy

  Sprache: Isabelle
 

(* Author: Tobias Nipkow *)

subsection "Examples"

theory Hoare_Examples imports Hoare begin

hide_const (open) sum

textSumming 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)))"


subsubsectionProof by Operational Semantics

textThe 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

textWe 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


subsubsectionProof by Hoare Logic

textNote 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

textThe 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
C=74 H=100 G=87

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-04-30) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.