Theory utp_sym_eval
section ‹ Symbolic Evaluation of Relational Programs ›
theory utp_sym_eval
imports utp_rel_opsem
begin
text ‹ The following operator applies a variable context $\Gamma$ as an assignment, and composes
it with a relation $P$ for the purposes of evaluation. ›
definition utp_sym_eval :: "'s usubst ⇒ 's hrel ⇒ 's hrel" (infixr ‹⊨› 55) where
[upred_defs]: "utp_sym_eval Γ P = (⟨Γ⟩⇩a ;; P)"
named_theorems symeval
lemma seq_symeval [symeval]: "Γ ⊨ P ;; Q = (Γ ⊨ P) ;; Q"
by (rel_auto)
lemma assigns_symeval [symeval]: "Γ ⊨ ⟨σ⟩⇩a = (σ ∘ Γ) ⊨ II"
by (rel_auto)
lemma term_symeval [symeval]: "(Γ ⊨ II) ;; P = Γ ⊨ P"
by (rel_auto)
lemma if_true_symeval [symeval]: "⟦ Γ † b = true ⟧ ⟹ Γ ⊨ (P ◃ b ▹⇩r Q) = Γ ⊨ P"
by (simp add: utp_sym_eval_def usubst assigns_r_comp)
lemma if_false_symeval [symeval]: "⟦ Γ † b = false ⟧ ⟹ Γ ⊨ (P ◃ b ▹⇩r Q) = Γ ⊨ Q"
by (simp add: utp_sym_eval_def usubst assigns_r_comp)
lemma while_true_symeval [symeval]: "⟦ Γ † b = true ⟧ ⟹ Γ ⊨ while b do P od = Γ ⊨ (P ;; while b do P od)"
by (subst while_unfold, simp add: symeval)
lemma while_false_symeval [symeval]: "⟦ Γ † b = false ⟧ ⟹ Γ ⊨ while b do P od = Γ ⊨ II"
by (subst while_unfold, simp add: symeval)
lemma while_inv_true_symeval [symeval]: "⟦ Γ † b = true ⟧ ⟹ Γ ⊨ while b invr S do P od = Γ ⊨ (P ;; while b do P od)"
by (metis while_inv_def while_true_symeval)
lemma while_inv_false_symeval [symeval]: "⟦ Γ † b = false ⟧ ⟹ Γ ⊨ while b invr S do P od = Γ ⊨ II"
by (metis while_false_symeval while_inv_def)
method sym_eval = (simp add: symeval usubst lit_simps[THEN sym]), (simp del: One_nat_def add: One_nat_def[THEN sym])?
syntax
"_terminated" :: "logic ⇒ logic" (‹terminated: _› [999] 999)
translations
"terminated: Γ" == "Γ ⊨ II"
end