/usr/share/minlog/src/prologue.scm is in minlog 4.0.99.20100221-5.2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 | ; minlog3j.scm
; 00-01-15
(begin
(display "This is Minlog, Version 1.03j of January 2000") (newline)
(display "Copyright (C) 2000 H. Schwichtenberg") (newline)
(display "email schwicht@rz.mathematik.uni-muenchen.de") (newline)
*the-non-printing-object*)
; Inhalt:
; 1. Vorbereitungen list.scm
; 2. Typen typ.scm
; 3. Variablen var.scm
; 4. Programmkonstanten pconst.scm
; 5. Praedikaten- und Funktionssymbole psym.scm
; 5-1. Praedikatensymbole
; 5-2. Funktionssymbole
; 6. Terme term.scm
; 6-1. Aufbau und Zerlegung
; 6-2. Normalisierung
; 6-3. Termersetzung
; 6-4. Alpha-Gleichheit
; 6-5. Darstellung
; 6-6. Pruefung
; 6-7. Substitution
; 6-8. Unifikation
; 6-9. Einseitige Unifikation
; 7. Formeln und Komprehensionsterme formula.scm
; 7-1. Aufbau und Zerlegung
; 7-2. Normalisierung
; 7-3. Alpha-Gleichheit
; 7-4. Darstellung
; 7-5. Einlesen
; 7-6. Pruefung
; 7-7. Substitution
; 8. Axiome axiom.scm
; 9. Globale Annahmen und Theoreme globalass.scm
; 10. Beweise proof.scm
; 10-1. Aufbau und Zerlegung
; 10-2. Normalisierung
; 10-3. Substitution
; 10-4. Darstellung
; 10-5. Pruefung
; 11. Partielle Beweise pproof.scm
; 12. Resolution mit Hornklauseln hres.scm
; 13. Ein Beweiser fuer Aussagenlogik prop.scm
; 14. Hindleys Typinferenz-Algorithmus type-inf.scm
; 15. Beweissuche und Logikprogrammierung quant.scm
; 16. Extrahierte Terme ets.scm
; 17. A-Uebersetzung atr.scm
; 18. Simultane freie Algebren sfa.scm
; 00-01-16; Simultane freie Algebren eingebaut (nach Holger Benl)
; Dazu: closure eingefuegt. add-variable nimmt jetzt mehrere Symbole + Typ.
; arg-types jetzt in der Form (arg-types type <n>) mit n optional.
; final-val-type eingefuegt. reset wirkt auch fuer GROUND-TYPES.
; (set-minus-wrt eq? ...) ersetzt durch (set-minq ...), etc
; introduce-simultaneous-free-algebras (kurz isfas) eingefuegt.
; 99-12-14: In petite chez scheme verhaelt sich assq anders als in lmuscheme.
; (assq 'test '(4 (test 6))) ->
; Error in assq: improperly formed alist (4 (test 6)).
; (Vorlaeufige) Korr: statt (assq wrong-u oc) (assq wrong-u (reverse oc))
; 99-12-06: Klammerfehler in strip korrigiert.
; 99-07-22: In pterm-and-context-to-pg-ec-and-new-pterm-and-npgs einen
; Fehler korrigiert (argument context eingefuegt).
; 99-07-19: In imp-intro equal? durch alpha-=-nfs? ersetzt
; 99-05-05 In var-to-index eine Abfrage eingebaut, ob eine Variable
; vorliegt. Andernfalls ist das Ergebnis 0. ec-item-psym-substitute
; korrigiert. minpr.scm eingearbeitet.
; t-expr-psym-substitute-generating-new-global-assumptions korrigiert.
; 99-04-16 Mehrstellige klassische Existenzquantoren eingefuehrt. Grund:
; Bei der Programmextraktion aus klassischen Beweisen ist exc i exc j
; ~all i~~all~ j, also nicht Negation einer rein generalisierten Formel.
; 99-04-11: tensor als Alternative zu & eingefuehrt. Grund:
; fold-formula und unfold-formula sollen invers zueinander sein. Ohne
; Tensor haette man (all n.A -> B -> F) -> F folds into exc n.A & B
; unfolds into (all n.A & B -> F) -> F. Also: exc n.A ! B steht fuer
; (all n.A -> B -> F) -> F, und exc n.A & B fuer (all n.A & B -> F) ->
; F. steht. In Formeln wird tensor beliebig erlaubt (auch in Hinblick
; auf spaetere Erweiterungen in Richtung lineare Lambda-Terme). In
; Beweisen darf tensor nur im Kontext exc n.A1 ! A2 ! .. ! An vorkommen,
; und diese Formel wird mit (all n.A1 -> A2 -> .. -> An -> F) -> F
; identifiziert. Dann exc-intro2-thms: all n.A -> B -> exc n.A tensor B
; exc-elim2-thms: (exc n.A ! B) -> (all n.A -> B -> C) -> C Ferner
; Duplikation von Code fuer excl (logisch) und exca (arithmetisch)
; moeglichst vermieden. Zum Beispiel funktioniert exc-elim fuer beide.
; 99-04-10: search bzgl. partieller Variablen korrigiert.
; 99-04-03: Klassische Existenzquantoren exc (arithmetische Version)
; und excl (logische Version) eingefuehrt. Sie werden als Abkuerzungen
; aufgefasst, insbesondere als alpha-gleich angesehen. unfold-formula
; und fold-formula eingefuehrt. Bei assume und strip wird soweit wie
; noetig ausgefaltet; bei nf und display wird nicht ausgefaltet.
; rm-ex getilgt; stattdessen ex-to-exc und ex-to-excl.
; 99-03-30: imp-intro korrigiert (und Argumente vertauscht) und
; c-intro statt intro eingefuehrt (analog c-abst). Terminologie:
; efq-thm, stab-thm fuer efq, stab. efq, stab fuer efq-with-psym,
; stab-with-psym.
; 99-03-27: Praedikatenkonstante und Praedikatenvariablen unterschieden
; (Grund: in efq-log: bot -> p darf fuer bot nicht substituiert werden).
; 99-03-23: THEOREM-CONSTANTS, THEOREM-SCHEMA,CHEME-SYMBOLS,
; GLOBAL-ASSUMPTION-SCHEME-SYMBOLS eingefuehrt. save speichert Theoreme.
; Logisches Falsum (bot) als psym eingefuehrt (Grund u.a.: A-Uebersetzung).
; p, p1,p2,p3 sind nullstellige Praedikatensymbole (q res. fuer 1-stellige).
; efq-log: bot -> p, stab-log: ((p -> bot) -> bot) -> p sind GA-Schemata,
; ebenso efq: F -> p, stab: ((p -> F) -> F) -> p.
; cases-log: (p -> p1) -> ((p -> bot) -> p1) -> p1 ist Theorem-Schema,
; dessen Beweis die globale Annahme stab-log (fuer p1) verwendet.
; efq-thm: all pp^.F -> pp^, stab-thm: all pp^.((pp^ -> F) -> F) -> pp^ sind
; Theoreme. efq-axiom-at und stab-axiom-at getilgt (unnoetig wegen efq-log).
; prop verwendet bei bot efq-log und bei F efq-thm bzw. efq,
; ebenso bei bot stab-log und bei F stab-thm bzw. stab.
; (search m (u1 m1) (u2 m2) ...) laesst fuer ui auch Theoreme zu, nicht aber
; Schemata (Grund: Unifikation wuerde uferlos). Die gewuenschte Instanz
; soll sich der Benutzer selbst ueberlegen und als Theorem abspeichern.
; 99-03-09: def-nat, extends_nat korrigiert. formula-check-to-string
; korrigiert. t-expr-psym-substitute korrigiert.
; 99-03-12: Praedikatensymbole eingefuehrt, analog zu Funktionssymbolen.
; Stelligkeit eines Praedikatensymbols: tau1 -> tau2 -> prop
; Komprehensionsterme gebraucht, zur Substitution fuer Praedikatensymbole.
; Keine Typvariablen (Grund: Typen werden aus Variablennamen erschlossen).
; Boolesche Variable p,q in pp,qq umbenannt (um p,q frei zu haben).
; efq-axiom-at und stab-axiom-at hinzugefuegt (wegen der Praed.symbole)
; 99-03-01: Am Ende von add-ground-type ein n durch k ersetzt. In use-with
; 2mal new-vars eingefuegt (war vergessen). program-scheme-check korrigiert.
; 98-12-01: Bei use-with und inst-with: freie Variable ausserhalb des
; geordneten Kontexts in den Termen zugelassen. Geordnete Kontexte
; von neu erzeugten Zielen korrigiert (neue Variable hinzugefuegt).
; Beweisterme duerfen jetzt auch Variablen frei enthalten (um Logik in
; Grundtypen zu ermoeglichen, fuer die man keine Konstante hat).
; Bei drop: unnoetig gewordene Variable werden automatisch entfernt.
; 98-11-29: (reset) eingefuehrt: setzt die globalen Variablen VARIABLES,
; VAR-PLISTS, PROGRAM-CONSTANTS, FUNCTION-SYMBOLS, AXIOM-CONSTANTS,
; AXIOM-SCHEME-SYMBOLS, GLOBAL-ASSUMPTIONS wieder
; auf ihren urspruenglichen Wert.
; add-global-assumption-with-et (kurz agawet) hinzugenommen.
; Entsprechend elim-pterm-to-et-and-formula angepasst.
; 98-11-24: Um unter Implementierungen mit beliebiger
; Standard-Gross-bzw.-Kleinschreibung (z.B. Bigloo vs LMU-Scheme)
; lauffaehig zu sein, Symbole wie immer erst mit 'test in die
; Standard-Gross-bzw.-Kleinschreibung transformieren und erst dann
; mit string->symbol einen string daraus herstellen. Deshalb z.B.
; "undef_" ersetzt durch (symbol->string 'undef_).
; Ferner (damit der get-Befehl sein Ziel aus einer AListe von Zielen
; findet) auch die Benennung der Ziele in die
; Standard-Gross-bzw.-Kleinschreibung transformiert. Deshalb z.B.
; "KERNEL" ersetzt durch (string->symbol 'kernel).
; In scan einen Test auf standard-case-of-implementation eingebaut.
; c-# durch c-@ ersetzt (# nicht erlaubt im revised^5 report)
; 98-11-19: add-ground-type, nat-simrec-at korrigiert (fuer Termfamilien)
; 98-10-20: obj-to-long-normal-form und normal-app-expr-to-obj umbenannt
; in reify und reflect. Den Einbau von Termfamilien (s. Nada-Arbeit)
; auch im Text beruecksichtigt. obj-to-term getilgt. In Termen statt
; Numeralen wie 27 jetzt (num 27), das zu einer Termfamilie auswertet.
; 98-05-28: Fehler in prop-i korrigiert (pterm-of-efq-at statt
; neuer globaler Annahme verwendet). unstrip korrigiert.
; 97-08-26: search korrigiert: Beim Aufruf sind sig-vars nicht leer.
; Ferner: Bei Annahmen aus dem geordneten Kontext darf die Vielfachheit
; auch 0 sein, damit man ausblenden kann.
; 97-04-29: and-strict durch and_strict ersetzt (Tippfehler)
; 97-03-03: search.scm durch searchex.scm ersetzt, das jetzt auch
; (konstruktive) Existenzquantoren behandeln kann. In soln-and-pterm-b
; (or forb-vars ...) ersetzt durch (or (pair? forb-vars) ...).
; 97-02-20: simp korrigiert: bei Gleichungen wird nur die rechte durch
; die linke Seite vereinfacht. simptrue, simpfalse getilgt (ueberfluessig)
; inst-with eingefuegt und deshalb inst getilgt
; 97-02-19: Definition supertotal geaendert: Werte streng total.
; Grund: supertotale Werte sind konstant, also nicht sinnvoll.
; search.scm eingefuegt (in quant.scm)
; 97-02-06: term-to-critical-subterm-as-list-with-type korrigiert:
; Abfrage pair? eingefuegt. Ferner: Da memq assoc etc im negativen Fall
; #f ergeben, an diesen Stellen (pair? info) wieder durch info ersetzt.
; 97-02-03: pattern-unify-by-occurs-check-and-pruning korrigiert:
; Abfrage pair? eingefuegt (auch noch an zwei anderen Stellen, bei memq)
; 97-01-31: hres.scm (Resolution mit Hornklauseln) herausgenommen.
; 97-01-29: tdeg.scm eingearbeitet. Das heisst
; Einen neuen Totalitaetsgrad eingefuehrt: streng total.
; Grund: Konstruktor con bei listen erfuellt def(con bot(con 7 eps)).
; Also: (con a^) ist fuer beliebiges a^ total (nicht supertotal).
; 97-01-28: Abkuerzungen fuer lange Zielsymbole eingefuehrt.
; simp.scm eingearbeitet: simptrue, simpfalse, simp. Dafuer:
; '=-at 'eq-at als axiom-scheme-symbols hinzugefuegt.
; Entsprechend axiom-scheme-check angepasst. Hinzugenommen:
; =-Axiomenschema (beweist all xs,x,y.x=y -> A(y) -> A(x)) und
; eq-Axiomenschema (beweist all xs,x,y.eq_nat x y -> A(y) -> A(x))
; Ferner: c-eq (analog c-=).
; In globalass.scm hineingenommen: atomtrue (beweist all pp^.pp^ -> pp^=true)
; sowie atomfalse (beweist all pp.(pp -> F) -> pp=false).
; Bei if-symbol? eingefuegt: =-symbol? und eq-symbol?
; In ets.scm angepasst: axiom-scheme-form-to-et, =-at-to-et
; Weitere Korrekturen in ets.scm: Abfrage (eq? 'nulltype type) eingefuegt.
; 97-01-11: if-type-output-string "[...]" verwendet,
; um auf die besondere Ausgabe [...] bei if-type hinzuweisen.
; 97-01-08: Reihenfolge der Abstraktionen bei parse-term korrigiert.
; - In c-abst den Test auf Partialitaet der Variablen entfernt. Grund:
; Eine Unterscheidung totale/nicht totale Variable ist hier nicht
; noetig, da der Wert eines Lambda-Objektterms als Argumente immer alle
; stetigen Funktionen hat.
; - In (et proof) werden jetzt neue Objektvariable nur fuer
; Annahmenvariablen mit rechnerischem Gehalt gebildet.
; - In pterm-to-et c-abst-without-check verwendet.
; - In elim-pterm-display-to-formula-and-rule und ebenso in
; elim-pterm-to-et-and-formula die Abfrage assumption-variable?
; durch Frage nach Vorkommen der Variable im Kontext ersetzt; das
; erspart manchmal die Normalisierung. Abfrage auf nulltype eingebaut.
; 97-01-04: Felix Joachimskis add.scm eingearbeitet:
; Eingefuegt: display-more,
; ground-type?, program-scheme-symbol?, axiom-scheme-symbol?, is-used?,
; add-axiom-constant, aac, remove-axiom-constant, rac,
; add-axiom-scheme-symbol, remove-axiom-scheme-symbol,
; Mit is-used? neu formuliert: add-ground-type, add-variable,
; add-program-constant, add-self-evaluating-program-constant,
; add-function-symbol, add-global-assumption
; Eingefuegt: undo ohne Argument, macht den letzten Schritt rueckgaengig.
; Eingefuegt: display-current-goal, dcg, split-iterated, close-proof
; cases bei Aufruf ohne test korrigiert (neu: first-if-term-in).
; 96-09-17: Verwendung von letrec in nat-ind-at und nat^-ind-at korrigiert.
; 96-08-23: In if-nat etc. (auch in agt) folgende Regeln hinzugefuegt:
; [if test then y else y] -> y (falls test syntaktisch total ist)
; [if [if test then con else alt] then y else z] ->
; [if test then [if con then y else z] else [if alt then y else z]]
; Ferner speziell bei if-boole:
; [if test then true else false] -> test
; 96-08-20: In agt eq-type in eq_type umbenannt (wegen minus und
; Konsistenz mit eq_nat). Ferner if-type-output-string "xx" verwendet,
; um auf die besondere Ausgabe [...] bei if-type hinzuweisen.
; 96-08-19: Definition split korrigiert (else war falsch).
; 95-10-09: assoc-wrt und member-wrt korrigiert: Wert #f statt '().
; 95-09-26: Darstellung von Paar- und Komponententermen verbessert.
; @ durch # und c-pair durch c-# ersetzt. parse-object, parse-more,
; term-to-string und op-and-args-and-string-and-strings-to-string angepasst.
; 95-09-25: type-to-new-partial-variable korrigiert. Es erzeugt jetzt
; einen string, der als Variablenname in Frage kommt (also ohne Klammern
; und ohne "-"). Deshalb neu hinzugefuegt: type-to-string-for-name.
; type-to-efq-variable eingefuehrt, mit angehaengtem 000. Grund: Bei et
; fuer ein efq-axiom F -> ex n.n=0 braucht man die IH fuer eine Instanz.
; Hierfuer wird jetzt die spezielle Variable n000 genommen.
; 95-09-24: minus-nat, max_nat und min_nat eingefuegt. Polynomnormalform
; verbessert. term-to-undef-sources liefert eine Liste aller Teilterme
; eines Terms, die zu undef_nat fuehren koennten.
; 95-09-16: 'undef 'false 'true ersetzt durch undef false true.
; undef-boole, undef-nat ersetzt durch undef_boole, undef_nat. Grund:
; In der Ausgabe verwendete Symbole duerfen kein "-" enthalten (wegen minus).
; Bei if-nat kann "-" bleiben, da in der Ausgabe [...] verwendet wird.
; eq-nat, leq-nat, less-nat ersetzt durch eq_nat, leq_nat, less_nat.
; imp-fsym und and-fsym ersetzt durch imp_fsym und and_fsym und als
; nicht strikte Funktionen operierend gemacht. and-nonstrict getilgt.
; Ausgabe "[=" bei extends_nat und extends_boole getilgt.
; 95-09-15: Korrigiert: pred-nat hat Totalitaetsgrad 0.
; 95-09-08: In prop.scm Existenzquantoren zugelassen. Fehler im Quantorenfall
; korrigiert. efq-at eingefuegt. (efq-at formula) erzeugt einen Beweis
; von F -> A. Dabei wird fuer atomare Formeln die globale Annahme
; efq: all pp^.F -> pp^ verwendet. formula darf Existenzquantoren enthalten.
; 95-09-06: all-all^-axiom korrigiert: die freien Variablen in der
; all^-Formel werden vorn abgebunden. Neu: (cases-all^). Erwartet eine
; (nicht notwendig geschlossene) Zielformel all x^ A(x^) mit x^ von einem
; Grundtyp. Erzeugt werden zwei neue Ziele: A(undef) und all x A(x).
; Bei (cases test) Pruefung eingefuehrt, ob der Term test vom Typ boole
; ist und nur freie Variablen aus dem geordneten Kontext enthaelt.
; Bei inst wird die instanziierte Hypothese u jetzt mit ui bezeichnet.
; 95-09-04: def-nat und extends-nat hinzugenommen (waren vergessen).
; 95-08-29: if-nat hinzugenommen (war vergessen).
; Vor c-ex befand sich ein (ueberfluessiges) <-Zeichen: getilgt.
; +-nat durch plus-nat ersetzt (fuehrt in UMB-Scheme zu Problemen)
; Da (z.B. in UMB-Scheme) #f und () verschieden sind, an vielen Stellen z.B.
; info durch (pair? info) ersetzt. Ferner z.B. in globalass.scm
; (formula-to-free y) durch (pair? (formula-to-free y)) ersetzt.
; 95-07-14: term-to-monoms korrigiert: falls nicht zusammengesetzt,
; wird (list (list term)) zurueckgegeben. suc-nat? wieder hinzugenommen
; (war vergessen). <-strict-nat korrigiert
; 95-07-14: Termersetzungsregeln fuer nat korregiert und verbessert.
; Grund: Bisher reduzierte n^+m <= n^+k auf m <= n; fuer n^=undef
; muesste aber undef-boole herauskommen. Ferner war falsch: polyn-to-const
; Ferner: if-boole eingefuegt (war vergessen)
; 95-06-30: nat-simrec-at korrigiert (n-1 statt n im step)
; 95-03-30: et.scm (Extrahierter Term nach Benl und Niggl) eingefuegt.
; Entsprechend cons-arrow-et (mit c-arrow-et) und cons-star-et so
; definiert, dass Nulltypen verschluckt werden.
; 95-03-15: cut eingefuegt.
; 95-02-24: In quant.scm bei der Unifikation fuer Muster Reihenfolge der
; zu abstrahierenden Variablen korrigiert.
; 95-01-20: agt1 mit quasiquote formuliert. Dabei wird mit (agt 'obj) jetzt
; auch if-obj fuer den neuen Grundtyp obj definiert.
; 95-01-18: In parse-object im sonst-Fall eine Abfrage function-symbol?
; eingefuegt. use-with geaendert: es wird auch abgeprueft, ob
; ein benutzter Term nur freie Variable im geordneten Kontext enthaelt.
; 94-04-28: Im Parser Test auf unbalancierte Klammern eingefuehrt.
; 94-04-25: ets (extrahierte Terme) aufgenommen.
; undef-at neu in PROGRAM-SCHEME-SYMBOLS; if-at veraendert
; 94-04-18: LOCAL-ASSUMPTIONS als neue globale Variable eingefuehrt:
; Aliste der (von normalize-proof) mit gensym neu erzeugten oder
; im Kontext vorhandenen Annahmevariablen mit ihren Typen.
; Grund: Bei ex-elim-at muss man die Typen der in einem Beweisterm
; freien Annahmevariablen kennen, um ihn auswerten zu koennen.
; 94-04-13: Vorbereitungen zur Einfuehrung von ets (extrahierte Terme):
; - formula-to-types und c-list-type eingefuehrt.
; type-to-string verbessert (nach Robert Staerk). * rechtsassoziativ.
; - nulltype neuer Grundtyp; leere Liste einziges Objekt.
; obj-to-long-normal-form und normal-app-expr-to-obj geaendert.
; - nat-rec-at, nat-simrec-at, if-at sind PROGRAM-SCHEME-SYMBOLS
; - pair, left-comp, right-comp ersetzt durch cons, car, cdr
; c-app, c-abst statt app, abst. c-abst analog zu c-all
; curry, uncurry erhalten als erstes das Prozedurargument (wie list-ref)
; 94-04-08: Zerlegungsoperationen fuer (normale) Beweise eingefuehrt.
; 94-04-06: (stab-at formula) erzeugt einen Beweis von ((A -> F) -> F) -> A.
; Dabei wird fuer atomare Formeln die globale Annahme
; stab: all pp^.((pp^ -> F) -> F) -> pp^ verwendet.
; (stab-arith-at formula) ersetzt in dem Beweisterm von (stab-at formula)
; die globale Annahmenvariable stab durch stab-pterm
; (gebildet mit boole^-ind-at).
; 94-04-02: Konstruktiver Existenzquantor ex eingefuegt. Gruende:
; - Beweise werden direkter und sind deshalb besser zu verstehen.
; - Automatische Uebersetzung in klassische Beweise ist moeglich: rm-ex
; Zusaetzlicher Grundtyp existential eingefuehrt, fuer ex-Formeln.
; 94-03-09: pattern-unify korrigiert.
; remove-variable und remove-ground-type hinzugefuegt.
; normalize-formula veraendert: (atom undef-boole) wird zu (atom false)
; normalisiert (also: beide werden identifiziert). Entsprechend werden die
; Axiome undef-to-false-axiom und false-to-undef-axiom getilgt.
; cases verbessert; Aufruf jetzt (cases test)
; 94-03-07: app fuer Produkttypen korrigiert. delta in def umbenannt.
; parse-term und parse-formula (:= parse) verbessert: (pt "n<m") liefert
; jetzt einen Term, und def ist einbezogen.
; Alpha-= ohne gensym implementiert (nach Robert Staerk).
; In gensym und new-variable beginnt jetzt der Index zur Unterscheidung
; von benutzerdefinierten Variablen mit einer fuehrenden 0.
; Bei type-to-new-partial-variable nimmt man zwei fuehrende Nullen.
; 94-03-04: c-=, c-<, c-<= so umdefiniert, dass sie die strikten
; Relationen liefern. Grund: undef wird als endlicher Fehler gesehen
; und sollte deshalb durchgereicht werden.
; Ferner: pp in pproof umbenannt (pp gibt es schon im MIT-Scheme)
; error umbenannt in myerror ('error' ist nicht standard)
; 94-03-02: c-undef und undef? (fuer Grundtypen) hinzugefuegt.
; all-all^-axiom (fuer Grundtypen) und cases verbessert.
; Ueberall undefined in undef umbenannt.
; 94-02-28: truth-axiom in die Beweissuche eingebaut.
; 94-02-22: Beweispruefung angepasst an: Axiomenschemata duerfen
; freie Variable enthalten. Neu: axiom-scheme-check.
; check-and-display-proof korrigiert: Kontext wird erst nach
; Pruefung bearbeitet.
; 94-02-01: asepc (add-self-evaluating-program-constant) hinzugenommen
; Die Angabe des Totalitaetsgrades und der Darstellungszeichenreihe
; ist nicht mehr notwendig; Standardwerte: 0 bzw. das in eine
; Zeichenreihe umgewandelte Symbol.
; 93-10-11: Induktion fuer nat und boole verbessert (nach Berger und Niggl)
; Es wird nicht mehr der gesamte geordnete Kontext abgebunden, sondern
; nur noch die freien Variablen. Ferner wird eine modifizierte boolesche
; Induktion (mod-boole-ind-at (all pp A(pp))) als Axiom eingefuehrt:
; all pp.(pp -> A(true)) -> (~pp -> A(false)) -> A(pp) statt
; A(true) -> A(false) -> all pp A(pp)
; Dadurch werden Fallunterscheidungen in Beweisen kuerzer. Deshalb entfernt:
; cases-boole, cases-boole^, cases-term, cases, cases-new. Neu: cases
; 93-10-11: Entfernt: immed. Grund: prop ist allgemeiner
; 93-05-24: c-if und c-def fuer beliebige Grundtypen verwendbar gemacht.
; Parser angepasst: (c-if pred then-part else-part) statt
; (app 'if-nat pred then-part else-part)
; 93-04-13: Abschnitt 10. `Beweise' verbessert und korrigiert (dp, cdp).
; Hauptpunkt: Die Benennung gebundener Variablen in Beweistermen soll
; keine Rolle spielen, wohl aber in Formeln: dort werden der Typ und
; der Totalitaetsgrad durch den Variablennamen bestimmt.
; 93-01-13: inst zur Instanziierung von Allhypothesen und split-hyp zur
; Aufspaltung von konjunktiven Hypothesen hinzugefuegt.
; 92-12-30: undefinierte boolesche Terme in Formeln zugelassen.
; Grund: undefiniert spielt die Rolle eines Fehlerobjekts, nicht einer
; nichtterminierenden Rechnung.
; Entsprechend Axiome undef-to-false-axiom und false-to-undef-axiom
; hinzugenommen.
; 92-12-20: Hudelmaiers Beweissuchverfahren fuer die minimale Aussagenlogik
; implementiert, in prop.scm
; - Typinferenz (nach Hindley) implementiert, in type-inf.scm
; - Zur Effizienzsteigerung wird nach der ersten Pruefung z.B. u17
; in eine Liste CHECKED-ASSUMPTION-VARIABLES eingetragen
; - gensym erhaelt einen globalen Zaehler gensym-count, der bei jedem
; Aufruf von set-goal wieder auf 9 gesetzt wird. Der Benutzer sollte dann
; nur Variablennummern <10 verwenden, um Kollisionen zu vermeiden.
; Grund: Man kann dann (strip) in Taktik-Dateien verwenden.
; - (new-hypsym) durch (gensym "u") ersetzt.
; 92-11-25 und 92-12-04: Angepasst an das neue MIT--SCHEME.
; - in 6-6 bei scan-term char-upcase getilgt (da beim neuen SCHEME die
; Symbole klein geschrieben werden). Ebenso in 7-5.
; Beispiel: 'Test => test, aber (string->symbol "Test") => Test.
; - Ueberall string-downcase getilgt.
; - "U", "X", "C-" durch kleingeschriebene strings ersetzt.
; - op-and-args-and-string-and-strings-to-string korrigiert (vorher war auf
; left-assoc? nicht bezug genommen).
; - in new-hypsym (frueher: newhypsym) "HYP" durch "u" ersetzt.
; Geaendert gegenueber nat4.scm
; - Produkttypen sind hinzugenommen. Grund: Durch simultane Rekursion werden
; Objekte von Produkttypen definiert. Diese Auffassung ist notwendig,
; um solche Programme effektiv ausfuehren zu koennen.
; - Entsprechend wird die Konjunktion von Formeln hinzugenommen. Grund: Beweise
; durch simultane Induktion sollen als effektive Programme ausgefuehrt
; werden koennen.
; - eq-nat testet seine Argumente modulo Assoziativitaet und Kommutativitaet
; von + und *. Ferner wird die Distributivitaet von * ueber +
; ausgenutzt.
; - Abschnitt 13: Resolution ist vorlaeufig hinausgenommen, in resolution.scm
; Geaendert gegenueber nat3.scm
; - Ein Parser fuer Terme und Formeln ist hinzugenommen.
; - immed ist wieder hinzugenommen, erweitert fuer den Fall, dass die
; Zielformel mit truth endet.
; - Hinzugefuegt: (cases atom). Ersetzt das Ziel durch zwei neue:
; atom -> goal-formula[boolean-kernel/true]
; (atom -> F) -> goal-formula[boolean-kernel/false]
; - Hinzugefuegt: (cases-boole boolean-term). Ersetzt das Ziel durch zwei neue:
; boolean-term=true -> goal-formula[boolean-term/true]
; boolean-term=false -> goal-formula[boolean-term/false]
; - (expr-substitute expr subst) verarbeitet jetzt eine Aliste
; subst = ((expr11 expr12) (expr21 expr22) ...): Substituiert werden
; simultan die linken Seiten der Aliste subst an allen
; Stellen, an denen in ihnen keine freie Variable abgebunden ist, durch
; die entsprechenden rechten Seiten. Umbenannt wird genau dort,
; wo die Substitution eine vorher freie Variable in den Bindungsbereich
; eines Quantors befoerdern wuerde.
; - Formelschreibweise: Z.B. all n,m n=m und all n.n=0 -> 0=n
; Punkt bedeutet: Wirkungsbereich des Allquantors bis zum Ende der
; folgenden (klammerfrei geschriebenen) Implikation.
; Geaendert gegenueber nat2.scm
; - Resolution mit Hornklauseln fuer das -> all -Fragment ist hinzugefuegt.
; Die Zielformel muss hier atomar sein, also ggf erst (strip) anwenden.
; - Ebenfalls ist die klassische Resolution hinzugefuegt.
; Der geordnete Kontext muss hier leer sein, also ggf erst (unstrip)
; anwenden. Ein Beweistermen wird nicht aufgebaut: Stattdessen wird
; im Erfolgsfall eine neue globale Annahme Resolution-proof-for-<formula>
; verwendet.
; - Beim interaktiven Beweisen wird immer das oberste Ziel auf dem Stapel
; angesprochen: Mit (get <goal-name>) kann man ein beliebiges Ziel
; nach oben bringen.
; - strip, unstrip und drop sind hinzugefuegt
; - Beweise werden jetzt durch 3er-Vektoren statt durch Listen dargestellt.
; - Simultane Substitution fuer Terme, Formeln und Ausdruecke hinzugefuegt:
; (term-substitute term subst), (formula-substitute formula subst) und
; (expr-substitute term subst)
; Ebenfalls wird die simultane Ersetzung in Ausdruecken hinzugefuegt:
; (t-expr-replace expr subst)
; Geaendert gegenueber nat.scm
; - eta-Konversionen eingefuehrt
; - (atom r) nur mit syntaktisch totalem r zulassen. Deshalb: <-nat wie =-nat
; als supertotales Funktionssymbol verwenden, damit <-Atomformeln gebildet
; werden koennen. Zusaetzlich: <-strict-nat
; - In interaktiven Beweisen in den Zielen nicht-normale Terme zulassen
; (wegen besserer Lesbarkeit, Z.B x+4 statt (S(S(S(Sx)))) ). Zusaetzlich:
; normalize-goal (kurz ng), das alle Terme im Ziel normalisiert
; - Bei Korrektheitspruefungen in Beweisen immer pruefen, ob die
; Normalformen gleich sind.
; - c-all wird andersherum geschrieben: (c-all symbol1 symbol2 ... formula)
; - * durch ^ ersetzen, um Verwechslungen mit mal zu vermeiden.
; - term-to-bound, formula-to-bound und expr-to-bound sind weggelassen,
; da sie nicht mehr gebraucht werden.
; - Zur besseren Lesbarkeit (und zur Vereinfachung der Definition von
; term-to-t-deg) soll die mit lambda abstrahierte Variable immer total
; sein. Eine Unterscheidung totale/nicht totale Variable ist hier nicht
; noetig, da der Wert eines Lambda-Objektterms als Argumente immer alle
; stetigen Funktionen hat. (Spaeter bei Beweistermen sagt die Formel, ob
; totale oder partielle Objekte gemeint sind.)
; Ziele:
; - Interaktive Beweisentwicklung => Beweis vom Rechner geprueft,
; Beweis als Objekt vorhanden, also manipulierbar
; - Normalisierung von Beweisen effizient implementieren =>
; Experimente moeglich
; - Moeglichst viel Beweisarbeit auf die rechnerische Ebene schieben
; und Termersetzung verwenden.
; Schnittstelle allgemeines Logiksystem -- spezielle Anwendung definieren.
; Kriterien fuer Termersetzung:
; * Terminierend
; * geschlossener Term der Stufe 0 -> (eindeutige) Ziffer
; * Bedeutungserhaltend (bei bekannter Bedeutung in unserer festen
; Semantik)
; * Nuetzlich fuer Beweise
; Technische Punkte:
; - Wegen leichterer Lesbarkeit der Formeln:
; * Benennung quantifizierter Variablen nicht aendern
; * Typ einer Objektvariablen aus dem Symbol ablesen.
; - Es ist erlaubt, dass auf einem Zweig (in Term, Formel, Herleitung)
; dieselbe gebundene Variable mehrmals auftritt.
|