CookBook/Package/Ind_General_Scheme.thy
author berghofe
Fri, 10 Oct 2008 17:13:21 +0200
changeset 32 5bb2d29553c2
child 88 ebbd0dd008c8
permissions -rw-r--r--
Added new chapter about writing packages.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
     1
theory Ind_General_Scheme
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
     2
imports Main
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
     3
begin
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
     4
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
     5
section{* The general construction principle *}
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
     6
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
     7
text {*
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
     8
\label{sec:ind-general-method}
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
     9
Before we start with the implementation, it is useful to describe the general
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    10
form of inductive definitions that our package should accept. We closely follow
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    11
the notation for inductive definitions introduced by Schwichtenberg
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    12
\cite{Schwichtenberg-MLCF} for the Minlog system.
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    13
Let $R_1,\ldots,R_n$ be mutually inductive predicates and $\vec{p}$ be
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    14
parameters. Then the introduction rules for $R_1,\ldots,R_n$ may have
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    15
the form
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    16
\[
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    17
\bigwedge\vec{x}_i.~\vec{A}_i \Longrightarrow \left(\bigwedge\vec{y}_{ij}.~\vec{B}_{ij} \Longrightarrow
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    18
  R_{k_{ij}}~\vec{p}~\vec{s}_{ij}\right)_{j=1,\ldots,m_i} \Longrightarrow R_{l_i}~\vec{p}~\vec{t}_i
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    19
\qquad \mbox{for\ } i=1,\ldots,r
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    20
\]
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    21
where $\vec{A}_i$ and $\vec{B}_{ij}$ are formulae not containing $R_1,\ldots,R_n$.
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    22
Note that by disallowing the inductive predicates to occur in $\vec{B}_{ij}$ we make sure
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    23
that all occurrences of the predicates in the premises of the introduction rules are
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    24
\emph{strictly positive}. This condition guarantees the existence of predicates
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    25
that are closed under the introduction rules shown above. The inductive predicates
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    26
$R_1,\ldots,R_n$ can then be defined as follows:
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    27
\[
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    28
\begin{array}{l@ {\qquad}l}
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    29
  R_i \equiv \lambda\vec{p}~\vec{z}_i.~\forall P_1 \ldots P_n.~K_1 \longrightarrow \cdots \longrightarrow K_r \longrightarrow P_i~\vec{z}_i &
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    30
  \mbox{for\ } i=1,\ldots,n \\[1.5ex]
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    31
  \mbox{where} \\
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    32
  K_i \equiv \forall\vec{x}_i.~\vec{A}_i \longrightarrow \left(\forall\vec{y}_{ij}.~\vec{B}_{ij} \longrightarrow
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    33
    P_{k_{ij}}~\vec{s}_{ij}\right)_{j=1,\ldots,m_i} \longrightarrow P_{l_i}~\vec{t}_i &
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    34
  \mbox{for\ } i=1,\ldots,r
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    35
\end{array}
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    36
\]
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    37
The (weak) induction rules for the inductive predicates $R_1,\ldots,R_n$ are
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    38
\[
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    39
\begin{array}{l@ {\qquad}l}
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    40
  R_i~\vec{p}~\vec{z}_i \Longrightarrow I_1 \Longrightarrow \cdots \Longrightarrow I_r \Longrightarrow P_i~\vec{z}_i &
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    41
  \mbox{for\ } i=1,\ldots,n \\[1.5ex]
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    42
  \mbox{where} \\
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    43
  I_i \equiv \bigwedge\vec{x}_i.~\vec{A}_i \Longrightarrow \left(\bigwedge\vec{y}_{ij}.~\vec{B}_{ij} \Longrightarrow
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    44
    P_{k_{ij}}~\vec{s}_{ij}\right)_{j=1,\ldots,m_i} \Longrightarrow P_{l_i}~\vec{t}_i &
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    45
  \mbox{for\ } i=1,\ldots,r
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    46
\end{array}
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    47
\]
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    48
Since $K_i$ and $I_i$ are equivalent modulo conversion between meta-level and object-level
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    49
connectives, it is clear that the proof of the induction theorem is straightforward. We will
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    50
therefore focus on the proof of the introduction rules. When proving the introduction rule
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    51
shown above, we start by unfolding the definition of $R_1,\ldots,R_n$, which yields
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    52
\[
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    53
\bigwedge\vec{x}_i.~\vec{A}_i \Longrightarrow \left(\bigwedge\vec{y}_{ij}.~\vec{B}_{ij} \Longrightarrow
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    54
  \forall P_1 \ldots P_n.~\vec{K} \longrightarrow P_{k_{ij}}~\vec{s}_{ij}\right)_{j=1,\ldots,m_i} \Longrightarrow \forall P_1 \ldots P_n.~\vec{K} \longrightarrow P_{l_i}~\vec{t}_i
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    55
\]
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    56
where $\vec{K}$ abbreviates $K_1,\ldots,K_r$. Applying the introduction rules for
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    57
$\forall$ and $\longrightarrow$ yields a proof state in which we have to prove $P_{l_i}~\vec{t}_i$
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    58
from the additional assumptions $\vec{K}$. When using $K_{l_i}$ (converted to meta-logic format)
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    59
to prove $P_{l_i}~\vec{t}_i$, we get subgoals $\vec{A}_i$ that are trivially solvable by assumption,
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    60
as well as subgoals of the form
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    61
\[
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    62
\bigwedge\vec{y}_{ij}.~\vec{B}_{ij} \Longrightarrow P_{k_{ij}}~\vec{s}_{ij} \qquad \mbox{for\ } j=1,\ldots,m_i
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    63
\]
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    64
that can be solved using the assumptions
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    65
\[
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    66
\bigwedge\vec{y}_{ij}.~\vec{B}_{ij} \Longrightarrow
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    67
  \forall P_1 \ldots P_n.~\vec{K} \longrightarrow P_{k_{ij}}~\vec{s}_{ij} \qquad \mbox{and} \qquad \vec{K}
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    68
\]
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    69
*}
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    70
5bb2d29553c2 Added new chapter about writing packages.
berghofe
parents:
diff changeset
    71
end