Theory StandardControlDependence
section ‹Static Standard Control Dependence›
theory StandardControlDependence imports
"../Basic/Postdomination"
"../Basic/DynStandardControlDependence"
begin
context Postdomination begin
subsubsection ‹Definition and some lemmas›
definition standard_control_dependence :: "'node ⇒ 'node ⇒ bool"
("_ controls⇩s _" [51,0])
where standard_control_dependences_eq:"n controls⇩s n' ≡ ∃as. n controls⇩s n' via as"
lemma standard_control_dependence_def:"n controls⇩s n' =
(∃a a' as. (n' ∉ set(sourcenodes (a#as))) ∧ (n -a#as→* n') ∧
(n' postdominates (targetnode a)) ∧
(valid_edge a') ∧ (sourcenode a' = n) ∧
(¬ n' postdominates (targetnode a')))"
by(auto simp:standard_control_dependences_eq dyn_standard_control_dependence_def)
lemma Exit_not_standard_control_dependent:
"n controls⇩s (_Exit_) ⟹ False"
by(auto simp:standard_control_dependences_eq
intro:Exit_not_dyn_standard_control_dependent)
lemma standard_control_dependence_def_variant:
"n controls⇩s n' = (∃as. (n -as→* n') ∧ (n ≠ n') ∧
(¬ n' postdominates n) ∧ (n' ∉ set(sourcenodes as)) ∧
(∀n'' ∈ set(targetnodes as). n' postdominates n''))"
by(auto simp:standard_control_dependences_eq
dyn_standard_control_dependence_def_variant)
lemma inner_node_standard_control_dependence_predecessor:
assumes "inner_node n" "(_Entry_) -as→* n" "n -as'→* (_Exit_)"
obtains n' where "n' controls⇩s n"
using assms
by(auto elim!:inner_node_dyn_standard_control_dependence_predecessor
simp:standard_control_dependences_eq)
end
end