wenzelm@42915: theory Preface wenzelm@42651: imports Base Main wenzelm@27035: begin wenzelm@27035: wenzelm@58618: chapter \Preface\ wenzelm@27035: wenzelm@58618: text \ wenzelm@27035: The \emph{Isabelle} system essentially provides a generic wenzelm@27035: infrastructure for building deductive systems (programmed in wenzelm@27035: Standard ML), with a special focus on interactive theorem proving in wenzelm@29743: higher-order logics. Many years ago, even end-users would refer to wenzelm@29743: certain ML functions (goal commands, tactics, tacticals etc.) to wenzelm@29743: pursue their everyday theorem proving tasks. wenzelm@27035: wenzelm@27035: In contrast \emph{Isar} provides an interpreted language environment wenzelm@27035: of its own, which has been specifically tailored for the needs of wenzelm@27035: theory and proof development. Compared to raw ML, the Isabelle/Isar wenzelm@27035: top-level provides a more robust and comfortable development wenzelm@29743: platform, with proper support for theory development graphs, managed wenzelm@51058: transactions with unlimited undo etc. wenzelm@51058: wenzelm@51058: In its pioneering times, the Isabelle/Isar version of the wenzelm@58552: \emph{Proof~General} user interface @{cite proofgeneral and wenzelm@58552: "Aspinall:TACAS:2000"} has contributed to the wenzelm@51058: success of for interactive theory and proof development in this wenzelm@51058: advanced theorem proving environment, even though it was somewhat wenzelm@51058: biased towards old-style proof scripts. The more recent wenzelm@58552: Isabelle/jEdit Prover IDE @{cite "Wenzel:2012"} emphasizes the wenzelm@51058: document-oriented approach of Isabelle/Isar again more explicitly. wenzelm@27035: wenzelm@27035: \medskip Apart from the technical advances over bare-bones ML wenzelm@27035: programming, the main purpose of the Isar language is to provide a wenzelm@27035: conceptually different view on machine-checked proofs wenzelm@58552: @{cite "Wenzel:1999:TPHOL" and "Wenzel-PhD"}. \emph{Isar} stands for wenzelm@29743: \emph{Intelligible semi-automated reasoning}. Drawing from both the wenzelm@27035: traditions of informal mathematical proof texts and high-level wenzelm@27035: programming languages, Isar offers a versatile environment for wenzelm@27035: structured formal proof documents. Thus properly written Isar wenzelm@27035: proofs become accessible to a broader audience than unstructured wenzelm@27035: tactic scripts (which typically only provide operational information wenzelm@27035: for the machine). Writing human-readable proof texts certainly wenzelm@27035: requires some additional efforts by the writer to achieve a good wenzelm@27035: presentation, both of formal and informal parts of the text. On the wenzelm@27035: other hand, human-readable formal texts gain some value in their own wenzelm@27035: right, independently of the mechanic proof-checking process. wenzelm@27035: wenzelm@27035: Despite its grand design of structured proof texts, Isar is able to wenzelm@27035: assimilate the old tactical style as an ``improper'' sub-language. wenzelm@27035: This provides an easy upgrade path for existing tactic scripts, as wenzelm@29743: well as some means for interactive experimentation and debugging of wenzelm@29743: structured proofs. Isabelle/Isar supports a broad range of proof wenzelm@29743: styles, both readable and unreadable ones. wenzelm@27035: wenzelm@29716: \medskip The generic Isabelle/Isar framework (see wenzelm@29743: \chref{ch:isar-framework}) works reasonably well for any Isabelle wenzelm@29743: object-logic that conforms to the natural deduction view of the wenzelm@29743: Isabelle/Pure framework. Specific language elements introduced by wenzelm@50109: Isabelle/HOL are described in \partref{part:hol}. Although the main wenzelm@48957: language elements are already provided by the Isabelle/Pure wenzelm@48957: framework, examples given in the generic parts will usually refer to wenzelm@48957: Isabelle/HOL. wenzelm@27040: wenzelm@27040: \medskip Isar commands may be either \emph{proper} document wenzelm@27040: constructors, or \emph{improper commands}. Some proof methods and wenzelm@27040: attributes introduced later are classified as improper as well. wenzelm@27040: Improper Isar language elements, which are marked by ``@{text wenzelm@27040: "\<^sup>*"}'' in the subsequent chapters; they are often helpful wenzelm@27040: when developing proof documents, but their use is discouraged for wenzelm@27040: the final human-readable outcome. Typical examples are diagnostic wenzelm@27040: commands that print terms or theorems according to the current wenzelm@27040: context; other commands emulate old-style tactical theorem proving. wenzelm@58618: \ wenzelm@27035: wenzelm@27035: end