Theory Strong_Security
theory Strong_Security
imports Types
begin
locale Strong_Security =
fixes SR :: "('exp, 'id, 'val, 'com) TSteps"
and DA :: "('id, 'd::order) DomainAssignment"
begin
definition d_equal :: "'d::order ⇒ ('id, 'val) State
⇒ ('id, 'val) State ⇒ bool"
where
"d_equal d m m' ≡ ∀x. ((DA x) ≤ d ⟶ (m x) = (m' x))"
abbreviation d_equal' :: "('id, 'val) State
⇒ 'd::order ⇒ ('id, 'val) State ⇒ bool"
( ‹(_ =⇘_⇙ _)› )
where
"m =⇘d⇙ m' ≡ d_equal d m m'"
lemma d_equal_trans:
"⟦ m =⇘d⇙ m'; m' =⇘d⇙ m'' ⟧ ⟹ m =⇘d⇙ m''"
by (simp add: d_equal_def)
abbreviation SRabbr :: "('exp, 'id, 'val, 'com) TSteps_curry"
(‹(1⟨_,/_⟩) →/ (1⟨_,/_⟩)› [0,0,0,0] 81)
where
"⟨c,m⟩ → ⟨c',m'⟩ ≡ ((c,m),(c',m')) ∈ SR"
definition Strong_d_Bisimulation :: "'d ⇒ 'com Bisimulation_type ⇒ bool"
where
"Strong_d_Bisimulation d R ≡
(sym R) ∧
(∀(V,V') ∈ R. length V = length V') ∧
(∀(V,V') ∈ R. ∀i < length V. ∀m1 m1' m2 W.
⟨V!i,m1⟩ → ⟨W,m2⟩ ∧ m1 =⇘d⇙ m1'
⟶ (∃W' m2'. ⟨V'!i,m1'⟩ → ⟨W',m2'⟩ ∧ (W,W') ∈ R ∧ m2 =⇘d⇙ m2'))"
definition USdB :: "'d ⇒ 'com Bisimulation_type"
(‹≈⇘_⇙› 65)
where
"≈⇘d⇙ ≡ ⋃{r. (Strong_d_Bisimulation d r)}"
abbreviation relatedbyUSdB :: "'com list ⇒ 'd ⇒ 'com list ⇒ bool"
(‹(_ ≈⇘_⇙ _)› [66,66] 65)
where "V ≈⇘d⇙ V' ≡ (V,V') ∈ USdB d"
definition Strongly_Secure :: "'com list ⇒ bool"
where
"Strongly_Secure V ≡ (∀d. V ≈⇘d⇙ V)"
lemma strongdB_aux: "⋀V V' m1 m1' m2 W i. ⟦ Strong_d_Bisimulation d R;
i < length V ; (V,V') ∈ R; ⟨V!i,m1⟩ → ⟨W,m2⟩; m1 =⇘d⇙ m1' ⟧
⟹ (∃W' m2'. ⟨V'!i,m1'⟩ → ⟨W',m2'⟩ ∧ (W,W') ∈ R ∧ m2 =⇘d⇙ m2')"
by (simp add: Strong_d_Bisimulation_def, fastforce)
lemma trivialpair_in_USdB:
"[] ≈⇘d⇙ []"
by (simp add: USdB_def Strong_d_Bisimulation_def,
rule_tac x="{([],[])}" in exI, simp add: sym_def)
lemma USdBsym: "sym (≈⇘d⇙)"
by (simp add: USdB_def Strong_d_Bisimulation_def sym_def, auto)
lemma USdBeqlen:
"V ≈⇘d⇙ V' ⟹ length V = length V'"
by (simp add: USdB_def Strong_d_Bisimulation_def, auto)
lemma USdB_Strong_d_Bisimulation:
"Strong_d_Bisimulation d (≈⇘d⇙)"
proof (simp add: Strong_d_Bisimulation_def, auto)
show "sym (≈⇘d⇙)" by (rule USdBsym)
next
fix V V'
show "V ≈⇘d⇙ V' ⟹ length V = length V'" by (rule USdBeqlen, auto)
next
fix V V' m1 m1' m2 W i
assume inUSdB: "V ≈⇘d⇙ V'"
assume stepV: "⟨V!i,m1⟩ → ⟨W,m2⟩"
assume irange: "i < length V"
assume dequal: "m1 =⇘d⇙ m1'"
from inUSdB obtain R where someR:
"Strong_d_Bisimulation d R ∧ (V,V') ∈ R"
by (simp add: USdB_def, auto)
with strongdB_aux stepV irange dequal show
"∃W' m2'. ⟨V'!i,m1'⟩ → ⟨W',m2'⟩ ∧ W ≈⇘d⇙ W' ∧ m2 =⇘d⇙ m2'"
by (simp add: USdB_def, fastforce)
qed
lemma USdBtrans: "trans (≈⇘d⇙)"
proof (simp add: trans_def, auto)
fix V V' V''
assume p1: "V ≈⇘d⇙ V'"
assume p2: "V' ≈⇘d⇙ V''"
let ?R = "{(V,V''). ∃V'. V ≈⇘d⇙ V' ∧ V' ≈⇘d⇙ V''}"
from p1 p2 have inRest: "(V,V'') ∈ ?R" by auto
have SdB_rest: "Strong_d_Bisimulation d ?R"
proof (simp add: Strong_d_Bisimulation_def sym_def, auto)
fix V V' V''
assume p1: "V ≈⇘d⇙ V'"
moreover
assume p2: "V' ≈⇘d⇙ V''"
moreover
from p1 USdBsym have "V' ≈⇘d⇙ V"
by (simp add: sym_def)
moreover
from p2 USdBsym have "V'' ≈⇘d⇙ V'"
by (simp add: sym_def)
ultimately show
"∃V'. V'' ≈⇘d⇙ V' ∧ V' ≈⇘d⇙ V"
by (rule_tac x="V'" in exI, auto)
next
fix V V' V''
assume p1: "V ≈⇘d⇙ V'"
moreover
assume p2: "V' ≈⇘d⇙ V''"
moreover
from p1 USdBeqlen[of "V" "V'"] have "length V = length V'"
by auto
moreover
from p2 USdBeqlen[of "V'" "V''"] have "length V' = length V''"
by auto
ultimately show eqlen: "length V = length V''" by auto
next
fix V V' V'' i m1 m1' W m2
assume step: "⟨V!i,m1⟩ → ⟨W,m2⟩"
assume dequal: "m1 =⇘d⇙ m1'"
assume p1: "V ≈⇘d⇙ V'"
assume p2: "V' ≈⇘d⇙ V''"
assume irange: "i < length V"
from p1 USdBeqlen[of "V" "V'"]
have leq: "length V = length V'"
by force
have deq_same: "m1' =⇘d⇙ m1'" by (simp add: d_equal_def)
from irange step dequal p1 USdB_Strong_d_Bisimulation
strongdB_aux[of "d" "≈⇘d⇙" "i" "V" "V'" "m1" "W" "m2" "m1'"]
obtain W' m2' where p1concl:
"⟨V'!i,m1'⟩ → ⟨W',m2'⟩ ∧ W ≈⇘d⇙ W' ∧ m2 =⇘d⇙ m2'"
by auto
with deq_same leq USdB_Strong_d_Bisimulation
strongdB_aux[of "d" "≈⇘d⇙" "i" "V'" "V''" "m1'" "W'" "m2'" "m1'"]
irange p2 dequal obtain W'' m2'' where p2concl:
"W' ≈⇘d⇙ W'' ∧ ⟨V''!i,m1'⟩ → ⟨W'',m2''⟩ ∧ m2' =⇘d⇙ m2''"
by auto
from p1concl p2concl d_equal_trans have tt'': "m2 =⇘d⇙ m2''"
by blast
from p1concl p2concl have "(W,W'') ∈ ?R"
by auto
with p2concl tt'' show "∃W'' m2''. ⟨V''!i,m1'⟩ → ⟨W'',m2''⟩ ∧
(∃V'. W ≈⇘d⇙ V' ∧ V' ≈⇘d⇙ W'') ∧ m2 =⇘d⇙ m2''"
by auto
qed
hence liftup: "?R ⊆ (≈⇘d⇙)"
by (simp add: USdB_def, auto)
with inRest show "V ≈⇘d⇙ V''"
by auto
qed
end
end