"A ⊨ {P}c{Q} ≡ A |⊨ {(P,c,Q)}"
| "A ⊨🪙e {P}e{Q} ≡ A |⊨🪙e (P,e,Q)"
| Skip: "A ⊨ {P} Skip {P}"
| Comp: "[| A ⊨ {P} c1 {Q}; A ⊨ {Q} c2 {R} |] ==> A ⊨ {P} c1;;c2 {R}"
| Cond: "[| A ⊨🪙e {P} e {Q}; ∀v. A ⊨ {Q v} (if v ≠ Null then c1 else c2) {R} |] ==> A ⊨ {P} If(e) c1 Else c2 {R}"
| Loop: "A ⊨ {λs. P s ∧ s≠ Null} c {P} ==> A ⊨ {P} While(x) c {λs. P s ∧ s = Null}"
| LAcc: "A ⊨🪙e {λs. P (s) s} LAcc x {P}"
| LAss: "A ⊨🪙e {P} e {λv s. Q (lupd(x↦v) s)} ==> A ⊨ {P} x:==e {Q}"
| FAcc: "A ⊨🪙e {P} e {λv s. ∀a. v=Addr a --> Q (get_field s a f) s} ==> A ⊨🪙e {P} e..f {Q}"
| FAss: "[| A ⊨🪙e {P} e1 {λv s. ∀a. v=Addr a --> Q a s}; ∀a. A ⊨🪙e {Q a} e2 {λv s. R (upd_obj a f v s)} |] ==> A ⊨ {P} e1..f:==e2 {R}"
| NewC: "A ⊨🪙e {λs. ∀a. new_Addr s = Addr a --> P (Addr a) (new_obj a C s)} new C {P}"
| Cast: "A ⊨🪙e {P} e {λv s. (case v of Null => True | Addr a => obj_class s a ⪯C C) --> Q v s} ==> A ⊨🪙e {P} Cast C e {Q}"
| Call: "[| A ⊨🪙e {P} e1 {Q}; ∀a. A ⊨🪙e {Q a} e2 {R a}; ∀a p ls. A ⊨ {λs'. ∃s. R a p s ∧ ls = s ∧ s' = lupd(This↦a)(lupd(Par↦p)(del_locs s))} Meth (C,m) {λs. S (s) (set_locs ls s)} |] ==> A ⊨🪙e {P} {C}e1..m(e2) {S}"
| Meth: "∀D. A ⊨ {λs'. ∃s a. s = Addr a ∧ D = obj_class s a ∧ D ⪯C C ∧ P s ∧ s' = init_locs D m s} Impl (D,m) {Q} ==> A ⊨ {P} Meth (C,m) {Q}"
🍋‹‹∪Z›instead of ‹∀Z› in the conclusion and\\ Z restricted to type state due to limitations of the inductive package›
| Impl: "∀Z::state. A∪ (∪Z. (λCm. (P Z Cm, Impl Cm, Q Z Cm))`Ms) |⊨ (λCm. (P Z Cm, body Cm, Q Z Cm))`Ms ==> A |⊨ (λCm. (P Z Cm, Impl Cm, Q Z Cm))`Ms"
🍋‹structural rules›
| Asm: " a ∈ A ==> A |⊨ {a}"
| ConjI: " ∀c ∈ C. A |⊨ {c} ==> A |⊨ C"
| ConjE: "[|A |⊨ C; c ∈ C |] ==> A |⊨ {c}"
🍋‹Z restricted to type state due to limitations of the inductive package›
| Conseq:"[| ∀Z::state. A ⊨ {P' Z} c {Q' Z}; ∀s t. (∀Z. P' Z s --> Q' Z t) --> (P s --> Q t) |] ==> A ⊨ {P} c {Q }"
🍋‹Z restricted to type state due to limitations of the inductive package›
| eConseq:"[| ∀Z::state. A ⊨🪙e {P' Z} e {Q' Z}; ∀s v t. (∀Z. P' Z s --> Q' Z v t) --> (P s --> Q v t) |] ==> A ⊨🪙e {P} e {Q }"
subsection"Fully polymorphic variants, required for Example only"
axiomatizationwhere
Conseq:"[| ∀Z. A ⊨ {P' Z} c {Q' Z}; ∀s t. (∀Z. P' Z s --> Q' Z t) --> (P s --> Q t) |] ==> A ⊨ {P} c {Q }"
axiomatizationwhere
eConseq:"[| ∀Z. A ⊨🪙e {P' Z} e {Q' Z}; ∀s v t. (∀Z. P' Z s --> Q' Z v t) --> (P s --> Q v t) |] ==> A ⊨🪙e {P} e {Q }"
axiomatizationwhere
Impl: "∀Z. A∪ (∪Z. (λCm. (P Z Cm, Impl Cm, Q Z Cm))`Ms) |⊨ (λCm. (P Z Cm, body Cm, Q Z Cm))`Ms ==> A |⊨ (λCm. (P Z Cm, Impl Cm, Q Z Cm))`Ms"
subsection"Derived Rules"
lemma Conseq1: "[A ⊨ {P'} c {Q}; ∀s. P s ⟶ P' s]==> A ⊨ {P} c {Q}" apply (rule hoare_ehoare.Conseq) apply (rule allI, assumption) apply fast done
lemma Conseq2: "[A ⊨ {P} c {Q'}; ∀t. Q' t ⟶ Q t]==> A ⊨ {P} c {Q}" apply (rule hoare_ehoare.Conseq) apply (rule allI, assumption) apply fast done
lemma eConseq1: "[A ⊨🪙e {P'} e {Q}; ∀s. P s ⟶ P' s]==> A ⊨🪙e {P} e {Q}" apply (rule hoare_ehoare.eConseq) apply (rule allI, assumption) apply fast done
lemma eConseq2: "[A ⊨🪙e {P} e {Q'}; ∀v t. Q' v t ⟶ Q v t]==> A ⊨🪙e {P} e {Q}" apply (rule hoare_ehoare.eConseq) apply (rule allI, assumption) apply fast done
lemma Weaken: "[A |⊨ C'; C ⊆ C']==> A |⊨ C" apply (rule hoare_ehoare.ConjI) apply clarify apply (drule hoare_ehoare.ConjE) apply fast apply assumption done
lemma cThin: "[A' |⊨ C; A' ⊆ A]==> A |⊨ C" by (erule (1) conjunct1 [OF Thin_lemma, rule_format])
lemma eThin: "[A' ⊨🪙e {P} e {Q}; A' ⊆ A]==> A ⊨🪙e {P} e {Q}" by (erule (1) conjunct2 [OF Thin_lemma, rule_format])
lemma Union: "A |⊨ (∪Z. C Z) = (∀Z. A |⊨ C Z)" by (auto intro: hoare_ehoare.ConjI hoare_ehoare.ConjE)
lemma Impl1': "[∀Z::state. A∪ (∪Z. (λCm. (P Z Cm, Impl Cm, Q Z Cm))`Ms) |⊨ (λCm. (P Z Cm, body Cm, Q Z Cm))`Ms; Cm ∈ Ms]==> A ⊨ {P Z Cm} Impl Cm {Q Z Cm}" apply (drule AxSem.Impl) apply (erule Weaken) apply (auto del: image_eqI intro: rev_image_eqI) done
lemmas Impl1 = AxSem.Impl [of _ _ _ "{Cm}", simplified] for Cm
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-04-27)
¤
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.