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

end

spec Bag %% [...] %%  =
sorts
  Elem;
  Pos < Nat;
  Pos;
  Bag[Elem]
ops
  +__ : Nat->Nat;
  0 : Nat;
  1 : Pos;
  1 : Nat;
  2 : Nat;
  3 : Nat;
  4 : Nat;
  5 : Nat;
  6 : Nat;
  7 : Nat;
  8 : Nat;
  9 : Nat;
  __! : Nat->Nat;
  __*__ : Pos*Pos->Pos;
  __*__ : Nat*Nat->Nat;
  __+__ : Pos*Nat->Pos;
  __+__ : Nat*Pos->Pos;
  __+__ : Nat*Nat->Nat;
  __+__ : Bag[Elem]*Elem->Bag[Elem];
  __+__ : Elem*Bag[Elem]->Bag[Elem];
  __-?__ : Nat*Nat->?Nat;
  __-__ : Bag[Elem]*Bag[Elem]->Bag[Elem];
  __-__ : Bag[Elem]*Elem->Bag[Elem];
  __/?__ : Nat*Nat->?Nat;
  __@@__ : Nat*Nat->Nat;
  __^__ : Nat*Nat->Nat;
  __div__ : Nat*Nat->?Nat;
  __intersection__ : Bag[Elem]*Bag[Elem]->Bag[Elem];
  __mod__ : Nat*Nat->?Nat;
  __quot__ : Nat*Nat->?Nat;
  __rem__ : Nat*Nat->?Nat;
  __union__ : Bag[Elem]*Bag[Elem]->Bag[Elem];
  abs : Nat->Nat;
  freq : Elem*Bag[Elem]->Nat;
  max : Nat*Nat->Nat;
  min : Nat*Nat->Nat;
  pre : Nat->?Nat;
  suc : Nat->Pos;
  suc : Nat->Nat;
  {__} : Elem->Bag[Elem];
  {} : Bag[Elem]
preds
  __<=__ : Nat*Nat;
  __<__ : Nat*Nat;
  __>=__ : Nat*Nat;
  __>__ : Nat*Nat;
  __eps__ : Elem*Bag[Elem];
  __isSubsetOf__ : Bag[Elem]*Bag[Elem];
  even : Nat;
  isNonEmpty : Bag[Elem];
  odd : Nat

end

spec BooleanAlgebra =
sort
  Elem
ops
  0 : Elem;
  1 : Elem;
  __cap__ : Elem*Elem->Elem;
  __cup__ : Elem*Elem->Elem

end

%[ view BooleanAlgebra_in_FinitePowerSet =
sorts 
Elem |-> FinPS[X]
ops 
0 |-> {}:Elem, 1 |-> X:Elem, __cap__ |-> __intersection__:Elem*Elem->Elem, __cup__ |-> __union__:Elem*Elem->Elem
end ]%

spec Char =
sorts
  Char;
  Pos < Nat;
  Pos
