gnu-emacs-sources
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

scholia.el


From: Joe Corneli
Subject: scholia.el
Date: Mon, 07 Mar 2005 10:27:05 -0600

This code is meant to be a "proof of concept" for the digital library
infrastructure described here:

 
http://oddwiki.taoriver.net/wiki.pl/AsteroidMeta/A_scholium-based_document_model

The basic idea is to create a "sea of documents" that can be attached
to one another.  For example comments on an essay might be attached to
the essay.

This implementation is preliminary - some features I'm sure everyone
would like have simply been left out.  I'd be interested in comments
anyway.  Specifically, there is a use of `recursive-edit' I'm not so
sure about, and I wonder if it wouldn't be better to store the
collection of documents in a hash table. (Hash tables and user input
are new to me.)

An essay I wrote with commentary by me and by some reviewers who
didn't accept it into their conference is included as an example
showing how the system works.

;;; scholia.el --- for writing and viewing documents with scholia

;; Copyright (C) 2005 Joe Corneli <address@hidden>

;; Time-stamp: <jac -- Mon Mar  7 10:20:45 CST 2005>

;; This file is not part of GNU Emacs, but it is distributed under
;; the same terms as GNU Emacs.

;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published
;; by the Free Software Foundation; either version 2, or (at your
;; option) any later version.

;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Commentary:

;; The function `scholium' puts a document into a database of
;; documents.  We then have the opportunity to view any documents in
;; that database (see `select-document-to-view').  Some of the
;; documents will have scholia "about" portions of them, also in the
;; database, and these will be shown on-screen whenever the "base"
;; document is viewed.  Run `scholia-example' for an example of all of
;; this.  After a collection of documents and scholia have been
;; created, `wind-down-scholia' gives the user the opportunity to save
;; their work in scholia.el-compatible format.

;; Advice to new users:

;; The display here relies on font lock.  You might as well run
;;
;;    (global-font-lock-mode 1) 
;;                             ^ [Position cursor behind right paren
;;                               and hit C-x C-e (control+x followed
;;                               by control+e).]
;;
;; if you are going to test this file and you don't already have
;; font lock enabled globally.
;;
;; In order to create new scholia using the function
;; `make-scholium-about-current-document', you have to know how to
;; mark a region of text.  This is done by pressing C-SPC and then
;; using navigation commands to change the selected area.  To
;; cancel a selection, press C-g.  Since the exact endpoints of
;; the region are important, it is advisable that you also run
;;
;;    (setq transient-mark-mode t)
;;
;; Finally, some basic instructions for your first run:
;;
;;  M-x scholia-example
;;     gets an example set up.
;;
;;  RET (in the Document Selection buffer)
;;     view the document listed on the current line.
;;
;;  mark a region (in Main Document Display buffer)
;;     prepare to create a scholium about this region.
;;
;;  M-x make-scholium-about-current-document
;;     edit the new scholium (press C-c C-c to end).
;;
;;  M-x wind-down-scholia
;;     gives you a chance to save your work.

;; Current limitations: 

;; * If scholia have been written about overlapping pieces of text,
;;   display is going to get a bit weird.  This could be dealt with by
;;   a more intelligent fontification scheme - specifically, scholia
;;   could alternate in color, and regions with overlapping scholia
;;   should be shown in a third color.  Well, maybe that wouldn't work
;;   perfectly with the Scholia Display I have set up.  But it ought
;;   to work OK with a different type of display...  the idea of
;;   "right click" seems somehow relevant.  "Mouse over" (cursor over)
;;   could be important too.
;;
;; * We should have a function for reading-in documents that have been
;;   saved in our interchange format.
;;
;; * Can't create new top-level document (this would be easy to do,
;;   but I'm anxious to upload something...)
;;
;; * many more...

;;; Code:

(require 'align)
(require 'cl)

;; The "library" should probably be handled in a much more
;; sophisticated way, but a simple list will do for a prototype.
;; Ideally we would have some sort of file format that would allow you
;; to save the set of documents and scholia you have been working on.
;;
;; The format of elements of this list is:
;;
;; docname text &optional about beg end
(defvar document-list nil "This is our \"digital library\".")

;; this will pop up a window with the names of things in the digital
;; library.  Hit "enter" on one of these, and the document itself will
;; be opened.
;;
;; Maybe this shouldn't change the other windows unless asked - or
;; we could separate the window initializer from the document initializer.
;; Seems very sensible to me.
(defun select-document-to-view ()
  (interactive)
  (pop-to-buffer (get-buffer-create "Document Selection"))
  ;; setting up the rest of the windows too...
  (save-excursion (delete-other-windows)
                  (split-window-vertically)
                  (other-window 1)
                  (switch-to-buffer (get-buffer-create 
                                     "Main Document Display"))
                  (split-window-horizontally)
                  (other-window 1)
                  (switch-to-buffer (get-buffer-create 
                                     "Scholia Display"))
                  (other-window 1))
  (update-document-selection-display)
  (document-selection-mode))

(defvar show-all-scholia-in-selection-buffer nil 
  "Environment variable used to toggle display of all scholia.")

(defun update-document-selection-display ()
  (set-buffer (get-buffer-create "Document Selection"))
  (delete-region (point-min) (point-max))
  (dolist (docstr document-list)
    ;; only list selectable scholia, unless we've been instructed
    ;; otherwise.
    (when (or show-all-scholia-in-selection-buffer (sixth docstr))
      (insert
       (format "%s   |-%s...\n" 
               (car docstr)
               (replace-regexp-in-string
                "\n" " "
                (substring (cadr docstr) 
                           0 
                           (min 30
                                (1- (length
                                     (cadr docstr))))))))))
  ;; just copied and modified from `align-regexp'...
  (align-region (point-min) (point-max) 'entire 
                (list (list nil (cons 'regexp "|-")
                            (cons 'group (abs 0))
                            (cons 'justify t)
;                           (cons 'bogus 0)
                            (cons 'spacing 0)
;                           (cons 'column (abs 0))
                            (cons 'repeat 0))) nil nil)
  (goto-char (point-min))
  (while (re-search-forward "|-" nil t)
    (replace-match "  "))
  (untabify (point-min) (point-max)))

(defun toggle-show-all-scholia ()
  "Toggle display of all scholia in the Document Selection buffer."
  (interactive)
  (setq show-all-scholia-in-selection-buffer 
        (not show-all-scholia-in-selection-buffer))
  (update-document-selection-display))

(defun delete-scholium ()
  (interactive)
  (save-excursion
    (goto-char (line-beginning-position))
    (when (looking-at "^.*?\\_>")
      (delete (assoc (intern (buffer-substring (point) 
                                               (save-excursion 
                                                 (forward-sexp 1) 
                                                 (point))))
                     document-list)
              document-list)
      (update-document-selection-display))))


;; We should have the option to view *all* scholia, toggle their
;; "selectability", and delete them, dired style.
(define-derived-mode document-selection-mode text-mode 
  "Docs"
  "Mode for selecting the document to view.
\\{document-selection-mode-map}"
  (set (make-local-variable 'font-lock-defaults)
       '(document-selection-font-lock-keywords)))

;; It would be cool to have the current document marked in a different
;; color from the others.
(defconst document-selection-font-lock-keywords 
  (eval-when-compile
    (list '("^.*?\\_>" 0 font-lock-function-name-face))))

;; We could also provide functionality for deleting articles, and for
;; showing all of the articles in the collection.
(setq document-selection-mode-map
      (let  ((map (make-sparse-keymap)))
        (define-key map "
" 'document-selection-select)
        (define-key map "t" 'toggle-show-all-scholia)
        (define-key map "d" 'delete-scholium)
        map))

(defvar current-main-document nil 
  "The canonical name of the current document.")

;; It would be cool if you could edit either the scholia or the
;; original document, and have notifications of changes (character
;; positions) spread throughout the DL, or at least have the stuff
;; saved.  Text properties might be the way to go for making sure
;; character positions are updated properly.
;; 
;; if there are scholia about *our* scholia, then we should be
;; able to "scroll" to the right, to read those scholia, and
;; scroll back to the left to read the previous ones -- my
;; goodness, but this is getting complicated.
;;
;; And remember, we still need a way to *combine* various
;; documents from the DL to make one "main" document to put in
;; the main document display box.
(defun document-selection-select ()
  (interactive)
  (save-excursion
    (goto-char (line-beginning-position))
    (when (looking-at "^.*?\\_>")
      (let* ((current-doc (intern (buffer-substring (point) 
                                                    (save-excursion 
                                                      (forward-sexp 1) 
                                                      (point)))))
             (docstr (assoc current-doc document-list)))
        (when docstr
          (set-buffer (get-buffer-create "Main Document Display"))
          (delete-region (point-min) (point-max))
          ;; we first insert the text and then see if at has any scholia
          ;; associated with it.  If there are scholia, then we should
          ;; display those in a separate window alongside.
          ;; setting up the windows appropriately is something I guess we 
          ;; should do at first, all at once...
          (insert (cadr docstr))
          (setq current-main-document (car docstr))
          (update-scholia-display))))))

(defun update-scholia-display ()
  (set-buffer (get-buffer-create "Scholia Display"))
  (delete-region (point-min) (point-max))
  (setq scholia-count 0)
  ;; instead of adding all of the scholia right away, it might
  ;; be better to cache them in a list and then `sort' them.
  ;;
  (let (sorted-scholia)
    (dolist (possible-scolium document-list)
      ;; whenever the possible-scolium is "about" the current doc,
      ;; we do some stuff.
      (when (eq (third possible-scolium) current-main-document)
        (setq sorted-scholia (cons possible-scolium sorted-scholia))))
    (when sorted-scholia
      (mark-things-up 
       (sort sorted-scholia #'(lambda (scho1 scho2) 
                                (< (fourth scho1) (fourth scho2))))))))

(defvar scholia-display-buffer-positions nil)

;; this should maintain a list of buffer positions that tell us the
;; start and end of each of the scholia in the Scholia Display window
;; -- this list can be used to decide, if we are about to create a new
;; scholium, whether to make it about one of the existing scholia, or
;; about the scholium list.
;;
;; And when one of these scholia has some scholium written about it,
;; that should be indicated here visually somehow.
(defun mark-things-up (scholium-list)
  (setq scholia-display-buffer-positions nil)
  (dolist (scho scholium-list)
    (let ((sbeg (point)))
      (insert (second scho))
      ;; now that we're maintaining the
      ;; `scholia-display-buffer-positions' list, we could wait until
      ;; everything was inserted to adjust the text properties, then
      ;; do that in some way that depended, say, on the total number
      ;; of scholia that had been inserted.  But whatever.
      (set-text-properties 
       sbeg
       (point)
       ;; use different faces for the different scholia
       `(face ,(scholium-face))
       (get-buffer "Scholia Display"))
      (add-to-list 'scholia-display-buffer-positions (cons (first scho) (list 
sbeg (point))) t)
      (insert "\n\n")
      (set-text-properties
       (fourth scho)
       (fifth scho)
       ;; should use different faces for the different scholia
       ;; I guess...
       `(face ,(scholium-face))
       (get-buffer "Main Document Display"))
      (setq scholia-count (mod (1+ scholia-count) 6)))))

(defvar scholia-count 0)

(defun scholium-face ()
  (cond ((eq scholia-count 0)
         'font-lock-comment-face)
        ((eq scholia-count 1)
         'font-lock-type-face)
        ((eq scholia-count 2)
         'font-lock-keyword-face)
        ((eq scholia-count 3)
         'font-lock-preprocessor-face)
        ((eq scholia-count 4)
         'font-lock-variable-name-face)
        ((eq scholia-count 5)
         'italic)))

;; We should also save "bookkeeping" information - like author or date
;; or whatever.
(defun scholium (can text &optional about beg end selectable)
  "Put canonically-named document CAN, with text TEXT, in scratch buffer. 
ABOUT is a document that this scholium is attached to. BEG and
END are optional character positions within ABOUT denoting the
region being commented on. A scholium is only listed in the Document
Selection buffer if it is SELECTABLE."
  (setq document-list 
        (add-or-replace document-list 
                        (cons can (list text about beg end selectable))
                        ;; the fact that this appears to work is a
                        ;; little scary.  should probably rewrite to
                        ;; not be scary.
                        #'(lambda (obj) (eq (car obj) (car elt))))))

(defun add-or-replace (lis elt pred)
  (let ((unfound t)
        (n 0)
        (len (length lis)))
    (while (and unfound 
                (< n len))
      (when (funcall pred (nth n lis))
        (setcar (nthcdr n lis) elt)
        (setq unfound nil))
      (setq n (1+ n)))
    (when unfound
      (setq lis (append lis (list elt)))))
  lis)

;; very preliminary (not a "real" function yet).  This should probably
;; behave differently depending on whether we are making a scholium
;; about the current "main" document, or one of the scholia...

(defvar new-scholium-name "" "Name of the new scholium we're creating.")

(defvar new-scholium-about nil "Scholium this one is attached to.")

(defvar new-scholium-beg nil "Beginning of the referenced text.")

(defvar new-scholium-end nil "End of the referenced text.")

;; We can now successfully make a scholium about the current main
;; document - but how about one of the scholia?  How should such 
;; a secondary scholium be displayed?
;;
;; Oh, and another thing, it would be good to be able to add a
;; scholium directly to the document list without having it be "about"
;; anything in particular at all (i.e. a top-level document).
(defun make-scholium-about-current-document ()
  (interactive)
  (cond ((equal (buffer-name (current-buffer)) "Main Document Display")
         (setq new-scholium-about current-main-document
               new-scholium-beg (region-beginning)
               new-scholium-end (region-end))
         (make-scholium))
;        ((equal (buffer-name (current-buffer)) "Scholia Display")
;         )
        (t
;         (error "Currently only enabled in \"Main Document Display\" and 
\"Scholia Display\" buffers")
         (error "Currently only enabled in \"Main Document Display\" buffer for 
now"))))

(define-derived-mode new-scholium-mode text-mode 
  "New"
  "Mode for editing a new scholium.
\\{new-scholium-mode-map}"
  (setq fill-column 64))

(define-key new-scholium-mode-map
  "" 'escape-scholium-creation)

;; This should probably forbid the creation of "empty" scholia, because
;; these are rather silly.
(defun escape-scholium-creation (selectable)
  "Get out of the recursive edit, and store the contents of the scholium.
If SELECTABLE is non-nil, the scholium will be added to the index."
  (interactive (list
                (y-or-n-p "Make scholium selectable? ")))
  (scholium (intern (replace-regexp-in-string " " "-" new-scholium-name) )
            (buffer-substring-no-properties (point-min) (point-max))
            new-scholium-about
            new-scholium-beg
            new-scholium-end
            selectable)
  (if selectable
      (update-document-selection-display))
  ;; we should also update the main document window and the scholium window.
  (update-scholia-display)
  (kill-buffer (concat "Editing scholium:" new-scholium-name))
  ;; either this function or some main function should save the text
  ;; of the DL in some readable format in buffer from which it can be
  ;; restored.
  (throw 'exit nil))

(defun make-new-toplevel-scholium ()
  (interactive)
  (setq new-scholium-about nil
        new-scholium-beg nil
        new-scholium-end nil)
  (make-scholium))

(defun make-scholium ()
  (let ((config (current-window-configuration)))
    (setq new-scholium-name (read-string "Scholium name: "))
    (set-buffer "Document Selection")
    (other-window -1)
    (split-window-horizontally)
    (other-window 1)
    (switch-to-buffer (get-buffer-create (concat "Editing scholium:" 
new-scholium-name)))
    (new-scholium-mode)
    (recursive-edit)
    ;; this is where we wait for user input; see `escape-scholium-creation'.
    (set-window-configuration config)))

;; We should presumably offer the option of just saving new or modified
;; scholia, rather than saving the whole library.
(defun wind-down-scholia (save)
  (interactive (list (y-or-n-p "Write current library to buffer? ")))
  (when save
    (set-buffer (get-buffer-create "*Scholia*"))
    (delete-region (point-min) (point-max))
    (dolist (doc document-list)
      (write-out-scholia doc))
    (delete-char -1)
    (message "Library written to *Scholia* (not yet saved to disk)."))
  (kill-buffer (get-buffer-create "Scholia Display"))
  (kill-buffer (get-buffer-create "Main Document Display"))
  (kill-buffer (get-buffer-create "Document Selection")))

(defun write-out-scholia (doc)
  (insert (concat "(scholium '" (format "%s" (first doc))
                  "\n" (format "%S" (second doc))
                  "\n'" (format "%s" (third doc))
                  " " (format "%s" (fourth doc))
                  " " (format "%s" (fifth doc))
                  " " (format "%s" (sixth doc))
                  ")\n\n")))

;;; Text:

(defun scholia-example ()
  "A ready-made example for testing this code.
Warning: this will change `document-list', so if you're in the
middle of working on a collection of documents already, you may
want to run `wind-down-scholia' and save your work before running
this function."
  (interactive)
  (setq document-list nil)
  (scholium 'original-document
            "The HDM project
Joseph Corneli


Introduction

What exactly the Hyperreal Dictionary of Mathematics is meant to be
is this: a free and comprehensive database of mathematics together
with tools that enable efficient interaction with this database. To
introduce more colorful terms, the goal of the HDM project is to
make a simulation of mathematics that surpasses ``real'' mathematics
in possibility.

The first objective of the project is to systematically transpose
all extant mathematics into free hypertext. Optical character
recognition software that works on mathematical text, mathematical
language parsing software, and hypertext generating software are
three stepping stones that I think could help achieve this
objective. These tools would allow one to transform print-based
mathematical text into electronic hypertext automatically.

Human-generated hypertext is not meant to be excluded, but given the
quantity of extant mathematics, and the fact that much of the text
falls under copyright, and the need for some standards for the
database entries, automation of many parts of the process will be
critical.

The underlying reason why such a project might be expected to work
at all is that math is highly modular, or outline-based. By this I
mean that you can read math on many levels; you can get the outline
of an argument and then later fill in the details. You can follow up
on related ideas if you wish, or ignore them.  You can seek an
in-depth understanding of a theorem or definition, or you can just
use it and see that it works. Above all, you do not have to
understand all the details of a problem to have a good understanding
of one of its minor aspects.

This phenomenon of modularity means that the database can grow by
small steps and that any electronic aids used in its production
(such as a parser or hypertext generator) can be made to work
without a terribly huge scope.

As time goes by and the database grows, more knowledge-intensive
tasks can be carried out.  Among these is the development of a
library of new free mathematical works.  Sometimes these works will
take the form of collections of dictionary entries, sometimes
documentation that explains how to use some aspect of the dictionary
effectively. Some will contain original mathematics.  The semantic
content of all of these works, whether technical or expository,
should be added to the HDM.


On developing the HDM

Since we currently do not have robust math-ready OCR, extant
transparent texts are our only testing ground for the parsing tools
we will develop (1).  It isn't clear yet whether it will be possible
to create the kernel of the HDM any other way than ``by hand''.
Nonetheless, the more high-quality transparent mathematical text we
have to work with, the better.

We should now ask: what exactly is the kernel supposed to be?  The
HDM kernel is what needs to exist for the HDM to autonomously
support creation and linking of new entries from transparent
source. In other words, the HDM kernel is whatever software and
mathematical content we need to prime the pump. However, once a
kernel is ready, that is not the end of the story. On the one hand,
no doubt the kernel will run into trouble a lot, especially at
first, and it will have to be fixed. On the other hand, even once it
is running quite smoothly, its behavior should be continually
improved. For instance, as the HDM grows, the kernel will have to be
used to refactor entries into more useful forms, and we will want to
implement new and better ways to do this.

It should be clear that while the HDM is motivated by formal
mathematics, in contrast to proposed systems like QED, the HDM does
not lie properly within formal mathematics.  While people working on
the core of the kernel will certainly have to be comfortable working
with formal mathematics, later we will write software that will make
it relatively easy for anyone to write for the HDM.

Similarly, while the HDM is motivated by mainstream AI, we do not
intend to stick to AI methods. In particular, we do not expect to
produce an artificial system that will learn math the same way
people do -- at least not for a very long time.  It will also be a
long time before the HDM will be able to parse a whole paper
automatically.  Prerelease versions of the kernel will require a
human operator to answer questions as it runs, and dialog with human
users will be an important part of the system for the foreseeable
future.

OCR is considered separately from the other tools for a few reasons.
First, producing a robust math OCR program seems to be particularly
challenging, and second, it isn't completely clear that it will be
necessary.  While I am fairly confident that OCR will eventually
become far more efficient than typing, the fact of the matter is
that a lot of important math has been typed into the computer
already. We can begin with this body of work. Before too long,
someone else may develop a free OCR engine -- perhaps the people
working on the Digital Mathematics Library at Cornell University
(2).  It is even conceivable that, working together with their
colleagues around the world, the DML group will transform all, or
most, extant mathematics into a transparent form. If they do, their
methods will almost certainly differ from the ones we would have
employed.  In particular, it is not clear at this point how they
will deal with the fact that most mathematical writing is currently
under copyright protection.  If they choose the route of simply
digitizing the portion of mathematical writing that lies in the
public domain, then their product will be free in the sense of
freedom, but not comprehensive in any concrete sense.


On freedom as it relates to the HDM

All the content that is generated automatically by the HDM software
will be placed in the public domain. The code for the kernel of the
HDM will be developed and released under the GNU General Public
License.

The HDM will make freedoms akin to those guaranteed by free software
licenses part of day-to-day mathematics, but it will do this in a
hithertofore unprecedented way (3).  The success of the HDM project
hinges upon the basic freedom to write about any idea whatsoever. As
we improve the kernel, all mathematics that is understandable to
humans will eventually become part of the HDM. The HDM will catch up
with the frontiers of mathematical knowledge.  As this comes about,
people will still be able to publish mathematics in a traditional
medium, but they typically will not be able to distribute their
writing without their ideas quickly being improved upon inside the
HDM.

It is not our ambition to put all publishers of mathematics out of
business any more than it is our ambition to disenfranchise teachers
or producers of mathematics; on the contrary, the HDM will create
new opportunities in all of these areas, even as it transforms them.


Some fundamentals, or, this is not the HDM manifesto

  Math is very much like software. But there are also many
  differences.

  Math is in many ways like an operating system for human minds (and
  it also works very well on distributed networks of human
  processors). It is even more like a ``complete Unix-compatible
  software system'' to quote Stallman's description of GNU (4). But
  again, there are many differences.

  To continue the analogy, we might say that if math was software,
  it would be a very special kind of software, namely software that
  lends itself to performing simulations. We could say that the
  mind, when thinking about math, engages with a prototypical
  hyperreality.

  There is software that can ``do math for you'' -- for example,
  software that can row reduce a matrix. This software engages with
  the same hyperreality that your mind engages with when you do
  math. Accordingly, a free version of all such software belongs in
  the HDM.

  Furthermore, there is a lot of ``code'' in math that hasn't been
  written in a language that a computer can compile, much less
  execute. For example, there is an algorithm for determining the
  canonical form of a 2-D surface that is specified by identifying
  pairs of edges from a planar polygon in a given way. Is there a
  version of this algorithm that a computer can execute?  Yes there
  is: I know, because I wrote a version of this algorithm in C (not
  the best implementation, but it works).  There are lots of
  mathematical algorithms for which there is no computer
  code. Indeed, many proofs are algorithms: ``If epsilon is greater
  than zero, then there is some delta such that...'' -- if the proof
  tells you how to get an appropriate delta, it is an
  algorithm. Ideally, all such ``software'' would be included in the
  HDM. Certainly any math that is a self-proclaimed algorithm that
  does something potentially useful (e.g.  polynomial-time primality
  testing) should be included in the HDM in an actionable form.

  The body of extant mathematics is vast and largely unknown. To the
  best of my knowledge, there is no systematic catalog or census of
  mathematical results.

  As far as I can tell, anyone has the right to think or write about
  anything in mathematics, but one is typically not allowed to
  redistribute the writing of other people (i.e. copyright law
  restricts copying of mathematical writing).  It would appear that
  while mathematics itself is close to being free, encodings of
  mathematics are in general not free. (This applies to both text
  and code.)

  However (and that is a big however) the mathematical analogue of
  ``source code'' can not be said to be all that readily
  available. Nor can it be said to be totally unavailable. The fact
  of the matter is that it is not available to many people.

  The primary reason that mathematical source is not readily
  available is that most mathematical source code is currently
  stored in opaque formats (books in particular) (5). Another reason
  is that mathematical writing is sometimes rather turgid, and a
  third reason is that scope problems frequently make it hard to get
  the information you're looking for when you want it.

  The issue of ``capital formation'' applies to mathematics. It
  appears that (if one is unlucky) one can study math without
  establishing any mathematical capital. For individuals,
  mathematical capital seems to exists on two levels -- there is
  ``real'' capital, which gets embodied in things like books and
  journal articles (i.e. including in particular the ones you see in
  vitas) and there is ``hyperreal'' capital, which is knowledge,
  that one can use to exploit the resources of mathematics in order
  to produce new mathematics or related mathematical commodities.

  The issue of the ``gap between developed and developing
  countries'' is mirrored in mathematics by the gap between
  established mathematicians and students. Students (and, I suppose,
  others) who are capable of establishing sufficient mathematical
  capital have a chance of ``making it'' as mathematicians.


The HDM and the ``Moore method''

I am writing this note from the University of Texas at Austin. Much
of it was written at the Robert Lee Moore Mathematics, Physics, and
Astronomy building, where I was literally surrounded by reminders of
Moore. I've often asked myself whether the HDM is compatible with
Moore's problem-solving method of instruction.  Moore's method is an
extension of Socrates' method of instruction by
questioning. According to the strictest interpretation of this
method, students are not allowed to look at books or even talk to
each other about the problems they are assigned.  Moore's idea was
that you gain strength by figuring things out for yourself and that
you are made weak by having someone else tell you the answers.

The HDM would make all the answers to basic problems available to
anyone who would want to use them.  This seems to suggest that the
existence of the HDM would lead to there being more weak
mathematicians.  Though, of course, in a context where the answers
are available, the artificial restraining of oneself from looking at
the answers is also always available.

Is it a good idea to restrain oneself in this way? Moore thought
so. I'm not so sure. For one thing, even if the answers to many
questions are known, the answers to many other harder questions
remain unknown. If it is confronting the unknown that makes you a
stronger mathematician, then why not confront the unknown that
nobody knows, rather than the unknown that lots of people know?

On the other hand, there is the possibility that confronting the
basics as unknowns (even though they are actually known to lots of
people) is what makes for strong mathematicians. In fact, this seems
very likely to me.  Nevertheless, students can not learn in a
vacuum.

In sum, the HDM would not force people to learn by the Moore method
or the ``anti-Moore method'' or any other method. It would make it
easier for students to search for the method they felt suited them
the best and work towards the goals that they found most
worthwhile. It would also make many more resources available to
people who are interested in learning what kinds of educational
methods are most effective.


Obstacles, real and imagined

We must ask whether it is legal to produce the HDM.  Though we will
not copy directly from texts, we will endeavor to copy all of the
ideas from a large set of texts. I imagine that this activity is
legally safe because it is something that people do all the
time. Indeed,

  In no case does copyright protection for an original work of
  authorship extend to any idea, procedure, process, system, method
  of operation, concept, principle, or discovery, regardless of the
  form in which it is described, explained, illustrated, or embodied
  in such work (6).

Some concern has arisen over the possibility that the particular
selection of ideas in a given book might be subject to copyright
protection. More generally, it isn't perfectly clear how far
copyright protection for a particular way of expressing an idea or
collection of ideas actually goes.

A recently proposed bill, HR 3261, would go beyond copyright to make
it illegal to copy collections of facts that appear in
databases. According to HR 3261,

  the term `database' means a collection of a large number of
  discrete items of information produced for the purpose of bringing
  such discrete items of information together in one place or
  through one source so that persons may access them (7).

For purposes of enforcement, a periodical issue, anthology, or
encyclopedia would be considered to be a database.  I hope that this
bill does not pass into law.

Another concern is what to do about the fact that people are taking
out patents on math (in the form of software patents).

One extra-legal concern has to do with proofs or theorems that are
in some sense inaccessible to computers. Perhaps there are proofs
that can not be written down in a sensible way (though I doubt if
any such proof would be acceptable to human mathematicians), or that
rely on ideas or perceptions that can not be formalized (though I
wonder if such things could qualify as mathematics).  Going to the
other extreme, there are computer proofs that are inaccessible to
humans in some sense.  If private companies or individuals keep
details of such proofs a secret, they may remain inaccessible to the
HDM for some time.


Acknowledgments

The following people have had particularly helpful comments on the
HDM project or on the contents of this essay; they are listed here
approximately in reverse chronological order from the time I first
talked with them about the project: Bob Boyer, Madeleine Corneli,
Karl Berry, Lawrence Lessig, Richard Stallman, David Jao, Daniel
Ford, Frank Morgan, Richard Fateman, Rajesh Bhatt, Tandy Warnow,
Gordon Novak, Luther Gerlach, Reuben Hersch, Aaron Krowne, Greg
Newby, Michael Hart, Steve Corneli, Zoe Corneli, Timothy Teravainen.
Don Simon kindly sent me a copy of his thesis and associated code
related to proof-checking proofs written in natural
language. Richard Fateman kindly sent me a code-base he had
developed for doing math OCR.


Notes

(1) A ``Transparent'' copy of [a] Document means a machine-readable
    copy, represented in a format whose specification is available
    to the general public, whose contents can be viewed and edited
    directly and straightforwardly with generic text editors or (for
    images composed of pixels) generic paint programs or (for
    drawings) some widely available drawing editor, and that is
    suitable for input to text formatters or for automatic
    translation to a variety of formats suitable for input to text
    formatters. A copy made in an otherwise Transparent file format
    whose markup has been designed to thwart or discourage
    subsequent modification by readers is not Transparent. (Source:
    the GNU Free Documentation License Version 1.2.).

(2) To get a sense of this project's goals, please see Twenty
    centuries of mathematics: Digitizing and disseminating the past
    mathematical literature, by John Ewing. The current version of
    this document is http://www.ams.org/ewing/Twentycenturies.pdf.

(3) Free software is defined in terms of the following four
    freedoms:

    The freedom to run the program, for any purpose.

    The freedom to study how the program works, and adapt it to your
    needs.

    The freedom to redistribute copies so you can help your neighbor.

    The freedom to improve the program, and release your
    improvements to the public.

    (Source: The Free Software Definition, as published by the Free
    Software Foundation.).

(4) (Source: The GNU Manifesto.).

(5) A copy that is not ``Transparent'' is called
    ``Opaque''. (Source: the GNU Free Documentation License Version
    1.2.).

(6) (Source: Title 17 of the United States Code.) Thanks go to David
    Jao for bringing this particular passage my attention.

(7) (Source: HR 3261, Database and Collections of Information
    Misappropriation Act.)
"
            nil nil nil t)


  (scholium 'first-reviewers-summary
"A sort of manifesto for a visionary project." nil nil nil t)


  (scholium 'first-reviewers-comments
"The paper is a kind of mainfesto (even if the author claims the
converse) for a long-term (how long?), visionary project of global
mathematical repository, comprising both documents and tools. Even
if some of the goals of the HDM project can be shared, this kind of
documents are strictly counterproductive.

In particular:

a. the paper does not contain any real analysis of the current state
of the art. The few other projects mentioned, namely QED or the
\"Digital mathematical Library\" group at Cornell are quoted in a way
that reveals no actual knowledge of their work. A lot, of other work
shoul be mentioned as well (the list is just too long to be recalled
here; the list of topics of MKM could provide a vague idea of its
complexity).

b. the paper does not provide any sensible timetable, with clear
milestones. In this way, it is impossible to make a distinction
between a dream and a project.

c. the paper does not give any hint on the current state of
advancement of the work. We presume the project has not really
started yet." nil nil nil t)

  (scholium 'second-reviewers-summary
"This paper is simply a discussion of ideas.  Although there are some
good points in the discussion, there is no evidence of work,
research or experimentation which lead to solid results or a system
upon which this paper is based.  The paper simply reports opinions
and plans which are not substantiated neither by research nor by
experimentation. As such, the paper is really neither research nor
experience.  Rather, just a bunch of ideas and opinions." nil nil nil t)

  (scholium 'second-reviewers-comments
"It is not clear what is proposed in the paper, how it can be done or
why it will work.  It is not clear whether the author is aware of
the different research in the field or whether he knows the
directions to follow.  The project as proposed remains too immature
for making any impact." nil nil nil t)

  (scholium 'second-reviewers-points
"The style, the content free discussions, the lack of directions,
lack of comparisons, lack of literature and lack of research are all
points against." nil nil nil t)


  (scholium 'third-reviewers-summary
"The paper describes the Hyperreal Dictionary of mathematics project.
The project is not really describes, only some (rather superficially
described) considerations relations to such an enterprise are given." nil nil 
nil t)

  (scholium 'third-reviewers-comments
"The paper is very preliminary. No concrete details of the project
are given. The points brought up are very general and not at all
discussed in depth. There are many related projects, but non of them
is discussed (except one at Cornell) and no references are given, so
the paper is far from complete. Also the points that are brought up
are not really interesting. E.. pae 2 whee the \"kernel\" is discussed
contains rather empty definitions and no concrete details. The
discussions on copy right and GNU licences seem rather irrelevant at
this point: there are more interesting technical problems to be
solved." nil nil nil t)

  (scholium 'third-reviewers-points
"See above: only point against, no points in favour." nil nil nil t)

;; building a base document according to some markup style ;
;; remember that we need input like... ;
;; can text &optional about beg end ;
;; ;
;; Remember that for some forms of combined documents, it is important ;
;; to combine the scholia from those documents too, and make them ;
;; apply to the new compiled document. ;

;; (scholium 'first-reviewers-review  (review-concat ;
;;                                     'first-reviewers-summary ;
;;                                     'first-reviewers-comments)) ;

;; (scholium 'second-reviewers-review (review-concat ;
;;                                    second-reviewers-summary ;
;;                                    second-reviewers-comments ;
;;                                    second-reviewers-points)) ;

;; (scholium 'third-reviewers-review (review-concat ;
;;                                    third-reviewers-summary ;
;;                                    third-reviewers-comments ;
;;                                    third-reviewers-points)) ;

;; (scholium 'reviews-of-hdm-paper (combine-reviews ;
;;                                  'first-reviewers-review ;
;;                                  'second-reviewers-review ;
;;                                  'third-reviewers-review)) ;


;; My replies ;

;; Note that `scholium' should *replace* anything with the same name ;
;; that is present in the digital library whenever it is reevaluated. ;
  (scholium 'on-manifestos
"A manifesto entails a detailed plan; the reason I
didn't say manifesto is the same reason they didn't
like the paper.  So much for being honest."
'first-reviewers-comments 1 74)

  (scholium 'more-than-a-repository
"Anyway, its rather more than a repository."
'first-reviewers-comments 75 193)

  (scholium 'on-being-counterproductive
"What is meant by \"counterproductive\"?"
'first-reviewers-comments 194 308)

  (scholium 'on-not-being-state-of-the-art
"This is a fair point, but more relevant WRT linguistics."
'first-reviewers-comments 329 406)

  (scholium 'on-related-work
"I'm not so sure that knowledge of the work of QED
or DML is actually that important to the essay.
Obviously the list of related work is long.  Does
it really help to recite the list?"
'first-reviewers-comments 407 743)

  (scholium 'comparison-to-other-manifestos
"The proposal doesn't seem any more vague than QED
or GNU manifestos.  Maybe I missed something."
'first-reviewers-comments 748 904)

  (scholium 'on-assuming-work-not-started
"That isn't a very sensible assumption.  Perhaps
this is just a manner of speaking."
'first-reviewers-comments 909 1041)

  (scholium 'on-talking-about-ideas
"Since when is that a problem?"
'second-reviewers-summary 1 44)

  (scholium 'on-lack-of-clarity
"This might be a fair comment, its hard to tell,
since the comment is neither substantiated by quotes
from the paper nor questions about the material!"
'second-reviewers-comments 1 87)

  (scholium 'on-disinterest
"I am amazed that the reviewer is not interested enough
to offer more detailed suggestions.  Apparently the paper
completely failed to earn a modicum of respect."
'second-reviewers-comments 218 286)

  (scholium 'your-harsh-words
"Harsh!  How about a complement sandwich?  Or even a
Reality Sandwich."
'second-reviewers-points 1 150)

  (scholium 'the-paper-doesnt-describe-its-topic
"The HDM project that is described is not the true
HDM project."
'third-reviewers-summary 1 207)

  (scholium 'on-being-preliminary
"Finally an insightful comment!"
'third-reviewers-comments 1 31)

  (scholium 'on-uninteresting-points
"Harsh!  They are really interesting to me. At least, I
think so."
'third-reviewers-comments 302 365)

  (scholium 'on-law-possibility-and-feasibility
"You can't separate theory from practice with a razor-thin
knife.  Since when is the law irrelevant?  The law is
what makes or breaks the HDM project, at least as much as
the \"technical problems\". A major point in the essay is that
the possibility of an HDM is entailed in the law.  True,
the feasibility is not, but does that matter?  Let's first
talk about possibilities; then allow feasibility to grow
on us as time goes by."
'third-reviewers-comments 466 610)

(scholium 'on-metadata
"Titles and whatnot should probably be stored as metadata."
'original-document 1 16 nil)

(scholium 'compare-impossible-exchange
"Compare Baudrilliard's somewhat positive take on hyperreality
in the book \"Impossible Exchange\"."
'original-document 316 400 nil)

(scholium 'innocence
"This does seem a bit innocent to me now."
'original-document 1121 1244 nil)

(scholium 'on-footnotes
"It would be great to have footnotes done as scholia instead.
This would be a case in which the TYPE of the scholium 
influenced the way it was displayed."
'original-document 2416 2567 nil)

(scholium 'awkward-transition
"Somewhat awkward transition.  Once I get better at writing,
maybe I'll come back and rewrite this whole article to make
it sound better!"
'original-document 5471 5688 nil)

(scholium 'teachers-are-present
"Of course, teachers are available -- and in this model, they filter 
all the on-topic information about the outside world to the students."
'original-document 11453 11619 nil)

(scholium 'different-kinds-of-utility
"It may depend on what the \"utility landscape\" looks like."
'original-document 12133 12183 nil)

(scholium 'free-culture-point-of-view
"From the \"Free Culture\" point of view, this is probably the most
important section in the essay."
'original-document 13239 13405 nil)

(scholium 'very-philosophical
"This goes beyond \"free culture\" to epistemology.  The idea
that computers simply can not be good at math is one that
I've come across, and don't exactly know how to respond to."
'original-document 14900 15178 nil)

  (select-document-to-view))

;;; scholia.el ends here




reply via email to

[Prev in Thread] Current Thread [Next in Thread]