HOL-Library: supplemental theories for main Isabelle/HOL
This is a collection of generic theories that may be used together
with main Isabelle/HOL.
Addition of new theories should be done with some care, as the
``module system'' of Isabelle is rather simplistic. The following
guidelines may be helpful to achieve maximum re-usability and minimum
clashes with existing developments.
- Examples
- Theories should be as ``generic'' as is sensible. Unused (or
rather unusable?) theories should be avoided; common applications
should actually refer to the present theory. Small example uses may
be included in the library as well, but should be put in a separate
theory, such as Foobar accompanied by
Foobar_Examples.
- Theory names
- The theory loader name space is flat, so use sufficiently
long and descriptive names to reduce the danger of clashes with the
user's own theories. The convention for theory names is as follows:
Foobar_Doobar (this looks best in LaTeX output).
- Names of logical items
- There are separate hierarchically structured name spaces for
types, constants, theorems etc. Nevertheless, some care should be
taken, as the name spaces are always ``open''. Use adequate names;
avoid unreadable abbreviations. The general naming convention is to
separate word constituents by underscores, as in foo_bar or
Foo_Bar (this looks best in LaTeX output).
- Global context declarations
- Only items introduced in the present theory should be declared
globally (e.g. as Simplifier rules). Note that adding and deleting
rules from parent theories may result in strange behavior later,
depending on the user's arrangement of import lists.
- Spacing
- Isabelle is able to produce a high-quality LaTeX document from the
theory sources, provided some minor issues are taken care of. In
particular, spacing and line breaks are directly taken from source
text. Incidentally, output looks very good if common type-setting
conventions are observed: put a single space after each
punctuation character (",", ".", etc.), but none
before it; do not extra spaces inside of parentheses; do not attempt
to simulate table markup with spaces, avoid ``hanging'' indentations.