spec CARDINAL %% [...] %%  =
sorts
  CARDINAL;
  Pos < Nat;
  Pos
ops
  +__ : Nat->Nat;
  +__ : CARDINAL->CARDINAL;
  0 : Nat;
  0 : CARDINAL;
  1 : Pos;
  1 : Nat;
  1 : CARDINAL;
  2 : Nat;
  3 : Nat;
  4 : Nat;
  5 : Nat;
  6 : Nat;
  7 : Nat;
  8 : Nat;
  9 : Nat;
  Wordlength : Nat;
  __! : Nat->Nat;
  __*__ : Pos*Pos->Pos;
  __*__ : Nat*Nat->Nat;
  __*__ : CARDINAL*CARDINAL->?CARDINAL;
  __+__ : Pos*Nat->Pos;
  __+__ : Nat*Pos->Pos;
  __+__ : Nat*Nat->Nat;
  __+__ : CARDINAL*CARDINAL->?CARDINAL;
  __-?__ : Nat*Nat->?Nat;
  __-__ : CARDINAL*CARDINAL->?CARDINAL;
  __/?__ : Nat*Nat->?Nat;
  __@@__ : Nat*Nat->Nat;
  __^__ : Nat*Nat->Nat;
  __div__ : Nat*Nat->?Nat;
  __div__ : CARDINAL*CARDINAL->?CARDINAL;
  __mod__ : Nat*Nat->?Nat;
  __mod__ : CARDINAL*CARDINAL->?CARDINAL;
  __quot__ : Nat*Nat->?Nat;
  __rem__ : Nat*Nat->?Nat;
  abs : Nat->Nat;
  abs : CARDINAL->CARDINAL;
  cardToNat : CARDINAL->Nat;
  max : Nat*Nat->Nat;
  maxCardinal : CARDINAL;
  maxCardinal : Nat;
  min : Nat*Nat->Nat;
  natToCard : Nat->?CARDINAL;
  pre : Nat->?Nat;
  suc : Nat->Pos;
  suc : Nat->Nat
preds
  __<=__ : CARDINAL*CARDINAL;
  __<=__ : Nat*Nat;
  __<__ : CARDINAL*CARDINAL;
  __<__ : Nat*Nat;
  __>=__ : CARDINAL*CARDINAL;
  __>=__ : Nat*Nat;
  __>__ : CARDINAL*CARDINAL;
  __>__ : Nat*Nat;
  even : Nat;
  odd : Nat

end

spec INTEGER %% [...] %%  =
sorts
  INTEGER;
  Nat,Pos < Int;
  Pos < Nat;
  Pos
ops
  +__ : Int->Int;
  +__ : Nat->Nat;
  +__ : INTEGER->INTEGER;
  -__ : Int->Int;
  -__ : Nat->Int;
  -__ : INTEGER->?INTEGER;
  0 : Int;
  0 : Nat;
  0 : INTEGER;
  1 : Int;
  1 : Pos;
  1 : Nat;
  1 : INTEGER;
  2 : Nat;
  3 : Nat;
  4 : Nat;
  5 : Nat;
  6 : Nat;
  7 : Nat;
  8 : Nat;
  9 : Nat;
  Nat : Int;
  Wordlength : Nat;
  __! : Nat->Nat;
  __*__ : Int*Int->Int;
  __*__ : Pos*Pos->Pos;
  __*__ : Nat*Nat->Nat;
  __*__ : INTEGER*INTEGER->?INTEGER;
  __+__ : Int*Int->Int;
  __+__ : Pos*Nat->Pos;
  __+__ : Nat*Pos->Pos;
  __+__ : Nat*Nat->Nat;
  __+__ : INTEGER*INTEGER->?INTEGER;
  __-?__ : Nat*Nat->?Nat;
  __-__ : Int*Int->Int;
  __-__ : Nat*Nat->Int;
  __-__ : INTEGER*INTEGER->?INTEGER;
  __/?__ : Int*Int->?Int;
  __/?__ : Nat*Nat->?Nat;
  __/__ : INTEGER*INTEGER->?INTEGER;
  __@@__ : Nat*Nat->Nat;
  __^__ : Int*Nat->Int;
  __^__ : Nat*Nat->Nat;
  __div__ : Int*Int->?Int;
  __div__ : Nat*Nat->?Nat;
  __div__ : INTEGER*INTEGER->?INTEGER;
  __mod__ : Int*Int->?Nat;
  __mod__ : Nat*Nat->?Nat;
  __mod__ : INTEGER*INTEGER->?INTEGER;
  __quot__ : Int*Int->?Int;
  __quot__ : Nat*Nat->?Nat;
  __quot__ : INTEGER*INTEGER->?INTEGER;
  __rem__ : Int*Int->?Int;
  __rem__ : Nat*Nat->?Nat;
  __rem__ : INTEGER*INTEGER->?INTEGER;
  abs : Int->Nat;
  abs : Nat->Nat;
  abs : INTEGER->?INTEGER;
  intToInteger : Int->?INTEGER;
  integerToInt : INTEGER->Int;
  max : Int*Int->Int;
  max : Nat*Nat->Nat;
  maxInteger : INTEGER;
  maxInteger : Int;
  min : Int*Int->Int;
  min : Nat*Nat->Nat;
  minInteger : INTEGER;
  minInteger : Int;
  pre : Nat->?Nat;
  sign : Int->Int;
  suc : Nat->Pos;
  suc : Nat->Nat
