The Isabelle/jEdit Prover IDE (based on Isabelle/Scala)
The Isabelle/Scala layer that is already part of Isabelle/Pure
provides some general infrastructure for advanced prover interaction
and integration. The Isabelle/jEdit application serves as an example
for asynchronous proof checking with support for parallel processing.
- 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) exposes additional information.
- Dockable panels (e.g. Output) are managed as independent
windows by jEdit, which also allows multiple instances.
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.
Limitations and workrounds (September 2011)
- No way to start/stop prover or switch to a different logic.
Workaround: Change options and restart editor.
- Incremental reparsing sometimes produces unexpected command
spans.
Workaround: Cut/paste larger parts or reload buffer.
- 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 ("uses").
Workaround: Re-use files manually within the prover.
- Crude management of new Isar commands that are defined within
the running session.
Workaround: Force re-parsing of files using such commands
via reload menu of jEdit.
- 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.
- General lack of various conveniences known from Proof
General.
Known problems with Mac OS
- The MacOSX plugin for jEdit disrupts regular C-X/C/V operations,
e.g. between the editor and the Console plugin, which is a standard
swing text box. Similar for search boxes etc.
- ToggleButton selected state is not rendered if window focus is
lost, which is probably a genuine feature of the Apple
look-and-feel.
- Font.createFont mangles the font family of non-regular fonts,
e.g. bold. IsabelleText font files need to be installed/updated
manually.
- Missing glyphs are collected from other fonts (like Emacs,
Firefox). This is actually an advantage over the Oracle/Sun JVM on
Windows or Linux, but probably also the deeper reason for the other
oddities of Apple font management.
- The native font renderer of -Dapple.awt.graphics.UseQuartz=true
(not enabled by default) fails to handle the infinitesimal font size
of "hidden" text (e.g. used in Isabelle sub/superscripts).
Known problems with OpenJDK 1.6.x
- The 2D rendering engine of OpenJDK 1.6.x distorts the appearance
of the jEdit text area. Always use official JRE 1.6.x from
Sun/Oracle/Apple.
- jEdit on OpenJDK is generally not supported.
Known problems with Windows/Cygwin
- Occasional session startup problems when loading a logic image
takes too long (cf. output in "Prover Session / Syslog" panel).
- Auxiliary files of a theory (uses) cannot be loaded due
to incompatible path notation inherited from MS-DOS.
Licenses and home sites of contributing systems
- 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/