ops
  ' ' : Char;
  '!' : Char;
  '#' : Char;
  '$' : Char;
  '%' : Char;
  '&' : Char;
  '(' : Char;
  ')' : Char;
  '*' : Char;
  '+' : Char;
  ',' : Char;
  '-' : Char;
  '.' : Char;
  '/' : Char;
  '0' : Char;
  '1' : Char;
  '2' : Char;
  '3' : Char;
  '4' : Char;
  '5' : Char;
  '6' : Char;
  '7' : Char;
  '8' : Char;
  '9' : Char;
  ':' : Char;
  ';' : Char;
  '<' : Char;
  '=' : Char;
  '>' : Char;
  '?' : Char;
  '@' : Char;
  'A' : Char;
  'B' : Char;
  'C' : Char;
  'D' : Char;
  'E' : Char;
  'F' : Char;
  'G' : Char;
  'H' : Char;
  'I' : Char;
  'J' : Char;
  'K' : Char;
  'L' : Char;
  'M' : Char;
  'N' : Char;
  'O' : Char;
  'P' : Char;
  'Q' : Char;
  'R' : Char;
  'S' : Char;
  'T' : Char;
  'U' : Char;
  'V' : Char;
  'W' : Char;
  'X' : Char;
  'Y' : Char;
  'Z' : Char;
  '[' : Char;
  '\"' : Char;
  '\'' : Char;
  '\000' : Char;
  '\001' : Char;
  '\002' : Char;
  '\003' : Char;
  '\004' : Char;
  '\005' : Char;
  '\006' : Char;
  '\007' : Char;
  '\008' : Char;
  '\009' : Char;
  '\010' : Char;
  '\011' : Char;
  '\012' : Char;
  '\013' : Char;
  '\014' : Char;
  '\015' : Char;
  '\016' : Char;
  '\017' : Char;
  '\018' : Char;
  '\019' : Char;
  '\020' : Char;
  '\021' : Char;
  '\022' : Char;
  '\023' : Char;
  '\024' : Char;
  '\025' : Char;
  '\026' : Char;
  '\027' : Char;
  '\028' : Char;
  '\029' : Char;
  '\030' : Char;
  '\031' : Char;
  '\032' : Char;
  '\033' : Char;
  '\034' : Char;
  '\035' : Char;
  '\036' : Char;
  '\037' : Char;
  '\038' : Char;
  '\039' : Char;
  '\040' : Char;
  '\041' : Char;
  '\042' : Char;
  '\043' : Char;
  '\044' : Char;
  '\045' : Char;
  '\046' : Char;
  '\047' : Char;
  '\048' : Char;
  '\049' : Char;
  '\050' : Char;
  '\051' : Char;
  '\052' : Char;
  '\053' : Char;
  '\054' : Char;
  '\055' : Char;
  '\056' : Char;
  '\057' : Char;
  '\058' : Char;
  '\059' : Char;
  '\060' : Char;
  '\061' : Char;
  '\062' : Char;
  '\063' : Char;
  '\064' : Char;
  '\065' : Char;
  '\066' : Char;
  '\067' : Char;
  '\068' : Char;
  '\069' : Char;
  '\070' : Char;
  '\071' : Char;
  '\072' : Char;
  '\073' : Char;
  '\074' : Char;
  '\075' : Char;
  '\076' : Char;
  '\077' : Char;
  '\078' : Char;
  '\079' : Char;
  '\080' : Char;
  '\081' : Char;
  '\082' : Char;
  '\083' : Char;
  '\084' : Char;
  '\085' : Char;
  '\086' : Char;
  '\087' : Char;
  '\088' : Char;
  '\089' : Char;
  '\090' : Char;
  '\091' : Char;
  '\092' : Char;
  '\093' : Char;
  '\094' : Char;
  '\095' : Char;
  '\096' : Char;
  '\097' : Char;
  '\098' : Char;
  '\099' : Char;
  '\100' : Char;
  '\101' : Char;
  '\102' : Char;
  '\103' : Char;
  '\104' : Char;
  '\105' : Char;
  '\106' : Char;
  '\107' : Char;
  '\108' : Char;
  '\109' : Char;
  '\110' : Char;
  '\111' : Char;
  '\112' : Char;
  '\113' : Char;
  '\114' : Char;
  '\115' : Char;
  '\116' : Char;
  '\117' : Char;
  '\118' : Char;
  '\119' : Char;
  '\120' : Char;
  '\121' : Char;
  '\122' : Char;
  '\123' : Char;
  '\124' : Char;
  '\125' : Char;
  '\126' : Char;
  '\127' : Char;
  '\128' : Char;
  '\129' : Char;
  '\130' : Char;
  '\131' : Char;
  '\132' : Char;
  '\133' : Char;
  '\134' : Char;
  '\135' : Char;
  '\136' : Char;
  '\137' : Char;
  '\138' : Char;
  '\139' : Char;
  '\140' : Char;
  '\141' : Char;
  '\142' : Char;
  '\143' : Char;
  '\144' : Char;
  '\145' : Char;
  '\146' : Char;
  '\147' : Char;
  '\148' : Char;
  '\149' : Char;
  '\150' : Char;
  '\151' : Char;
  '\152' : Char;
  '\153' : Char;
  '\154' : Char;
  '\155' : Char;
  '\156' : Char;
  '\157' : Char;
  '\158' : Char;
  '\159' : Char;
  '\160' : Char;
  '\161' : Char;
  '\162' : Char;
  '\163' : Char;
  '\164' : Char;
  '\165' : Char;
  '\166' : Char;
  '\167' : Char;
  '\168' : Char;
  '\169' : Char;
  '\170' : Char;
  '\171' : Char;
  '\172' : Char;
  '\173' : Char;
  '\174' : Char;
  '\175' : Char;
  '\176' : Char;
  '\177' : Char;
  '\178' : Char;
  '\179' : Char;
  '\180' : Char;
  '\181' : Char;
  '\182' : Char;
  '\183' : Char;
  '\184' : Char;
  '\185' : Char;
  '\186' : Char;
  '\187' : Char;
  '\188' : Char;
  '\189' : Char;
  '\190' : Char;
  '\191' : Char;
  '\192' : Char;
  '\193' : Char;
  '\194' : Char;
  '\195' : Char;
  '\196' : Char;
  '\197' : Char;
  '\198' : Char;
  '\199' : Char;
  '\200' : Char;
  '\201' : Char;
  '\202' : Char;
  '\203' : Char;
  '\204' : Char;
  '\205' : Char;
  '\206' : Char;
  '\207' : Char;
  '\208' : Char;
  '\209' : Char;
  '\210' : Char;
  '\211' : Char;
  '\212' : Char;
  '\213' : Char;
  '\214' : Char;
  '\215' : Char;
  '\216' : Char;
  '\217' : Char;
  '\218' : Char;
  '\219' : Char;
  '\220' : Char;
  '\221' : Char;
  '\222' : Char;
  '\223' : Char;
  '\224' : Char;
  '\225' : Char;
  '\226' : Char;
  '\227' : Char;
  '\228' : Char;
  '\229' : Char;
  '\230' : Char;
  '\231' : Char;
  '\232' : Char;
  '\233' : Char;
  '\234' : Char;
  '\235' : Char;
  '\236' : Char;
  '\237' : Char;
  '\238' : Char;
  '\239' : Char;
  '\240' : Char;
  '\241' : Char;
  '\242' : Char;
  '\243' : Char;
  '\244' : Char;
  '\245' : Char;
  '\246' : Char;
  '\247' : Char;
  '\248' : Char;
  '\249' : Char;
  '\250' : Char;
  '\251' : Char;
  '\252' : Char;
  '\253' : Char;
  '\254' : Char;
  '\255' : Char;
  '\?' : Char;
  '\\' : Char;
  '\a' : Char;
  '\b' : Char;
  '\f' : Char;
  '\n' : Char;
  '\o000' : Char;
  '\o001' : Char;
  '\o002' : Char;
  '\o003' : Char;
  '\o004' : Char;
  '\o005' : Char;
  '\o006' : Char;
  '\o007' : Char;
  '\o010' : Char;
  '\o011' : Char;
  '\o012' : Char;
  '\o013' : Char;
  '\o014' : Char;
  '\o015' : Char;
  '\o016' : Char;
  '\o017' : Char;
  '\o020' : Char;
  '\o021' : Char;
  '\o022' : Char;
  '\o023' : Char;
  '\o024' : Char;
  '\o025' : Char;
  '\o026' : Char;
  '\o027' : Char;
  '\o030' : Char;
  '\o031' : Char;
  '\o032' : Char;
  '\o033' : Char;
  '\o034' : Char;
  '\o035' : Char;
  '\o036' : Char;
  '\o037' : Char;
  '\o040' : Char;
  '\o041' : Char;
  '\o042' : Char;
  '\o043' : Char;
  '\o044' : Char;
  '\o045' : Char;
  '\o046' : Char;
  '\o047' : Char;
  '\o050' : Char;
  '\o051' : Char;
  '\o052' : Char;
  '\o053' : Char;
  '\o054' : Char;
  '\o055' : Char;
  '\o056' : Char;
  '\o057' : Char;
  '\o060' : Char;
  '\o061' : Char;
  '\o062' : Char;
  '\o063' : Char;
  '\o064' : Char;
  '\o065' : Char;
  '\o066' : Char;
  '\o067' : Char;
  '\o070' : Char;
  '\o071' : Char;
  '\o072' : Char;
  '\o073' : Char;
  '\o074' : Char;
  '\o075' : Char;
  '\o076' : Char;
  '\o077' : Char;
  '\o100' : Char;
  '\o101' : Char;
  '\o102' : Char;
  '\o103' : Char;
  '\o104' : Char;
  '\o105' : Char;
  '\o106' : Char;
  '\o107' : Char;
  '\o110' : Char;
  '\o111' : Char;
  '\o112' : Char;
  '\o113' : Char;
  '\o114' : Char;
  '\o115' : Char;
  '\o116' : Char;
  '\o117' : Char;
  '\o120' : Char;
  '\o121' : Char;
  '\o122' : Char;
  '\o123' : Char;
  '\o124' : Char;
  '\o125' : Char;
  '\o126' : Char;
  '\o127' : Char;
  '\o130' : Char;
  '\o131' : Char;
  '\o132' : Char;
  '\o133' : Char;
  '\o134' : Char;
  '\o135' : Char;
  '\o136' : Char;
  '\o137' : Char;
  '\o140' : Char;
  '\o141' : Char;
  '\o142' : Char;
  '\o143' : Char;
  '\o144' : Char;
  '\o145' : Char;
  '\o146' : Char;
  '\o147' : Char;
  '\o150' : Char;
  '\o151' : Char;
  '\o152' : Char;
  '\o153' : Char;
  '\o154' : Char;
  '\o155' : Char;
  '\o156' : Char;
  '\o157' : Char;
  '\o160' : Char;
  '\o161' : Char;
  '\o162' : Char;
  '\o163' : Char;
  '\o164' : Char;
  '\o165' : Char;
  '\o166' : Char;
  '\o167' : Char;
  '\o170' : Char;
  '\o171' : Char;
  '\o172' : Char;
  '\o173' : Char;
  '\o174' : Char;
  '\o175' : Char;
  '\o176' : Char;
  '\o177' : Char;
  '\o200' : Char;
  '\o201' : Char;
  '\o202' : Char;
  '\o203' : Char;
  '\o204' : Char;
  '\o205' : Char;
  '\o206' : Char;
  '\o207' : Char;
  '\o210' : Char;
  '\o211' : Char;
  '\o212' : Char;
  '\o213' : Char;
  '\o214' : Char;
  '\o215' : Char;
  '\o216' : Char;
  '\o217' : Char;
  '\o220' : Char;
  '\o221' : Char;
  '\o222' : Char;
  '\o223' : Char;
  '\o224' : Char;
  '\o225' : Char;
  '\o226' : Char;
  '\o227' : Char;
  '\o230' : Char;
  '\o231' : Char;
  '\o232' : Char;
  '\o233' : Char;
  '\o234' : Char;
  '\o235' : Char;
  '\o236' : Char;
  '\o237' : Char;
  '\o240' : Char;
  '\o241' : Char;
  '\o242' : Char;
  '\o243' : Char;
  '\o244' : Char;
  '\o245' : Char;
  '\o246' : Char;
  '\o247' : Char;
  '\o250' : Char;
  '\o251' : Char;
  '\o252' : Char;
  '\o253' : Char;
  '\o254' : Char;
  '\o255' : Char;
  '\o256' : Char;
  '\o257' : Char;
  '\o260' : Char;
  '\o261' : Char;
  '\o262' : Char;
  '\o263' : Char;
  '\o264' : Char;
  '\o265' : Char;
  '\o266' : Char;
  '\o267' : Char;
  '\o270' : Char;
  '\o271' : Char;
  '\o272' : Char;
  '\o273' : Char;
  '\o274' : Char;
  '\o275' : Char;
  '\o276' : Char;
  '\o277' : Char;
  '\o300' : Char;
  '\o301' : Char;
  '\o302' : Char;
  '\o303' : Char;
  '\o304' : Char;
  '\o305' : Char;
  '\o306' : Char;
  '\o307' : Char;
  '\o310' : Char;
  '\o311' : Char;
  '\o312' : Char;
  '\o313' : Char;
  '\o314' : Char;
  '\o315' : Char;
  '\o316' : Char;
  '\o317' : Char;
  '\o320' : Char;
  '\o321' : Char;
  '\o322' : Char;
  '\o323' : Char;
  '\o324' : Char;
  '\o325' : Char;
  '\o326' : Char;
  '\o327' : Char;
  '\o330' : Char;
  '\o331' : Char;
  '\o332' : Char;
  '\o333' : Char;
  '\o334' : Char;
  '\o335' : Char;
  '\o336' : Char;
  '\o337' : Char;
  '\o340' : Char;
  '\o341' : Char;
  '\o342' : Char;
  '\o343' : Char;
  '\o344' : Char;
  '\o345' : Char;
  '\o346' : Char;
  '\o347' : Char;
  '\o350' : Char;
  '\o351' : Char;
  '\o352' : Char;
  '\o353' : Char;
  '\o354' : Char;
  '\o355' : Char;
  '\o356' : Char;
  '\o357' : Char;
  '\o360' : Char;
  '\o361' : Char;
  '\o362' : Char;
  '\o363' : Char;
  '\o364' : Char;
  '\o365' : Char;
  '\o366' : Char;
  '\o367' : Char;
  '\o370' : Char;
  '\o371' : Char;
  '\o372' : Char;
  '\o373' : Char;
  '\o374' : Char;
  '\o375' : Char;
  '\o376' : Char;
  '\o377' : Char;
  '\r' : Char;
  '\t' : Char;
  '\v' : Char;
  '\x00' : Char;
  '\x01' : Char;
  '\x02' : Char;
  '\x03' : Char;
  '\x04' : Char;
  '\x05' : Char;
  '\x06' : Char;
  '\x07' : Char;
  '\x08' : Char;
  '\x09' : Char;
  '\x0A' : Char;
  '\x0B' : Char;
  '\x0C' : Char;
  '\x0D' : Char;
  '\x0E' : Char;
  '\x0F' : Char;
  '\x10' : Char;
  '\x11' : Char;
  '\x12' : Char;
  '\x13' : Char;
  '\x14' : Char;
  '\x15' : Char;
  '\x16' : Char;
  '\x17' : Char;
  '\x18' : Char;
  '\x19' : Char;
  '\x1A' : Char;
  '\x1B' : Char;
  '\x1C' : Char;
  '\x1D' : Char;
  '\x1E' : Char;
  '\x1F' : Char;
  '\x20' : Char;
  '\x21' : Char;
  '\x22' : Char;
  '\x23' : Char;
  '\x24' : Char;
  '\x25' : Char;
  '\x26' : Char;
  '\x27' : Char;
  '\x28' : Char;
  '\x29' : Char;
  '\x2A' : Char;
  '\x2B' : Char;
  '\x2C' : Char;
  '\x2D' : Char;
  '\x2E' : Char;
  '\x2F' : Char;
  '\x30' : Char;
  '\x31' : Char;
  '\x32' : Char;
  '\x33' : Char;
  '\x34' : Char;
  '\x35' : Char;
  '\x36' : Char;
  '\x37' : Char;
  '\x38' : Char;
  '\x39' : Char;
  '\x3A' : Char;
  '\x3B' : Char;
  '\x3C' : Char;
  '\x3D' : Char;
  '\x3E' : Char;
  '\x3F' : Char;
  '\x40' : Char;
  '\x41' : Char;
  '\x42' : Char;
  '\x43' : Char;
  '\x44' : Char;
  '\x45' : Char;
  '\x46' : Char;
  '\x47' : Char;
  '\x48' : Char;
  '\x49' : Char;
  '\x4A' : Char;
  '\x4B' : Char;
  '\x4C' : Char;
  '\x4D' : Char;
  '\x4E' : Char;
  '\x4F' : Char;
  '\x50' : Char;
  '\x51' : Char;
  '\x52' : Char;
  '\x53' : Char;
  '\x54' : Char;
  '\x55' : Char;
  '\x56' : Char;
  '\x57' : Char;
  '\x58' : Char;
  '\x59' : Char;
  '\x5A' : Char;
  '\x5B' : Char;
  '\x5C' : Char;
  '\x5D' : Char;
  '\x5E' : Char;
  '\x5F' : Char;
  '\x60' : Char;
  '\x61' : Char;
  '\x62' : Char;
  '\x63' : Char;
  '\x64' : Char;
  '\x65' : Char;
  '\x66' : Char;
  '\x67' : Char;
  '\x68' : Char;
  '\x69' : Char;
  '\x6A' : Char;
  '\x6B' : Char;
  '\x6C' : Char;
  '\x6D' : Char;
  '\x6E' : Char;
  '\x6F' : Char;
  '\x70' : Char;
  '\x71' : Char;
  '\x72' : Char;
  '\x73' : Char;
  '\x74' : Char;
  '\x75' : Char;
  '\x76' : Char;
  '\x77' : Char;
  '\x78' : Char;
  '\x79' : Char;
  '\x7A' : Char;
  '\x7B' : Char;
  '\x7C' : Char;
  '\x7D' : Char;
  '\x7E' : Char;
  '\x7F' : Char;
  '\x80' : Char;
  '\x81' : Char;
  '\x82' : Char;
  '\x83' : Char;
  '\x84' : Char;
  '\x85' : Char;
  '\x86' : Char;
  '\x87' : Char;
  '\x88' : Char;
  '\x89' : Char;
  '\x8A' : Char;
  '\x8B' : Char;
  '\x8C' : Char;
  '\x8D' : Char;
  '\x8E' : Char;
  '\x8F' : Char;
  '\x90' : Char;
  '\x91' : Char;
  '\x92' : Char;
  '\x93' : Char;
  '\x94' : Char;
  '\x95' : Char;
  '\x96' : Char;
  '\x97' : Char;
  '\x98' : Char;
  '\x99' : Char;
  '\x9A' : Char;
  '\x9B' : Char;
  '\x9C' : Char;
  '\x9D' : Char;
  '\x9E' : Char;
  '\x9F' : Char;
  '\xA0' : Char;
  '\xA1' : Char;
  '\xA2' : Char;
  '\xA3' : Char;
  '\xA4' : Char;
  '\xA5' : Char;
  '\xA6' : Char;
  '\xA7' : Char;
  '\xA8' : Char;
  '\xA9' : Char;
  '\xAA' : Char;
  '\xAB' : Char;
  '\xAC' : Char;
  '\xAD' : Char;
  '\xAE' : Char;
  '\xAF' : Char;
  '\xB0' : Char;
  '\xB1' : Char;
  '\xB2' : Char;
  '\xB3' : Char;
  '\xB4' : Char;
  '\xB5' : Char;
  '\xB6' : Char;
  '\xB7' : Char;
  '\xB8' : Char;
  '\xB9' : Char;
  '\xBA' : Char;
  '\xBB' : Char;
  '\xBC' : Char;
  '\xBD' : Char;
  '\xBE' : Char;
  '\xBF' : Char;
  '\xC0' : Char;
  '\xC1' : Char;
  '\xC2' : Char;
  '\xC3' : Char;
  '\xC4' : Char;
  '\xC5' : Char;
  '\xC6' : Char;
  '\xC7' : Char;
  '\xC8' : Char;
  '\xC9' : Char;
  '\xCA' : Char;
  '\xCB' : Char;
  '\xCC' : Char;
  '\xCD' : Char;
  '\xCE' : Char;
  '\xCF' : Char;
  '\xD0' : Char;
  '\xD1' : Char;
  '\xD2' : Char;
  '\xD3' : Char;
  '\xD4' : Char;
  '\xD5' : Char;
  '\xD6' : Char;
  '\xD7' : Char;
  '\xD8' : Char;
  '\xD9' : Char;
  '\xDA' : Char;
  '\xDB' : Char;
  '\xDC' : Char;
  '\xDD' : Char;
  '\xDE' : Char;
  '\xDF' : Char;
  '\xE0' : Char;
  '\xE1' : Char;
  '\xE2' : Char;
  '\xE3' : Char;
  '\xE4' : Char;
  '\xE5' : Char;
  '\xE6' : Char;
  '\xE7' : Char;
  '\xE8' : Char;
  '\xE9' : Char;
  '\xEA' : Char;
  '\xEB' : Char;
  '\xEC' : Char;
  '\xED' : Char;
  '\xEE' : Char;
  '\xEF' : Char;
  '\xF0' : Char;
  '\xF1' : Char;
  '\xF2' : Char;
  '\xF3' : Char;
  '\xF4' : Char;
  '\xF5' : Char;
  '\xF6' : Char;
  '\xF7' : Char;
  '\xF8' : Char;
  '\xF9' : Char;
  '\xFA' : Char;
  '\xFB' : Char;
  '\xFC' : Char;
  '\xFD' : Char;
  '\xFE' : Char;
  '\xFF' : Char;
  ']' : Char;
  '^' : Char;
  '_' : Char;
  '`' : Char;
  'a' : Char;
  'b' : Char;
  'c' : Char;
  'd' : Char;
  'e' : Char;
  'f' : Char;
  'g' : Char;
  'h' : Char;
  'i' : Char;
  'j' : Char;
  'k' : Char;
  'l' : Char;
  'm' : Char;
  'n' : Char;
  'o' : Char;
  'p' : Char;
  'q' : Char;
  'r' : Char;
  's' : Char;
  't' : Char;
  'u' : Char;
  'v' : Char;
  'w' : Char;
  'x' : Char;
  'y' : Char;
  'z' : Char;
  '{' : Char;
  '|' : Char;
  '}' : Char;
  '~' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  +__ : Nat->Nat;
  0 : Nat;
  1 : Nat;
  1 : Pos;
  2 : Nat;
  3 : Nat;
  4 : Nat;
  5 : Nat;
  6 : Nat;
  7 : Nat;
  8 : Nat;
  9 : Nat;
  ACK : Char;
  BEL : Char;
  BS : Char;
  CAN : Char;
  CR : Char;
  DC1 : Char;
  DC2 : Char;
  DC3 : Char;
  DC4 : Char;
  DEL : Char;
  DLE : Char;
  EM : Char;
  ENQ : Char;
  EOT : Char;
  ESC : Char;
  ETB : Char;
  ETX : Char;
  FF : Char;
  FS : Char;
  GS : Char;
  HT : Char;
  LF : Char;
  NAK : Char;
  NL : Char;
  NP : Char;
  NUL : Char;
  RS : Char;
  SI : Char;
  SO : Char;
  SOH : Char;
  SP : Char;
  SUB : Char;
  SYN : Char;
  SYX : Char;
  US : Char;
  VT : Char;
  __! : 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;
  chr : Nat->?Char;
  max : Nat*Nat->Nat;
  min : Nat*Nat->Nat;
  ord : Char->Nat;
  pre : Nat->?Nat;
  suc : Nat->Nat;
  suc : Nat->Pos
