Theory WeakOrderDependence

section ‹Weak Order Dependence›

theory WeakOrderDependence imports "../Basic/CFG" DataDependence begin

text ‹Weak order dependence is just defined as a static control dependence›

subsection‹Definition and some lemmas›

definition (in CFG) weak_order_dependence :: "'node ⇒ 'node ⇒ 'node ⇒ bool"
   (‹_ ⟶wod _,_›)
where wod_def:"n ⟶wod n1,n2 ≡ ((n1 ≠ n2) ∧
   (∃as. (n -as→* n1) ∧ (n2 ∉ set (sourcenodes as))) ∧
   (∃as. (n -as→* n2) ∧ (n1 ∉ set (sourcenodes as))) ∧
   (∃a. (valid_edge a) ∧ (n = sourcenode a) ∧ 
        ((∃as. (targetnode a -as→* n1) ∧  
               (∀as'. (targetnode a -as'→* n2) ⟶ n1 ∈ set(sourcenodes as'))) ∨
         (∃as. (targetnode a -as→* n2) ∧  
               (∀as'. (targetnode a -as'→* n1) ⟶ n2 ∈ set(sourcenodes as'))))))"




inductive_set (in CFG_wf) wod_backward_slice :: "'node set ⇒ 'node set" 
for S :: "'node set"
  where refl:"⟦valid_node n; n ∈ S⟧ ⟹ n ∈ wod_backward_slice S"
  
  | cd_closed:
  "⟦n' ⟶wod n1,n2; n1 ∈ wod_backward_slice S; n2 ∈ wod_backward_slice S⟧
  ⟹ n' ∈ wod_backward_slice S"

  | dd_closed:"⟦n' influences V in n''; n'' ∈ wod_backward_slice S⟧
  ⟹ n' ∈ wod_backward_slice S"


lemma (in CFG_wf) 
  wod_backward_slice_valid_node:"n ∈ wod_backward_slice S ⟹ valid_node n"
by(induct rule:wod_backward_slice.induct,
   auto dest:path_valid_node simp:wod_def data_dependence_def)


end