diff -r 039845fc96bd -r c9ff326e3ce5 CookBook/Package/Ind_Intro.thy --- a/CookBook/Package/Ind_Intro.thy Fri Feb 13 14:15:28 2009 +0000 +++ b/CookBook/Package/Ind_Intro.thy Sat Feb 14 00:11:50 2009 +0000 @@ -11,23 +11,23 @@ pyramid, but at the top. It's creative design of the highest order. It \\ isn't monkey or donkey work; rather, as Edsger Dijkstra famously \\ claimed, it's amongst the hardest intellectual tasks ever attempted.''} \\[1ex] - Richard Bornat, In defence of programming \cite{Bornat-lecture} + Richard Bornat, In Defence of Programming \cite{Bornat-lecture} \end{flushright} \medskip HOL is based on just a few primitive constants, like equality and - implication, whose properties are described by axioms. All other - concepts, such as inductive predicates, datatypes, or recursive functions - are defined in terms of those constants, and the desired properties, for - example induction theorems, or recursion equations are derived from the - definitions by a formal proof. Since it would be very tedious for a user to - define complex inductive predicates or datatypes ``by hand'' just using the - primitive operators of higher order logic, packages have been implemented - automating such work. Thanks to those packages, the user can give a - high-level specification, like a list of introduction rules or constructors, - and the package then does all the low-level definitions and proofs behind - the scenes. In this chapter we explain how such a package can be - implemented. + implication, whose properties are described by axioms. All other concepts, + such as inductive predicates, datatypes, or recursive functions are defined + in terms of those constants, and the desired properties, for example + induction theorems, or recursion equations are derived from the definitions + by a formal proof. Since it would be very tedious for a user to define + complex inductive predicates or datatypes ``by hand'' just using the + primitive operators of higher order logic, \emph{definitional packages} have + been implemented automating such work. Thanks to those packages, the user + can give a high-level specification, for example a list of introduction + rules or constructors, and the package then does all the low-level + definitions and proofs behind the scenes. In this chapter we explain how + such a package can be implemented. As a running example, we have chosen a rather simple package for defining inductive predicates. To keep things really simple, we will not use the general @@ -39,7 +39,7 @@ have a reduced functionality. It does neither support introduction rules involving arbitrary monotone operators, nor does it prove case analysis (or inversion) rules. Moreover, it only proves a weaker form of the - induction theorem. + induction principle for inductive predicates. *} end