Theory DynamicControlDependences

section ‹Interpretations of the various dynamic control dependences›

theory DynamicControlDependences imports AdditionalLemmas "../Dynamic/DynPDG" begin

interpretation WDynStandardControlDependence:
  DynStandardControlDependencePDG sourcenode targetnode kind "valid_edge prog"
                    Entry "Defs prog" "Uses prog" id Exit
  for prog
proof(unfold_locales)
  fix n assume "CFG.valid_node sourcenode targetnode (valid_edge prog) n"
  hence "valid_node prog n" by(simp add:valid_node_def While_CFG.valid_node_def)
  thus "as. prog  (_Entry_) -as→* n" by(rule valid_node_Entry_path)
next
  fix n assume "CFG.valid_node sourcenode targetnode (valid_edge prog) n"
  hence "valid_node prog n" by(simp add:valid_node_def While_CFG.valid_node_def)
  thus "as. prog  n -as→* (_Exit_)" by(rule valid_node_Exit_path)
qed

interpretation WDynWeakControlDependence:
  DynWeakControlDependencePDG sourcenode targetnode kind "valid_edge prog"
                    Entry "Defs prog" "Uses prog" id Exit
  for prog
proof(unfold_locales)
  fix n assume "CFG.valid_node sourcenode targetnode (valid_edge prog) n"
  hence "valid_node prog n" by(simp add:valid_node_def While_CFG.valid_node_def)
  show "finite {n'. a'. valid_edge prog a'  sourcenode a' = n 
                         targetnode a' = n'}"
    by(rule finite_successors)
qed

end