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" ) prefer2apply (simp (no_asm_use)) apply(subgoal_tac "j=j div n*n + j mod n") prefer2apply (simp (no_asm_use)) apply simp apply(subgoal_tac "a div n*n < j div n*n") prefer2apply arith apply(subgoal_tac "j div n*n < (a div n + 1)*n") prefer2apply 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<n] (WHILE (∀j<n. 🚫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<m ⟶ P(B!(🚫Y i)) ∧🚫Y i≤ m+i)}, {(∀j<n. i≠j ⟶♀Y j ≤♂Y j) ∧♂X i = ♀X i ∧ ♂Y i = ♀Y i}, {(∀j<n. i≠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<m ⟶ P(B!(🚫Y i)) ∧🚫Y i≤ m+i) ∧ (∃j<n. 🚫Y j ≤🚫X i) }) COEND SAT [{∀i<n. 🚫X i=i ∧🚫Y i=m+i },{♂X=♀X ∧♂Y=♀Y},{True}, {∀i<n. (🚫X i) mod n=i ∧ (∀j<🚫X i. j mod n=i ⟶¬P(B!j)) ∧ (🚫Y i<m ⟶ P(B!(🚫Y i)) ∧🚫Y i≤ m+i) ∧ (∃j<n. 🚫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<n] (WHILE (∀j<n. 🚫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<length 🚫X ∧ n<length 🚫Y ∧ (🚫X!i) mod n=i ∧ (∀j<🚫X!i. j mod n=i ⟶¬P(B!j)) ∧(🚫Y!i<m ⟶ P(B!(🚫Y!i)) ∧🚫Y!i≤ m+i)}, {(∀j<n. i≠j ⟶♀Y!j ≤♂Y!j) ∧♂X!i = ♀X!i ∧ ♂Y!i = ♀Y!i ∧ length ♂X = length ♀X ∧ length ♂Y = length ♀Y}, {(∀j<n. i≠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<m ⟶ P(B!(🚫Y!i)) ∧🚫Y!i≤ m+i) ∧ (∃j<n. 🚫Y!j ≤🚫X!i) }) COEND) SAT [{n<length 🚫X ∧ n<length 🚫Y ∧ (∀i<n. 🚫X!i=i ∧🚫Y!i=m+i) }, {♂X=♀X ∧♂Y=♀Y}, {True}, {∀i<n. (🚫X!i) mod n=i ∧ (∀j<🚫X!i. j mod n=i ⟶¬P(B!j)) ∧ (🚫Y!i<m ⟶ P(B!(🚫Y!i)) ∧🚫Y!i≤ m+i) ∧ (∃j<n. 🚫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<length 🚫X ∧ n<length 🚫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.11 Sekunden
(vorverarbeitet am 2026-06-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.