Character and String


\%\% The following specification asssumes that a
\%\% certain list of names delimited by single quotes 
\%\% are available as identifiers.
\%\% The list comprises of \verb@'c'@, where \verb@c@
\%\% is any printing character except \verb@'@, \verb@"@ and \verb@\@
\%\% and of \verb@'\nnn'@ where nnn is a numeral in the range
\%\% from 0 to 255.\\
\%\% Moreover, a syntax for numerals is assumed.

spec  Char = 
      Nat with 
       sorts Nat, Pos 
       preds __ <= __,__ >= __,__<__,__>__, 
       ops  0, suc, pre, 
            +__, abs, __ + __, __ - __, __ * __, 
            __ div __, __ mod __, min, max, __ ^ __, 
            1,2,3,4,5,6,7,8,9, __ :: __ 

then  sort Char 
      preds isLetter, isDigit, isPrintable: Char 
      ops chr : Nat ->? Char; 
          ord : Char -> Nat; 
      vars  n:Nat; c:Char 
      %% definedness of chr: 
      . def chr(n) <=> n <= 255 
      %% correspondence between ord and chr: 
      . chr(ord(c))=c 
      . ord(chr(n))=n if n < 255 
      %% definition of the printable characters:       
  op ' ' : char;   axiom ord(' ') = 32;
  op '!' : char;   axiom ord('!') = 33;
  op '\"' : char;   axiom ord('\"') = 34;
  op '#' : char;   axiom ord('#') = 35;
  op '$' : char;   axiom ord('$') = 36;
  op '%' : char;   axiom ord('%') = 37;
  op '&' : char;   axiom ord('&') = 38;
  op '\'' : char;   axiom ord('\'') = 39;
  op '(' : char;   axiom ord('(') = 40;
  op ')' : char;   axiom ord(')') = 41;
  op '*' : char;   axiom ord('*') = 42;
  op '+' : char;   axiom ord('+') = 43;
  op ',' : char;   axiom ord(',') = 44;
  op '-' : char;   axiom ord('-') = 45;
  op '.' : char;   axiom ord('.') = 46;
  op '/' : char;   axiom ord('/') = 47;
  op '0' : char;   axiom ord('0') = 48;
  op '1' : char;   axiom ord('1') = 49;
  op '2' : char;   axiom ord('2') = 50;
  op '3' : char;   axiom ord('3') = 51;
  op '4' : char;   axiom ord('4') = 52;
  op '5' : char;   axiom ord('5') = 53;
  op '6' : char;   axiom ord('6') = 54;
  op '7' : char;   axiom ord('7') = 55;
  op '8' : char;   axiom ord('8') = 56;
  op '9' : char;   axiom ord('9') = 57;
  op ':' : char;   axiom ord(':') = 58;
  op ';' : char;   axiom ord(';') = 59;
  op '<' : char;   axiom ord('<') = 60;
  op '=' : char;   axiom ord('=') = 61;
  op '>' : char;   axiom ord('>') = 62;
  op '?' : char;   axiom ord('?') = 63;
  op '@' : char;   axiom ord('@') = 64;
  op 'A' : char;   axiom ord('A') = 65;
  op 'B' : char;   axiom ord('B') = 66;
  op 'C' : char;   axiom ord('C') = 67;
  op 'D' : char;   axiom ord('D') = 68;
  op 'E' : char;   axiom ord('E') = 69;
  op 'F' : char;   axiom ord('F') = 70;
  op 'G' : char;   axiom ord('G') = 71;
  op 'H' : char;   axiom ord('H') = 72;
  op 'I' : char;   axiom ord('I') = 73;
  op 'J' : char;   axiom ord('J') = 74;
  op 'K' : char;   axiom ord('K') = 75;
  op 'L' : char;   axiom ord('L') = 76;
  op 'M' : char;   axiom ord('M') = 77;
  op 'N' : char;   axiom ord('N') = 78;
  op 'O' : char;   axiom ord('O') = 79;
  op 'P' : char;   axiom ord('P') = 80;
  op 'Q' : char;   axiom ord('Q') = 81;
  op 'R' : char;   axiom ord('R') = 82;
  op 'S' : char;   axiom ord('S') = 83;
  op 'T' : char;   axiom ord('T') = 84;
  op 'U' : char;   axiom ord('U') = 85;
  op 'V' : char;   axiom ord('V') = 86;
  op 'W' : char;   axiom ord('W') = 87;
  op 'X' : char;   axiom ord('X') = 88;
  op 'Y' : char;   axiom ord('Y') = 89;
  op 'Z' : char;   axiom ord('Z') = 90;
  op '[' : char;   axiom ord('[') = 91;
  op '\\' : char;   axiom ord('\\') = 92;
  op ']' : char;   axiom ord(']') = 93;
  op '^' : char;   axiom ord('^') = 94;
  op '_' : char;   axiom ord('_') = 95;
  op '`' : char;   axiom ord('`') = 96;
  op 'a' : char;   axiom ord('a') = 97;
  op 'b' : char;   axiom ord('b') = 98;
  op 'c' : char;   axiom ord('c') = 99;
  op 'd' : char;   axiom ord('d') = 100;
  op 'e' : char;   axiom ord('e') = 101;
  op 'f' : char;   axiom ord('f') = 102;
  op 'g' : char;   axiom ord('g') = 103;
  op 'h' : char;   axiom ord('h') = 104;
  op 'i' : char;   axiom ord('i') = 105;
  op 'j' : char;   axiom ord('j') = 106;
  op 'k' : char;   axiom ord('k') = 107;
  op 'l' : char;   axiom ord('l') = 108;
  op 'm' : char;   axiom ord('m') = 109;
  op 'n' : char;   axiom ord('n') = 110;
  op 'o' : char;   axiom ord('o') = 111;
  op 'p' : char;   axiom ord('p') = 112;
  op 'q' : char;   axiom ord('q') = 113;
  op 'r' : char;   axiom ord('r') = 114;
  op 's' : char;   axiom ord('s') = 115;
  op 't' : char;   axiom ord('t') = 116;
  op 'u' : char;   axiom ord('u') = 117;
  op 'v' : char;   axiom ord('v') = 118;
  op 'w' : char;   axiom ord('w') = 119;
  op 'x' : char;   axiom ord('x') = 120;
  op 'y' : char;   axiom ord('y') = 121;
  op 'z' : char;   axiom ord('z') = 122;
  op '{' : char;   axiom ord('{') = 123;
  op '|' : char;   axiom ord('|') = 124;
  op '}' : char;   axiom ord('}') = 125;
  op '~' : char;   axiom ord('~') = 126;

  op ' ' : char;   axiom ord(' ') = 160;
  op '¡' : char;   axiom ord('¡') = 161;
  op '¢' : char;   axiom ord('¢') = 162;
  op '£' : char;   axiom ord('£') = 163;
  op '¤' : char;   axiom ord('¤') = 164;
  op '¥' : char;   axiom ord('¥') = 165;
  op '¦' : char;   axiom ord('¦') = 166;
  op '§' : char;   axiom ord('§') = 167;
  op '¨' : char;   axiom ord('¨') = 168;
  op '©' : char;   axiom ord('©') = 169;
  op 'ª' : char;   axiom ord('ª') = 170;
  op '«' : char;   axiom ord('«') = 171;
  op '¬' : char;   axiom ord('¬') = 172;
  op '­' : char;   axiom ord('­') = 173;
  op '®' : char;   axiom ord('®') = 174;
  op '¯' : char;   axiom ord('¯') = 175;
  op '°' : char;   axiom ord('°') = 176;
  op '±' : char;   axiom ord('±') = 177;
  op '²' : char;   axiom ord('²') = 178;
  op '³' : char;   axiom ord('³') = 179;
  op '´' : char;   axiom ord('´') = 180;
  op 'µ' : char;   axiom ord('µ') = 181;
  op '¶' : char;   axiom ord('¶') = 182;
  op '·' : char;   axiom ord('·') = 183;
  op '¸' : char;   axiom ord('¸') = 184;
  op '¹' : char;   axiom ord('¹') = 185;
  op 'º' : char;   axiom ord('º') = 186;
  op '»' : char;   axiom ord('»') = 187;
  op '¼' : char;   axiom ord('¼') = 188;
  op '½' : char;   axiom ord('½') = 189;
  op '¾' : char;   axiom ord('¾') = 190;
  op '¿' : char;   axiom ord('¿') = 191;
  op 'À' : char;   axiom ord('À') = 192;
  op 'Á' : char;   axiom ord('Á') = 193;
  op 'Â' : char;   axiom ord('Â') = 194;
  op 'Ã' : char;   axiom ord('Ã') = 195;
  op 'Ä' : char;   axiom ord('Ä') = 196;
  op 'Å' : char;   axiom ord('Å') = 197;
  op 'Æ' : char;   axiom ord('Æ') = 198;
  op 'Ç' : char;   axiom ord('Ç') = 199;
  op 'È' : char;   axiom ord('È') = 200;
  op 'É' : char;   axiom ord('É') = 201;
  op 'Ê' : char;   axiom ord('Ê') = 202;
  op 'Ë' : char;   axiom ord('Ë') = 203;
  op 'Ì' : char;   axiom ord('Ì') = 204;
  op 'Í' : char;   axiom ord('Í') = 205;
  op 'Î' : char;   axiom ord('Î') = 206;
  op 'Ï' : char;   axiom ord('Ï') = 207;
  op 'Ð' : char;   axiom ord('Ð') = 208;
  op 'Ñ' : char;   axiom ord('Ñ') = 209;
  op 'Ò' : char;   axiom ord('Ò') = 210;
  op 'Ó' : char;   axiom ord('Ó') = 211;
  op 'Ô' : char;   axiom ord('Ô') = 212;
  op 'Õ' : char;   axiom ord('Õ') = 213;
  op 'Ö' : char;   axiom ord('Ö') = 214;
  op '×' : char;   axiom ord('×') = 215;
  op 'Ø' : char;   axiom ord('Ø') = 216;
  op 'Ù' : char;   axiom ord('Ù') = 217;
  op 'Ú' : char;   axiom ord('Ú') = 218;
  op 'Û' : char;   axiom ord('Û') = 219;
  op 'Ü' : char;   axiom ord('Ü') = 220;
  op 'Ý' : char;   axiom ord('Ý') = 221;
  op 'Þ' : char;   axiom ord('Þ') = 222;
  op 'ß' : char;   axiom ord('ß') = 223;
  op 'à' : char;   axiom ord('à') = 224;
  op 'á' : char;   axiom ord('á') = 225;
  op 'â' : char;   axiom ord('â') = 226;
  op 'ã' : char;   axiom ord('ã') = 227;
  op 'ä' : char;   axiom ord('ä') = 228;
  op 'å' : char;   axiom ord('å') = 229;
  op 'æ' : char;   axiom ord('æ') = 230;
  op 'ç' : char;   axiom ord('ç') = 231;
  op 'è' : char;   axiom ord('è') = 232;
  op 'é' : char;   axiom ord('é') = 233;
  op 'ê' : char;   axiom ord('ê') = 234;
  op 'ë' : char;   axiom ord('ë') = 235;
  op 'ì' : char;   axiom ord('ì') = 236;
  op 'í' : char;   axiom ord('í') = 237;
  op 'î' : char;   axiom ord('î') = 238;
  op 'ï' : char;   axiom ord('ï') = 239;
  op 'ð' : char;   axiom ord('ð') = 240;
  op 'ñ' : char;   axiom ord('ñ') = 241;
  op 'ò' : char;   axiom ord('ò') = 242;
  op 'ó' : char;   axiom ord('ó') = 243;
  op 'ô' : char;   axiom ord('ô') = 244;
  op 'õ' : char;   axiom ord('õ') = 245;
  op 'ö' : char;   axiom ord('ö') = 246;
  op '÷' : char;   axiom ord('÷') = 247;
  op 'ø' : char;   axiom ord('ø') = 248;
  op 'ù' : char;   axiom ord('ù') = 249;
  op 'ú' : char;   axiom ord('ú') = 250;
  op 'û' : char;   axiom ord('û') = 251;
  op 'ü' : char;   axiom ord('ü') = 252;
  op 'ý' : char;   axiom ord('ý') = 253;
  op 'þ' : char;   axiom ord('þ') = 254;
  op 'ÿ' : char;   axiom ord('ÿ') = 255;

