├── README.md └── MIU.PAS /README.md: -------------------------------------------------------------------------------- 1 | # MIU 2 | MIU from GEB, probably written late 1980s 3 | # Original readme file 4 | 5 | To The Human Race 6 | 7 | MIU is a nice formal system , play with it - and try to produce "MU". 8 | Writeing "help" will help ,and writeing "quit" will quit. 9 | Rember that in the second mode , type LSP instead of an MIU string will make 10 | the program use the Last String it Produced. 11 | 12 | The wizard of Swift Programing 13 | Ehud Lamm 14 | 15 | -------------------------------------------------------------------------------- /MIU.PAS: -------------------------------------------------------------------------------- 1 | { M-I-U A FORMAL INTRODUCTION TO FORMAL SYSTEMS } 2 | { ---------------------------------------------- } 3 | 4 | { BY: EHUD LAMM OF SWIFT PROGRAMING } 5 | { MIU IS A FORMAL SYSTEM , MEANING THAT EVERY STRING ("WORD") THAT IS USED IN 6 | THE SYSTEM IS EITHER AN AXIOM OR A STRING PRODUCED FROM AXIOMS USING FORMAL 7 | INFRENCE RULES. 8 | 9 | DESCRIPTION: 10 | ------------ 11 | LETTERS USED: M , I , U. 12 | AXIOM: MI. 13 | RULES OF INFRENCE: 14 | ------------------ 15 | 1) IF xI IS A STRING SO IS xIU. 16 | 2) IF Mx IS A STRING SO IS Mxx. 17 | 3) IN ANY STRING III CAN BE REPLACED BY U. 18 | 4) UU CAN BE DROPPED FROM ANY STRING. 19 | } 20 | 21 | 22 | 23 | { THIS PROGRAM CAN BE USED TO HELP LEARN MIU! 24 | YOU CAN YOU USE THE PROGRAM IN TWO MODES: 25 | 1) AS A CHECKING TOOL: WRITE TO STRINGS AND THE COMPUTER WILL TELL YOU 26 | IF ONE CAN BE PRODUCED FROM THE OTHER BY THE RULES. 27 | 2) WRITE A STRING AND A RULE NUMBER AND THE COMPUTER WILL GIVE THE 28 | STRING THAT WILL BE THE OUTCOME OF ISSUING THAT RULE ON THAT STRING. 29 | } 30 | 31 | PROGRAM MIT; 32 | 33 | USES CRT; 34 | 35 | LABEL L; 36 | 37 | VAR 38 | SEL:CHAR; 39 | LSP:STRING; 40 | 41 | PROCEDURE HELP; 42 | BEGIN 43 | WINDOW(1,1,80,25); 44 | CLRSCR; 45 | HIGHVIDEO; 46 | WRITELN(' FORMAL TUTOR HELP SYSTEM'); 47 | NORMVIDEO; 48 | WINDOW(1,2,80,25); 49 | WRITELN('WHAT IS A FORMAL SYSTEM,AND WHY F"S ARE USED?'); 50 | WRITELN('---------------------------------------------'); 51 | WRITELN('SCIENCE , MATH AND LOGIC HAVE PRBLEMS USING NATURAL LANGUAGES,BECAUSE THESE '); 52 | WRITELN('LANGUAGES TEND TO BE TO FREE,AND LET SENTENCES HAVE DOUBLE MEANINGS AND THAT THE '); 53 | WRITELN('CORRECT MEANIG IS DETERMINED BY THE LISTENER. IN LOGIC,FOR INSTANCE, WE NEED A '); 54 | WRITELN('LANGUAGE THAT EVERY SENTENCE EXPERSSIBLE IN IT COULD BE UNDERSTOOD IN ONLY ONE'); 55 | WRITELN('WAY.'); 56 | WRITELN('FOR THIS PURPUSE FORMAL SYSTEMS WERE INVENTED,IN A FORMAL SYSTEM EVERY STRING'); 57 | WRITELN('(SENTENCE) IS DERIVED FROM AXIOMS USING FORMAL RULES (AS WILL BE EXPLAIND LATER)'); 58 | WRITELN('SO THAT A FORMAL SYSTEM CAN BE INVENTED THAT WILL ONLY HAVE TRUE SENTENCES AS'); 59 | WRITELN('STRINGS!'); 60 | REPEAT UNTIL READKEY<>''; 61 | CLRSCR; 62 | WRITELN('HOW STRINGS ARE DERIVED IN FORMAL SYSTEMS?'); 63 | WRITELN('------------------------------------------'); 64 | WRITELN('ANY FORMAL SYSTEM IS COMPOSED OF ONE OR MORE INFRENCE RULES AND USUALY ONE OR '); 65 | WRITELN('MORE AXIOMS. TO MAKE STRINGS WE START WITH THE AXIOM AND APPLY THE RULES TO IT'); 66 | WRITELN(',FOR INSTANCE IN MIU THE AXIOM IS MI IF WE USE RULE 2 ON IT (Mx -> Mxx) WE GET'); 67 | WRITELN('MII,FROM NOW ON MII IS ALSO A STRING IN THE SYSTEM SO WE CAN USE THE RULES ON IT'); 68 | WRITELN(',FOR INSTANCE RULE 1 (xI -> xIU) AND GET MIIU , AND SO ON.'); 69 | WRITELN('THESE STRINGS (MI,MII,MMIU) ARE ALL "STRINGS OF THE SYSTEM" OR IN ANOTHER TERM'); 70 | WRITELN('THEOREMS.'); 71 | WRITELN('BY THE WAY NOT EVERY COMBINATION OF THE SYMBOLS IS A THEOREM (TRY PRODUCING MU)'); 72 | READLN; 73 | CLRSCR; 74 | WRITELN('HOW STRINGS COME TO LIFE IN FORMAL SYSTEMS?'); 75 | WRITELN('-------------------------------------------'); 76 | WRITELN('STRINGS COME TO LIFE? WELL SORT OF, THE WAY F"SS TREAT STRINGS IS BY'); 77 | WRITELN('MANIPULATING SYMBOLS,WITHOUT CONCERN OF MEANIG.IN A LOT OF F"SS SYMBOLS DO HAVE'); 78 | WRITELN('MEANIGS (NOT IN MIU,SORRY), SO THAT ANY STRING CAN BE TRANSLATED INTO AN ENGLISH'); 79 | WRITELN('SENTENCE.'); 80 | WRITELN; 81 | WRITELN('EXAMPLES OF FORMAL SYSTEMS:'); 82 | WRITELN('---------------------------'); 83 | WRITELN('THE EXAMPLES ARE "STOLEN" FROM A BOOK.'); 84 | WRITELN('1) P-Q , SYMBOLISES ADDITION (AXIOM: xP-Qx- IF x CONTAINS ONLY "-",RULE OF'); 85 | WRITELN('INFERENCE: IF xPyQz IS A STRING xPy-Qz- IS A STRING TOO.).'); 86 | WRITELN; 87 | WRITELN('2)T-Q , SYMBOLISES MULTIPLICATION (AXIOM xT-Qx IF x CONTAINS ONLY "-",RULE'); 88 | WRITELN('OF INFERENCE: IF xTyQz IS A STRING THEN xTy-Qzx IF A STRING.).'); 89 | WRITELN; 90 | WRITELN('3)PROPOSITIONAL CALCULUS - IS A FORMAL SYSTEM REPRESENTING LOGIC, TOO DIFFICULT'); 91 | WRITELN('TO EXPLAIN HERE.BTW IT DOES NOT CONTAIN AXIOMS!'); 92 | WRITELN; 93 | WRITELN('4)TYPOGRAPHICAL NUMBER THEORY - AGAIN TO DIFFICULT TO EXPLAIN IS A MATHAMATIC FS'); 94 | READLN; 95 | 96 | END; 97 | 98 | FUNCTION UPCASES(X:STRING):STRING; 99 | VAR 100 | T:BYTE; 101 | BEGIN 102 | FOR T:=1 TO LENGTH(X) DO X[T]:=UPCASE(X[T]); 103 | UPCASES:=X; 104 | END; 105 | 106 | FUNCTION MIU(S:STRING):BOOLEAN; 107 | VAR 108 | T:INTEGER; 109 | BEGIN 110 | IF S[1]<>'M' THEN BEGIN MIU:=FALSE; EXIT; END; 111 | FOR T:=1 TO LENGTH(S) DO IF (S[T]<>'M') AND (S[T]<>'I') AND (S[T]<>'U') THEN BEGIN MIU:=FALSE; T:=LENGTH(S); END; 112 | END; 113 | 114 | PROCEDURE XtoY; 115 | VAR 116 | S1,S2:STRING; 117 | INx:INTEGER; 118 | 119 | 120 | FUNCTION RULE1:BOOLEAN; 121 | VAR 122 | X:INTEGER; 123 | 124 | BEGIN 125 | IF LENGTH(S1)+1=LENGTH(S2) THEN 126 | IF S1[LENGTH(S1)]='I' THEN 127 | IF S2[LENGTH(S2)]='U' THEN 128 | RULE1:=TRUE 129 | ELSE RULE1:=FALSE 130 | ELSE RULE1:=FALSE 131 | ELSE RULE1:=FALSE; 132 | 133 | END; 134 | 135 | FUNCTION RULE2:BOOLEAN; 136 | VAR 137 | T:INTEGER; 138 | S:STRING; 139 | BEGIN 140 | IF (LENGTH(S1)-1)*2<> LENGTH(S2)-1 THEN BEGIN RULE2:=FALSE; EXIT; END; 141 | S:=S1[2]; 142 | FOR T:=3 TO LENGTH(S1) DO S:=S+S1[T]; 143 | S:=S+S; 144 | S:='M'+S; 145 | IF S=S2 THEN RULE2:=TRUE ELSE RULE2:=FALSE; 146 | END; 147 | 148 | FUNCTION RULE3:BOOLEAN; 149 | VAR 150 | T,T1:INTEGER; 151 | S:STRING; 152 | BEGIN 153 | S:=' '; 154 | RULE3:=FALSE; 155 | FOR T:=2 TO LENGTH(S1) DO 156 | IF (S1[T]='I') AND 157 | (S1[T+1]='I') AND 158 | (S1[T+2]='I') THEN BEGIN 159 | S:='M'; 160 | FOR T1:=2 TO T-1 DO S:=S+S1[T1]; 161 | S:=S+'U'; 162 | FOR T1:=T+3 TO LENGTH(S1) DO S:=S+S1[T1]; 163 | IF S=S2 THEN RULE3:=TRUE; 164 | END; 165 | END; 166 | 167 | FUNCTION RULE4:BOOLEAN; 168 | VAR 169 | T,T1:INTEGER; 170 | S:STRING; 171 | BEGIN 172 | RULE4:=FALSE; 173 | FOR T:=2 TO LENGTH(S1) DO 174 | IF (S1[T]='U') AND 175 | (S1[T+1]='U') THEN BEGIN 176 | S:='M'; 177 | FOR T1:=2 TO T-1 DO S:=S+S1[T1]; 178 | FOR T1:=T+2 TO LENGTH(S1) DO S:=S+S1[T1]; 179 | IF S=S2 THEN RULE4:=TRUE; 180 | END; 181 | END; 182 | 183 | PROCEDURE XTOYINIT; 184 | BEGIN 185 | CLRSCR; 186 | GOTOXY(1,1); 187 | HIGHVIDEO; 188 | WRITELN(' MIU (C) SWIFT PROGRAMING CAN X BE PRDUCED FROM Y?'); 189 | NORMVIDEO; 190 | WRITELN('WRITE "QUIT" TO QUIT!'); 191 | WRITELN;WRITELN; 192 | WINDOW(1,5,80,25); 193 | END; 194 | 195 | BEGIN {OF XtoY} 196 | XTOYINIT; 197 | REPEAT 198 | IF S1='HELP' THEN XTOYINIT; 199 | WRITE('EXISTING STRING >'); 200 | S1:=' '; 201 | READLN(S1); 202 | S1:=UPCASES(S1); 203 | IF S1<>'QUIT' THEN 204 | IF S1<>'HELP' THEN 205 | BEGIN 206 | WRITE('DERIVED STRING >'); 207 | READLN(S2); 208 | S2:=UPCASES(S2); 209 | WRITELN('------------------------'); 210 | WRITELN; 211 | IF (MIU(S1)) AND (MIU(S2)) THEN IF (RULE1) OR (RULE2) OR (RULE3) OR (RULE4) THEN WRITELN('Y E S') 212 | ELSE WRITELN('N O!') ELSE WRITELN('NOT MIU STRINGS!'); 213 | WRITELN; 214 | 215 | END ELSE 216 | HELP; 217 | 218 | UNTIL S1='QUIT'; 219 | WINDOW(1,1,80,25); 220 | CLRSCR; 221 | HIGHVIDEO; 222 | GOTOXY(20,10); 223 | WRITELN('THANK YOU FOR USING "FORMAL TUTOR",'); 224 | WRITELN(' WE HOPE YOU WILL HAVE THE OPPERTUNITY TO USE OTHER SWIFT PROGRAMS.'); 225 | 226 | END; 227 | 228 | 229 | 230 | 231 | PROCEDURE XbyY; 232 | VAR 233 | S:STRING; 234 | RULE:CHAR; 235 | 236 | PROCEDURE RULE1; 237 | BEGIN 238 | IF S[LENGTH(S)]='I' THEN BEGIN 239 | WRITELN(S+'U'); 240 | LSP:=S+'U'; 241 | END 242 | ELSE WRITELN('CAN NOT APPLY RULE ONE TO A STRING NOT TERMINATING WITH AN "I"'); 243 | END; 244 | 245 | PROCEDURE RULE2; 246 | VAR 247 | T:INTEGER; 248 | S1:STRING; 249 | BEGIN 250 | S1:='M'; 251 | FOR T:=2 TO LENGTH(S) DO S1:=S1+S[T]; 252 | FOR T:=2 TO LENGTH(S) DO S1:=S1+S[T]; 253 | WRITELN(S1); 254 | LSP:=S1; 255 | END; 256 | 257 | PROCEDURE RULE3; 258 | VAR 259 | T,T1:INTEGER; 260 | S1:STRING; 261 | BEGIN 262 | S1:=' '; 263 | FOR T:=2 TO LENGTH(S) DO 264 | IF (S[T]='I') AND 265 | (S[T+1]='I') AND 266 | (S[T+2]='I') THEN 267 | BEGIN 268 | S1:='M'; 269 | FOR T1:=2 TO T-1 DO S1:=S1+S[T1]; 270 | S1:=S1+'U'; 271 | FOR T1:=T+3 TO LENGTH(S) DO S1:=S1+S[T1]; 272 | WRITELN(S1); 273 | LSP:=S1; 274 | END; 275 | END; 276 | 277 | PROCEDURE RULE4; 278 | VAR 279 | T,T1:INTEGER; 280 | S1:STRING; 281 | BEGIN 282 | S1:=' '; 283 | FOR T:=2 TO LENGTH(S) DO 284 | IF (S[T]='U') AND 285 | (S[T+1]='U') THEN BEGIN 286 | S1:='M'; 287 | FOR T1:=2 TO T-1 DO S1:=S1+S[T1]; 288 | FOR T1:=T+2 TO LENGTH(S) DO S1:=S1+S[T1]; 289 | WRITELN(S1); 290 | LSP:=S1; 291 | END; 292 | END; 293 | 294 | PROCEDURE XBYINIT; 295 | BEGIN 296 | WINDOW(1,1,80,25); 297 | CLRSCR; 298 | GOTOXY(1,1); 299 | HIGHVIDEO; 300 | WRITELN(' MIU (C) SWIFT PROGRAMING WHAT WILL X BE AFTER RULE Y IS APPLIED?'); 301 | NORMVIDEO; 302 | WRITELN('WRITE "QUIT" TO QUIT!'); 303 | WRITELN('RULES:'); 304 | WRITELN(' 1) IF xI IS A STRING SO IS xIU.'); 305 | WRITELN(' 2) IF Mx IS A STRING SO IS Mxx. WE CAN MAKE MI!'); 306 | WRITELN(' 3) IN ANY STRING III CAN BE REPLACED BY U. ---------------'); 307 | WRITELN(' 4) UU CAN BE DROPPED FROM ANY STRING.'); 308 | WRITELN('--------------------------------------------------------------------------------'); 309 | WINDOW(1,9,80,25); 310 | END; 311 | 312 | BEGIN {OF XbyY} 313 | XBYINIT; 314 | REPEAT 315 | IF S='HELP' THEN XBYINIT; 316 | S:=' '; 317 | WRITE('STRING >'); 318 | READLN(S); 319 | S:=UPCASES(S); 320 | IF S='LSP' THEN S:=LSP; 321 | IF S<>'QUIT' THEN 322 | IF S<>'HELP' THEN 323 | IF NOT(MIU(S)) THEN WRITELN('NOT AN MIU STRING!') ELSE 324 | BEGIN 325 | WRITE('RULE >'); 326 | READLN(RULE); 327 | IF RULE='1' THEN RULE1 ELSE 328 | IF RULE='2' THEN RULE2 ELSE 329 | IF RULE='3' THEN RULE3 ELSE 330 | IF RULE='4' THEN RULE4 ELSE 331 | WRITELN('NOT A VALID RULE NUMBER (1-4)'); 332 | 333 | END ELSE 334 | HELP; 335 | 336 | 337 | UNTIL S='QUIT'; 338 | WINDOW(1,1,80,25); 339 | CLRSCR; 340 | HIGHVIDEO; 341 | GOTOXY(20,10); 342 | WRITELN('THANK YOU FOR USING "FORMAL TUTOR",'); 343 | WRITELN(' WE HOPE YOU WILL HAVE THE OPPERTUNITY TO USE OTHER SWIFT PROGRAMS.'); 344 | END; 345 | 346 | BEGIN 347 | CLRSCR; 348 | GOTOXY(1,1); 349 | HIGHVIDEO; 350 | WRITELN(' M-I-U A FORMAL INTRODUCTION TO FORMAL SYSTEMS '); 351 | WRITELN; 352 | WRITELN(' BY: EHUD LAMM OF SWIFT PROGRAMING '); 353 | NORMVIDEO; 354 | WRITELN('MIU IS A FORMAL SYSTEM , MEANIG THAT EVERY STRING ("WORD") THAT IS USED IN'); 355 | WRITELN('THE SYSTEM IS EITHER AN AXIOM OR A STRING PRODUCED FROM AXIOMS USING FORMAL'); 356 | WRITELN('INFRENCE RULES.'); 357 | WRITELN; 358 | HIGHVIDEO; 359 | WRITELN('DESCRIPTION:'); 360 | WRITELN('------------'); 361 | NORMVIDEO; 362 | WRITELN('LETTERS USED: M , I , U.'); 363 | WRITELN('AXIOM: MI.'); 364 | WRITELN('RULES OF INFRENCE:'); 365 | WRITELN('------------------'); 366 | WRITELN(' 1) IF xI IS A STRING SO IS xIU.'); 367 | WRITELN(' 2) IF Mx IS A STRING SO IS Mxx.'); 368 | WRITELN(' 3) IN ANY STRING III CAN BE REPLACED BY U.'); 369 | WRITELN(' 4) UU CAN BE DROPPED FROM ANY STRING.'); 370 | GOTOXY(80,25);REPEAT UNTIL READKEY<>#00; 371 | CLRSCR; 372 | GOTOXY(1,1); 373 | WRITELN('THIS PROGRAM CAN BE USED TO HELP LEARN MIU!'); 374 | WRITELN('YOU CAN YOU USE THE PROGRAM IN TWO MODES:'); 375 | WRITELN(' 1) AS A CHECKING TOOL: WRITE TO STRINGS AND THE COMPUTER WILL TELL YOU'); 376 | WRITELN('IF ONE CAN BE PRODUCED FROM THE OTHER BY THE RULES.'); 377 | WRITELN(' 2) WRITE A STRING AND A RULE NUMBER AND THE COMPUTER WILL GIVE THE'); 378 | WRITELN('STRING THAT WILL BE THE OUTCOME OF ISSUING THAT RULE ON THAT STRING.'); 379 | L: GOTOXY(1,25); 380 | WRITE('WHAT MODE DO YOU WANT TO USE?'); 381 | SEL:=READKEY; 382 | IF SEL='1' THEN XtoY ELSE IF SEL='2' THEN XbyY ELSE GOTO L; 383 | END. 384 | 385 | --------------------------------------------------------------------------------