Theory Ground_Order

theory Ground_Order
  imports Ground_Order_Generic
begin

abbreviation (input) pos_to_mset where 
  "pos_to_mset a  {# a #}"

abbreviation (input) neg_to_mset where 
  "neg_to_mset a  {# a, a #}"

global_interpretation term_atom_to_mset: atom_to_mset where 
  pos_to_mset = pos_to_mset and neg_to_mset = neg_to_mset
proof unfold_locales

  show "inj pos_to_mset"
    by (simp add: inj_def)
next

  show "inj neg_to_mset"
    by (meson add_eq_conv_ex empty_not_add_mset injI)
qed simp

locale ground_order =
  term.order: ground_term_order
begin

sublocale ground_order_generic where pos_to_mset = pos_to_mset and neg_to_mset = neg_to_mset
  by unfold_locales

end

locale context_compatible_ground_order =
  ground_order +
  term.order: context_compatible_ground_term_order

end