preds
  __<=__ : INTEGER*INTEGER;
  __<=__ : Int*Int;
  __<=__ : Nat*Nat;
  __<__ : INTEGER*INTEGER;
  __<__ : Int*Int;
  __<__ : Nat*Nat;
  __>=__ : INTEGER*INTEGER;
  __>=__ : Int*Int;
  __>=__ : Nat*Nat;
  __>__ : INTEGER*INTEGER;
  __>__ : Int*Int;
  __>__ : Nat*Nat;
  even : Int;
  even : Nat;
  odd : Int;
  odd : Nat

end

spec Int =
sorts
  Nat,Pos < Int;
  Pos < Nat;
  Pos
ops
  +__ : Nat->Nat;
  +__ : Int->Int;
  -__ : Nat->Int;
  -__ : Int->Int;
  0 : Nat;
  0 : Int;
  1 : Nat;
  1 : Pos;
  1 : Int;
  2 : Nat;
  3 : Nat;
  4 : Nat;
  5 : Nat;
  6 : Nat;
  7 : Nat;
  8 : Nat;
  9 : Nat;
  Nat : Int;
  __! : Nat->Nat;
  __*__ : Nat*Nat->Nat;
  __*__ : Pos*Pos->Pos;
  __*__ : Int*Int->Int;
  __+__ : Nat*Nat->Nat;
  __+__ : Nat*Pos->Pos;
  __+__ : Pos*Nat->Pos;
  __+__ : Int*Int->Int;
  __-?__ : Nat*Nat->?Nat;
  __-__ : Nat*Nat->Int;
  __-__ : Int*Int->Int;
  __/?__ : Nat*Nat->?Nat;
  __/?__ : Int*Int->?Int;
  __@@__ : Nat*Nat->Nat;
  __^__ : Nat*Nat->Nat;
  __^__ : Int*Nat->Int;
  __div__ : Nat*Nat->?Nat;
  __div__ : Int*Int->?Int;
  __mod__ : Nat*Nat->?Nat;
  __mod__ : Int*Int->?Nat;
  __quot__ : Nat*Nat->?Nat;
  __quot__ : Int*Int->?Int;
  __rem__ : Nat*Nat->?Nat;
  __rem__ : Int*Int->?Int;
  abs : Nat->Nat;
  abs : Int->Nat;
  max : Nat*Nat->Nat;
  max : Int*Int->Int;
  min : Nat*Nat->Nat;
  min : Int*Int->Int;
  pre : Nat->?Nat;
  sign : Int->Int;
  suc : Nat->Nat;
  suc : Nat->Pos
preds
  __<=__ : Nat*Nat;
  __<=__ : Int*Int;
  __<__ : Nat*Nat;
  __<__ : Int*Int;
  __>=__ : Nat*Nat;
  __>=__ : Int*Int;
  __>__ : Nat*Nat;
  __>__ : Int*Int;
  even : Nat;
  even : Int;
  odd : Nat;
  odd : Int

end

spec Nat =
sorts
  Pos < Nat;
  Pos
ops
  +__ : Nat->Nat;
  0 : Nat;
  1 : Nat;
  1 : Pos;
  2 : Nat;
  3 : Nat;
  4 : Nat;
  5 : Nat;
  6 : Nat;
  7 : Nat;
  8 : Nat;
  9 : Nat;
  __! : Nat->Nat;
  __*__ : Nat*Nat->Nat;
  __*__ : Pos*Pos->Pos;
  __+__ : Nat*Nat->Nat;
  __+__ : Nat*Pos->Pos;
  __+__ : Pos*Nat->Pos;
  __-?__ : Nat*Nat->?Nat;
  __/?__ : Nat*Nat->?Nat;
  __@@__ : Nat*Nat->Nat;
  __^__ : Nat*Nat->Nat;
  __div__ : Nat*Nat->?Nat;
  __mod__ : Nat*Nat->?Nat;
  __quot__ : Nat*Nat->?Nat;
  __rem__ : Nat*Nat->?Nat;
  abs : Nat->Nat;
  max : Nat*Nat->Nat;
  min : Nat*Nat->Nat;
  pre : Nat->?Nat;
  suc : Nat->Nat;
  suc : Nat->Pos
preds
  __<=__ : Nat*Nat;
  __<__ : Nat*Nat;
  __>=__ : Nat*Nat;
  __>__ : Nat*Nat;
  even : Nat;
  odd : Nat

end

spec SigOrder %% [...] %%  =
sort
  Elem
preds
  __<=__ : Elem*Elem;
  __<__ : Elem*Elem;
  __>=__ : Elem*Elem;
  __>__ : Elem*Elem

end
