src/Tools/jEdit/README.html
author wenzelm
Sun, 09 Oct 2011 16:47:58 +0200
changeset 45992 76fef3e57004
parent 45984 67740480cf39
child 46989 e99ca055c91d
permissions -rw-r--r--
tuned;
wenzelm@41876
     1
<?xml version="1.0" encoding="UTF-8" ?>
wenzelm@39855
     2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
wenzelm@39855
     3
<html xmlns="http://www.w3.org/1999/xhtml">
wenzelm@39855
     4
wenzelm@39855
     5
<head>
wenzelm@39855
     6
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
wenzelm@44341
     7
<style type="text/css" media="screen">
wenzelm@44380
     8
body { font-family: STIXGeneral, IsabelleText; font-size: 14pt; }
wenzelm@44341
     9
</style>
wenzelm@45983
    10
<title>Welcome to the Isabelle/jEdit Prover IDE</title>
wenzelm@39855
    11
</head>
wenzelm@39855
    12
wenzelm@39855
    13
<body>
wenzelm@39855
    14
wenzelm@45984
    15
<center><h2><img alt="PIDE" src="PIDE.png" width="230" align="middle"/></h2></center>
wenzelm@45577
    16
wenzelm@45983
    17
<p>
wenzelm@45984
    18
  <b>PIDE</b> is a novel framework for sophisticated Prover IDEs,
wenzelm@45983
    19
  based on Isabelle/Scala technology that is integrated with Isabelle.
wenzelm@45983
    20
  It is build around a concept of
wenzelm@45983
    21
  <em>asynchronous document processing</em>, which is supported
wenzelm@45983
    22
  natively by the <em>parallel proof engine</em> implemented in Isabelle/ML.
wenzelm@45983
    23
</p>
wenzelm@45983
    24
wenzelm@45983
    25
<p>
wenzelm@45983
    26
  <b>Isabelle/jEdit</b> is an example application within the PIDE
wenzelm@45983
    27
  framework &mdash; it illustrates many of the ideas in a realistic
wenzelm@45983
    28
  manner, ready to be used right now in Isabelle applications.
wenzelm@45983
    29
</p>
wenzelm@45983
    30
wenzelm@45983
    31
<p>
wenzelm@45983
    32
  <em>Research and implementation of concepts around PIDE has been
