From plummer@TIS.COM  Sun Jun 17 04:57:34 1990
Received: by iris.ucdavis.edu (5.57/UCD.EECS.2.0)
        id AA00562; Sun, 17 Jun 90 04:57:34 PDT
Received: from [192.33.112.1] by clover.ucdavis.edu (5.59/UCD.EECS.1.11)
        id AA02082; Sat, 16 Jun 90 14:56:45 PDT
Received: by TIS.COM (5.61/1.34)
        id AA28833; Sat, 16 Jun 90 17:53:36 -0400
Date: Sat, 16 Jun 90 17:53:36 -0400
From: Dave Barker-Plummer <plummer@TIS.COM>
Message-Id: <9006162153.AA28833@TIS.COM>
To: info-hol@clover.ucdavis.edu
Subject: definitions

Mike Gordon writes ...

> Have you ever got fed up writing names three times in things like:
>
>   let Foo =
>    new_definition
>     (`Foo`,
>      "Foo x1 ... xn = ...");;

Yes indeed.  I implemented an alternative solution by extending the
EMACS-HOL interface.  The following EMACS code prompts for an ML-name,
HOL name and definiens (defaulting where appropriate).

----------------------------------------

(defun hol-def-string (definiens hol-name ml-name)
  (insert "\nlet "
          ml-name
          " = new_definition\n  (`"
          hol-name
          "`,\n  """
          definiens " "))


(defun hol-definition ()
  (interactive)
  (let ((ml-name (get-ml-name)))
    (let ((hol-name (get-hol-name ml-name)))
      (let ((definiens (get-definiens hol-name)))
        (hol-def-string definiens hol-name ml-name)
        (insert "\");;"))
        (backward-char 4))))


(defun get-definiens (hol-nmue)
  (let ((proto-definiens
         (read-from-minibuffer (concat "Definiens: (default " hol-name ") "))))
    (if (equal proto-definiens "")
        hol-name
      proto-definiens)))


(defun get-ml-name ()
  (let ((ml-name (read-from-minibuffer "ML Name: ")))
    (if (equal ml-name "")
        (progn
          (message "ML Name must not be empty")
          (sleep-for 1)
          (get-ml-name))
      ml-name)))

(defun get-hol-name (ml-name)
  (let ((hol-name (read-from-minibuffer
                     (concat "HOL Name: (default " ml-name ") "))))
    (if (equal hol-name "")
        ml-name
      hol-name)))





