aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Aspinall1998-08-21 11:53:29 +0000
committerDavid Aspinall1998-08-21 11:53:29 +0000
commite133dc56af175b318551f9cc41d57630f5da4f93 (patch)
tree2142ed80b77a5853711792b5a9c3830968bd6538
parent9476f7b5462b6410f89cb78e206d0468e9deb002 (diff)
Info file is easily generated from texinfo, so doesn't belong in CVS
-rw-r--r--script-management.info433
1 files changed, 0 insertions, 433 deletions
diff --git a/script-management.info b/script-management.info
deleted file mode 100644
index 8640a092..00000000
--- a/script-management.info
+++ /dev/null
@@ -1,433 +0,0 @@
-This is Info file script-management.info, produced by Makeinfo version
-1.68 from the input file script-management.texinfo.
-
-
-File: script-management.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
-
-A *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:
-
-* 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
-
-
-File: script-management.info, Node: Introduction, Next: Commands, Prev: Top, Up: Top
-
-Introduction
-============
-
-Each script resides in an Emacs buffer, called a *script buffer*, which
-is divided into three regions:
-
- * The *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.
-
- * The *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.
-
- * The *Editing* region contains the commands the user is working on,
- and can be edited as normal Emacs text.
-
-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
-*Response Buffer*.
-
-*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. *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.
-
-
-File: script-management.info, Node: Commands, Next: Multiple Files, Prev: Introduction, Up: Top
-
-Proof Mode Commands
-===================
-
-`C-c C-b'
- assert the commands in the buffer.
-
-`C-c return'
- assert the commands in the editing region up to and including the
- one containing the point.
-
-`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.
-
-`C-c C-u'
- retract the last segment in the locked region, and kill the text
- in it. (1)
-
-`C-c ''
- move the point to the end of the locked region
-
-`C-c C-e'
- move the point to the next terminator
-
-`C-c C-c'
- interrupt the process process. This may leave script management or
- the proof process (or both) in an inconsistent state.
-
-`C-c C-z'
- move the end of the locked region backwards to the end of the
- segment containing the point. (2)
-
-`C-c C-t'
- Send the command at the point to the subprocess, not recording it
- in the locked region. (3)
-
-`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.
-
-The command `proof-restart-script' can be used to completely restart
-script management.
-
----------- Footnotes ----------
-
-(1) Be careful with this, as it may delete more than you anticipate.
-However, you can always recover the killed text using Emacs Undo.
-
-(2) Don't try this one at home, kids.
-
-(3) 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.
-
-
-File: script-management.info, Node: Multiple Files, Next: An Active Terminator, Prev: Commands, Up: Top
-
-Multiple Files
-==============
-
-Proof mode has a rudimentary facility for operating with multiple files
-in a LEGO proof development. If the user invokes script management in a
-different buffer from the one in which it is running, one of two prompts
-will appear:
-
- * "Steal script management?" if Emacs doesn't think the file is
- already part of the proof development
-
- * "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.
-
-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 `Scripting' appears in the minor mode list of the active
-scripting buffer.
-
-Caveats:
- - 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.
-
- - 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.
-
-
-File: script-management.info, Node: An Active Terminator, Next: Proof by Pointing, Prev: Multiple Files, Up: Top
-
-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 (`;' for
-LEGO, `.' 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' (`C-c ;' or `C-c .')
-
-
-File: script-management.info, Node: Proof by Pointing, Next: Walkthrough, Prev: An Active Terminator, Up: Top
-
-Proof by Pointing
-=================
-
-*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
-`User Interfaces for Theorem Provers' by Yves Bertot and Laurent Thery,
-to appear in `Information and Computation', from which the following
-example is taken.
-
-* Menu:
-
-* Proof by Pointing Example:: An example using proof by pointing
-
-
-File: script-management.info, Node: Proof by Pointing Example, Prev: Proof by Pointing, Up: Proof by Pointing
-
-Suppose we wish to prove the lego term:
-
- (((p a) \/ (q b)) /\ {x:Prop}(p x) -> (q x)) -> (Ex ([x:Prop] q(x)));
-
-Asserting this goal will result in the proof state
-
- ?0 : ((p a \/ q b) /\ {x:Prop}(p x)->q x)->Ex ([x:Prop]q x)
-
-appearing in the response buffer. Suppose our strategy is to use a case
-analysis on the disjunction, starting with the `p(a)' subterm.
-Clicking on this term will cause script management to insert the
-following command sequence in the script buffer, and execute it.
-
- Intros H; Refine H; Intros H0 H1;
- Refine or_elim H0 Then Intros H2; Try Refine H2;
-
-The response buffer will then read
-
- 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)
-
-Clicking on the subterm `(p x)' in the hypothesis H1 will instruct
-script management to prove an instance of `(p x)' and deduce the
-corresponding `(q x)'. The commands
-
- allE H1; intros +1 H3; Refine impl_elim H3; Try Assumption;
-
-are inserted and executed, leaving the proof state as
-
- 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)
-
-Now clicking on the `q x)' subterm in ?20 will prove the subgoal. We are
-left with the other half of the original case analysis:
-
- 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)
-
-Clicking on `q x' proves the goal.
-
-
-File: script-management.info, Node: Walkthrough, Next: LEGO mode, Prev: Proof by Pointing, Up: Top
-
-A Walkthrough
-=============
-
-Here's a LEGO example of how script management is used.
-
-First, we turn on active terminator minor mode by typing `C-c ;' Then
-we enter
-
-`Module Walthrough 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)
-
-`Goal bland_commutes: {A,b:Prop} and A B -> and B A;'
-
-The goal should be echoed in the response buffer.
-
-`Intros;'
-
-Whoops! `C-c C-u' to pretend that didn't happen.
-
-`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.
-
-`Refine H; intros; Immed; Refine H; intros; Immed;'
-
-finishes the Goal.
-
-`Save;'
-
-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
-`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 `C-c return'. Proof mode queues the commands for processing and
-executes them.
-
-
-File: script-management.info, Node: LEGO mode, Next: Coq mode, Prev: Walkthrough, Up: Top
-
-LEGO mode
-=========
-
-LEGO mode is a mode derived from proof mode for editing LEGO scripts.
-As well as custom popup menus, it has the following commands:
-
-`C-c C-p'
- display the proof state in the response buffer
-
-`C-c c'
- display the context in the response buffer
-
-`C-c c'
- print LEGO help text in the response buffer
-
-In addition, there are some abbreviations for common commands
-
-`C-c i'
- intros
-
-`C-c I'
- Intros
-
-`C-c R'
- Refine
-
-
-File: script-management.info, Node: Coq mode, Next: Known Problems, Prev: LEGO mode, Up: Top
-
-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:
-
-`C-c C-p'
- display the proof state in the response buffer
-
-`C-c c'
- display the context in the response buffer
-
-In addition, there are some abbreviations for common commands:
-
-`C-c I'
- Intros
-
-`C-c a'
- Apply
-
-
-File: script-management.info, Node: Known Problems, Next: Internals, Prev: Coq mode, Up: Top
-
-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
-`proof-restart-script-management' may be of use.
-
-A few things to avoid:
-
- - If you're using script management with multiple files, don't start
- changing the file names.
-
- - Script Management doesn't understand how to undo `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
- `Discharge' command, retract back to the declaration of whatever
- gets discharged.
-
- - Proof by Pointing doesn't work very well, and is inefficiently
- implemented.
-
- - The locked and queue regions are not quite read-only: in particular
- Emacs Undo can insert text into them.
-
- - 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.
-
-Fixes for some of these may be provided in a future release.
-
-
-File: script-management.info, Node: Internals, Prev: Known Problems, Up: Top
-
-Internals
-=========
-
-I may one day document the script management internals here. Until then,
-UtSL.
-
-
-
-Tag Table:
-Node: Top124
-Node: Introduction1065
-Node: Commands3509
-Node: Multiple Files5229
-Node: An Active Terminator6730
-Node: Proof by Pointing7309
-Node: Proof by Pointing Example8569
-Node: Walkthrough10244
-Node: LEGO mode11791
-Node: Coq mode12346
-Node: Known Problems12822
-Node: Internals14161
-
-End Tag Table