
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 main example application within 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.
- 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:
- 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 workarounds
- Odd behavior of some diagnostic commands, notably those starting
external processes asynchronously (e.g. thy_deps).
Workaround: Avoid such commands.
- Lack of dependency managed for auxiliary files that contribute
to a theory (e.g. ML_file).
Workaround: Re-load files manually within the prover.
- 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.
Known problems with Mac OS X
- The MacOSX plugin for jEdit disrupts tends to be disruptive. It
might or might not improve the user experience, and is off by
default.
- Java 7 (by Oracle) is officially supported starting with Lion (or
later), but not Snow Leopard. It happens to work on the latter as
well, 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/