<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../../../xsl/unit.xsl"?>
<KIVSPEC name="olist"><SPECBODY>specification
   using olist-act
   functions 
       ins≤ : elem × list → list;
       merge : list × list → list;
   
   predicates 
       ordered≤ : list;
       ordered&lt; : list;
   
   variables 
       x : list;
       y : list;
       z : list;
       a : elem;
       b : elem;
       c : elem;
       n : nat;
   
   
   axioms 
      le-e: ordered≤([]);
      used for: s, ls;
      
      le-o: ordered≤(a ');
      used for: s, ls;
      
      le-r: ordered≤(a ' + b ' + x) ↔ ¬ b &lt; a ∧ ordered≤(b ' + x);
      used for: ws, lws;
      
      ls-e: ordered&lt;([]);
      used for: s, ls;
      
      ls-o: ordered&lt;(a ');
      used for: s, ls;
      
      ls-r: ordered&lt;(a ' + b ' + x) ↔ a &lt; b ∧ ordered&lt;(b ' + x);
      used for: ws, lws;
      
      ins-e: ins≤(a, []) = a ';
      used for: s, ls;
      
      ins-y: ¬ b &lt; a → ins≤(a, b ' + x) = a + b + x;
      used for: s, ls;
      
      ins-n: b &lt; a → ins≤(a, b ' + x) = b + ins≤(a, x);
      used for: s, ls, lc;
      
      merge-empty: merge([], x) = x;
      used for: s, ls;
      
      merge-rec: merge(a ' + x0, x) = ins≤(a, merge(x0, x));
      used for: s, ls;
   
   
end specification</SPECBODY></KIVSPEC>