
PIDE is a framework for sophisticated Prover IDEs,
based on Isabelle/Scala technology that is integrated with Isabelle.
It is built around a concept of
asynchronous document processing, which is supported
natively by the parallel proof engine implemented in Isabelle/ML.
Isabelle/jEdit is the flagship application of the PIDE
framework — it illustrates many of the ideas in a realistic
manner, ready to be used right now in Isabelle applications.
Research and implementation of concepts around PIDE has started
around 2008 and was kindly supported by BMBF (http://www.bmbf.de),
Université Paris-Sud (http://www.u-psud.fr), Digiteo
(http://www.digiteo.fr), and ANR
(http://www.agence-nationale-recherche.fr).
The Isabelle/jEdit Prover IDE
Isabelle/jEdit consists of some plugins for the well-known jEdit text
editor framework (http://www.jedit.org), according to the following
principles.
- The original jEdit look-and-feel is generally preserved, although
some default properties have been changed to accommodate Isabelle
(e.g. the text area font).
- Formal Isabelle/Isar text is checked asynchronously while editing.
The user is in full command of the editor, and the prover refrains
from locking portions of the buffer etc.
- Prover feedback works via tooltips, syntax highlighting, colors,
boxes etc. based on semantic markup provided by Isabelle in the
background.
- Using the mouse together with the modifier key C
(CONTROL on Linux or Windows,
COMMAND on Mac OS X) exposes additional information.
- Dockable panels (e.g. Output) are managed as independent
windows by jEdit, which also allows multiple instances.
- Formal output (tooltips etc.) may be explored recursively, using the
same techniques as in the editor source buffer.
- Prover process and source files are managed by the Isabelle/Scala on
the editor side. The prover experiences a mostly timeless and
stateless environment of formal document content.
Isabelle symbols and fonts
- Isabelle supports infinitely many symbols:
α, β, γ, …
∀, ∃, ∨, ∧, ⟶, ⟷, …
≤, ≥, ⊓, ⊔, …
ℵ, △, ∇, …
\<foo>, \<bar>, \<baz>, …
- There are some special control symbols to modify the style of a
single symbol:
⇩ subscript
⇧ superscript
⇣ subscript within identifier
⇡ superscript within identifier
❙ bold face
- A default mapping relates some Isabelle symbols to Unicode points
(see $ISABELLE_HOME/etc/symbols and $ISABELLE_HOME_USER/etc/symbols).
- The IsabelleText font ensures that Unicode points are actually
seen on the screen (or printer).
- Input methods:
- use the Symbols dockable
- copy/paste from decoded source files
- copy/paste from prover output
- completion provided by Isabelle plugin, e.g.
name | abbreviation | symbol |
lambda | % | λ |
Rightarrow | => | ⇒ |
Longrightarrow | ==> | ⟹ |
And | !! | ⋀ |
equiv | == | ≡ |
forall | ! | ∀ |
exists | ? | ∃ |
longrightarrow | --> | ⟶ |
and | /\ | ∧ |
or | \/ | ∨ |
not | ~ | ¬ |
noteq | ~= | ≠ |
in | : | ∈ |
notin | ~: | ∉ |
sub | =_ | ⇩ |
sup | =^ | ⇧ |
isup | -_ | ⇣ |
isub | -^ | ⇡ |
bold | -. | ❙ |
- NOTE: The above abbreviations refer to the input method.
The logical notation provides ASCII alternatives that often
coincide, but deviate occasionally.
- NOTE: Generic jEdit abbreviations or plugins perform similar
source replacement operations; this works for Isabelle as long
as the Unicode sequences coincide with the symbol mapping.
- NOTE: Raw unicode characters within prover source files
should be restricted to informal parts, e.g. to write text in
non-latin alphabets. Mathematical symbols should be defined via the
official rendering tables.
Limitations and known problems
- Lack of dependency managed for auxiliary files that contribute
to a theory (e.g. ML_file).
Workaround: Re-load files manually within the prover.
- Odd behavior of some diagnostic commands with global
side-effects, like writing a physical
file.
Workaround: Avoid such commands.
- No way to delete document nodes from the overall collection of
theories.
Workaround: Restart whole Isabelle/jEdit session in
worst-case situation.
- No support for non-local markup, e.g. commands reporting on
previous commands (proof end on proof head), or markup produced by
loading external files.
- The native MacOSX plugin for jEdit tends to be disruptive. It
might or might not improve the user experience, and is off by
default.
- Java 7 on MacOSX is officially supported on Lion and Mountain
Lion, but not Snow Leopard. It usually works on the latter, but
there might be some instabilities.
Licenses and home sites of contributing systems
- Isabelle: BSD-style
- Scala: BSD-style
http://www.scala-lang.org
- jEdit: GPL (with special cases)
http://www.jedit.org/
- Lobo/Cobra: GPL and LGPL
http://lobobrowser.org/