aboutsummaryrefslogtreecommitdiff
path: root/coq.el
diff options
context:
space:
mode:
authorDavid Aspinall1998-09-03 13:51:41 +0000
committerDavid Aspinall1998-09-03 13:51:41 +0000
commit8b836f84d70fcea59ffa186f6809ebc6765b8a5f (patch)
tree8dc74b560cadf3b6e847e547776ccd0015dfa7f1 /coq.el
parentabbe57d8b69d79e9eb6899f182379d9c6c4fdc7f (diff)
Renamed for new subdirectory structure
Diffstat (limited to 'coq.el')
-rw-r--r--coq.el390
1 files changed, 0 insertions, 390 deletions
diff --git a/coq.el b/coq.el
deleted file mode 100644
index 3a34ab19..00000000
--- a/coq.el
+++ /dev/null
@@ -1,390 +0,0 @@
-;; coq.el Major mode for Coq proof assistant
-;; Copyright (C) 1994 - 1998 LFCS Edinburgh.
-;; Author: Healfdene Goguen and Thomas Kleymann
-
-;; $Id$
-
-(require 'coq-syntax)
-(require 'outline)
-(require 'proof)
-(require 'info)
-
-; Configuration
-
-(defvar coq-assistant "Coq"
- "Name of proof assistant")
-
-(defvar coq-tags "/usr/local/lib/coq/theories/TAGS"
- "the default TAGS table for the Coq library")
-
-(defconst coq-process-config nil
- "Command to configure pretty printing of the Coq process for emacs.")
-
-(defconst coq-interrupt-regexp "Interrupted"
- "Regexp corresponding to an interrupt")
-
-(defvar coq-default-undo-limit 100
- "Maximum number of Undo's possible when doing a proof.")
-
-;; ----- web documentation
-
-(defvar coq-www-home-page "http://pauillac.inria.fr/coq/")
-
-;; ----- coq-shell configuration options
-
-(defvar coq-prog-name "coqtop -emacs"
- "*Name of program to run as Coq.")
-
-(defvar coq-shell-prompt-pattern (concat "^" proof-id " < ")
- "*The prompt pattern for the inferior shell running coq.")
-
-(defvar coq-shell-cd nil ; "Cd \"%s\"."
- "*Command of the inferior process to change the directory.")
-
-(defvar coq-shell-abort-goal-regexp "Current goal aborted"
- "*Regular expression indicating that the proof of the current goal
- has been abandoned.")
-
-(defvar coq-shell-proof-completed-regexp "Subtree proved!"
- "*Regular expression indicating that the proof has been completed.")
-
-(defvar coq-goal-regexp
- "\\(============================\\)\\|\\(subgoal [0-9]+ is:\\)\n")
-
-;; ----- outline
-
-(defvar coq-outline-regexp
- (ids-to-regexp
- '("Section" "Chapter" "Goal" "Lemma" "Theorem" "Fact"
- "Remark" "Record" "Inductive" "Definition")))
-
-(defvar coq-outline-heading-end-regexp "\.\\|\\*)")
-
-(defvar coq-shell-outline-regexp coq-goal-regexp)
-(defvar coq-shell-outline-heading-end-regexp coq-goal-regexp)
-
-(defconst coq-kill-goal-command "Abort.")
-(defconst coq-forget-id-command "Reset ")
-
-(defconst coq-undoable-commands-regexp (ids-to-regexp coq-tactics))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Derived modes - they're here 'cos they define keymaps 'n stuff ;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(define-derived-mode coq-shell-mode proof-shell-mode
- "coq-shell" "Inferior shell mode for coq shell"
- (coq-shell-mode-config))
-
-(define-derived-mode coq-mode proof-mode
- "coq" "Coq Mode"
- (coq-mode-config))
-
-(define-derived-mode coq-pbp-mode pbp-mode
- "pbp" "Proof-by-pointing support for Coq"
- (coq-pbp-mode-config))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Code that's coq specific ;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun coq-shell-init-hook ()
- (insert (format "Set Undo %s." coq-default-undo-limit))
- (insert (format "Cd \"%s\"." default-directory))
- (remove-hook 'proof-shell-insert-hook 'coq-shell-init-hook))
-
-(defun coq-set-undo-limit (undos)
- (proof-invisible-command (format "Set Undo %s." undos)))
-
-(defun coq-count-undos (span)
- (let ((ct 0) str i)
- (if (and span (prev-span span 'type)
- (not (eq (span-property (prev-span span 'type) 'type) 'comment))
- (coq-goal-command-p
- (span-property (prev-span span 'type) 'cmd)))
- (concat "Restart" proof-terminal-string)
- (while span
- (setq str (span-property span 'cmd))
- (cond ((eq (span-property span 'type) 'vanilla)
- (if (string-match coq-undoable-commands-regexp str)
- (setq ct (+ 1 ct))))
- ((eq (span-property span 'type) 'pbp)
- (cond ((string-match coq-undoable-commands-regexp str)
- (setq i 0)
- (while (< i (length str))
- (if (= (aref str i) proof-terminal-char)
- (setq ct (+ 1 ct)))
- (setq i (+ 1 i))))
- (t nil))))
- (setq span (next-span span 'type)))
- (concat "Undo " (int-to-string ct) proof-terminal-string))))
-
-(defconst coq-keywords-decl-defn-regexp
- (ids-to-regexp (append coq-keywords-decl coq-keywords-defn))
- "Declaration and definition regexp.")
-
-(defun coq-goal-command-p (str)
- "Decide whether argument is a goal or not"
- (and (string-match coq-goal-command-regexp str)
- (not (string-match "Definition.*:=" str))))
-
-(defun coq-find-and-forget (span)
- (let (str ans)
- (while (and span (not ans))
- (setq str (span-property span 'cmd))
- (cond
-
- ((eq (span-property span 'type) 'comment))
-
- ((eq (span-property span 'type) 'goalsave)
- (setq ans (concat coq-forget-id-command
- (span-property span 'name) proof-terminal-string)))
-
- ((string-match (concat "\\`\\(" coq-keywords-decl-defn-regexp
- "\\)\\s-*\\(" proof-id "\\)\\s-*[\\[,:]") str)
- (setq ans (concat coq-forget-id-command
- (match-string 2 str) proof-terminal-string)))
-
- ;; If it's not a goal but it contains "Definition" then it's a
- ;; declaration
- ((and (not (coq-goal-command-p str))
- (string-match
- (concat "Definition\\s-+\\(" proof-id "\\)\\s-*:") str))
- (setq ans (concat coq-forget-id-command
- (match-string 2 str) proof-terminal-string))))
-
- (setq span (next-span span 'type)))
-
- (or ans "COMMENT")))
-
-(defvar coq-current-goal 1
- "Last goal that emacs looked at.")
-
-(defun coq-goal-hyp ()
- (cond
- ((looking-at "============================\n")
- (goto-char (match-end 0))
- (cons 'goal (int-to-string coq-current-goal)))
- ((looking-at "subgoal \\([0-9]+\\) is:\n")
- (goto-char (match-end 0))
- (cons 'goal (match-string 1))
- (setq coq-current-goal (string-to-int (match-string 1))))
- ((looking-at proof-shell-assumption-regexp)
- (cons 'hyp (match-string 1)))
- (t nil)))
-
-(defun coq-state-preserving-p (cmd)
- (not (string-match coq-undoable-commands-regexp cmd)))
-
-(defun coq-global-p (cmd)
- (or (string-match coq-keywords-decl-defn-regexp cmd)
- (and (string-match
- (concat "Definition\\s-+\\(" coq-id "\\)\\s-*:") cmd)
- (string-match ":=" cmd))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Commands specific to coq ;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun coq-Intros ()
- "List proof state."
- (interactive)
- (insert "Intros "))
-
-(defun coq-Apply ()
- "List proof state."
- (interactive)
- (insert "Apply "))
-
-(defun coq-Search ()
- "Search for type in goals."
- (interactive)
- (let (cmd)
- (proof-check-process-available)
- (setq cmd (read-string "Search Type: " nil 'proof-minibuffer-history))
- (proof-invisible-command (concat "Search " cmd proof-terminal-string))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Indentation ;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; "Case" is represented by 'c' on the stack, and
-;; "CoInductive is represented by 'C'.
-(defun coq-stack-to-indent (stack)
- (cond
- ((null stack) 0)
- ((null (car (car stack)))
- (nth 1 (car stack)))
- (t (let ((col (save-excursion
- (goto-char (nth 1 (car stack)))
- (current-column))))
- (cond
- ((eq (car (car stack)) ?c)
- (save-excursion (move-to-column (current-indentation))
- (cond
- ((eq (char-after (point)) ?|) (+ col 3))
- ((looking-at "end") col)
- (t (+ col 5)))))
- ((or (eq (car (car stack)) ?I) (eq (car (car stack)) ?C))
- (+ col (if (eq ?| (save-excursion
- (move-to-column (current-indentation))
- (char-after (point)))) 2 4)))
- (t (1+ col)))))))
-
-(defun coq-parse-indent (c stack)
- (cond
- ((eq c ?C)
- (cond ((looking-at "Case")
- (cons (list ?c (point)) stack))
- ((looking-at "CoInductive")
- (forward-char (length "CoInductive"))
- (cons (list c (- (point) (length "CoInductive"))) stack))
- (t stack)))
- ((and (eq c ?e) (looking-at "end") (eq (car (car stack)) ?c))
- (cdr stack))
-
- ((and (eq c ?I) (looking-at "Inductive"))
- (forward-char (length "Inductive"))
- (cons (list c (- (point) (length "Inductive"))) stack))
-
- ((and (eq c ?.) (or (eq (car (car stack)) ?I) (eq (car (car stack)) ?C)))
- (cdr stack))
-
- (t stack)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Coq shell startup and exit hooks ;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun coq-pre-shell-start ()
- (setq proof-prog-name coq-prog-name)
- (setq proof-mode-for-shell 'coq-shell-mode)
- (setq proof-mode-for-pbp 'coq-pbp-mode)
-)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Configuring proof and pbp mode and setting up various utilities ;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun coq-init-syntax-table ()
- "Set appropriate values for syntax table in current buffer."
-
- (modify-syntax-entry ?\$ ".")
- (modify-syntax-entry ?\/ ".")
- (modify-syntax-entry ?\\ ".")
- (modify-syntax-entry ?+ ".")
- (modify-syntax-entry ?- ".")
- (modify-syntax-entry ?= ".")
- (modify-syntax-entry ?% ".")
- (modify-syntax-entry ?< ".")
- (modify-syntax-entry ?> ".")
- (modify-syntax-entry ?\& ".")
- (modify-syntax-entry ?_ "_")
- (modify-syntax-entry ?\' "_")
- (modify-syntax-entry ?\| ".")
- (modify-syntax-entry ?\* ". 23")
- (modify-syntax-entry ?\( "()1")
- (modify-syntax-entry ?\) ")(4"))
-
-(defun coq-mode-config ()
-
- (setq proof-terminal-char ?\.)
- (setq proof-comment-start "(*")
- (setq proof-comment-end "*)")
-
- (setq proof-assistant coq-assistant
- proof-www-home-page coq-www-home-page)
-
- (setq proof-prf-string "Show"
- proof-ctxt-string "Print All"
- proof-help-string "Help")
-
- (setq proof-goal-command-p 'coq-goal-command-p
- proof-count-undos-fn 'coq-count-undos
- proof-find-and-forget-fn 'coq-find-and-forget
- proof-goal-hyp-fn 'coq-goal-hyp
- proof-state-preserving-p 'coq-state-preserving-p
- proof-global-p 'coq-global-p
- proof-parse-indent 'coq-parse-indent
- proof-stack-to-indent 'coq-stack-to-indent)
-
- (setq proof-save-command-regexp coq-save-command-regexp
- proof-save-with-hole-regexp coq-save-with-hole-regexp
- proof-goal-with-hole-regexp coq-goal-with-hole-regexp
- proof-kill-goal-command coq-kill-goal-command
- proof-commands-regexp (ids-to-regexp coq-keywords))
-
- (coq-init-syntax-table)
-
-;; font-lock
-
- (setq font-lock-keywords coq-font-lock-keywords-1)
-
- (proof-config-done)
-
- (define-key (current-local-map) [(control c) ?I] 'coq-Intros)
- (define-key (current-local-map) [(control c) ?a] 'coq-Apply)
- (define-key (current-local-map) [(control c) (control s)] 'coq-Search)
-
-;; outline
-
- (make-local-variable 'outline-regexp)
- (setq outline-regexp coq-outline-regexp)
-
- (make-local-variable 'outline-heading-end-regexp)
- (setq outline-heading-end-regexp coq-outline-heading-end-regexp)
-
-;; tags
- (and (boundp 'tag-table-alist)
- (setq tag-table-alist
- (append '(("\\.v$" . coq-tags)
- ("coq" . coq-tags))
- tag-table-alist)))
-
- (setq blink-matching-paren-dont-ignore-comments t)
-
-;; hooks and callbacks
-
- (add-hook 'proof-pre-shell-start-hook 'coq-pre-shell-start nil t))
-
-(defun coq-shell-mode-config ()
- (setq proof-shell-prompt-pattern coq-shell-prompt-pattern
- proof-shell-cd coq-shell-cd
- proof-shell-abort-goal-regexp coq-shell-abort-goal-regexp
- proof-shell-proof-completed-regexp coq-shell-proof-completed-regexp
- proof-shell-error-regexp coq-error-regexp
- proof-shell-interrupt-regexp coq-interrupt-regexp
- proof-shell-noise-regexp ""
- proof-shell-assumption-regexp coq-id
- proof-shell-goal-regexp coq-goal-regexp
- proof-shell-first-special-char ?\360
- proof-shell-wakeup-char ?\371 ; done: prompt
- ; The next three represent path annotation information
- proof-shell-start-char ?\372 ; not done
- proof-shell-end-char ?\373 ; not done
- proof-shell-field-char ?\374 ; not done
- proof-shell-goal-char ?\375 ; done
- proof-shell-eager-annotation-start "\376" ; done
- proof-shell-eager-annotation-end "\377" ; done
- proof-shell-annotated-prompt-regexp
- (concat proof-shell-prompt-pattern
- (char-to-string proof-shell-wakeup-char)) ; done
- proof-shell-result-start "\372 Pbp result \373"
- proof-shell-result-end "\372 End Pbp result \373"
- proof-shell-start-goals-regexp "[0-9]+ subgoals?"
- proof-shell-end-goals-regexp proof-shell-annotated-prompt-regexp
- proof-shell-init-cmd nil
- proof-analyse-using-stack t)
-
- ;; The following hook is removed once it's called.
- (add-hook 'proof-shell-insert-hook 'coq-shell-init-hook nil t)
-
- (coq-init-syntax-table)
-
- (proof-shell-config-done))
-
-(defun coq-pbp-mode-config ()
- (setq pbp-change-goal "Show %s.")
- (setq pbp-error-regexp coq-error-regexp))
-
-(provide 'coq)