Theory PHL_DRAT
section ‹Propositional Hoare Logic›
theory PHL_DRAT
imports DRAT Kleene_Algebra.PHL_DRA PHL_KAT
begin
sublocale drat < phl: at_it_pre_dioid where alpha = t and tau = t and it = strong_iteration ..
context drat
begin
no_notation while ("while _ do _ od" [64,64] 63)
abbreviation while :: "'a ⇒ 'a ⇒ 'a" ("while _ do _ od" [64,64] 63) where
"while b do x od ≡ (b ⋅ x)⇧∞ ⋅ !b"
lemma phl_n_while:
assumes "⦃n x ⋅ n y⦄ z ⦃n x⦄"
shows "⦃n x⦄ (n y ⋅ z)⇧∞ ⋅ t y ⦃n x ⋅ t y⦄"
by (metis assms phl.ht_at_phl_while t_n_closed)
lemma phl_test_while:
assumes "test p" and "test b"
and "⦃p ⋅ b⦄ x ⦃p⦄"
shows "⦃p⦄ (b ⋅ x)⇧∞ ⋅ !b ⦃p ⋅ !b⦄"
by (metis assms phl_n_while test_double_comp_var)
lemma phl_while_syntax:
assumes "test p" and "test b" and "⦃p ⋅ b⦄ x ⦃p⦄"
shows "⦃p⦄ while b do x od ⦃p ⋅ !b⦄"
by (metis assms phl_test_while)
end
end