Theory SemanticsCFG

section ‹CFG and semantics conform›

theory SemanticsCFG imports CFG begin

locale CFG_semantics_wf = CFG sourcenode targetnode kind valid_edge Entry 
    get_proc get_return_edges procs Main
  for sourcenode :: "'edge ⇒ 'node" and targetnode :: "'edge ⇒ 'node"
  and kind :: "'edge ⇒ ('var,'val,'ret,'pname) edge_kind" 
  and valid_edge :: "'edge ⇒ bool"
  and Entry :: "'node" (‹'('_Entry'_')›)  and get_proc :: "'node ⇒ 'pname"
  and get_return_edges :: "'edge ⇒ 'edge set"
  and procs :: "('pname × 'var list × 'var list) list" and Main :: "'pname" +
  fixes sem::"'com ⇒ ('var ⇀ 'val) list ⇒ 'com ⇒ ('var ⇀ 'val) list ⇒ bool" 
    (‹((1⟨_,/_⟩) ⇒/ (1⟨_,/_⟩))› [0,0,0,0] 81)
  fixes identifies::"'node ⇒ 'com ⇒ bool" (‹_ ≜ _› [51,0] 80)
  assumes fundamental_property:
    "⟦n ≜ c; ⟨c,[cf]⟩ ⇒ ⟨c',s'⟩⟧ ⟹
      ∃n' as. n -as→√* n' ∧ n' ≜ c' ∧ preds (kinds as) [(cf,undefined)] ∧
              transfers (kinds as) [(cf,undefined)] = cfs' ∧ map fst cfs' = s'"


end