preds
  __<=__ : Nat*Nat;
  __<__ : Nat*Nat;
  __>=__ : Nat*Nat;
  __>__ : Nat*Nat;
  even : Nat;
  isDigit : Char;
  isLetter : Char;
  isPrintable : Char;
  odd : Nat

end

spec FiniteMap %% [...] %%  =
sorts
  Pos < Nat;
  Pos;
  S;
  T;
  Entry[S,T];
  FinSet[S];
  FinSet[T];
  FiniteMap[S,T]
ops
  #__ : FinSet[T]->Nat;
  #__ : FinSet[S]->Nat;
  +__ : Nat->Nat;
  0 : Nat;
  1 : Pos;
  1 : Nat;
  2 : Nat;
  3 : Nat;
  4 : Nat;
  5 : Nat;
  6 : Nat;
  7 : Nat;
  8 : Nat;
  9 : Nat;
  [] : FiniteMap[S,T];
  [__/__] : T*S->Entry[S,T];
  __! : Nat->Nat;
  __*__ : Pos*Pos->Pos;
  __*__ : Nat*Nat->Nat;
  __+__ : T*FinSet[T]->FinSet[T];
  __+__ : FinSet[T]*T->FinSet[T];
  __+__ : Pos*Nat->Pos;
  __+__ : Nat*Pos->Pos;
  __+__ : Nat*Nat->Nat;
  __+__ : FinSet[S]*S->FinSet[S];
  __+__ : S*FinSet[S]->FinSet[S];
  __+__ : FiniteMap[S,T]*Entry[S,T]->FiniteMap[S,T];
  __-?__ : Nat*Nat->?Nat;
  __-__ : FinSet[T]*T->FinSet[T];
  __-__ : FinSet[T]*FinSet[T]->FinSet[T];
  __-__ : FinSet[S]*FinSet[S]->FinSet[S];
  __-__ : FinSet[S]*S->FinSet[S];
  __-__ : FiniteMap[S,T]*T->FiniteMap[S,T];
  __-__ : FiniteMap[S,T]*S->FiniteMap[S,T];
  __-__ : FiniteMap[S,T]*Entry[S,T]->FiniteMap[S,T];
  __/?__ : Nat*Nat->?Nat;
  __@@__ : Nat*Nat->Nat;
  __[__/__] : FiniteMap[S,T]*T*S->FiniteMap[S,T];
  __^__ : Nat*Nat->Nat;
  __div__ : Nat*Nat->?Nat;
  __intersection__ : FinSet[T]*FinSet[T]->FinSet[T];
  __intersection__ : FinSet[S]*FinSet[S]->FinSet[S];
  __mod__ : Nat*Nat->?Nat;
  __quot__ : Nat*Nat->?Nat;
  __rem__ : Nat*Nat->?Nat;
  __symmDiff__ : FinSet[T]*FinSet[T]->FinSet[T];
  __symmDiff__ : FinSet[S]*FinSet[S]->FinSet[S];
  __union__ : FinSet[T]*FinSet[T]->FinSet[T];
  __union__ : FinSet[S]*FinSet[S]->FinSet[S];
  __union__ : FiniteMap[S,T]*FiniteMap[S,T]->?FiniteMap[S,T];
  abs : Nat->Nat;
  dom : FiniteMap[S,T]->FinSet[S];
  eval : S*FiniteMap[S,T]->?T;
  max : Nat*Nat->Nat;
  min : Nat*Nat->Nat;
  pre : Nat->?Nat;
  range : FiniteMap[S,T]->FinSet[T];
  source : Entry[S,T]->S;
  suc : Nat->Pos;
  suc : Nat->Nat;
  target : Entry[S,T]->T;
  {__} : T->FinSet[T];
  {__} : S->FinSet[S];
  {} : FinSet[T];
  {} : FinSet[S]
