Theory BD_Security_IO
subsection ‹Instantiation for IO automata›
theory BD_Security_IO
imports Abstract_BD_Security BD_Security_TS IO_Automaton Filtermap
begin
no_notation relcomp (infixr "O" 75)
abbreviation never :: "('a ⇒ bool) ⇒ 'a list ⇒ bool" where "never U ≡ list_all (λ a. ¬ U a)"
locale BD_Security_IO = IO_Automaton istate step
for istate :: 'state and step :: "'state ⇒ 'act ⇒ 'out × 'state"
+
fixes
φ :: "('state,'act,'out) trans ⇒ bool" and f :: "('state,'act,'out) trans ⇒ 'value"
and
γ :: "('state,'act,'out) trans ⇒ bool" and g :: "('state,'act,'out) trans ⇒ 'obs"
and
T :: "('state,'act,'out) trans ⇒ bool"
and
B :: "'value list ⇒ 'value list ⇒ bool"
begin
sublocale BD_Security_TS where validTrans = validTrans and srcOf = srcOf and tgtOf = tgtOf .
lemma reachNT_step_induct[consumes 1, case_names Istate Step]:
assumes "reachNT s"
and "P istate"
and "⋀s a ou s'. reachNT s ⟹ step s a = (ou, s') ⟹ ¬T (Trans s a ou s') ⟹ P s ⟹ P s'"
shows "P s"
using assms
by (induction rule: reachNT.induct) (auto elim: validTrans.elims)
lemma reachNT_PairI:
assumes "reachNT s" and "step s a = (ou, s')" and "¬ T (Trans s a ou s')"
shows "reachNT s'"
using assms reachNT.simps[of s']
by auto
lemma reachNT_state_cases[cases set, consumes 1, case_names init step]:
assumes "reachNT s"
obtains "s = istate"
| sh a ou where "reach sh" "step sh a = (ou,s)" "¬T (Trans sh a ou s)"
using assms
unfolding reachNT.simps[of s]
by (fastforce intro: reachNT_reach elim: validTrans.elims)
definition invarNT where
"invarNT Inv ≡ ∀ s a ou s'. reachNT s ∧ Inv s ∧ ¬ T (Trans s a ou s') ∧ step s a = (ou,s') ⟶ Inv s'"
lemma invarNT_disj:
assumes "invarNT Inv1" and "invarNT Inv2"
shows "invarNT (λ s. Inv1 s ∨ Inv2 s)"
using assms unfolding invarNT_def by blast
lemma invarNT_conj:
assumes "invarNT Inv1" and "invarNT Inv2"
shows "invarNT (λ s. Inv1 s ∧ Inv2 s)"
using assms unfolding invarNT_def by blast
lemma holdsIstate_invarNT:
assumes h: "holdsIstate Inv" and i: "invarNT Inv" and a: "reachNT s"
shows "Inv s"
using a using h i unfolding holdsIstate_def invarNT_def
by (induction rule: reachNT_step_induct) auto
end
end