
PIDE is a novel 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 an 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
- No way to start/stop prover or switch to a different logic.
Workaround: Change options and restart editor.
- 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.
- Lack of a few conveniences known from Proof General.
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/