Theory Empty_Convergence_Graph
section ‹An Always-Empty Convergence Graph›
text ‹This theory implements a convergence graph that always returns an empty list for any lookup.
By using this graph it is possible to represent methods via the SPY and H-Frameworks
that do not distribute distinguishing traces over converging traces.›
theory Empty_Convergence_Graph
imports Convergence_Graph
begin
type_synonym empty_cg = unit
definition empty_cg_empty :: "empty_cg" where
"empty_cg_empty = ()"
definition empty_cg_initial :: "(('a,'b,'c) fsm ⇒ ('b×'c) prefix_tree ⇒ empty_cg)" where
"empty_cg_initial M T = empty_cg_empty"
definition empty_cg_insert :: "(empty_cg ⇒ ('b×'c) list ⇒ empty_cg)" where
"empty_cg_insert G v = empty_cg_empty"
definition empty_cg_lookup :: "(empty_cg ⇒ ('b×'c) list ⇒ ('b×'c) list list)" where
"empty_cg_lookup G v = [v]"
definition empty_cg_merge :: "(empty_cg ⇒ ('b×'c) list ⇒ ('b×'c) list ⇒ empty_cg)" where
"empty_cg_merge G u v = empty_cg_empty"
lemma empty_graph_initial_invar: "convergence_graph_initial_invar M1 M2 empty_cg_lookup empty_cg_initial"
unfolding convergence_graph_initial_invar_def convergence_graph_lookup_invar_def empty_cg_lookup_def empty_cg_initial_def
by auto
lemma empty_graph_insert_invar: "convergence_graph_insert_invar M1 M2 empty_cg_lookup empty_cg_insert"
unfolding convergence_graph_insert_invar_def convergence_graph_lookup_invar_def empty_cg_lookup_def empty_cg_insert_def
by auto
lemma empty_graph_merge_invar: "convergence_graph_merge_invar M1 M2 empty_cg_lookup empty_cg_merge"
unfolding convergence_graph_merge_invar_def convergence_graph_lookup_invar_def empty_cg_lookup_def empty_cg_merge_def
by auto
end