preds
  __::__->__ : FiniteMap[S,T]*FinSet[S]*FinSet[T];
  __<=__ : Nat*Nat;
  __<__ : Nat*Nat;
  __>=__ : Nat*Nat;
  __>__ : Nat*Nat;
  __eps__ : T*FinSet[T];
  __eps__ : S*FinSet[S];
  __eps__ : Entry[S,T]*FiniteMap[S,T];
  __isSubsetOf__ : FinSet[T]*FinSet[T];
  __isSubsetOf__ : FinSet[S]*FinSet[S];
  even : Nat;
  isEmpty : FiniteMap[S,T];
  isNonEmpty : FinSet[T];
  isNonEmpty : FinSet[S];
  odd : Nat

end

spec FinitePowerSet %% [...] %%  =
sorts
  Elem[X] < Elem;
  Pos < Nat;
  Pos;
  Elem[X];
  FinPS[X];
  FinPS[X] < FinSet[Elem]
ops
  #__ : FinPS[X]->Nat;
  #__ : FinSet[Elem]->Nat;
  +__ : Nat->Nat;
  0 : Nat;
  1 : Pos;
  1 : Nat;
  2 : Nat;
  3 : Nat;
  4 : Nat;
  5 : Nat;
  6 : Nat;
  7 : Nat;
  8 : Nat;
  9 : Nat;
  X : FinPS[X];
  X : FinSet[Elem];
  __! : Nat->Nat;
  __*__ : Pos*Pos->Pos;
  __*__ : Nat*Nat->Nat;
  __+__ : Elem[X]*FinPS[X]->FinPS[X];
  __+__ : FinPS[X]*Elem[X]->FinPS[X];
  __+__ : Elem*FinSet[Elem]->FinSet[Elem];
  __+__ : FinSet[Elem]*Elem->FinSet[Elem];
  __+__ : Pos*Nat->Pos;
  __+__ : Nat*Pos->Pos;
  __+__ : Nat*Nat->Nat;
  __-?__ : Nat*Nat->?Nat;
  __-__ : FinPS[X]*Elem[X]->FinPS[X];
  __-__ : FinPS[X]*FinPS[X]->FinPS[X];
  __-__ : FinSet[Elem]*Elem->FinSet[Elem];
  __-__ : FinSet[Elem]*FinSet[Elem]->FinSet[Elem];
  __/?__ : Nat*Nat->?Nat;
  __@@__ : Nat*Nat->Nat;
  __^__ : Nat*Nat->Nat;
  __div__ : Nat*Nat->?Nat;
  __intersection__ : FinPS[X]*FinPS[X]->FinPS[X];
  __intersection__ : FinSet[Elem]*FinSet[Elem]->FinSet[Elem];
  __mod__ : Nat*Nat->?Nat;
  __quot__ : Nat*Nat->?Nat;
  __rem__ : Nat*Nat->?Nat;
  __symmDiff__ : FinPS[X]*FinPS[X]->FinPS[X];
  __symmDiff__ : FinSet[Elem]*FinSet[Elem]->FinSet[Elem];
  __union__ : FinPS[X]*FinPS[X]->FinPS[X];
  __union__ : FinSet[Elem]*FinSet[Elem]->FinSet[Elem];
  abs : Nat->Nat;
  max : Nat*Nat->Nat;
  min : Nat*Nat->Nat;
  pre : Nat->?Nat;
  suc : Nat->Pos;
  suc : Nat->Nat;
  {__} : Elem[X]->FinPS[X];
  {__} : Elem->FinSet[Elem];
  {} : FinPS[X];
  {} : FinSet[Elem]
