aboutsummaryrefslogtreecommitdiff
path: root/script-management.texinfo
diff options
context:
space:
mode:
authorDavid Aspinall1998-09-03 13:51:41 +0000
committerDavid Aspinall1998-09-03 13:51:41 +0000
commit8b836f84d70fcea59ffa186f6809ebc6765b8a5f (patch)
tree8dc74b560cadf3b6e847e547776ccd0015dfa7f1 /script-management.texinfo
parentabbe57d8b69d79e9eb6899f182379d9c6c4fdc7f (diff)
Renamed for new subdirectory structure
Diffstat (limited to 'script-management.texinfo')
-rw-r--r--script-management.texinfo440
1 files changed, 0 insertions, 440 deletions
diff --git a/script-management.texinfo b/script-management.texinfo
deleted file mode 100644
index a7232b3c..00000000
--- a/script-management.texinfo
+++ /dev/null
@@ -1,440 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c %**start of header
-@setfilename script-management.info
-@settitle Script Management
-@paragraphindent 0
-@c %**end of header
-
-@setchapternewpage odd
-
-@titlepage
-@sp 10
-@comment The title is printed in a large font.
-@center @titlefont{Script Management Mode}
-
-@c The following two commands start the copyright page.
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1997, 1998 LEGO Team, LFCS Edinburgh
-@end titlepage
-
-@node Top, Credits, (dir), (dir)
-@comment node-name, next, previous, up
-
-A @emph{proof script} is a sequence of commands to a proof assistant.
-Proof mode is a mode designed to be customised for a particular proof
-assistant, to manage communication with a proof process and thereby
-support building and secure editing of proof scripts. Currently custom
-modes exist for LEGO and Coq.
-
-@menu
-* Credits:: The people Involved
-* Introduction:: Introduction to Script Management
-* Commands:: Proof mode Commands
-* Multiple Files:: Proof developments spanning several files
-* Proof by Pointing:: Proof using the Mouse
-* An Active Terminator:: Active Terminator minor mode
-* Walkthrough:: An example of using proof mode
-* LEGO mode:: Extra Bindings for LEGO
-* Coq mode:: Extra Bindings for Coq
-* Internals:: The Seedy Underside of Proof mode
-* Known Problems:: Caveat Emptor
-@end menu
-
-@node Credits, Introduction, Top, Top
-@comment node-name, next, previous, up
-@unnumberedsec Credits
-
-Inspired by Yves Bertot's Centaur-based proof environment CtCoq, Healf
-Goguen, Thomas Kleymann and Dilip Sequeira have implented a generic
-proof mode for Emacs. The original proof-by-pointing algorithm has been
-implemented by Yves Bertot. This manual was originally written by Dilip
-Sequeira.
-
-@node Introduction, Commands, Credits, Top
-@comment node-name, next, previous, up
-@unnumberedsec Introduction
-
-Each script resides in an Emacs buffer, called a @emph{script buffer},
-which is divided into three regions:
-
-@itemize @bullet
-@item The @emph{Locked} region appears in blue (underlined on monochrome
-displays) and contains commands which have been sent to the proof process
-and verified. The commands in the locked region cannot be edited.
-
-@item The @emph{Queue} region appears in pink (inverse video) and contains
-commands waiting to be sent to the proof process. Like those in the
-locked region, these commands can't be edited.
-
-@item The @emph{Editing} region contains the commands the user is working
-on, and can be edited as normal Emacs text.
-@end itemize
-
-These three regions appear in the buffer in the order above; that is,
-the locked region is always at the start of the buffer, and the editing
-region always at the end. The queue region only exists if there is input
-waiting to be sent to the proof process.
-
-Proof mode has two operations which transfer commands between these
-regions: assertion and retraction. These cause commands to be sent to
-the proof process, and Emacs will summarise the results in the
-@emph{Response Buffer}.
-
-@strong{Assertion} causes commands from the editing region to be
-transferred to the queue region and sent one by one to the proof
-process. If the command is accepted, it is transferred to the locked
-region, but if an error occurs it is signalled to the user, and the
-offending command is transferred back to the editing region together
-with any remaining commands in the queue. @strong{Retraction} causes
-commands to be transferred from the locked region to the editing region
-(again via the queue region) and the appropriate 'undo' commands to be
-sent to the proof process.
-
-As commands are transferred to the locked region, they are aggregated
-into segments which constitute the smallest units which can be
-undone. Typically a segment consists of a declaration or definition, or
-all the text from a `goal' command to the corresponding `save' command,
-or the individual commands in the proof of an unfinished goal. As the
-mouse moves over the the region, the segment containing the pointer will
-be highlighted.
-
-Commands in the editing region can be freely edited while
-commands in the queue are transferred to the proof process. However,
-assertion and retraction commands can only be issued when the queue is
-empty.
-
-@node Commands, Multiple Files, Introduction, Top
-@unnumberedsec Proof Mode Commands
-
-@table @kbd
-
-@item C-c C-b
-assert the commands in the buffer.
-
-@item C-c return
-assert the commands in the editing region up to and
-including the one containing the point.
-
-@item C-c u
-retract the segments in the locked region back to and
-including the one containing the point. If point is outside the *Locked*
-region, the last segment is undone.
-
-@item C-c C-u
-retract the last segment in the locked region, and kill the text in it.
-@footnote{Be careful with this, as it may delete more than you anticipate.
-However, you can always recover the killed text using Emacs Undo.}
-
-@item C-c '
-move the point to the end of the locked region. If you are in a script
-buffer other than the active scripting buffer, this will also transfer
-you to the active one.
-
-@item C-c C-e
-move the point to the next terminator
-
-@item C-c C-p
-display the proof state in the response buffer
-
-@item C-c c
-display the context in the response buffer
-
-@item C-c h
-print proof-system specific help text in the response buffer
-
-@item C-c C-c
-interrupt the process process. This may leave script management or the
-proof process (or both) in an inconsistent state.
-
-@item C-c C-z
-move the end of the locked region backwards to the end of the segment
-containing the point. @footnote{Don't try this one at home, kids.}
-
-@item C-c C-t
-Send the command at the point to the subprocess, not
-recording it in the locked region. @footnote{This is supplied in order
-to enable the user to test the types and values of expressions. There's
-some checking that the command won't change the proof state, but it
-isn't foolproof.}
-
-@item C-c C-v
-Request a command from the minibuffer and send it to
-the subprocess. Currently no checking whatsoever is done on the command.
-@end table
-
-The command @code{proof-restart-script} can be used to completely
-restart script management.
-
-
-@node Multiple Files, An Active Terminator, Commands, Top
-@unnumberedsec Multiple Files
-
-Proof mode has a rudimentary facility for operating with multiple files
-in a proof development. This is currently only supported for LEGO. If
-the user invokes script management in a different buffer from the one in
-which it is running, one of two prompts will appear:
-
-@itemize @bullet
-@item ``Steal script management?''
-if Emacs doesn't think the file is already part of the proof development
-@item ``Reprocess this file?''
-if Emacs thinks the file is already included in the proof process. If
-the user confirms, Emacs will cause the proof process to forget the
-contents of the file, so that it is processed afresh.
-@end itemize
-
-Currently this facility requires each script buffer to have a
-corresponding file.
-
-When working with script management in multiple buffers, it is easy
-to lose track of which buffer is the current script buffer. As a mnemonic
-aid, the word @samp{Scripting} appears in the minor mode list of the
-active scripting buffer.
-
-Caveats:
-@itemize @minus
-@item Note that if processing a buffer causes other files to be loaded
-into the LEGO process, those files will be imported from disk rather
-than from any Emacs buffer in which it is being edited, i.e.@: if your
-file is going to be included indirectly, save it.
-
-@item However much you move around the file system in Emacs, the
-LEGOPATH will be the LEGOPATH you started with. No concept of
-"current directory" is currently supported.
-@end itemize
-
-@node An Active Terminator, Proof by Pointing, Multiple Files, Top
-@unnumberedsec An Active Terminator
-
-Proof mode has a minor mode which causes the terminator to become
-active. When this mode is active, pressing the terminator key (@kbd{;}
-for LEGO, @kbd{.} for Coq) outside a comment or quote will cause the
-character to be entered into the buffer, and all the commands in the
-editing region up to the point to be asserted.
-
-This mode can be toggled with the command
-`proof-active-terminator-minor-mode' (@kbd{C-c ;} or @kbd{C-c .})
-
-@node Proof by Pointing, Walkthrough, An Active Terminator, Top
-@unnumberedsec Proof by Pointing
-
-@emph{This mode is currently very unreliable, and we do not guarantee
-that it will work as discussed in this document.}
-
-Proof by pointing is a facility whereby proof commands can be generated
-by using the mouse to select terms. When proving a goal, a summary of
-the current proof state will appear in the response buffer. By moving
-the mouse over the buffer, the structure of the goal and hypothesis
-terms will be shown by highlighting.
-
-If a selection is made using the second (usually the middle) mouse
-button, Emacs will generate the appropriate commands, insert them in the
-script buffer, and send them to the proof process. These commands are
-aggregated in the locked region as a single segment, so that a
-mouse-generated command sequence can be retracted with a single
-retraction command.
-
-Further Information about proof by pointing may be found in the paper
-@cite{User Interfaces for Theorem Provers} by Yves Bertot and Laurent
-Thery, to appear in @cite{Information and Computation}, from which
-the following example is taken.
-
-@menu
-* Proof by Pointing Example:: An example using proof by pointing
-@end menu
-
-@node Proof by Pointing Example, ,Proof by Pointing,Proof by Pointing
-
-Suppose we wish to prove the lego term:
-
-@example
-(((p a) \/ (q b)) /\ @{x:Prop@}(p x) -> (q x)) -> (Ex ([x:Prop] q(x)));
-@end example
-
-Asserting this goal will result in the proof state
-
-@example
-?0 : ((p a \/ q b) /\ @{x:Prop@}(p x)->q x)->Ex ([x:Prop]q x)
-@end example
-
-appearing in the response buffer. Suppose our strategy is to use a
-case analysis on the disjunction, starting with the @samp{p(a)} subterm.
-Clicking on this term will cause script management to insert the following
-command sequence in the script buffer, and execute it.
-
-@example
-Intros H; Refine H; Intros H0 H1;
-Refine or_elim H0 Then Intros H2; Try Refine H2;
-@end example
-
-
-The response buffer will then read
-
-@example
- H : (p a \/ q b) /\ @{x:Prop@}(p x)->q x
- H0 : p a \/ q b
- H1 : @{x:Prop@}(p x)->q x
- H2 : p a
- ?10 : Ex ([x:Prop]q x)
-@end example
-
-Clicking on the subterm @samp{(p x)} in the hypothesis H1 will instruct
-script management to prove an instance of @samp{(p x)} and deduce the
-corresponding @samp{(q x)}. The commands
-
-@example
-allE H1; intros +1 H3; Refine impl_elim H3; Try Assumption;
-@end example
-
-are inserted and executed, leaving the proof state as
-
-@example
- H : (p a \/ q b) /\ @{x:Prop@}(p x)->q x
- H0 : p a \/ q b
- H1 : @{x:Prop@}(p x)->q x
- H2 : p a
- H3 : (p a)->q a
- ?20 : (q a)->Ex ([x:Prop]q x)
-@end example
-
-Now clicking on the @samp{q x)} subterm in ?20 will prove the subgoal. We are
-left with the other half of the original case analysis:
-
-@example
- H : (p a \/ q b) /\ @{x:Prop@}(p x)->q x
- H0 : p a \/ q b
- H1 : @{x:Prop@}(p x)->q x
- H2 : q b
- ?26 : Ex ([x:Prop]q x)
-@end example
-
-Clicking on @samp{q x} proves the goal.
-
-
-
-
-@node Walkthrough, LEGO mode, Proof by Pointing, Top
-@unnumberedsec A Walkthrough
-
-Here's a LEGO example of how script management is used.
-
-First, we turn on active terminator minor mode by typing @kbd{C-c ;}
-Then we enter
-
-`Module Walkthrough Import lib_logic;'
-
-The command should be lit in pink (or inverse video if you don't have a
-colour display). As LEGO imports each module, a line will appear in the
-response buffer showing the creation of context marks. Eventually the
-command should turn blue, indicating that LEGO has successfully
-processed it. Then type (on a separate line if you like)
-
-@samp{Goal bland_commutes: @{A,B:Prop@} (and A B) -> (and B A);}
-
-The goal should be echoed in the response buffer.
-
-@samp{Intros;}
-
-Whoops! @kbd{C-c C-u} to pretend that didn't happen.
-
-@samp{intros; andI;}
-
-A proof summary will appear in the response buffer. We could solve the
-goal by pointing now, but we'll stay with the keyboard.
-
-@samp{Refine H; intros; Immed; Refine H; intros; Immed;}
-
-finishes the Goal.
-
-@samp{Save bland_commutes;}
-
-Moving the mouse pointer over the locked region now reveals that the
-entire proof has been aggregated into a single segment. Suppose we
-decide to call the goal something more sensible. Moving the cursor up
-into the locked region, somewhere between `Goal' and `Save', we enter
-@kbd{C-c u}. The segment is transferred back into the editing
-region. Now we correct the goal name, move the cursor to the end of the
-buffer, and type @kbd{C-c return}. Proof mode queues the commands for
-processing and executes them.
-
-@node LEGO mode, Coq mode, Walkthrough, Top
-@unnumberedsec LEGO mode
-
-LEGO mode is a mode derived from proof mode for editing LEGO scripts.
-There are some abbreviations for common commands, which
-add text to the buffer:
-
-@table @kbd
-@item C-c i
-intros
-@item C-c I
-Intros
-@item C-c R
-Refine
-@end table
-
-
-@node Coq mode, Known Problems, LEGO mode, Top
-@unnumberedsec Coq mode
-
-Coq mode is a mode derived from proof mode for editing Coq scripts.
-As well as custom popup menus, it has the following commands:
-
-@table @kbd
-
-@item C-c C-s
-search for items in the library of a given type. This runs the
-@kbd{Search} command of Coq.
-
-@end table
-
-In addition, there are some abbreviations for common commands, which
-add text to the buffer:
-
-@table @kbd
-@item C-c I
-Intros
-@item C-c a
-Apply
-@end table
-
-@node Known Problems, Internals, Coq mode, Top
-@unnumberedsec Known Problems
-
-Since Emacs is pretty flexible, there are a whole bunch of things you
-can do to confuse script management. When it gets confused, it may
-become distressed, and may eventually sulk. In such instances
-@code{proof-restart-script-management} may be of use.
-
-A few things to avoid:
-
-@itemize @minus
-@item If you're using script management with multiple files, don't start
-changing the file names.
-
-@item Script Management doesn't understand how to undo @code{Discharge}
-commands in LEGO, and any attempts it makes to do so may leave it in an
-inconsistent state. If you're undoing the effects of a @code{Discharge}
-command, retract back to the declaration of whatever gets discharged.
-
-@item Proof by Pointing doesn't work very well, and is inefficiently
-implemented.
-
-@item The locked and queue regions are not quite read-only: in particular
-Emacs Undo can insert text into them.
-
-@item When a LEGO import command fails, the created "Mark" is not
-forgotten, and the proof process thinks the file has been included. So
-if you assert the command again, it will probably be accepted by LEGO,
-because the relevant mark is in the namespace.
-@end itemize
-
-Fixes for some of these may be provided in a future release.
-
-@node Internals, , Known Problems, Top
-@unnumberedsec Internals
-
-I may one day document the script management internals here. Until then,
-UtSL.
-@bye