wenzelm@45983
    33
  kindly supported in the past 3 years by BMBF (http://www.bmbf.de),
wenzelm@45983
    34
  Université Paris-Sud (http://www.u-psud.fr), and Digiteo
wenzelm@45983
    35
  (http://www.digiteo.fr).</em>
wenzelm@45983
    36
</p>
wenzelm@45983
    37
wenzelm@45983
    38
wenzelm@45983
    39
wenzelm@45983
    40
<h2>The Isabelle/jEdit Prover IDE</h2>
wenzelm@45983
    41
wenzelm@45983
    42
<p>
wenzelm@45983
    43
Isabelle/jEdit consists of some plugins for the well-known jEdit text
wenzelm@45983
    44
editor framework (http://www.jedit.org), according to the following
wenzelm@45983
    45
principles.
wenzelm@45983
    46
</p>
wenzelm@39855
    47
wenzelm@39855
    48
<ul>
wenzelm@39855
    49
wenzelm@40031
    50
<li>The original jEdit look-and-feel is generally preserved, although
wenzelm@40031
    51
  some default properties have been changed to accommodate Isabelle
wenzelm@41180
    52
  (e.g. the text area font).</li>
wenzelm@39855
    53
wenzelm@40031
    54
<li>Formal Isabelle/Isar text is checked asynchronously while editing.
wenzelm@40031
    55
  The user is in full command of the editor, and the prover refrains
wenzelm@40031
    56
  from locking portions of the buffer etc.</li>
wenzelm@40029
    57
wenzelm@40031
    58
<li>Prover feedback works via tooltips, syntax highlighting, colors,
wenzelm@40031
    59
  boxes etc. based on semantic markup provided by Isabelle in the
wenzelm@40031
    60
  background.</li>
wenzelm@40031
    61
wenzelm@40031
    62
<li>Using the mouse together with the modifier key <tt>C</tt>
wenzelm@40031
    63
(<tt>CONTROL</tt> on Linux or Windows,
wenzelm@45982
    64
  <tt>COMMAND</tt> on Mac OS X) exposes additional information.</li>
wenzelm@40029
    65
wenzelm@40031
    66
<li>Dockable panels (e.g. <em>Output</em>) are managed as independent
wenzelm@40031
    67
  windows by jEdit, which also allows multiple instances.</li>
wenzelm@39855
    68
wenzelm@45983
    69
<li>Prover process and source files are managed by the Scala layer on
wenzelm@45983
    70
the editor side.  The prover experiences a mostly timeless and
wenzelm@45983
    71
stateless environment of formal document content.</li>
wenzelm@45983
    72
wenzelm@39855
    73
</ul>
wenzelm@39855
    74
wenzelm@41876
    75
wenzelm@41876
    76
<h2>Isabelle symbols and fonts</h2>
wenzelm@41876
    77
wenzelm@41876
    78
<ul>
wenzelm@41876
    79
  <li>Isabelle supports infinitely many symbols:<br/>
wenzelm@44343
    80
    α, β, γ, …<br/>
wenzelm@44343
    81
    ∀, ∃, ∨, ∧, ⟶, ⟷, …<br/>
wenzelm@44343
    82
    ≤, ≥, ⊓, ⊔, …<br/>
wenzelm@44343
    83
    ℵ, △, ∇, …<br/>
wenzelm@44343
    84
    <tt>\&lt;foo&gt;</tt>, <tt>\&lt;bar&gt;</tt>, <tt>\&lt;baz&gt;</tt>, …<br/>
wenzelm@41876
    85
  </li>
wenzelm@41876
    86
wenzelm@44341
    87
  <li>There are some special control symbols to modify the style of a
wenzelm@44341
    88
  <em>single</em> symbol:<br/>
wenzelm@44343
    89
    ⇩ subscript<br/>
wenzelm@44343
    90
    ⇧ superscript<br/>
wenzelm@44343
    91
    ⇣ subscript within identifier<br/>
wenzelm@44343
    92
    ⇡ superscript within identifier<br/>
wenzelm@44343
    93
    ❙ bold face</li>
wenzelm@44341
    94
wenzelm@41876
    95
  <li>A default mapping relates some Isabelle symbols to Unicode points
wenzelm@41876
    96
    (see <tt>$ISABELLE_HOME/etc/symbols</tt> and <tt>$ISABELLE_HOME_USER/etc/symbols</tt>).
wenzelm@41876
    97
  </li>
wenzelm@41876
    98
wenzelm@41876
    99
  <li>The <em>IsabelleText</em> font ensures that Unicode points are actually
wenzelm@41876
   100
    seen on the screen (or printer).
wenzelm@41876
   101
  </li>
wenzelm@41876
   102
wenzelm@41876
   103
  <li>Input methods:
wenzelm@41876
   104
    <ul>
wenzelm@41876
   105
      <li>copy/paste from decoded source files</li>
wenzelm@41876
   106
      <li>copy/paste from prover output</li>
wenzelm@41876
   107
      <li>completion provided by Isabelle plugin, e.g.<br/>
wenzelm@41876
   108
wenzelm@41876
   109
      <table border="1">
wenzelm@41876
   110
      <tr><th><b>name</b></th>    <th><b>abbreviation</b></th>  <th><b>symbol</b></th></tr>
wenzelm@41876
   111
wenzelm@44343
   112
      <tr><td>lambda</td>         <td><tt>%</tt></td>           <td>λ</td></tr>
wenzelm@44343
   113
      <tr><td>Rightarrow</td>     <td><tt>=&gt;</tt></td>       <td>⇒</td></tr>
wenzelm@44343
   114
      <tr><td>Longrightarrow</td> <td><tt>==&gt;</tt></td>      <td>⟹</td></tr>
wenzelm@41876
   115
wenzelm@44343
   116
      <tr><td>And</td>            <td><tt>!!</tt></td>          <td>⋀</td></tr>
wenzelm@44343
   117
      <tr><td>equiv</td>          <td><tt>==</tt></td>          <td>≡</td></tr>
wenzelm@41876
   118
wenzelm@44343
   119
      <tr><td>forall</td>         <td><tt>!</tt></td>           <td>∀</td></tr>
wenzelm@44343
   120
      <tr><td>exists</td>         <td><tt>?</tt></td>           <td>∃</td></tr>
wenzelm@44343
   121
      <tr><td>longrightarrow</td> <td><tt>--&gt;</tt></td>      <td>⟶</td></tr>
wenzelm@44343
   122
      <tr><td>and</td>            <td><tt>/\</tt></td>          <td>∧</td></tr>
wenzelm@44343
   123
      <tr><td>or</td>             <td><tt>\/</tt></td>          <td>∨</td></tr>
wenzelm@44343
   124
      <tr><td>not</td>            <td><tt>~ </tt></td>          <td>¬</td></tr>
wenzelm@44343
   125
      <tr><td>noteq</td>          <td><tt>~=</tt></td>          <td>≠</td></tr>
wenzelm@44343
   126
      <tr><td>in</td>             <td><tt>:</tt></td>           <td>∈</td></tr>
wenzelm@44343
   127
      <tr><td>notin</td>          <td><tt>~:</tt></td>          <td>∉</td></tr>
wenzelm@44341
   128
wenzelm@44343
   129
      <tr><td>sub</td>            <td><tt>=_</tt></td>          <td>⇩</td></tr>
wenzelm@44343
   130
      <tr><td>sup</td>            <td><tt>=^</tt></td>          <td>⇧</td></tr>
wenzelm@44343
   131
      <tr><td>isup</td>           <td><tt>-_</tt></td>          <td>⇣</td></tr>
wenzelm@44343
   132
      <tr><td>isub</td>           <td><tt>-^</tt></td>          <td>⇡</td></tr>
wenzelm@44343
   133
      <tr><td>bold</td>           <td><tt>-.</tt></td>          <td>❙</td></tr>
wenzelm@44341
   134
wenzelm@41876
   135
    </table>
wenzelm@41876
   136
    </li>
wenzelm@41876
   137
  </ul>
wenzelm@41876
   138
  </li>
wenzelm@41876
   139
wenzelm@41876
   140
  <li><b>NOTE:</b> The above abbreviations refer to the input method.
wenzelm@41876
   141
    The logical notation provides ASCII alternatives that often
wenzelm@41876
   142
    coincide, but deviate occasionally.
wenzelm@41876
   143
  </li>
wenzelm@41876
   144
wenzelm@41876
   145
  <li><b>NOTE:</b> Generic jEdit abbreviations or plugins perform similar
wenzelm@41876
   146
    source replacement operations; this works for Isabelle as long
wenzelm@41876
   147
    as the Unicode sequences coincide with the symbol mapping.
wenzelm@41876
   148
  </li>
wenzelm@41876
   149
wenzelm@45992
   150
  <li><b>NOTE:</b> Raw unicode characters within prover source files
wenzelm@45983
   151
  should be restricted to informal parts, e.g. to write text in
wenzelm@45983
   152
  non-latin alphabets.  Mathematical symbols should be defined via the
wenzelm@45983
   153
  official rendering tables.
wenzelm@45983
   154
  </li>
wenzelm@45983
   155
wenzelm@41876
   156
</ul>
wenzelm@41876
   157
wenzelm@41876
   158
wenzelm@45992
   159
<h2>Limitations and workrounds (October 2011)</h2>
wenzelm@41786
   160
wenzelm@41786
   161
<ul>
wenzelm@41786
   162
  <li>No way to start/stop prover or switch to a different logic.<br/>
wenzelm@41786
   163
  <em>Workaround:</em> Change options and restart editor.</li>
wenzelm@41786
   164
wenzelm@41786
   165
  <li>Incremental reparsing sometimes produces unexpected command
wenzelm@41786
   166
  spans.<br/>
wenzelm@41786
   167
  <em>Workaround:</em> Cut/paste larger parts or reload buffer.</li>
wenzelm@41786
   168
wenzelm@45577
   169
  <li>Odd behavior of some diagnostic commands, notably those starting
wenzelm@45577
   170
  external processes asynchronously (e.g. <tt>thy_deps</tt>).<br/>
wenzelm@45577
   171
  <em>Workaround:</em> Avoid such commands.</li>
wenzelm@41786
   172
wenzelm@45577
   173
  <li>Lack of dependency managed for auxiliary files that contribute
wenzelm@45577
   174
  to a theory ("<b>uses</b>").<br/>
wenzelm@45577
   175
  <em>Workaround:</em> Re-use files manually within the prover.</li>
wenzelm@41786
   176
wenzelm@45630
   177
  <li>Crude management of new Isar commands that are defined within
wenzelm@45630
   178
  the running session.<br/>
wenzelm@45630
   179
  <em>Workaround:</em> Force re-parsing of files using such commands
wenzelm@45630
   180
  via reload menu of jEdit.</li>
wenzelm@45630
   181
wenzelm@45687
   182
  <li>No way to delete document nodes from the overall collection of
wenzelm@45687
   183
  theories.<br/>
wenzelm@45687
   184
  <em>Workaround:</em> Restart whole Isabelle/jEdit session in
wenzelm@45687
   185
  worst-case situation.</li>
wenzelm@45687
   186
wenzelm@41786
   187
  <li>No support for non-local markup, e.g. commands reporting on
wenzelm@41786
   188
  previous commands (proof end on proof head), or markup produced by
wenzelm@41786
   189
  loading external files.</li>
wenzelm@41786
   190
wenzelm@41786
   191
  <li>General lack of various conveniences known from Proof
wenzelm@41786
   192
  General.</li>
wenzelm@41786
   193
</ul>
wenzelm@41786
   194
wenzelm@45577
   195
wenzelm@45982
   196
<h2>Known problems with Mac OS X</h2>
wenzelm@45577
   197
wenzelm@45577
   198
<ul>
wenzelm@45577
   199
wenzelm@45577
   200
<li>The MacOSX plugin for jEdit disrupts regular C-X/C/V operations,
wenzelm@45577
   201
  e.g. between the editor and the Console plugin, which is a standard
wenzelm@45577
   202
  swing text box.  Similar for search boxes etc.</li>
wenzelm@45577
   203
wenzelm@45982
   204
<li><tt>Font.createFont</tt> mangles the font family of non-regular
wenzelm@45982
   205
  fonts, e.g. bold.  IsabelleText font files need to be
wenzelm@45982
   206
  installed/updated manually if bold versions are desired.  Note that
wenzelm@45982
   207
  this has to be repeated whenever fonts shipped with Isabelle are
wenzelm@45982
   208
  updated!</li>
wenzelm@45577
   209
wenzelm@45577
   210
<li>Missing glyphs are collected from other fonts (like Emacs,
wenzelm@45982
   211
  Firefox).  This is actually an advantage over the Oracle JVM on
wenzelm@45982
   212
  Windows or Linux, but also the deeper reason for other oddities of
wenzelm@45982
   213
  Apple font management.</li>
wenzelm@45577
   214
wenzelm@45982
   215
<li>The native font renderer
wenzelm@45982
   216
  of <tt>-Dapple.awt.graphics.UseQuartz=true</tt> (<em>not</em>
wenzelm@45982
   217
  enabled by default) fails to handle the infinitesimal font size of
wenzelm@45982
   218
  "hidden" text (e.g. used in Isabelle sub/superscripts).</li>
wenzelm@45577
   219
wenzelm@45577
   220
</ul>
wenzelm@45577
   221
wenzelm@45577
   222
wenzelm@45577
   223
<h2>Known problems with OpenJDK 1.6.x</h2>
wenzelm@45577
   224
wenzelm@45577
   225
<ul>
wenzelm@45577
   226
wenzelm@45577
   227
<li>The 2D rendering engine of OpenJDK 1.6.x distorts the appearance
wenzelm@45982
   228
  of the jEdit text area.  Always use official JRE 1.6.x from Oracle
wenzelm@45982
   229
  or Apple.</li>
wenzelm@45577
   230
wenzelm@45982
   231
<li>jEdit 4.4.x on OpenJDK is generally not supported.</li>
wenzelm@45746
   232
wenzelm@45746
   233
</ul>
wenzelm@45746
   234
wenzelm@45746
   235
wenzelm@45577
   236
<h2>Licenses and home sites of contributing systems</h2>
wenzelm@45577
   237
wenzelm@45577
   238
<ul>
wenzelm@45577
   239
wenzelm@45983
   240
<li>Isabelle: BSD-style</li>
wenzelm@45983
   241
wenzelm@45577
   242
<li>Scala: BSD-style <br/> http://www.scala-lang.org</li>
wenzelm@45577
   243
wenzelm@45577
   244
<li>jEdit: GPL (with special cases) <br/> http://www.jedit.org/</li>
wenzelm@45577
   245
wenzelm@45577
   246
<li>Lobo/Cobra: GPL and LGPL <br/> http://lobobrowser.org/</li>
wenzelm@45577
   247
wenzelm@45577
   248
</ul>
wenzelm@45577
   249
wenzelm@39855
   250
</body>
wenzelm@39855
   251
</html>