preds
  __<=__ : Nat*Nat;
  __<__ : Nat*Nat;
  __>=__ : Nat*Nat;
  __>__ : Nat*Nat;
  __eps__ : Elem[X]*FinPS[X];
  __eps__ : Elem*FinSet[Elem];
  __isSubsetOf__ : FinPS[X]*FinPS[X];
  __isSubsetOf__ : FinSet[Elem]*FinSet[Elem];
  even : Nat;
  isNonEmpty : FinSet[Elem];
  odd : Nat

end

spec FiniteSet %% [...] %%  =
sorts
  Elem;
  Pos < Nat;
  Pos;
  FinSet[Elem]
ops
  #__ : FinSet[Elem]->Nat;
  +__ : Nat->Nat;
  0 : Nat;
  1 : Pos;
  1 : Nat;
  2 : Nat;
  3 : Nat;
  4 : Nat;
  5 : Nat;
  6 : Nat;
  7 : Nat;
  8 : Nat;
  9 : Nat;
  __! : Nat->Nat;
  __*__ : Pos*Pos->Pos;
  __*__ : Nat*Nat->Nat;
  __+__ : Pos*Nat->Pos;
  __+__ : Nat*Pos->Pos;
  __+__ : Nat*Nat->Nat;
  __+__ : FinSet[Elem]*Elem->FinSet[Elem];
  __+__ : Elem*FinSet[Elem]->FinSet[Elem];
  __-?__ : Nat*Nat->?Nat;
  __-__ : FinSet[Elem]*FinSet[Elem]->FinSet[Elem];
  __-__ : FinSet[Elem]*Elem->FinSet[Elem];
  __/?__ : Nat*Nat->?Nat;
  __@@__ : Nat*Nat->Nat;
  __^__ : Nat*Nat->Nat;
  __div__ : Nat*Nat->?Nat;
  __intersection__ : FinSet[Elem]*FinSet[Elem]->FinSet[Elem];
  __mod__ : Nat*Nat->?Nat;
  __quot__ : Nat*Nat->?Nat;
  __rem__ : Nat*Nat->?Nat;
  __symmDiff__ : FinSet[Elem]*FinSet[Elem]->FinSet[Elem];
  __union__ : FinSet[Elem]*FinSet[Elem]->FinSet[Elem];
  abs : Nat->Nat;
  max : Nat*Nat->Nat;
  min : Nat*Nat->Nat;
  pre : Nat->?Nat;
  suc : Nat->Pos;
  suc : Nat->Nat;
  {__} : Elem->FinSet[Elem];
  {} : FinSet[Elem]
preds
  __<=__ : Nat*Nat;
  __<__ : Nat*Nat;
  __>=__ : Nat*Nat;
  __>__ : Nat*Nat;
  __eps__ : Elem*FinSet[Elem];
  __isSubsetOf__ : FinSet[Elem]*FinSet[Elem];
  even : Nat;
  isNonEmpty : FinSet[Elem];
  odd : Nat

end

spec GenerateBag %% [...] %%  =
sorts
  Elem;
  Bag[Elem]
ops
  __union__ : Bag[Elem]*Bag[Elem]->Bag[Elem];
  {__} : Elem->Bag[Elem];
  {} : Bag[Elem]

end

spec GenerateFiniteMap %% [...] %%  =
sorts
  S;
  T;
  FiniteMap[S,T]
ops
  [] : FiniteMap[S,T];
  __[__/__] : FiniteMap[S,T]*T*S->FiniteMap[S,T]

end

spec GenerateFiniteSet %% [...] %%  =
sorts
  Elem;
  FinSet[Elem]
ops
  __union__ : FinSet[Elem]*FinSet[Elem]->FinSet[Elem];
  {__} : Elem->FinSet[Elem];
  {} : FinSet[Elem]

end

spec GenerateList %% [...] %%  =
sorts
  Elem;
  List[Elem]
ops
  [] : List[Elem];
  __::__ : Elem*List[Elem]->List[Elem];
  first : List[Elem]->?Elem;
  rest : List[Elem]->?List[Elem]

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 List %% [...] %%  =
sorts
  Elem;
  Pos < Nat;
  Pos;
  List[Elem]
ops
  #__ : List[Elem]->Nat;
  +__ : Nat->Nat;
  0 : Nat;
  1 : Pos;
  1 : Nat;
  2 : Nat;
  3 : Nat;
  4 : Nat;
  5 : Nat;
  6 : Nat;
  7 : Nat;
  8 : Nat;
  9 : Nat;
  [] : List[Elem];
  __! : Nat->Nat;
  __!__ : List[Elem]*Nat->?Elem;
  __*__ : Pos*Pos->Pos;
  __*__ : Nat*Nat->Nat;
  __++__ : List[Elem]*List[Elem]->List[Elem];
  __+__ : Pos*Nat->Pos;
  __+__ : Nat*Pos->Pos;
  __+__ : Nat*Nat->Nat;
  __+__ : List[Elem]*Elem->List[Elem];
  __-?__ : Nat*Nat->?Nat;
  __/?__ : Nat*Nat->?Nat;
  __::__ : Elem*List[Elem]->List[Elem];
  __@@__ : 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;
  drop : Nat*List[Elem]->?List[Elem];
  first : List[Elem]->?Elem;
  front : List[Elem]->?List[Elem];
  last : List[Elem]->?Elem;
  max : Nat*Nat->Nat;
  min : Nat*Nat->Nat;
  pre : Nat->?Nat;
  rest : List[Elem]->?List[Elem];
  reverse : List[Elem]->List[Elem];
  suc : Nat->Pos;
  suc : Nat->Nat;
  take : Nat*List[Elem]->?List[Elem]
preds
  __<=__ : Nat*Nat;
  __<__ : Nat*Nat;
  __>=__ : Nat*Nat;
  __>__ : Nat*Nat;
  __eps__ : Elem*List[Elem];
  even : Nat;
  isEmpty : List[Elem];
  odd : Nat

end

spec Monoid =
sort
  Elem
ops
  __*__ : Elem*Elem->Elem;
  e : Elem

end