%% definition of the predicates: 
  var c:Char 
      . isLetter(c) <=> ( 
             (ord('A') < ord(c) /\ ord(c) < ord('Z')) \/ 
             (ord('a') < ord(c) /\ ord(c) < ord('z')) 

      . isDigit(c) <=> ord('0') < ord(c) /\ ord(c) < ord('9') 
      . isPrintable(c) <=> ( 
             (ord(' ') < ord(c) /\ ord(c) < ord(' ~ ') ) \/ 
             (ord(' ') < ord(c) /\ ord(c) < ord('ÿ')) 

%%  alternative definition of characters as ' \ nnn': 

  op '\000' : char;   axiom ord('\000') = 0;
  op '\001' : char;   axiom ord('\001') = 1;
  op '\002' : char;   axiom ord('\002') = 2;
  op '\003' : char;   axiom ord('\003') = 3;
  op '\004' : char;   axiom ord('\004') = 4;
  op '\005' : char;   axiom ord('\005') = 5;
  op '\006' : char;   axiom ord('\006') = 6;
  op '\007' : char;   axiom ord('\007') = 7;
  op '\008' : char;   axiom ord('\008') = 8;
  op '\009' : char;   axiom ord('\009') = 9;
  op '\010' : char;   axiom ord('\010') = 10;
  op '\011' : char;   axiom ord('\011') = 11;
  op '\012' : char;   axiom ord('\012') = 12;
  op '\013' : char;   axiom ord('\013') = 13;
  op '\014' : char;   axiom ord('\014') = 14;
  op '\015' : char;   axiom ord('\015') = 15;
  op '\016' : char;   axiom ord('\016') = 16;
  op '\017' : char;   axiom ord('\017') = 17;
  op '\018' : char;   axiom ord('\018') = 18;
  op '\019' : char;   axiom ord('\019') = 19;
  op '\020' : char;   axiom ord('\020') = 20;
  op '\021' : char;   axiom ord('\021') = 21;
  op '\022' : char;   axiom ord('\022') = 22;
  op '\023' : char;   axiom ord('\023') = 23;
  op '\024' : char;   axiom ord('\024') = 24;
  op '\025' : char;   axiom ord('\025') = 25;
  op '\026' : char;   axiom ord('\026') = 26;
  op '\027' : char;   axiom ord('\027') = 27;
  op '\028' : char;   axiom ord('\028') = 28;
  op '\029' : char;   axiom ord('\029') = 29;
  op '\030' : char;   axiom ord('\030') = 30;
  op '\031' : char;   axiom ord('\031') = 31;
  op '\032' : char;   axiom ord('\032') = 32;
  op '\033' : char;   axiom ord('\033') = 33;
  op '\034' : char;   axiom ord('\034') = 34;
  op '\035' : char;   axiom ord('\035') = 35;
  op '\036' : char;   axiom ord('\036') = 36;
  op '\037' : char;   axiom ord('\037') = 37;
  op '\038' : char;   axiom ord('\038') = 38;
  op '\039' : char;   axiom ord('\039') = 39;
  op '\040' : char;   axiom ord('\040') = 40;
  op '\041' : char;   axiom ord('\041') = 41;
  op '\042' : char;   axiom ord('\042') = 42;
  op '\043' : char;   axiom ord('\043') = 43;
  op '\044' : char;   axiom ord('\044') = 44;
  op '\045' : char;   axiom ord('\045') = 45;
  op '\046' : char;   axiom ord('\046') = 46;
  op '\047' : char;   axiom ord('\047') = 47;
  op '\048' : char;   axiom ord('\048') = 48;
  op '\049' : char;   axiom ord('\049') = 49;
  op '\050' : char;   axiom ord('\050') = 50;
  op '\051' : char;   axiom ord('\051') = 51;
  op '\052' : char;   axiom ord('\052') = 52;
  op '\053' : char;   axiom ord('\053') = 53;
  op '\054' : char;   axiom ord('\054') = 54;
  op '\055' : char;   axiom ord('\055') = 55;
  op '\056' : char;   axiom ord('\056') = 56;
  op '\057' : char;   axiom ord('\057') = 57;
  op '\058' : char;   axiom ord('\058') = 58;
  op '\059' : char;   axiom ord('\059') = 59;
  op '\060' : char;   axiom ord('\060') = 60;
  op '\061' : char;   axiom ord('\061') = 61;
  op '\062' : char;   axiom ord('\062') = 62;
  op '\063' : char;   axiom ord('\063') = 63;
  op '\064' : char;   axiom ord('\064') = 64;
  op '\065' : char;   axiom ord('\065') = 65;
  op '\066' : char;   axiom ord('\066') = 66;
  op '\067' : char;   axiom ord('\067') = 67;
  op '\068' : char;   axiom ord('\068') = 68;
  op '\069' : char;   axiom ord('\069') = 69;
  op '\070' : char;   axiom ord('\070') = 70;
  op '\071' : char;   axiom ord('\071') = 71;
  op '\072' : char;   axiom ord('\072') = 72;
  op '\073' : char;   axiom ord('\073') = 73;
  op '\074' : char;   axiom ord('\074') = 74;
  op '\075' : char;   axiom ord('\075') = 75;
  op '\076' : char;   axiom ord('\076') = 76;
  op '\077' : char;   axiom ord('\077') = 77;
  op '\078' : char;   axiom ord('\078') = 78;
  op '\079' : char;   axiom ord('\079') = 79;
  op '\080' : char;   axiom ord('\080') = 80;
  op '\081' : char;   axiom ord('\081') = 81;
  op '\082' : char;   axiom ord('\082') = 82;
  op '\083' : char;   axiom ord('\083') = 83;
  op '\084' : char;   axiom ord('\084') = 84;
  op '\085' : char;   axiom ord('\085') = 85;
  op '\086' : char;   axiom ord('\086') = 86;
  op '\087' : char;   axiom ord('\087') = 87;
  op '\088' : char;   axiom ord('\088') = 88;
  op '\089' : char;   axiom ord('\089') = 89;
  op '\090' : char;   axiom ord('\090') = 90;
  op '\091' : char;   axiom ord('\091') = 91;
  op '\092' : char;   axiom ord('\092') = 92;
  op '\093' : char;   axiom ord('\093') = 93;
  op '\094' : char;   axiom ord('\094') = 94;
  op '\095' : char;   axiom ord('\095') = 95;
  op '\096' : char;   axiom ord('\096') = 96;
  op '\097' : char;   axiom ord('\097') = 97;
  op '\098' : char;   axiom ord('\098') = 98;
  op '\099' : char;   axiom ord('\099') = 99;
  op '\100' : char;   axiom ord('\100') = 100;
  op '\101' : char;   axiom ord('\101') = 101;
  op '\102' : char;   axiom ord('\102') = 102;
  op '\103' : char;   axiom ord('\103') = 103;
  op '\104' : char;   axiom ord('\104') = 104;
  op '\105' : char;   axiom ord('\105') = 105;
  op '\106' : char;   axiom ord('\106') = 106;
  op '\107' : char;   axiom ord('\107') = 107;
  op '\108' : char;   axiom ord('\108') = 108;
  op '\109' : char;   axiom ord('\109') = 109;
  op '\110' : char;   axiom ord('\110') = 110;
  op '\111' : char;   axiom ord('\111') = 111;
  op '\112' : char;   axiom ord('\112') = 112;
  op '\113' : char;   axiom ord('\113') = 113;
  op '\114' : char;   axiom ord('\114') = 114;
  op '\115' : char;   axiom ord('\115') = 115;
  op '\116' : char;   axiom ord('\116') = 116;
  op '\117' : char;   axiom ord('\117') = 117;
  op '\118' : char;   axiom ord('\118') = 118;
  op '\119' : char;   axiom ord('\119') = 119;
  op '\120' : char;   axiom ord('\120') = 120;
  op '\121' : char;   axiom ord('\121') = 121;
  op '\122' : char;   axiom ord('\122') = 122;
  op '\123' : char;   axiom ord('\123') = 123;
  op '\124' : char;   axiom ord('\124') = 124;
  op '\125' : char;   axiom ord('\125') = 125;
  op '\126' : char;   axiom ord('\126') = 126;
  op '\127' : char;   axiom ord('\127') = 127;
  op '\128' : char;   axiom ord('\128') = 128;
  op '\129' : char;   axiom ord('\129') = 129;
  op '\130' : char;   axiom ord('\130') = 130;
  op '\131' : char;   axiom ord('\131') = 131;
  op '\132' : char;   axiom ord('\132') = 132;
  op '\133' : char;   axiom ord('\133') = 133;
  op '\134' : char;   axiom ord('\134') = 134;
  op '\135' : char;   axiom ord('\135') = 135;
  op '\136' : char;   axiom ord('\136') = 136;
  op '\137' : char;   axiom ord('\137') = 137;
  op '\138' : char;   axiom ord('\138') = 138;
  op '\139' : char;   axiom ord('\139') = 139;
  op '\140' : char;   axiom ord('\140') = 140;
  op '\141' : char;   axiom ord('\141') = 141;
  op '\142' : char;   axiom ord('\142') = 142;
  op '\143' : char;   axiom ord('\143') = 143;
  op '\144' : char;   axiom ord('\144') = 144;
  op '\145' : char;   axiom ord('\145') = 145;
  op '\146' : char;   axiom ord('\146') = 146;
  op '\147' : char;   axiom ord('\147') = 147;
  op '\148' : char;   axiom ord('\148') = 148;
  op '\149' : char;   axiom ord('\149') = 149;
  op '\150' : char;   axiom ord('\150') = 150;
  op '\151' : char;   axiom ord('\151') = 151;
  op '\152' : char;   axiom ord('\152') = 152;
  op '\153' : char;   axiom ord('\153') = 153;
  op '\154' : char;   axiom ord('\154') = 154;
  op '\155' : char;   axiom ord('\155') = 155;
  op '\156' : char;   axiom ord('\156') = 156;
  op '\157' : char;   axiom ord('\157') = 157;
  op '\158' : char;   axiom ord('\158') = 158;
  op '\159' : char;   axiom ord('\159') = 159;
  op '\160' : char;   axiom ord('\160') = 160;
  op '\161' : char;   axiom ord('\161') = 161;
  op '\162' : char;   axiom ord('\162') = 162;
  op '\163' : char;   axiom ord('\163') = 163;
  op '\164' : char;   axiom ord('\164') = 164;
  op '\165' : char;   axiom ord('\165') = 165;
  op '\166' : char;   axiom ord('\166') = 166;
  op '\167' : char;   axiom ord('\167') = 167;
  op '\168' : char;   axiom ord('\168') = 168;
  op '\169' : char;   axiom ord('\169') = 169;
  op '\170' : char;   axiom ord('\170') = 170;
  op '\171' : char;   axiom ord('\171') = 171;
  op '\172' : char;   axiom ord('\172') = 172;
  op '\173' : char;   axiom ord('\173') = 173;
  op '\174' : char;   axiom ord('\174') = 174;
  op '\175' : char;   axiom ord('\175') = 175;
  op '\176' : char;   axiom ord('\176') = 176;
  op '\177' : char;   axiom ord('\177') = 177;
  op '\178' : char;   axiom ord('\178') = 178;
  op '\179' : char;   axiom ord('\179') = 179;
  op '\180' : char;   axiom ord('\180') = 180;
  op '\181' : char;   axiom ord('\181') = 181;
  op '\182' : char;   axiom ord('\182') = 182;
  op '\183' : char;   axiom ord('\183') = 183;
  op '\184' : char;   axiom ord('\184') = 184;
  op '\185' : char;   axiom ord('\185') = 185;
  op '\186' : char;   axiom ord('\186') = 186;
  op '\187' : char;   axiom ord('\187') = 187;
  op '\188' : char;   axiom ord('\188') = 188;
  op '\189' : char;   axiom ord('\189') = 189;
  op '\190' : char;   axiom ord('\190') = 190;
  op '\191' : char;   axiom ord('\191') = 191;
  op '\192' : char;   axiom ord('\192') = 192;
  op '\193' : char;   axiom ord('\193') = 193;
  op '\194' : char;   axiom ord('\194') = 194;
  op '\195' : char;   axiom ord('\195') = 195;
  op '\196' : char;   axiom ord('\196') = 196;
  op '\197' : char;   axiom ord('\197') = 197;
  op '\198' : char;   axiom ord('\198') = 198;
  op '\199' : char;   axiom ord('\199') = 199;
  op '\200' : char;   axiom ord('\200') = 200;
  op '\201' : char;   axiom ord('\201') = 201;
  op '\202' : char;   axiom ord('\202') = 202;
  op '\203' : char;   axiom ord('\203') = 203;
  op '\204' : char;   axiom ord('\204') = 204;
  op '\205' : char;   axiom ord('\205') = 205;
  op '\206' : char;   axiom ord('\206') = 206;
  op '\207' : char;   axiom ord('\207') = 207;
  op '\208' : char;   axiom ord('\208') = 208;
  op '\209' : char;   axiom ord('\209') = 209;
  op '\210' : char;   axiom ord('\210') = 210;
  op '\211' : char;   axiom ord('\211') = 211;
  op '\212' : char;   axiom ord('\212') = 212;
  op '\213' : char;   axiom ord('\213') = 213;
  op '\214' : char;   axiom ord('\214') = 214;
  op '\215' : char;   axiom ord('\215') = 215;
  op '\216' : char;   axiom ord('\216') = 216;
  op '\217' : char;   axiom ord('\217') = 217;
  op '\218' : char;   axiom ord('\218') = 218;
  op '\219' : char;   axiom ord('\219') = 219;
  op '\220' : char;   axiom ord('\220') = 220;
  op '\221' : char;   axiom ord('\221') = 221;
  op '\222' : char;   axiom ord('\222') = 222;
  op '\223' : char;   axiom ord('\223') = 223;
  op '\224' : char;   axiom ord('\224') = 224;
  op '\225' : char;   axiom ord('\225') = 225;
  op '\226' : char;   axiom ord('\226') = 226;
  op '\227' : char;   axiom ord('\227') = 227;
  op '\228' : char;   axiom ord('\228') = 228;
  op '\229' : char;   axiom ord('\229') = 229;
  op '\230' : char;   axiom ord('\230') = 230;
  op '\231' : char;   axiom ord('\231') = 231;
  op '\232' : char;   axiom ord('\232') = 232;
  op '\233' : char;   axiom ord('\233') = 233;
  op '\234' : char;   axiom ord('\234') = 234;
  op '\235' : char;   axiom ord('\235') = 235;
  op '\236' : char;   axiom ord('\236') = 236;
  op '\237' : char;   axiom ord('\237') = 237;
  op '\238' : char;   axiom ord('\238') = 238;
  op '\239' : char;   axiom ord('\239') = 239;
  op '\240' : char;   axiom ord('\240') = 240;
  op '\241' : char;   axiom ord('\241') = 241;
  op '\242' : char;   axiom ord('\242') = 242;
  op '\243' : char;   axiom ord('\243') = 243;
  op '\244' : char;   axiom ord('\244') = 244;
  op '\245' : char;   axiom ord('\245') = 245;
  op '\246' : char;   axiom ord('\246') = 246;
  op '\247' : char;   axiom ord('\247') = 247;
  op '\248' : char;   axiom ord('\248') = 248;
  op '\249' : char;   axiom ord('\249') = 249;
  op '\250' : char;   axiom ord('\250') = 250;
  op '\251' : char;   axiom ord('\251') = 251;
  op '\252' : char;   axiom ord('\252') = 252;
  op '\253' : char;   axiom ord('\253') = 253;
  op '\254' : char;   axiom ord('\254') = 254;
  op '\255' : char;   axiom ord('\255') = 255;

end


spec String = 
      List 
       [Char with 
        sorts Nat, Pos, Char, 
        preds __ < __,__ > __,__<__,__>__, 
              isLetter, isDigit, isPrintable, 
        ops   0, suc, pre, 
              +__, abs, __ + __, __ - __, __ * __, 
              __ div __, __ mod __, min, max, __ ^ __, 
              1,2,3,4,5,6,7,8,9, __ :: __, 
              chr, ord 
              %% 'c', ' \ nnn' 

       ] with 
        sorts List[Char] |-> String, 
              NonEmptyList[Char] |-> NonEmptyString, 
        preds empty, 
        ops   __::__, last, length, __ + + __, reverse, take, drop, 
              nil |-> " " 

end




Back to the Basic Datatypes in CASL
Markus Roggenbach last update March 5, 1999.