theory README imports Main

section ‹HOL-Library: supplemental theories for main Isabelle/HOL›

text ‹
  This is a collection of generic theories that may be used together with main

  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

  [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.thy› accompanied by ‹Foobar_Examples.thy›.

  [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.