%[ view Monoid_in_List =
sorts 
Elem |-> List[Elem]
ops 
__*__ |-> __++__:Elem*Elem->Elem, e |-> []:Elem
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 Pair %% [...] %%  =
sorts
  S;
  T;
  Pair[S,T]
ops
  first : Pair[S,T]->S;
  pair : S*T->Pair[S,T];
  second : Pair[S,T]->T

end

spec PartialOrder =
sort
  Elem
pred
  __<=__ : Elem*Elem

end

%[ view PartialOrder_in_Bag =
sorts 
Elem |-> Bag[Elem]
preds 
__<=__ |-> __isSubsetOf__:Elem*Elem
end ]%

%[ view PartialOrder_in_FiniteSet =
sorts 
Elem |-> FinSet[Elem]
preds 
__<=__ |-> __isSubsetOf__:Elem*Elem
end ]%

spec String =
sorts
  Char;
  Pos < Nat;
  Pos;
  String
ops
  #__ : String->Nat;
  ' ' : Char;
  '!' : Char;
  '#' : Char;
  '$' : Char;
  '%' : Char;
  '&' : Char;
  '(' : Char;
  ')' : Char;
  '*' : Char;
  '+' : Char;
  ',' : Char;
  '-' : Char;
  '.' : Char;
  '/' : Char;
  '0' : Char;
  '1' : Char;
  '2' : Char;
  '3' : Char;
  '4' : Char;
  '5' : Char;
  '6' : Char;
  '7' : Char;
  '8' : Char;
  '9' : Char;
  ':' : Char;
  ';' : Char;
  '<' : Char;
  '=' : Char;
  '>' : Char;
  '?' : Char;
  '@' : Char;
  'A' : Char;
  'B' : Char;
  'C' : Char;
  'D' : Char;
  'E' : Char;
  'F' : Char;
  'G' : Char;
  'H' : Char;
  'I' : Char;
  'J' : Char;
  'K' : Char;
  'L' : Char;
  'M' : Char;
  'N' : Char;
  'O' : Char;
  'P' : Char;
  'Q' : Char;
  'R' : Char;
  'S' : Char;
  'T' : Char;
  'U' : Char;
  'V' : Char;
  'W' : Char;
  'X' : Char;
  'Y' : Char;
  'Z' : Char;
  '[' : Char;
  '\"' : Char;
  '\'' : Char;
  '\000' : Char;
  '\001' : Char;
  '\002' : Char;
  '\003' : Char;
  '\004' : Char;
  '\005' : Char;
  '\006' : Char;
  '\007' : Char;
  '\008' : Char;
  '\009' : Char;
  '\010' : Char;
  '\011' : Char;
  '\012' : Char;
  '\013' : Char;
  '\014' : Char;
  '\015' : Char;
  '\016' : Char;
  '\017' : Char;
  '\018' : Char;
  '\019' : Char;
  '\020' : Char;
  '\021' : Char;
  '\022' : Char;
  '\023' : Char;
  '\024' : Char;
  '\025' : Char;
  '\026' : Char;
  '\027' : Char;
  '\028' : Char;
  '\029' : Char;
  '\030' : Char;
  '\031' : Char;
  '\032' : Char;
  '\033' : Char;
  '\034' : Char;
  '\035' : Char;
  '\036' : Char;
  '\037' : Char;
  '\038' : Char;
  '\039' : Char;
  '\040' : Char;
  '\041' : Char;
  '\042' : Char;
  '\043' : Char;
  '\044' : Char;
  '\045' : Char;
  '\046' : Char;
  '\047' : Char;
  '\048' : Char;
  '\049' : Char;
  '\050' : Char;
  '\051' : Char;
  '\052' : Char;
  '\053' : Char;
  '\054' : Char;
  '\055' : Char;
  '\056' : Char;
  '\057' : Char;
  '\058' : Char;
  '\059' : Char;
  '\060' : Char;
  '\061' : Char;
  '\062' : Char;
  '\063' : Char;
  '\064' : Char;
  '\065' : Char;
  '\066' : Char;
  '\067' : Char;
  '\068' : Char;
  '\069' : Char;
  '\070' : Char;
  '\071' : Char;
  '\072' : Char;
  '\073' : Char;
  '\074' : Char;
  '\075' : Char;
  '\076' : Char;
  '\077' : Char;
  '\078' : Char;
  '\079' : Char;
  '\080' : Char;
  '\081' : Char;
  '\082' : Char;
  '\083' : Char;
  '\084' : Char;
  '\085' : Char;
  '\086' : Char;
  '\087' : Char;
  '\088' : Char;
  '\089' : Char;
  '\090' : Char;
  '\091' : Char;
  '\092' : Char;
  '\093' : Char;
  '\094' : Char;
  '\095' : Char;
  '\096' : Char;
  '\097' : Char;
  '\098' : Char;
  '\099' : Char;
  '\100' : Char;
  '\101' : Char;
  '\102' : Char;
  '\103' : Char;
  '\104' : Char;
  '\105' : Char;
  '\106' : Char;
  '\107' : Char;
  '\108' : Char;
  '\109' : Char;
  '\110' : Char;
  '\111' : Char;
  '\112' : Char;
  '\113' : Char;
  '\114' : Char;
  '\115' : Char;
  '\116' : Char;
  '\117' : Char;
  '\118' : Char;
  '\119' : Char;
  '\120' : Char;
  '\121' : Char;
  '\122' : Char;
  '\123' : Char;
  '\124' : Char;
  '\125' : Char;
  '\126' : Char;
  '\127' : Char;
  '\128' : Char;
  '\129' : Char;
  '\130' : Char;
  '\131' : Char;
  '\132' : Char;
  '\133' : Char;
  '\134' : Char;
  '\135' : Char;
  '\136' : Char;
  '\137' : Char;
  '\138' : Char;
  '\139' : Char;
  '\140' : Char;
  '\141' : Char;
  '\142' : Char;
  '\143' : Char;
  '\144' : Char;
  '\145' : Char;
  '\146' : Char;
  '\147' : Char;
  '\148' : Char;
  '\149' : Char;
  '\150' : Char;
  '\151' : Char;
  '\152' : Char;
  '\153' : Char;
  '\154' : Char;
  '\155' : Char;
  '\156' : Char;
  '\157' : Char;
  '\158' : Char;
  '\159' : Char;
  '\160' : Char;
  '\161' : Char;
  '\162' : Char;
  '\163' : Char;
  '\164' : Char;
  '\165' : Char;
  '\166' : Char;
  '\167' : Char;
  '\168' : Char;
  '\169' : Char;
  '\170' : Char;
  '\171' : Char;
  '\172' : Char;
  '\173' : Char;
  '\174' : Char;
  '\175' : Char;
  '\176' : Char;
  '\177' : Char;
  '\178' : Char;
  '\179' : Char;
  '\180' : Char;
  '\181' : Char;
  '\182' : Char;
  '\183' : Char;
  '\184' : Char;
  '\185' : Char;
  '\186' : Char;
  '\187' : Char;
  '\188' : Char;
  '\189' : Char;
  '\190' : Char;
  '\191' : Char;
  '\192' : Char;
  '\193' : Char;
  '\194' : Char;
  '\195' : Char;
  '\196' : Char;
  '\197' : Char;
  '\198' : Char;
  '\199' : Char;
  '\200' : Char;
  '\201' : Char;
  '\202' : Char;
  '\203' : Char;
  '\204' : Char;
  '\205' : Char;
  '\206' : Char;
  '\207' : Char;
  '\208' : Char;
  '\209' : Char;
  '\210' : Char;
  '\211' : Char;
  '\212' : Char;
  '\213' : Char;
  '\214' : Char;
  '\215' : Char;
  '\216' : Char;
  '\217' : Char;
  '\218' : Char;
  '\219' : Char;
  '\220' : Char;
  '\221' : Char;
  '\222' : Char;
  '\223' : Char;
  '\224' : Char;
  '\225' : Char;
  '\226' : Char;
  '\227' : Char;
  '\228' : Char;
  '\229' : Char;
  '\230' : Char;
  '\231' : Char;
  '\232' : Char;
  '\233' : Char;
  '\234' : Char;
  '\235' : Char;
  '\236' : Char;
  '\237' : Char;
  '\238' : Char;
  '\239' : Char;
  '\240' : Char;
  '\241' : Char;
  '\242' : Char;
  '\243' : Char;
  '\244' : Char;
  '\245' : Char;
  '\246' : Char;
  '\247' : Char;
  '\248' : Char;
  '\249' : Char;
  '\250' : Char;
  '\251' : Char;
  '\252' : Char;
  '\253' : Char;
  '\254' : Char;
  '\255' : Char;
  '\?' : Char;
  '\\' : Char;
  '\a' : Char;
  '\b' : Char;
  '\f' : Char;
  '\n' : Char;
  '\o000' : Char;
  '\o001' : Char;
  '\o002' : Char;
  '\o003' : Char;
  '\o004' : Char;
  '\o005' : Char;
  '\o006' : Char;
  '\o007' : Char;
  '\o010' : Char;
  '\o011' : Char;
  '\o012' : Char;
  '\o013' : Char;
  '\o014' : Char;
  '\o015' : Char;
  '\o016' : Char;
  '\o017' : Char;
  '\o020' : Char;
  '\o021' : Char;
  '\o022' : Char;
  '\o023' : Char;
  '\o024' : Char;
  '\o025' : Char;
  '\o026' : Char;
  '\o027' : Char;
  '\o030' : Char;
  '\o031' : Char;
  '\o032' : Char;
  '\o033' : Char;
  '\o034' : Char;
  '\o035' : Char;
  '\o036' : Char;
  '\o037' : Char;
  '\o040' : Char;
  '\o041' : Char;
  '\o042' : Char;
  '\o043' : Char;
  '\o044' : Char;
  '\o045' : Char;
  '\o046' : Char;
  '\o047' : Char;
  '\o050' : Char;
  '\o051' : Char;
  '\o052' : Char;
  '\o053' : Char;
  '\o054' : Char;
  '\o055' : Char;
  '\o056' : Char;
  '\o057' : Char;
  '\o060' : Char;
  '\o061' : Char;
  '\o062' : Char;
  '\o063' : Char;
  '\o064' : Char;
  '\o065' : Char;
  '\o066' : Char;
  '\o067' : Char;
  '\o070' : Char;
  '\o071' : Char;
  '\o072' : Char;
  '\o073' : Char;
  '\o074' : Char;
  '\o075' : Char;
  '\o076' : Char;
  '\o077' : Char;
  '\o100' : Char;
  '\o101' : Char;
  '\o102' : Char;
  '\o103' : Char;
  '\o104' : Char;
  '\o105' : Char;
  '\o106' : Char;
  '\o107' : Char;
  '\o110' : Char;
  '\o111' : Char;
  '\o112' : Char;
  '\o113' : Char;
  '\o114' : Char;
  '\o115' : Char;
  '\o116' : Char;
  '\o117' : Char;
  '\o120' : Char;
  '\o121' : Char;
  '\o122' : Char;
  '\o123' : Char;
  '\o124' : Char;
  '\o125' : Char;
  '\o126' : Char;
  '\o127' : Char;
  '\o130' : Char;
  '\o131' : Char;
  '\o132' : Char;
  '\o133' : Char;
  '\o134' : Char;
  '\o135' : Char;
  '\o136' : Char;
  '\o137' : Char;
  '\o140' : Char;
  '\o141' : Char;
  '\o142' : Char;
  '\o143' : Char;
  '\o144' : Char;
  '\o145' : Char;
  '\o146' : Char;
  '\o147' : Char;
  '\o150' : Char;
  '\o151' : Char;
  '\o152' : Char;
  '\o153' : Char;
  '\o154' : Char;
  '\o155' : Char;
  '\o156' : Char;
  '\o157' : Char;
  '\o160' : Char;
  '\o161' : Char;
  '\o162' : Char;
  '\o163' : Char;
  '\o164' : Char;
  '\o165' : Char;
  '\o166' : Char;
  '\o167' : Char;
  '\o170' : Char;
  '\o171' : Char;
  '\o172' : Char;
  '\o173' : Char;
  '\o174' : Char;
  '\o175' : Char;
  '\o176' : Char;
  '\o177' : Char;
  '\o200' : Char;
  '\o201' : Char;
  '\o202' : Char;
  '\o203' : Char;
  '\o204' : Char;
  '\o205' : Char;
  '\o206' : Char;
  '\o207' : Char;
  '\o210' : Char;
  '\o211' : Char;
  '\o212' : Char;
  '\o213' : Char;
  '\o214' : Char;
  '\o215' : Char;
  '\o216' : Char;
  '\o217' : Char;
  '\o220' : Char;
  '\o221' : Char;
  '\o222' : Char;
  '\o223' : Char;
  '\o224' : Char;
  '\o225' : Char;
  '\o226' : Char;
  '\o227' : Char;
  '\o230' : Char;
  '\o231' : Char;
  '\o232' : Char;
  '\o233' : Char;
  '\o234' : Char;
  '\o235' : Char;
  '\o236' : Char;
  '\o237' : Char;
  '\o240' : Char;
  '\o241' : Char;
  '\o242' : Char;
  '\o243' : Char;
  '\o244' : Char;
  '\o245' : Char;
  '\o246' : Char;
  '\o247' : Char;
  '\o250' : Char;
  '\o251' : Char;
  '\o252' : Char;
  '\o253' : Char;
  '\o254' : Char;
  '\o255' : Char;
  '\o256' : Char;
  '\o257' : Char;
  '\o260' : Char;
  '\o261' : Char;
  '\o262' : Char;
  '\o263' : Char;
  '\o264' : Char;
  '\o265' : Char;
  '\o266' : Char;
  '\o267' : Char;
  '\o270' : Char;
  '\o271' : Char;
  '\o272' : Char;
  '\o273' : Char;
  '\o274' : Char;
  '\o275' : Char;
  '\o276' : Char;
  '\o277' : Char;
  '\o300' : Char;
  '\o301' : Char;
  '\o302' : Char;
  '\o303' : Char;
  '\o304' : Char;
  '\o305' : Char;
  '\o306' : Char;
  '\o307' : Char;
  '\o310' : Char;
  '\o311' : Char;
  '\o312' : Char;
  '\o313' : Char;
  '\o314' : Char;
  '\o315' : Char;
  '\o316' : Char;
  '\o317' : Char;
  '\o320' : Char;
  '\o321' : Char;
  '\o322' : Char;
  '\o323' : Char;
  '\o324' : Char;
  '\o325' : Char;
  '\o326' : Char;
  '\o327' : Char;
  '\o330' : Char;
  '\o331' : Char;
  '\o332' : Char;
  '\o333' : Char;
  '\o334' : Char;
  '\o335' : Char;
  '\o336' : Char;
  '\o337' : Char;
  '\o340' : Char;
  '\o341' : Char;
  '\o342' : Char;
  '\o343' : Char;
  '\o344' : Char;
  '\o345' : Char;
  '\o346' : Char;
  '\o347' : Char;
  '\o350' : Char;
  '\o351' : Char;
  '\o352' : Char;
  '\o353' : Char;
  '\o354' : Char;
  '\o355' : Char;
  '\o356' : Char;
  '\o357' : Char;
  '\o360' : Char;
  '\o361' : Char;
  '\o362' : Char;
  '\o363' : Char;
  '\o364' : Char;
  '\o365' : Char;
  '\o366' : Char;
  '\o367' : Char;
  '\o370' : Char;
  '\o371' : Char;
  '\o372' : Char;
  '\o373' : Char;
  '\o374' : Char;
  '\o375' : Char;
  '\o376' : Char;
  '\o377' : Char;
  '\r' : Char;
  '\t' : Char;
  '\v' : Char;
  '\x00' : Char;
  '\x01' : Char;
  '\x02' : Char;
  '\x03' : Char;
  '\x04' : Char;
  '\x05' : Char;
  '\x06' : Char;
  '\x07' : Char;
  '\x08' : Char;
  '\x09' : Char;
  '\x0A' : Char;
  '\x0B' : Char;
  '\x0C' : Char;
  '\x0D' : Char;
  '\x0E' : Char;
  '\x0F' : Char;
  '\x10' : Char;
  '\x11' : Char;
  '\x12' : Char;
  '\x13' : Char;
  '\x14' : Char;
  '\x15' : Char;
  '\x16' : Char;
  '\x17' : Char;
  '\x18' : Char;
  '\x19' : Char;
  '\x1A' : Char;
  '\x1B' : Char;
  '\x1C' : Char;
  '\x1D' : Char;
  '\x1E' : Char;
  '\x1F' : Char;
  '\x20' : Char;
  '\x21' : Char;
  '\x22' : Char;
  '\x23' : Char;
  '\x24' : Char;
  '\x25' : Char;
  '\x26' : Char;
  '\x27' : Char;
  '\x28' : Char;
  '\x29' : Char;
  '\x2A' : Char;
  '\x2B' : Char;
  '\x2C' : Char;
  '\x2D' : Char;
  '\x2E' : Char;
  '\x2F' : Char;
  '\x30' : Char;
  '\x31' : Char;
  '\x32' : Char;
  '\x33' : Char;
  '\x34' : Char;
  '\x35' : Char;
  '\x36' : Char;
  '\x37' : Char;
  '\x38' : Char;
  '\x39' : Char;
  '\x3A' : Char;
  '\x3B' : Char;
  '\x3C' : Char;
  '\x3D' : Char;
  '\x3E' : Char;
  '\x3F' : Char;
  '\x40' : Char;
  '\x41' : Char;
  '\x42' : Char;
  '\x43' : Char;
  '\x44' : Char;
  '\x45' : Char;
  '\x46' : Char;
  '\x47' : Char;
  '\x48' : Char;
  '\x49' : Char;
  '\x4A' : Char;
  '\x4B' : Char;
  '\x4C' : Char;
  '\x4D' : Char;
  '\x4E' : Char;
  '\x4F' : Char;
  '\x50' : Char;
  '\x51' : Char;
  '\x52' : Char;
  '\x53' : Char;
  '\x54' : Char;
  '\x55' : Char;
  '\x56' : Char;
  '\x57' : Char;
  '\x58' : Char;
  '\x59' : Char;
  '\x5A' : Char;
  '\x5B' : Char;
  '\x5C' : Char;
  '\x5D' : Char;
  '\x5E' : Char;
  '\x5F' : Char;
  '\x60' : Char;
  '\x61' : Char;
  '\x62' : Char;
  '\x63' : Char;
  '\x64' : Char;
  '\x65' : Char;
  '\x66' : Char;
  '\x67' : Char;
  '\x68' : Char;
  '\x69' : Char;
  '\x6A' : Char;
  '\x6B' : Char;
  '\x6C' : Char;
  '\x6D' : Char;
  '\x6E' : Char;
  '\x6F' : Char;
  '\x70' : Char;
  '\x71' : Char;
  '\x72' : Char;
  '\x73' : Char;
  '\x74' : Char;
  '\x75' : Char;
  '\x76' : Char;
  '\x77' : Char;
  '\x78' : Char;
  '\x79' : Char;
  '\x7A' : Char;
  '\x7B' : Char;
  '\x7C' : Char;
  '\x7D' : Char;
  '\x7E' : Char;
  '\x7F' : Char;
  '\x80' : Char;
  '\x81' : Char;
  '\x82' : Char;
  '\x83' : Char;
  '\x84' : Char;
  '\x85' : Char;
  '\x86' : Char;
  '\x87' : Char;
  '\x88' : Char;
  '\x89' : Char;
  '\x8A' : Char;
  '\x8B' : Char;
  '\x8C' : Char;
  '\x8D' : Char;
  '\x8E' : Char;
  '\x8F' : Char;
  '\x90' : Char;
  '\x91' : Char;
  '\x92' : Char;
  '\x93' : Char;
  '\x94' : Char;
  '\x95' : Char;
  '\x96' : Char;
  '\x97' : Char;
  '\x98' : Char;
  '\x99' : Char;
  '\x9A' : Char;
  '\x9B' : Char;
  '\x9C' : Char;
  '\x9D' : Char;
  '\x9E' : Char;
  '\x9F' : Char;
  '\xA0' : Char;
  '\xA1' : Char;
  '\xA2' : Char;
  '\xA3' : Char;
  '\xA4' : Char;
  '\xA5' : Char;
  '\xA6' : Char;
  '\xA7' : Char;
  '\xA8' : Char;
  '\xA9' : Char;
  '\xAA' : Char;
  '\xAB' : Char;
  '\xAC' : Char;
  '\xAD' : Char;
  '\xAE' : Char;
  '\xAF' : Char;
  '\xB0' : Char;
  '\xB1' : Char;
  '\xB2' : Char;
  '\xB3' : Char;
  '\xB4' : Char;
  '\xB5' : Char;
  '\xB6' : Char;
  '\xB7' : Char;
  '\xB8' : Char;
  '\xB9' : Char;
  '\xBA' : Char;
  '\xBB' : Char;
  '\xBC' : Char;
  '\xBD' : Char;
  '\xBE' : Char;
  '\xBF' : Char;
  '\xC0' : Char;
  '\xC1' : Char;
  '\xC2' : Char;
  '\xC3' : Char;
  '\xC4' : Char;
  '\xC5' : Char;
  '\xC6' : Char;
  '\xC7' : Char;
  '\xC8' : Char;
  '\xC9' : Char;
  '\xCA' : Char;
  '\xCB' : Char;
  '\xCC' : Char;
  '\xCD' : Char;
  '\xCE' : Char;
  '\xCF' : Char;
  '\xD0' : Char;
  '\xD1' : Char;
  '\xD2' : Char;
  '\xD3' : Char;
  '\xD4' : Char;
  '\xD5' : Char;
  '\xD6' : Char;
  '\xD7' : Char;
  '\xD8' : Char;
  '\xD9' : Char;
  '\xDA' : Char;
  '\xDB' : Char;
  '\xDC' : Char;
  '\xDD' : Char;
  '\xDE' : Char;
  '\xDF' : Char;
  '\xE0' : Char;
  '\xE1' : Char;
  '\xE2' : Char;
  '\xE3' : Char;
  '\xE4' : Char;
  '\xE5' : Char;
  '\xE6' : Char;
  '\xE7' : Char;
  '\xE8' : Char;
  '\xE9' : Char;
  '\xEA' : Char;
  '\xEB' : Char;
  '\xEC' : Char;
  '\xED' : Char;
  '\xEE' : Char;
  '\xEF' : Char;
  '\xF0' : Char;
  '\xF1' : Char;
  '\xF2' : Char;
  '\xF3' : Char;
  '\xF4' : Char;
  '\xF5' : Char;
  '\xF6' : Char;
  '\xF7' : Char;
  '\xF8' : Char;
  '\xF9' : Char;
  '\xFA' : Char;
  '\xFB' : Char;
  '\xFC' : Char;
  '\xFD' : Char;
  '\xFE' : Char;
  '\xFF' : Char;
  ']' : Char;
  '^' : Char;
  '_' : Char;
  '`' : Char;
  'a' : Char;
  'b' : Char;
  'c' : Char;
  'd' : Char;
  'e' : Char;
  'f' : Char;
  'g' : Char;
  'h' : Char;
  'i' : Char;
  'j' : Char;
  'k' : Char;
  'l' : Char;
  'm' : Char;
  'n' : Char;
  'o' : Char;
  'p' : Char;
  'q' : Char;
  'r' : Char;
  's' : Char;
  't' : Char;
  'u' : Char;
  'v' : Char;
  'w' : Char;
  'x' : Char;
  'y' : Char;
  'z' : Char;
  '{' : Char;
  '|' : Char;
  '}' : Char;
  '~' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  '' : Char;
  +__ : Nat->Nat;
  0 : Nat;
  1 : Nat;
  1 : Pos;
  2 : Nat;
  3 : Nat;
  4 : Nat;
  5 : Nat;
  6 : Nat;
  7 : Nat;
  8 : Nat;
  9 : Nat;
  ACK : Char;
  BEL : Char;
  BS : Char;
  CAN : Char;
  CR : Char;
  DC1 : Char;
  DC2 : Char;
  DC3 : Char;
  DC4 : Char;
  DEL : Char;
  DLE : Char;
  EM : Char;
  ENQ : Char;
  EOT : Char;
  ESC : Char;
  ETB : Char;
  ETX : Char;
  FF : Char;
  FS : Char;
  GS : Char;
  HT : Char;
  LF : Char;
  NAK : Char;
  NL : Char;
  NP : Char;
  NUL : Char;
  RS : Char;
  SI : Char;
  SO : Char;
  SOH : Char;
  SP : Char;
  SUB : Char;
  SYN : Char;
  SYX : Char;
  US : Char;
  VT : Char;
  [] : String;
  __! : Nat->Nat;
  __!__ : String*Nat->?Char;
  __*__ : Nat*Nat->Nat;
  __*__ : Pos*Pos->Pos;
  __++__ : String*String->String;
  __+__ : Nat*Nat->Nat;
  __+__ : Nat*Pos->Pos;
  __+__ : Pos*Nat->Pos;
  __+__ : String*Char->String;
  __-?__ : Nat*Nat->?Nat;
  __/?__ : Nat*Nat->?Nat;
  __::__ : Char*String->String;
  __@@__ : 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;
  chr : Nat->?Char;
  drop : Nat*String->?String;
  first : String->?Char;
  front : String->?String;
  last : String->?Char;
  max : Nat*Nat->Nat;
  min : Nat*Nat->Nat;
  ord : Char->Nat;
  pre : Nat->?Nat;
  rest : String->?String;
  reverse : String->String;
  suc : Nat->Nat;
  suc : Nat->Pos;
  take : Nat*String->?String
preds
  __<=__ : Nat*Nat;
  __<__ : Nat*Nat;
  __>=__ : Nat*Nat;
  __>__ : Nat*Nat;
  __eps__ : Char*String;
  even : Nat;
  isDigit : Char;
  isEmpty : String;
  isLetter : Char;
  isPrintable : Char;
  odd : Nat

end
