Codebase list cafeobj / 66520e5
Some modification for porting to clisp. Should consider other CL implementations infuture. tswd 11 years ago
42 changed file(s) with 216 addition(s) and 425 deletion(s). Raw diff Collapse all Expand all
8989 (let ((var (find-if #'(lambda (x) (variable-eq term x)) variables)))
9090 (if var
9191 var
92 #||
9293 (if variables
9394 (with-output-panic-message-n (:p-pn-0010 (list (variable-name term)))
9495 ;; (format t "copying term, could not find var ~a"
9596 ;; (variable-name term))
9697 (break "type in :q for returning to top-level.")
9798 )
98 term))))
99 term)
100 ||#
101 term )))
99102 ((term-is-application-form? term)
100103 (@create-application-form-term
101104 (term-head term)
988991 ;;;
989992 (defun pn-automatic-settings-1 ()
990993 ;;
994 #||
991995 (unless *current-psys*
992996 (with-output-panic-message-n (:p-pn-0020)
993997 ;; (format t "system error, no context in PigNose environment.")
994998 ))
999 ||#
9951000 (move-axioms-to-usable *current-psys*)
9961001 (setf *usable* (psystem-usable *current-psys*))
9971002 (setf *sos* nil)
11701175
11711176 (defun pn-automatic-settings-2 ()
11721177 ;;
1178 #||
11731179 (unless *current-psys*
11741180 (with-output-panic-message-n (:p-pn-0020)
11751181 ;;(format t "system error, no context in PigNose env.")
11761182 ))
1183 ||#
11771184 (move-axioms-to-usable *current-psys*)
11781185 (setf *usable* (psystem-usable *current-psys*))
11791186 (setf *sos* nil)
13061313
13071314 (defun pn-automatic-settings-3 ()
13081315 ;;
1316 #||
13091317 (unless *current-psys*
13101318 (with-output-panic-message-n (:p-pn-0020)
13111319 ;; (format t "system error, no context in PigNose env.")
13121320 ))
1321 ||#
13131322 (move-axioms-to-usable *current-psys*)
13141323 (setf *usable* (psystem-usable *current-psys*))
13151324 (setf *sos* nil)
408408 (setq *usable* (list clause)))
409409 (incf (pn-stat usable-size)))
410410 (otherwise
411 #||
411412 (with-output-panic-message-n (:p-gl-0010 (list 'append-clause list))
412413 ;; (format t "append-clause: not yet ~s" list)
413 )))
414 )
415 ||#
416 ))
414417 (setf (clause-container clause) list)
415418 )
416419
431434 (incf (pn-stat demodulators-size)))
432435 ||#
433436 )
437 #||
434438 (unless real-list
435439 (with-output-panic-message-n (:p-pn-0040)
436440 ;; (princ "prepend-clause: nil")
437441 ))
442 ||#
438443 (setf (cdr real-list) (cons (car real-list) (cdr real-list)))
439444 (setf (car real-list) clause)
440445 (setf (clause-container clause) list)))
1414 VERSION = 1.4
1515 VMINOR = .9
1616 VMEMO = PigNose0.99
17 PATCHLEVEL =
17 PATCHLEVEL = 1
1818
1919 # Where to install the executables.
2020 bindir = ${exec_prefix}/bin
4343 GCL = no
4444 CMU = no
4545 ACL = no
46 LISP = no
47 BIN = .fasl
48 EXEC_SRC = cafeobj.acl.in
49 EXEC = cafeobj.acl
46 LISP = /opt/local/bin/clisp
47 BIN = .fas
48 EXEC_SRC = cafeobj.clisp.in
49 EXEC = cafeobj.mem
5050
5151 #### End of system configuration section. ####
5252
6161
6262 DISTDIRTOP = $(PACKAGE)-$(VERSION)$(VMINOR)
6363
64 DISTSUBDIRS = cafeobj clII comlib thstuff chaos win mac \
64 DISTSUBDIRS = cafeobj clII comlib thstuff chaos \
6565 chaos/boot chaos/cafein chaos/construct chaos/decafe chaos/e-match \
6666 chaos/eval chaos/primitives chaos/term-parser chaos/tools \
6767 chaos/tram chaos/psup \
6868 elisp \
69 dist \
7069 RefCard BigPink/codes BigPink/test
7170
7271 DISTBINSUBDIRS = bin/cafeobj bin/clII bin/comlib bin/obj3 bin/thstuff bin/chaos \
6161
6262 DISTDIRTOP = $(PACKAGE)-$(VERSION)$(VMINOR)
6363
64 DISTSUBDIRS = cafeobj clII comlib thstuff chaos win mac \
64 DISTSUBDIRS = cafeobj clII comlib thstuff chaos \
6565 chaos/boot chaos/cafein chaos/construct chaos/decafe chaos/e-match \
6666 chaos/eval chaos/primitives chaos/term-parser chaos/tools \
6767 chaos/tram chaos/psup \
6868 elisp \
69 dist \
7069 RefCard BigPink/codes BigPink/test
7170
7271 DISTBINSUBDIRS = bin/cafeobj bin/clII bin/comlib bin/obj3 bin/thstuff bin/chaos \
16941694
16951695 PACKAGE=cafeobj
16961696 VERSION=1.4
1697 VMINOR=.9rc9
1697 VMINOR=.9
16981698 VMEMO=PigNose0.99
1699 PATCHLEVEL=
1699 PATCHLEVEL=1
17001700
17011701
17021702
1313 'configure.in'
1414 ],
1515 {
16 '_LT_AC_TAGCONFIG' => 1,
1617 'AM_PROG_F77_C_O' => 1,
17 '_LT_AC_TAGCONFIG' => 1,
18 'AC_INIT' => 1,
1819 'm4_pattern_forbid' => 1,
19 'AC_INIT' => 1,
20 '_AM_COND_IF' => 1,
2021 'AC_CANONICAL_TARGET' => 1,
21 '_AM_COND_IF' => 1,
22 'AC_SUBST' => 1,
2223 'AC_CONFIG_LIBOBJ_DIR' => 1,
23 'AC_SUBST' => 1,
24 'AC_FC_SRCEXT' => 1,
2425 'AC_CANONICAL_HOST' => 1,
25 'AC_FC_SRCEXT' => 1,
2626 'AC_PROG_LIBTOOL' => 1,
2727 'AM_INIT_AUTOMAKE' => 1,
28 'AM_PATH_GUILE' => 1,
2829 'AC_CONFIG_SUBDIRS' => 1,
29 'AM_PATH_GUILE' => 1,
3030 'AM_AUTOMAKE_VERSION' => 1,
3131 'LT_CONFIG_LTDL_DIR' => 1,
32 'AC_REQUIRE_AUX_FILE' => 1,
3233 'AC_CONFIG_LINKS' => 1,
33 'AC_REQUIRE_AUX_FILE' => 1,
34 'm4_sinclude' => 1,
3435 'LT_SUPPORTED_TAG' => 1,
35 'm4_sinclude' => 1,
3636 'AM_MAINTAINER_MODE' => 1,
3737 'AM_NLS' => 1,
3838 'AC_FC_PP_DEFINE' => 1,
3939 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
40 'AM_MAKEFILE_INCLUDE' => 1,
4041 '_m4_warn' => 1,
41 'AM_MAKEFILE_INCLUDE' => 1,
4242 'AM_PROG_CXX_C_O' => 1,
43 '_AM_COND_ENDIF' => 1,
4344 '_AM_MAKEFILE_INCLUDE' => 1,
44 '_AM_COND_ENDIF' => 1,
4545 'AM_ENABLE_MULTILIB' => 1,
4646 'AM_SILENT_RULES' => 1,
4747 'AM_PROG_MOC' => 1,
4848 'AC_CONFIG_FILES' => 1,
49 'include' => 1,
4950 'LT_INIT' => 1,
50 'include' => 1,
51 'AM_PROG_AR' => 1,
5152 'AM_GNU_GETTEXT' => 1,
52 'AM_PROG_AR' => 1,
5353 'AC_LIBSOURCE' => 1,
54 'AM_PROG_FC_C_O' => 1,
5455 'AC_CANONICAL_BUILD' => 1,
55 'AM_PROG_FC_C_O' => 1,
5656 'AC_FC_FREEFORM' => 1,
57 'AH_OUTPUT' => 1,
5758 'AC_FC_PP_SRCEXT' => 1,
58 'AH_OUTPUT' => 1,
59 '_AM_SUBST_NOTMAKE' => 1,
5960 'AC_CONFIG_AUX_DIR' => 1,
60 '_AM_SUBST_NOTMAKE' => 1,
61 'sinclude' => 1,
62 'AM_PROG_CC_C_O' => 1,
6163 'm4_pattern_allow' => 1,
62 'AM_PROG_CC_C_O' => 1,
63 'sinclude' => 1,
64 'AM_XGETTEXT_OPTION' => 1,
65 'AC_CANONICAL_SYSTEM' => 1,
6466 'AM_CONDITIONAL' => 1,
65 'AC_CANONICAL_SYSTEM' => 1,
66 'AM_XGETTEXT_OPTION' => 1,
6767 'AC_CONFIG_HEADERS' => 1,
6868 'AC_DEFINE_TRACE_LITERAL' => 1,
6969 'AM_POT_TOOLS' => 1,
211211 ))
212212 (setq *chaos-vergine* nil)))
213213 ;; message DB
214 #+:Allegro
214215 (setup-message-db)
215216 ;; help DB
216 (setup-help-db))
217 #+:Allegro
218 (setup-help-db)
219 )
217220
218221 ;;; **********************
219222 ;;; THE TOP LEVEL FUNCTION
221221
222222 ;; for simple-parser.
223223 ;; (check-polimorphic-overloading-in module)
224 (propagate-attributes module)
224 ;; (propagate-attributes module)
225225 (set-operator-syntactic-properties module)
226226 (update-parse-information module)
227227 ;;
251251 ;; the different top level
252252 ;; possibly maches only when zero case...
253253 ;;
254 #||
254 ;; #||
255255 (if (or (test-theory .Z. (theory-info-code th-info))
256256 (test-theory .Z. (theory-info-code
257257 (method-theory-info-for-matching!
260260 nil)
261261 ;; will never match
262262 t)
263 ||#
264 t
263 ;;||#
264 ;;t
265265 )
266266 ))))
267267
340340 ;; the different top level
341341 ;; possibly maches only when zero case or on-demand.
342342 ;;
343 #|| too danderous: many cases of rewriting rush into infinite loop.
343 ;; #|| too danderous: many cases of rewriting rush into infinite loop.
344344 (if (term-is-on-demand? t2)
345345 (progn
346346 (mark-term-as-not-on-demand t2)
365365 nil)
366366 ;; will never match
367367 t))
368 ||#
369 ;; #||
368 ;; ||#
369 #||
370370 (if (term-is-on-demand? t2)
371371 (progn
372372 (mark-term-as-not-on-demand t2)
376376 (!match-decompose t1 t2 res)))
377377 ;; never ...
378378 t)
379 ;; ||#
379 ||#
380380 )))
381381 ))
382382
16801680 (return-from lowest-method
16811681 (or (choose-lowest-op cand) method))))
16821682
1683 (defun lowest-method! (method lower-bound &optional (module *current-module*))
1684 (declare (type method method)
1685 (type list lower-bound)
1686 (type module module)
1687 (values (or null method)))
1688 (flet ((select-one-method (method-list)
1689 ;; select arbitrary one if every has the same rank
1690 (let* ((cand (car method-list))
1691 (coar (method-coarity cand))
1692 (arity (method-arity cand)))
1693 (dolist (m (cdr method-list) cand)
1694 (unless (sort= coar (method-coarity m))
1695 (return-from select-one-method nil))
1696 (unless (sort-list= arity (method-arity m))
1697 (return-from select-one-method nil))))))
1698 (let ((*current-sort-order* (module-sort-order module))
1699 (*current-opinfo-table* (module-opinfo-table module))
1700 (res nil))
1701 (declare (type hash-table *current-sort-order* *current-opinfo-table*))
1702 (let ((over-methods (method-overloaded-methods
1703 method
1704 (module-opinfo-table module))))
1705
1706 (declare (type list over-methods))
1707 (when *on-debug*
1708 (format t "~%* lowest-method! : over-methods =")
1709 (dolist (m over-methods)
1710 (terpri)
1711 (princ " ")
1712 (print-chaos-object m)))
1713 ;;
1714 (if over-methods
1715 (progn
1716 (dolist (meth over-methods)
1717 (declare (type method meth))
1718 (when (and (sort-list<= lower-bound (method-arity meth))
1719 (not (member
1720 meth
1721 res
1722 :test #'(lambda (x y)
1723 (method-is-instance-of y
1724 x
1725 *current-sort-order*)))
1726 ))
1727 (push meth res)))
1728 (when *on-debug*
1729 (format t "~%lowest-method! res=")
1730 (print-chaos-object res)
1731 )
1732 (if (cdr res)
1733 ;; was method
1734 (or (select-one-method res)
1735 method)
1736 (car res)))
1737 (return-from lowest-method! method))))))
1738
1739 #||
16831740 (defun lowest-method! (method lower-bound &optional (module *current-module*))
16841741 (declare (type method method)
16851742 (type list lower-bound)
17141771 (or (choose-lowest-op res)
17151772 method))
17161773 (return-from lowest-method! method)))))
1774 ||#
17171775
17181776 (defun lowest-method* (method &optional lower-bound (module *current-module*))
17191777 (declare (type method method)
15481548 (let ((token-list (cdr arg-acc)) )
15491549 (if (null token-list)
15501550 nil ;this iteration is finished
1551 (let* ((arg-list (car arg-acc))
1552 (terletox-list (parse-term token-list
1553 module
1554 level-constraint
1555 sort-constraint)))
1556 ;; notice that parser is not called with
1557 ;; token-list empty
1558 (dolist (terletox terletox-list)
1559 ;; if terletox-list empty, no effect
1560 (let* ((arg-prime (caar terletox))
1561 (token-list-prime (cdr terletox))
1562 (arg-list-prime (cons arg-prime arg-list))
1563 ;; notice that we accumulate arguments in reverse order
1564 (arg-acc-prime (cons arg-list-prime token-list-prime)))
1565 (setq arg-acc-list-prime
1566 (cons arg-acc-prime arg-acc-list-prime))))))))))
1551 (let* ((arg-list (car arg-acc))
1552 (terletox-list (parse-term token-list
1553 module
1554 level-constraint
1555 sort-constraint)))
1556 ;; notice that parser is not called with
1557 ;; token-list empty
1558 (dolist (terletox terletox-list)
1559 ;; if terletox-list empty, no effect
1560 (let* ((arg-prime (caar terletox))
1561 (token-list-prime (cdr terletox))
1562 (arg-list-prime (cons arg-prime arg-list))
1563 ;; notice that we accumulate arguments in reverse order
1564 (arg-acc-prime (cons arg-list-prime token-list-prime)))
1565 (setq arg-acc-list-prime
1566 (cons arg-acc-prime arg-acc-list-prime))))))))))
15671567
15681568 ;;; op parser-scan-token :
15691569 ;;; LIST[ ( ChaosTermList . TokenList ) ] -- not empty !
208208 ;; if there are some remaining terms serviving these
209209 ;; hard checks, they can be the result.
210210 pres
211 ;; OK, we failed in a test. let ask users which we should
212 ;; take as a result.
213 res))
211 ;; OK, we failed in a test. let ask users which we should
212 ;; take as a result.
213 res))
214214 res)))
215 ||#
216215
217216 (defun pre-choose-final (module final)
218217 (declare (type module module)
219218 (type list final))
220 (when (every #'term-is-application-form? final)
219 (when (every #'(lambda(x) (term-is-application-form? x)) final)
221220 (let ((mslist (mapcar #'(lambda (x) (term-head x)) final))
222221 (least-op nil)
223222 (gen-op nil)
+0
-8
chaos/tools/patch.lisp less more
0 ;;;-*- Mode:LISP; Package:CHAOS; Base:10; Syntax:Common-lisp -*-
1 ;;; $Id: patch.lisp,v 1.1.1.1 2003-06-19 08:29:39 sawada Exp $
2
3 ;;; PATCH
4 (defvar *patch-level* 0)
5
6 (defun apply-patch (patch-file target)
7
3737 (defun register-message (type msg)
3838 (setf (gethash (car msg) *Message-DB*) (cons type (cdr msg))))
3939
40 #+:Allegro
4041 (defun read-message-db (path)
4142 (clrhash *Message-DB*)
4243 (flet ((regme (type msgs)
5556 (otherwise
5657 (error "Internal error, invalid message type ~s" type)))))))
5758
59 #+:Allegro
5860 (defun setup-message-db ()
5961 (let ((fname (chaos-probe-file "messagesDB" *chaos-libpath* '(".msg"))))
6062 (unless fname
16941694
16951695 PACKAGE=cafeobj
16961696 VERSION=1.4
1697 VMINOR=.9rc9
1697 VMINOR=.9
16981698 VMEMO=PigNose0.99
1699 PATCHLEVEL=
1699 PATCHLEVEL=1
17001700
17011701
17021702
55 AC_PREREQ(2.4)dnl Required Autoconf version.
66 PACKAGE=cafeobj
77 VERSION=1.4
8 VMINOR=.9rc9
8 VMINOR=.9
99 VMEMO=PigNose0.99
10 PATCHLEVEL=
10 PATCHLEVEL=1
1111 AC_SUBST(PACKAGE)
1212 AC_SUBST(VERSION)
1313 AC_SUBST(VMINOR)
+0
-51
deliver.cl- less more
0 ;;; -*- Mode: LISP; Syntax: Common-Lisp -*-
1 ;;; $Id: deliver.cl,v 1.4 2007-09-14 08:55:28 sawada Exp $
2 (in-package :common-lisp-user)
3 (eval-when (eval load)
4 (load "chaos-package.fasl")
5 )
6 (defun make-app (path)
7 (generate-application "CafeOBJ"
8 #-:mswindows
9 "dist/cafeobj-1.4/lisp/"
10 #+:mswindows
11 "dist/cafeobj-1.4/"
12 '("pignose.fasl" :emacs :eli
13 :sock :process
14 :acldns :collate :euc :ffcompat :list2
15 :fileutil :foreign :trace
16 :hmac :locale :regexp2 #-:mswindows :sigio
17 ;; #-:mswindows :ssl
18 :ssl
19 :streama)
20 :application-type :exe
21 :print-startup-message nil
22 :allow-existing-directory t
23 :copy-shared-libraries t
24 :read-init-files nil
25 :restart-app-function 'chaos::cafeobj-top-level
26 ;; :restart-init-function 'chaos::chaos-init-fun
27 :runtime :standard
28 :suppress-allegro-cl-banner t
29 :runtime-bundle t
30 :include-compiler nil
31 ;; :record-source-file-info nil
32 ;; :record-xref-info nil
33 ;; :load-source-file-info nil
34 ;; :load-xref-info nil
35 ;; :load-local-names-info nil
36 :autoload-warning t
37 :discard-local-name-info t
38 :discard-source-file-info t
39 ;; :discard-xref-into t
40 :discard-arglists t
41 :application-administration
42 '(#+:mswindows
43 (:batch-file "cafeobj.bat")
44 )
45 ))
46
47 (eval-when (eval load)
48 (make-app nil))
49
50 ;;; EOF
9393 exec B .
9494 --> this needs much time to perform ... please be patient
9595 clean memo
96 eof
96 -- eof
9797 red B ==> 'c 2 'd .
9898 **
99 eof
99 -- eof
100100
101101 -- -------------------------------
102102 --> the problem is NOT confluent: both of the following are normal forms
9393 eq (e >> s) = (e >> s') .
9494 eq disorder(s) < disorder(s') = true .
9595 ** conclusion
96 red disorder(e s) < disorder(e s') .
96 --> the reduction causes stack overflow!
97 --> red disorder(e s) < disorder(e s') .
9798 close
99 eof
98100
99101 -- proof of (generic) local confluence for the sorting algorithm
100102 ** case 1 for local confluence
179179 }
180180
181181 -- tram red in PROOF : RESULT .
182 red in PROOF : RESULT .
183182 --
184183 eof
185184 --
2323 (unless *bootstrapping-bool*
2424 (setf *bootstrapping-bool* t)
2525 (unless (modexp-is-error (eval-modexp "BOOL"))
26 (with-outout-chaos-error ('more-than-one-bool)
26 (with-output-chaos-error ('more-than-one-bool)
2727 (format t "You cann not define BOOL module more than once in a session.")))
2828 (if (and *user-bool* (not (equal "" *user-bool*)))
2929 (cafeobj-input *user-bool*)
3333 (prepare-for-parsing *eql-module*)
3434 (with-in-module (*eql-module*)
3535 (let* ((eq-op (find-operator '("_" "=" "_") 2 *eql-module*))
36 (eq-meth (lowest-method (car (opinfo-methods eq-op)))))
36 (eq-meth (lowest-method* (car (opinfo-methods eq-op)))))
3737 (setq *eql-op* eq-meth))))
3838
3939 lispq
150150 -- (a) op P : ... Bool ... -> Bool
151151 -- (b) op Q : ... Bool ... -> S -- S is not Bool
152152 --
153 -- ¡ú Basically, if one want to use PigNose system, one cannot
153 -- Basically, if one want to use PigNose system, one cannot
154154 -- define such operators, otherwise the result is unknown.
155155 -- System (may) warn if it found such operations.
156156 --
157 -- ¡ú But, built-in module BOOL does define such operators,
157 -- But, built-in module BOOL does define such operators,
158158 -- and how about equality operators?
159159 --
160160 -- One of the reason we adopt sort Bool as truth value is
164164 -- And Bool-valued terms are used as the condition part of axioms,
165165 -- this is rather ungly, but its too late for now.
166166 --
167 -- ¡ü "Here is the way we took:"
167 -- "Here is the way we took:"
168168 -- Lift up (partially) operations of BOOL to FOPL level.
169169 -- * "and" ---> &
170170 -- * "or" ---> |
180180 -- in automatic manner.
181181 -- * Axioms of above operators are "not" used in inference.
182182 --
183 -- ¡ü "if_then_else_fi"
183 -- "if_then_else_fi"
184184 -- Users "cannot" use if_then_else_fi. We don't provide any
185185 -- support for this operator. Also the following operators
186186 -- has no support:
Binary diff not shown
1919 {\end{minipage}\end{Sbox}\fbox{\TheSbox}}
2020 %%%%%
2121 \usepackage{graphicx}
22 %%%%%%%%%%%%%%%%%% plainmarkruled pagestyle
22 %%%%% plainmarkruled pagestyle
2323 \makepagestyle{plainmarkruled}
2424 \makeheadrule{plainmarkruled}{\textwidth}{\normalrulethickness}
2525 \makeevenhead{plainmarkruled}{\scshape\leftmark}{}{}
2828 \makeoddfoot{plainmarkruled}{}{}{\thepage}
2929 \makepsmarks{plainmarkruled}{\@ruledmarks}
3030
31 %%%%%%%%%%%%%%%%%% index pagestyle
31 %%%%% index pagestyle
3232 \makepagestyle{index}
3333 \makeheadrule{index}{\textwidth}{\normalrulethickness}
3434 \makeevenhead{index}{\rightmark}{}{\leftmark}
3838
3939 \makeindex
4040
41 %%%%%%%%%%%%%%%%%%%%%%% glossary
41 %%%%% glossary
4242 \makeglossary
4343 \changeglossactual{?}
4444 \changeglossnum{\@currentlabel}
5656 \fi}
5757 \renewcommand*{\glossarymark}{\markboth{\glossaryname}{\glossaryname}}
5858
59 %%%%%%%%%%%%%%%%%%%%%%%%%%%% endnotes
60 % \makepagenote
61 % \notepageref% use page numbers
62 % \newcommand*{\notemark}{\markboth{\notesname}{\notesname}}
63 % \renewcommand*{\notedivision}{\chapter{\notesname}\notemark}
64 % \renewcommand*{\notenumintext}[1]{}% no number marks in main text
65 % \renewcommand*{\notenuminnotes}[1]{}% no number marks in listing
66 % \renewcommand*{\idtextinnotes}[1]{\vspace{-0.5\onelineskip}
67 % \par [#1]\space}
68 % \renewcommand*{\notemark}{\markboth{{\scshape \notesname}}{{\scshape \notesname}}}
69 % \renewcommand*{\pagenotesubhead}[3]{%
70 % \section{#1 #2 #3}}
71 %%\renewcommand*{\notemark}{\markboth{\notesname}{\notesname}}
72
73 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
74 %%%% Short and long ToC
75
76 % \newcommand*{\setupshorttoc}{%
77 % \renewcommand*{\contentsname}{Short contents}
78 % \let\oldchangetocdepth\changetocdepth
79 % \let\oldprecistoctext\precistoctext
80 % \renewcommand{\precistoctext}[1]{}
81 % \let\oldcftchapterfillnum\cftchapterfillnum
82 % \renewcommand*{\changetocdepth}[1]{}
83 % \setcounter{tocdepth}{0}% chapters
84 % \renewcommand*{\cftchapterfont}{\hfill\sffamily}
85 % \renewcommand*{\cftchapterpagefont}{\normalfont}
86 % \renewcommand*{\cftchapterleader}{ \textperiodcentered\space}
87 % \renewcommand*{\cftchapterafterpnum}{\cftparfillskip}
88 % %% \setpnumwidth{0em}
89 % %% \setpnumwidth{1.5em}
90 % \renewcommand*{\cftchapterfillnum}[1]{%
91 % {\cftchapterleader}\nobreak
92 % \hbox to 1.5em{\cftchapterpagefont ##1\hfil}\cftchapterafterpnum\par}
93 % \setrmarg{0.3\textwidth}
94 % \setlength{\unitlength}{\@tocrmarg}
95 % \addtolength{\unitlength}{1.5em}
96 % \let\oldcftpartformatpnum\cftpartformatpnum
97 % \renewcommand*{\cftpartformatpnum}[1]{%
98 % \hbox to\unitlength{{\cftpartpagefont ##1}}}
99 % \let\oldcftbookformatpnum\cftbookformatpnum
100 % \renewcommand*{\cftbookformatpnum}[1]{%
101 % \hbox to\unitlength{{\cftbookpagefont ##1}}}}
102
103 % \newcommand*{\setupparasubsecs}{%
104 % \let\oldnumberline\numberline
105 % \renewcommand*{\cftsubsectionfont}{\itshape}
106 % \renewcommand*{\cftsubsectionpagefont}{\itshape}
107 % \renewcommand{\l@subsection}[2]{
108 % \ifnum\c@tocdepth > 1\relax
109 % \def\numberline####1{\textit{####1}~}%
110 % \leftskip=\cftsubsectionindent
111 % \rightskip=\@tocrmarg
112 % %% \advance\rightskip 0pt plus \hsize % uncomment this for raggedright
113 % %% \advance\rightskip 0pt plus 2em % uncomment this for semi-ragged
114 % \parfillskip=\fill
115 % \ifhmode ,\ \else\noindent\fi
116 % \ignorespaces
117 % {\cftsubsectionfont ##1}~{\cftsubsectionpagefont##2}%
118 % \let\numberline\oldnumberline\ignorespaces
119 % \fi}}
120
121 % \AtEndDocument{\addtocontents{toc}{\par}}%%% OK
122
123 % \newcommand*{\setupmaintoc}{%
124 % \renewcommand{\contentsname}{Contents}
125 % \let\changetocdepth\oldchangetocdepth
126 % \let\precistoctext\oldprecistoctext
127 % \let\cftchapterfillnum\oldcftchapterfillnum
128 % \addtodef{\cftchapterbreak}{\par}{}
129 % \renewcommand*{\cftchapterfont}{\normalfont\sffamily}
130 % \renewcommand*{\cftchapterleader}{\sffamily\cftdotfill{\cftchapterdotsep}}
131 % \renewcommand*{\cftchapterafterpnum}{}
132 % \renewcommand{\cftchapterbreak}{\par\addpenalty{-\@highpenalty}}
133 % \setpnumwidth{2.55em}
134 % \setrmarg{3.55em}
135 % \setcounter{tocdepth}{2}
136 % \let\cftpartformatpnum\oldcftpartformatpnum
137 % \addtodef{\cftpartbreak}{\par}{}
138 % \let\cftbookformatpnum\oldcftbookformatpnum
139 % \addtodef{\cftbookbreak}{\par}{}
140 % }
141
142 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
143
144 % \newcommand*{\theclass}{memoir}
145
146 % %%% Print and Index macros
147 % \newcommand*{\noidxnum}[1]{}
148
149 % %% index @ in macrocode
150 % \newcommand*{\idxatincode}{\index{@?\texttt{@}!in macro code}}
151 % \newcommand*{\seeatincode}{see \Sref{sec:alltexcommands}}
152
153 % % index marking
59
60 %%%% index marking
15461 \newcommand{\idxmark}[1]{#1\markboth{#1}{#1}}
15562 % %%%% index sup/sub and sub \indexsupsubmain{main}{sub}
15663 \newcommand*{\indexsupsubmain}[2]{\index{#1!#2}\index{#2}}
229136 \newcommand*{\Icrep}[1]{\texttt{#1}\index{#1 tt?\texttt{#1}}}% % counter representation
230137 \renewcommand*{\Icrep}[1]{\pcrep{#1}\ixcrep{#1}}% % print & index counter rep
231138 \newcommand*{\pixcrep}[1]{\pcrep{#1}\ixcrep{#1}} % print & index counter rep
232
233 % print (and index) TeX keywords
234 %\newcommand*{\pkey}[1]{\texttt{#1}} % TeX keywords
235 % \newcommand*{\pixkey}[1]{\pkey{#1}\index{#1 key?\pkey{#1} (keyword)}%
236 % \index{keyword!#1?\pkey{#1}}}
237
238 % \newcommand*{\patexp}{@-expression} % print @-expression
239 % \newcommand*{\ixatexp}{%
240 % \index{@-expression?\patexp}} % index @-expression
241 % \newcommand*{\pixatexp}{\patexp\ixatexp} % print & index @-expression
242
243 % \newcommand*{\Pprog}[1]{\textsf{#1}} % print program name
244 % \newcommand*{\Iprog}[1]{\index{#1 prog?\Pprog{#1} (program)}%
245 % \index{program!#1?\Pprog{#1}}} % index program name
246 % \newcommand*{\Iprogsub}[2]{\index{#1 prog?\Pprog{#1} (program)!#2}}
247 % \newcommand*{\Lprog}[1]{\Pprog{#1}\Iprog{#1}} % print & index program name
248 % \DeclareRobustCommand{\Pmakeindex}{\Pprog{MakeIndex}}
249 % \DeclareRobustCommand{\Imakeindex}{\Iprog{MakeIndex}}
250 % \DeclareRobustCommand{\Lmakeindex}{\Lprog{MakeIndex}}
251 % \DeclareRobustCommand{\Pbibtex}{\Pprog{BibTeX}}
252 % \DeclareRobustCommand{\Ibibtex}{\Iprog{BibTeX}}
253 % \DeclareRobustCommand{\Lbibtex}{\Lprog{BibTeX}}
254
255 % % print and index an \if... \piif{if...}
256 % \newcommand*{\piif}[1]{\cs{#1}\index{#1?\cs{#1}}}
257
258 % % index command \!
259 % \newcommand*{\iexcl}{\index{"!?\cs{!}}}
260 % % print and index \!
261 % \newcommand*{\pixabang}{\cmdprint{\!}\index{"!?\string\cs{}\texttt{"!}}}
262 % % print and index \\!
263 % \newcommand*{\pixslashbang}{\cmdprint{\\!}\index{"\"\"!?\string\cmdprint{\\}\texttt{"!}}}
264
265 % \DeclareRobustCommand{\senv}[1]{\texttt{\bs begin\{#1\}}} % print \begin{env}
266 % \DeclareRobustCommand{\eenv}[1]{\texttt{\bs end\{#1\}}} % print \end{env}
267
268 % \newcommand*{\listofx}{`List of\ldots'}
269
270 % \newcommand*{\Note}{\textbf{NOTE:}}
271
272 % \newcommand*{\ptrue}{\texttt{true}} % print TRUE
273 % \newcommand*{\pfalse}{\texttt{false}} % print FALSE
274 % \DeclareRobustCommand{\btitle}[1]{\textit{#1}} % print a book/article/etc title
275
276
277 % %%% numbers
278 % \let\Mfrac\slashfrac
279 % \newcommand*{\ratio}[2]{{\ensuremath #1 \raise0.2ex\hbox{:} #2}}% or perhaps 0.15ex
280 % \providecommand*{\abyb}[2]{\ensuremath{#1 \times #2}} % e.g., 3 x 4
281 % \providecommand*{\abybm}[3]{\ensuremath{#1 \times #2}\:#3} % e.g., 3 x 4 cm
282 % \providecommand*{\atob}[2]{\ensuremath{#1\!:\!#2}} % e.g., 3:4
283
284
285 % \DeclareRobustCommand*{\lb}{\texttt{\char`\{}} % prints {
286 % \DeclareRobustCommand*{\rb}{\texttt{\char`\}}} % prints }
287
288 % %% A couple of shorthands
289 % \newcommand*{\tmri}{\mathrm{i}}
290 % \newcommand*{\tmrx}{\mathrm{x}}
291
292 % \newcommand*{\foredge}{fore-edge}
293 % \newlength{\pwlayi}\setlength{\pwlayi}{0.45\textwidth} %
294 % \newlength{\pwlayii}\setlength{\pwlayii}{0.45\pwlayi}
295
296 % \DeclareRobustCommand{\Vprint}[1]{\texttt{\string#1}}
297
298 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% stuff for demoing fonts
299 % \DeclareFontFamily{T1}{bodoni}{}
300 % \DeclareFontShape{T1}{bodoni}{m}{n}{ <-> bodonirg9a }{}
301 % %% \usethisfont[encoding]{size}{baselineskip}{family}{series}{shape}
302 % \newcommand*{\usethisfont}[6][T1]{%
303 % \fontencoding{#1}\fontsize{#2}{#3}\fontfamily{#4}\fontseries{#5}%
304 % \fontshape{#6}\selectfont}
305 % \newcommand*{\termfont}[3]{%
306 % \usethisfont{25}{30}{#1}{#2}{#3}}
307 % \newcommand*{\UCalphabet}{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \&}
308 % \newcommand*{\LCalphabet}{a b c d e f g h i j k l m n o p q r s t u v w x y z
309 % 1 2 3 4 5 6 7 8 9 0 ! ? fi fl}
310 % \newcommand*{\fox}{It was a dark and stormy night.
311 % While all the good men were coming to the aid of the
312 % party, the quick brown dog had jumped over the fast red fox
313 % to its great surprise. The cattle had wound slowly
314 % o'er the lea and I was in the dark.}
315 % \newcommand*{\Kafka}{`But aren't Kafka's Schlo{\ss} and {\AE}sop's
316 % {\OE}uvres often na{\"\i}ve vis-\`a-vis the d{\ae}monic ph{\oe}nix's
317 % official r\^ole in fluffy souffl\'es?' }
318 % \newcommand*{\namesAZ}{ {\AA}ngel\aa\ Beatrice Claire
319 % Diana \'Erica Fran\c{c}oise Ginette H\'el\`ene Iris
320 % Jackie K\=aren {\L}au\.ra Mar{\'\i}a N\H{a}ta{\l}{\u\i}e {\O}ctave
321 % Pauline Qu\^eneau Roxanne Sabine
322 % %% T\~a{\'\j}a
323 % T\~aja
324 % Ur\v{s}ula Vivian Wendy Xanthippe Yv{\o}nne Z\"azilie }
325
326
327
328 % %% sans label for labelled list
329 % \newcommand*{\sflabel}[1]{\hspace\labelsep \normalfont\sffamily #1}
330 % %% italic label for labelled list
331 % \newcommand*{\itlabel}[1]{\hspace\labelsep \normalfont\itshape #1}
332
333
334 % %%%%%% stuff for new LaTeX code environment
335
336 % % \zeroseps sets list before/after skips to minimum values
337 % \newcommand*{\@zeroseps}{\setlength{\topsep}{\z@}
338 % \setlength{\partopsep}{\z@}
339 % \setlength{\parskip}{\z@}}
340 % \newlength{\gparindent} \setlength{\gparindent}{\parindent}
341 % \setlength{\gparindent}{0.5\parindent}
342 % % now we can do the new environment. This has no extra before/after spacing.
343 % \newenvironment{lcode}{\@zeroseps
344 % \renewcommand{\verbatim@startline}{\verbatim@line{\hskip\gparindent}}
345 % \small\setlength{\baselineskip}{\onelineskip}\verbatim}%
346 % {\endverbatim
347 % \vspace{-\baselineskip}%
348 % \noindent}
349
350 % %%%%% for demoing chapterstyles
351 % \newcommand*{\chaptext}[1]{The above is a demonstration of the \textit{#1}
352 % chapterstyle. It is one of several styles that come as part of the
353 % \Pclass{memoir} class.}
354
355 % %%%\renewcommand*{\theHchapter}{\thesheetsequence.\arabic{chapter}}
356
357 % \newcount\savechapcnt
358 % \newcount\demochapcnt
359 % \newcount\saveseccnt
360 % \newcount\savesubseccnt
361 % \demochapcnt=0
362 % %%\newcommand*{\theHc@demochapcnt}{\thefigure.\arabic{\c@demochapcnt}}
363 % \newcount\savefigcnt
364 % \newcount\saveftncnt
365
366
367 % %%% comma separated in-line items
368 % \let\litemize\itemize \let\endlitemize\enditemize
369 % \renewenvironment{litemize}{\renewcommand{\item}{\unskip, }}{}
370 % \newenvironment{lineitems}{\litemize\renewcommand{\item}{\unskip, }}%
371 % {\endlitemize\unskip }
372139
373140 %%%%%% for FontSite fonts
374141 \newcommand*{\FSfont}[1]{%
447214 \centering\begin{vplace}\begin{minipage}[c][\txtheight]{\txtwidth}}%
448215 {\end{minipage}\end{vplace}\end{boxminipage}}
449216
450 %%%%%%%%%%%%%%%%%%
451
452
453217 %%%%%%%%% section head designs
454218 \newcommand*{\defaultsecheads}{
455219 \setsecheadstyle{\normalfont\Large\bfseries\raggedright}
Binary diff not shown
2020 %%
2121 \title{\cafeobj~User's Manual \\ --- ver.1.4.9 ---}
2222 \author{Ataru T. Nakagawa \and Toshimi Sawada \and Kokichi Futatsugi}
23 \date{\today}
23 %\date{\today}
24 \date{2013/3/1}
2425 \bibliographystyle{plain}
2526
2627 \maketitle
2930 \includegraphics[scale=0.2]{cafe-logo.pdf}
3031 \end{center}
3132 \vfill
32 \Hline
33 \begin{center}
34 \footnotesize{Revised on 2012/3 by Kosakusha}
35 \end{center}
33 %% \Hline
34 %% \begin{center}
35 %% \footnotesize{Revised on 2012/3 by Kosakusha}
36 %% \end{center}
3637 \thispagestyle{empty}
3738 %% \Hline
3839 %% %%%%
00 #!/bin/sh
1 VERSION=1.4.8rc4
1 VERSION=1.4.9rc9
22 DISTDIR=dist/cafeobj-$VERSION
33 DISTFILE=cafeobj-$VERSION.tgz
44
210210 -- may be because of a conflict of the declarations of
211211 -- _=_ in EQL and _=_ declared in PNAT
212212 -- and LHS of the equation declared does not match
213 open THEOREM-COMPILER
213 open THEOREM-COMPILER .
214214 -- assumptions
215215 eq ((if 0 = interpret(e) then 0
216216 else (if interpret(e) < sq(pivot(0,interpret(e)))
225225 red th1(/ e,n) .
226226 close
227227 -- BUT the following works!
228 open THEOREM-COMPILER
228 open THEOREM-COMPILER .
229229 -- assumptions
230230 eq ((if 0 = interpret(e) then 0
231231 else (if interpret(e) < sq(pivot(0,interpret(e)))
2626 -- " eq[exMid]: P or not P = true ." and
2727 -- "P:BoolBa" may
2828 -- interact in a bad manner!
29 open BOOLba
29 open BOOLba .
3030 set trace on
3131 red not P:BoolBa or false .
3232 set trace off
3333 close
3434
3535 -- (2) works properly
36 open BOOLba
36 open BOOLba .
3737 set trace on
3838 red not Q:BoolBa or false .
3939 set trace off
8080 singleton('a,0)))) .
8181 }
8282
83 open TEST
83 open TEST .
8484 --
8585 red update('c,10,t) .
8686 red insert('c,10,t) .
9797 valOfT(someT(((< 'd , 3 >) |
9898 ((< 'e , 10 >) | empty))))))))))))):?TOption"
9999
100 eof
100 -- eof
101101 **
102102 close
103103
5656 -- get
5757 op get : QueueErr -> QueueErr
5858 eq get((Q,X)) = Q .
59 eq (get(empty) = Q:Queue) = false .
59 eq (get(empty) = Q) = false .
6060
6161 -- top
6262 op top : QueueErr -> EltErr.D
22 -- ==========================================================
33
44 set always memo on
5 clean memo
5 set clean memo on
66
77 -- "set clean memo on" makes litte differences
88 -- is it contradicts to the general rule? 110228
2020
2121 -- verification of non existence of counter examples
2222 -- for 2 agents case
23 open (QLOCKijklTrans + QLOCKobEq + MEX)
23 open (QLOCKijklTrans + QLOCKobEq + MEX) .
2424
2525 -- defining observational/behavioral equivalence
2626 pred _=ob=_ : Config Config {memo} .
1414
1515 -- verification of non existence of counter examples
1616 -- for 2 agents case
17 open (QLOCKijTrans + QLOCKobEq + MEX)
17 open (QLOCKijTrans + QLOCKobEq + MEX) .
1818
1919 -- defining observational/behavioral equivalence
2020 pred _=ob=_ : Config Config {memo} .
6868
6969 -- verification of non existence of counter examples
7070 -- for 3 agents case
71 open (QLOCKijkTrans + QLOCKobEq + MEX)
71 open (QLOCKijkTrans + QLOCKobEq + MEX) .
7272
7373 -- defining observational/behavioral equivalence
7474 pred _=ob=_ : Config Config {memo} .
3333 show op (_ + _)
3434 describe op (_ + _)
3535
36 open NAT
36 open NAT .
3737 show
3838 show ops
3939 show sorts
123123 -- module in the module LIST(TRIV=>PNAT=) to NatList
124124
125125 --> testing PNAT=LIST
126 open PNAT=LIST
126 open PNAT=LIST .
127127 parse (s 0 | nil) .
128128 ops a b : -> Nat .
129129 red (0 | s 0 | nil) = (0 | s 0 | nil) .
268268 make NAT==LIST (LIST(TRIV=>NAT==))
269269
270270 --> testing the NAT==LIST
271 open NAT==LIST
271 open NAT==LIST .
272272 ops a b : -> Nat .
273273 red (0 | 1 | nil) = (0 | 1 | nil) .
274274 red (0 | 1 | nil) = (0 | 2 | nil) .
310310 (E1:Nat >= E2:Nat))}))
311311
312312 --> testing the NAT<=>LIST
313 open NAT<=>LIST
313 open NAT<=>LIST .
314314 ops a b : -> Nat .
315315 red (0 | 1 | nil) = (0 | 1 | nil) .
316316 red (0 | 1 | nil) = (0 | 2 | nil) .
515515 }
516516
517517 -- testing LISTord
518 open LISTord
518 open LISTord .
519519 parse hd nil .
520520 parse tl nil .
521521 ops a b : -> Elt .
549549 }
550550
551551 --> testing
552 open (LIST@(PNAT))
552 open (LIST@(PNAT)) .
553553 ops a b : -> Nat .
554554 red (0 | s 0 | nil) @ (0 | s 0 | nil) .
555555 red (a | b | nil) @ (a | b | nil) .
556556 close
557557
558558 --> using trace command
559 open LIST@
559 open LIST@ .
560560 ops a b c : -> Elt .
561561
562562 set trace on
591591 --> (i.e. @ri(L:Nat) = true)
592592 -- Proof: By induction on L1.
593593 -- I Base case
594 open PRED-LIST@
594 open PRED-LIST@ .
595595 -- check
596596 red @ri(nil) .
597597 close
598598 -- II Induction case
599 open PRED-LIST@
599 open PRED-LIST@ .
600600 -- arbitrary values
601601 op e : -> Elt.X .
602602 op l1 : -> List .
613613 -- (i.e. @assoc(L1:List,L2:List,L3:List) = true)
614614 -- Proof: By induction on L1.
615615 -- I Base case
616 open PRED-LIST@
616 open PRED-LIST@ .
617617 -- arbitrary values
618618 ops l2 l3 : -> List .
619619 -- check
620620 red @assoc(nil,l2,l3) .
621621 close
622622 -- II Induction case
623 open PRED-LIST@
623 open PRED-LIST@ .
624624 -- arbitrary values
625625 op e : -> Elt.X .
626626 op l1 : -> List .
2424 eq s(X) * Y = Y + (X * Y) .
2525
2626 -- _*_ distributes on _+_
27 eq X:Nat * (Y:Nat + Z:Nat) = (X * Y) + (X * Z) .
27 eq x:Nat * (y:Nat + z:Nat) = (x * y) + (x * z) .
2828
2929 }
3030
5454 -- instead of "open (FACT + FACT2) <CR> inc(EQL)"
5555 -- ****************************************************
5656 -- open (FACT + FACT2 + EQL)
57 open (FACT + FACT2)
57 open (FACT + FACT2) .
5858 inc(EQL)
5959 -- eof
6060 -- induction base M = 0
2424 eq s(X) * Y = Y + (X * Y) .
2525
2626 -- _*_ distributes on _+_
27 eq X:Nat * (Y:Nat + Z:Nat) = (X * Y) + (X * Z) .
27 eq x:Nat * (y:Nat + z:Nat) = (x * y) + (x * z) .
2828
2929 }
3030
5858 -- open (FACT + FACT2 + EQL)
5959 -- but
6060 -- the following two lines causes error; this is fixed at 148p23
61 open (FACT + FACT2)
61 open (FACT + FACT2) .
6262 inc(EQL)
6363
6464 --> induction base M = 0
1717 op f : S.M1 S.M2 -> S5
1818 }
1919
20 open M3
20 open M3 .
2121 red a.M1 .
2222 red a.M2 .
2323 red f(a.M1,a.M2) .
3030 op f : S.M1 S.M2 -> S6
3131 }
3232
33 open M4
33 open M4 .
3434 red a.M1 .
3535 red a.M2 .
3636 red f(a.M1,a.M2) .
4343 op f : S.M1 S.M2 -> S3
4444 }
4545
46 open M5
46 open M5 .
4747 red a.M1 .
4848 red a.M2 .
4949 red f(a.M1,a.M2) .
5656 op f : S.M1 S.M2 -> S4
5757 }
5858
59 open M6
59 open M6 .
6060 --> the three commented red commands
6161 --> make the system down to CHAOS level
62 -- red a.M1 .
63 -- red a.M2 .
64 -- red f(a.M1,a.M2) .
62 red a.M1 .
63 red a.M2 .
64 red f(a.M1,a.M2) .
6565 close
6666
6767 sh M6
6868 parse in M6 : a .
6969 sh op f
7070 --> the following does not return the expected result
71 parse in M6 : f(a,a) .
71 parse in M6 : f(a,a) .
33 op f : S -> S
44 }
55
6 open M * {op f -> _@}
6 open M * {op f -> _@} .
7
168168 }
169169 ) .
170170 }
171 select TEST .
171
172 set clean memo on
173 open TEST .
172174
173175 --> (1) exec test
174176
175 -- exec input .
177 exec input .
176178
177179 --> (2) red _==>!_ test
178180 --> This search should find the normal form of the above execution (1).
179181
180 -- red input ==>! L:List .
182 red input ==>! L:List .
181183
184 close
185 set clean memo off
186
187 --
188 eof
189
190
684684
685685 -- (ss ; drSr ; duSr ; rr ; rs ; drRs ; duRs ; sr)
686686
687 eof
687 -- eof
688688
689689 -- (0.000 sec for parse, 2717438 rewrites(205.180 sec), 64516479 matches) with cafeobj149rc6 130101
690690 -- (1.250 sec for parse, 2854107 rewrites(401.330 sec), 79646800 matches) with cafeobj149rc9 130101
88 (eval-when (eval load compile)
99 (setq cafeobj-version-major "1.4")
1010 (setq cafeobj-version-memo (format nil "~a" "PigNose0.99"))
11 (setq patch-level (format nil "~a" ""))
11 (setq patch-level (format nil "~a" "1"))
1212 (if (not (equal "" cafeobj-version-memo))
1313 (if (not (equal "" patch-level))
1414 (setq cafeobj-version-minor
15 (format nil ".9rc9(~a,~A)"
15 (format nil ".9(~a,~A)"
1616 cafeobj-version-memo
1717 patch-level))
1818 (setq cafeobj-version-minor
19 (format nil ".9rc9(~a)" cafeobj-version-memo)))
20 (setq cafeobj-version-minor ".9rc9"))
19 (format nil ".9(~a)" cafeobj-version-memo)))
20 (setq cafeobj-version-minor ".9"))
2121 (setq cafeobj-version (concatenate 'string
2222 cafeobj-version-major
2323 cafeobj-version-minor))