lemma mod_aux :"[i < (n::nat); a mod n = i; j < a + n; j mod n = i; a < j]==> False" apply(subgoal_tac "a=a div n*n + a mod n" ) prefer 2 apply (simp (no_asm_use)) apply(subgoal_tac "j=j div n*n + j mod n") prefer 2 apply (simp (no_asm_use)) apply simp apply(subgoal_tac "a div n*n < j div n*n") prefer 2 apply arith apply(subgoal_tac "j div n*n < (a div n + 1)*n") prefer 2 apply simp apply (simp only:mult_less_cancel2) apply arith done
record Example3 =
X :: "nat ==> nat"
Y :: "nat ==> nat"
lemma Example3: "m mod n=0 ==> ⊨ COBEGIN SCHEME [0≤i (WHILE (∀j🍋X i < 🍋Y j) DO IF P(B!(🍋X i)) THEN 🍋Y:=🍋Y (i:=🍋X i) ELSE 🍋X:= 🍋X (i:=(🍋X i)+ n) FI OD, {(🍋X i) mod n=i ∧ (∀j<🍋X i. j mod n=i ⟶¬P(B!j)) ∧ (🍋Y i⟶ P(B!(🍋Y i)) ∧🍋Y i≤ m+i)}, {(∀j≠j ⟶♀Y j ≤♂Y j) ∧♂X i = ♀X i ∧ ♂Y i = ♀Y i}, {(∀j≠j ⟶♂X j = ♀X j ∧♂Y j = ♀Y j) ∧ ♀Y i ≤♂Y i}, {(🍋X i) mod n=i ∧ (∀j<🍋X i. j mod n=i ⟶¬P(B!j)) ∧ (🍋Y i⟶ P(B!(🍋Y i)) ∧🍋Y i≤ m+i) ∧ (∃j🍋Y j ≤🍋X i) }) COEND SAT [{∀i🍋X i=i ∧🍋Y i=m+i },{♂X=♀X ∧♂Y=♀Y},{True}, {∀i🍋X i) mod n=i ∧ (∀j<🍋X i. j mod n=i ⟶¬P(B!j)) ∧ (🍋Y i⟶ P(B!(🍋Y i)) ∧🍋Y i≤ m+i) ∧ (∃j🍋Y j ≤🍋X i)}]" apply(rule Parallel) 🍋‹5 subgoals left› apply force+ apply clarify apply simp apply(rule While) apply force apply force apply force apply (erule dvdE) apply(rule_tac pre'="{🍋X i mod n = i ∧ (∀j. j<🍋X i ⟶ j mod n = i ⟶¬P(B!j)) ∧ (🍋Y i < n * k ⟶ P (B!(🍋Y i))) ∧🍋X i<🍋Y i}"in Conseq) apply force apply(rule subset_refl)+ apply(rule Cond) apply force apply(rule Basic) apply force apply fastforce apply force apply force apply(rule Basic) apply simp apply clarify apply simp apply (case_tac "X x (j mod n) ≤ j") apply (drule le_imp_less_or_eq) apply (erule disjE) apply (drule_tac j=j and n=n and i="j mod n"and a="X x (j mod n)"in mod_aux) apply auto done
text‹Same but with a list as auxiliary variable:›
record Example3_list =
X :: "nat list"
Y :: "nat list"
lemma Example3_list: "m mod n=0 ==>⊨ (COBEGIN SCHEME [0≤i (WHILE (∀j🍋X!i < 🍋Y!j) DO IF P(B!(🍋X!i)) THEN 🍋Y:=🍋Y[i:=🍋X!i] ELSE 🍋X:= 🍋X[i:=(🍋X!i)+ n] FI OD, {n🍋X ∧ n🍋Y ∧ (🍋X!i) mod n=i ∧ (∀j<🍋X!i. j mod n=i ⟶¬P(B!j)) ∧ (🍋Y!i⟶ P(B!(??Y!i)) ∧🍋Y!i≤ m+i)}, {(∀j≠j ⟶♀Y!j ≤♂Y!j) ∧♂X!i = ♀X!i ∧ ♂Y!i = ♀Y!i ∧ length ♂X = length ♀X ∧ length ♂Y = length ♀Y}, {(∀j≠j ⟶♂X!j = ♀X!j ∧♂Y!j = ♀Y!j) ∧ ♀Y!i ≤♂Y!i ∧ length ♂X = length ♀X ∧ length ♂Y = length ♀Y}, {(🍋X!i) mod n=i ∧ (∀j<🍋X!i. j mod n=i ⟶¬P(B!j)) ∧ (🍋Y!i⟶ P(B!(🍋Y!i)) ∧🍋Y!i≤ m+i) ∧ (∃j🍋Y!j ≤🍋X!i) }) COEND) SAT [{n🍋X ∧ n🍋Y ∧ (∀i🍋X!i=i ∧🍋Y!i=m+i) }, {♂X=♀X ∧♂Y=♀Y}, {True}, {∀i🍋X!i) mod n=i ∧ (∀j<🍋X!i. j mod n=i ⟶¬P(B!j)) ∧ (🍋Y!i⟶ P(B!(🍋Y!i)) ∧🍋Y!i≤ m+i) ∧ (∃j🍋Y!j ≤🍋X!i)}]" apply (rule Parallel) apply (auto cong del: image_cong_simp) apply force apply (rule While) apply force apply force apply force apply (erule dvdE) apply(rule_tac pre'="{n🍋X ∧ n🍋Y ∧🍋X ! i mod n = i ∧ (∀j. j < 🍋X ! i ⟶ j mod n = i ⟶¬ P (B ! j)) ∧ (🍋Y ! i < n * k ⟶ P (B ! (🍋Y ! i))) ∧🍋X!i<🍋Y!i}" in Conseq) apply force apply(rule subset_refl)+ apply(rule Cond) apply force apply(rule Basic) apply force apply force apply force apply force apply(rule Basic) apply simp apply clarify apply simp apply(rule allI) apply(rule impI)+ apply(case_tac "X x ! i≤ j") apply(drule le_imp_less_or_eq) apply(erule disjE) apply(drule_tac j=j and n=n and i=i and a="X x ! i"in mod_aux) apply auto done
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-05-03)
¤
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.