Paper/Paper.thy
changeset 2359 46f753eeb0b8
parent 2350 0a5320c6a7e6
child 2360 99134763d03e
equal deleted inserted replaced
2358:8f142ae324e2 2359:46f753eeb0b8
    35   Abs_res ("[_]\<^bsub>res\<^esub>._") and
    35   Abs_res ("[_]\<^bsub>res\<^esub>._") and
    36   Abs_print ("_\<^bsub>set\<^esub>._") and
    36   Abs_print ("_\<^bsub>set\<^esub>._") and
    37   Cons ("_::_" [78,77] 73) and
    37   Cons ("_::_" [78,77] 73) and
    38   supp_gen ("aux _" [1000] 10) and
    38   supp_gen ("aux _" [1000] 10) and
    39   alpha_bn ("_ \<approx>bn _")
    39   alpha_bn ("_ \<approx>bn _")
       
    40 
       
    41 consts alpha_trm ::'a
       
    42 consts fa_trm :: 'a
       
    43 consts alpha_trm2 ::'a
       
    44 consts fa_trm2 :: 'a
       
    45 consts ast :: 'a
       
    46 consts ast' :: 'a
       
    47 notation (latex output) 
       
    48   alpha_trm ("\<approx>\<^bsub>trm\<^esub>") and
       
    49   fa_trm ("fa\<^bsub>trm\<^esub>") and
       
    50   alpha_trm2 ("'(\<approx>\<^bsub>assn\<^esub>, \<approx>\<^bsub>trm\<^esub>')") and
       
    51   fa_trm2 ("'(fa\<^bsub>assn\<^esub>, fa\<^bsub>trm\<^esub>')") and
       
    52   ast ("'(as, t')") and
       
    53   ast' ("'(as', t\<PRIME> ')")
       
    54 
    40 (*>*)
    55 (*>*)
    41 
    56 
    42 
    57 
    43 section {* Introduction *}
    58 section {* Introduction *}
    44 
    59 
   921 
   936 
   922   \noindent
   937   \noindent
   923   The first mode is for binding lists of atoms (the order of binders matters);
   938   The first mode is for binding lists of atoms (the order of binders matters);
   924   the second is for sets of binders (the order does not matter, but the
   939   the second is for sets of binders (the order does not matter, but the
   925   cardinality does) and the last is for sets of binders (with vacuous binders
   940   cardinality does) and the last is for sets of binders (with vacuous binders
   926   preserving $\alpha$-equivalence). As indicated, the ``\isacommand{in}-part'' of a binding
   941   preserving $\alpha$-equivalence). As indicated, the labels in the ``\isacommand{in}-part'' of a binding
   927   clause will be called \emph{bodies}; the
   942   clause will be called \emph{bodies}; the
   928   ``\isacommand{bind}-part'' will be called \emph{binders}. In contrast to
   943   ``\isacommand{bind}-part'' will be called \emph{binders}. In contrast to
   929   Ott, we allow multiple labels in binders and bodies. For example we allow
   944   Ott, we allow multiple labels in binders and bodies. For example we allow
   930   binding clauses of the form:
   945   binding clauses of the form:
   931 
   946 
  1086   \end{center}
  1101   \end{center}
  1087 
  1102 
  1088   \noindent
  1103   \noindent
  1089   Otherwise it is possible that @{text "bn\<^isub>1"} and @{text "bn\<^isub>2"}  pick 
  1104   Otherwise it is possible that @{text "bn\<^isub>1"} and @{text "bn\<^isub>2"}  pick 
  1090   out different atoms to become bound, respectively be free, in @{text "p"}.
  1105   out different atoms to become bound, respectively be free, in @{text "p"}.
  1091   (Since the Ott-tool does not derive a reasoning for $\alpha$-equated terms, it can permit 
  1106   (Since the Ott-tool does not derive a reasoning infrastructure for 
  1092   such specifications.)
  1107   $\alpha$-equated terms, it can permit such specifications.)
  1093   
  1108   
  1094   We also need to restrict the form of the binding functions in order 
  1109   We also need to restrict the form of the binding functions in order 
  1095   to ensure the @{text "bn"}-functions can be defined for $\alpha$-equated 
  1110   to ensure the @{text "bn"}-functions can be defined for $\alpha$-equated 
  1096   terms. The main restriction is that we cannot return an atom in a binding function that is also
  1111   terms. The main restriction is that we cannot return an atom in a binding function that is also
  1097   bound in the corresponding term-constructor. That means in \eqref{letpat} 
  1112   bound in the corresponding term-constructor. That means in \eqref{letpat} 
  1098   that the term-constructors @{text PVar} and @{text PTup} may
  1113   that the term-constructors @{text PVar} and @{text PTup} may
  1099   not have a binding clause (all arguments are used to define @{text "bn"}).
  1114   not have a binding clause (all arguments are used to define @{text "bn"}).
  1100   In contrast, in case of \eqref{letrecs} the term-constructor @{text ACons}
  1115   In contrast, in case of \eqref{letrecs} the term-constructor @{text ACons}
  1101   may have a binding clause involving the argument @{text t} (the only one that
  1116   may have a binding clause involving the argument @{text t} (the only one that
  1102   is \emph{not} used in the definition of the binding function). This restriction
  1117   is \emph{not} used in the definition of the binding function). This restriction
  1103   is sufficient for defining the binding function over $\alpha$-equated terms.
  1118   is sufficient for having the binding function over $\alpha$-equated terms.
  1104 
  1119 
  1105   In the version of
  1120   In the version of
  1106   Nominal Isabelle described here, we also adopted the restriction from the
  1121   Nominal Isabelle described here, we also adopted the restriction from the
  1107   Ott-tool that binding functions can only return: the empty set or empty list
  1122   Ott-tool that binding functions can only return: the empty set or empty list
  1108   (as in case @{text PNil}), a singleton set or singleton list containing an
  1123   (as in case @{text PNil}), a singleton set or singleton list containing an
  1451   $\approx_{\,\textit{res}}$ and $\approx_{\,\textit{list}}$ for the other
  1466   $\approx_{\,\textit{res}}$ and $\approx_{\,\textit{list}}$ for the other
  1452   binding modes). This premise defines $\alpha$-equivalence of two abstractions
  1467   binding modes). This premise defines $\alpha$-equivalence of two abstractions
  1453   involving multiple binders. As above, we first build the tuples @{text "D"} and
  1468   involving multiple binders. As above, we first build the tuples @{text "D"} and
  1454   @{text "D'"} for the bodies @{text "d"}$_{1..q}$, and the corresponding
  1469   @{text "D'"} for the bodies @{text "d"}$_{1..q}$, and the corresponding
  1455   compound $\alpha$-relation @{text "R"} (shown in \eqref{rempty}). 
  1470   compound $\alpha$-relation @{text "R"} (shown in \eqref{rempty}). 
  1456   For $\approx_{\,\textit{set}}$ we also need
  1471   For $\approx_{\,\textit{set}}$ (respectively $\approx_{\,\textit{list}}$ and 
       
  1472   $\approx_{\,\textit{res}}$)  we also need
  1457   a compound free-atom function for the bodies defined as
  1473   a compound free-atom function for the bodies defined as
  1458   %
  1474   %
  1459   \begin{center}
  1475   \begin{center}
  1460   \mbox{@{text "fa \<equiv> (fa_ty\<^isub>1,\<dots>, fa_ty\<^isub>q)"}}
  1476   \mbox{@{text "fa \<equiv> (fa_ty\<^isub>1,\<dots>, fa_ty\<^isub>q)"}}
  1461   \end{center}
  1477   \end{center}
  1477   \mbox{@{term "P \<equiv> \<exists>p. (B, D) \<approx>gen R fa p (B', D')"}}\;.
  1493   \mbox{@{term "P \<equiv> \<exists>p. (B, D) \<approx>gen R fa p (B', D')"}}\;.
  1478   \end{center}
  1494   \end{center}
  1479 
  1495 
  1480   \noindent
  1496   \noindent
  1481   This premise accounts for $\alpha$-equivalence of the bodies of the binding
  1497   This premise accounts for $\alpha$-equivalence of the bodies of the binding
  1482   clause. Similarly for the other binding modes.
  1498   clause. 
  1483   However, in case the binders have non-recursive deep binders, this premise
  1499   However, in case the binders have non-recursive deep binders, this premise
  1484   is not enough:
  1500   is not enough:
  1485   we also have to ``propagate'' $\alpha$-equivalence inside the structure of
  1501   we also have to ``propagate'' $\alpha$-equivalence inside the structure of
  1486   these binders. An example is @{text "Let"} where we have to make sure the
  1502   these binders. An example is @{text "Let"} where we have to make sure the
  1487   right-hand sides of assignments are $\alpha$-equivalent. For this we use the
  1503   right-hand sides of assignments are $\alpha$-equivalent. For this we use 
  1488   relations @{text "\<approx>bn"}$_{1..m}$ (which we will formally define shortly).
  1504   relations @{text "\<approx>bn"}$_{1..m}$ (which we will formally define shortly).
  1489   Let us assume the non-recursive deep binders in @{text "bc\<^isub>i"} are
  1505   Let us assume the non-recursive deep binders in @{text "bc\<^isub>i"} are
  1490   %
  1506   %
  1491   \begin{center}
  1507   \begin{center}
  1492   @{text "bn\<^isub>1 l\<^isub>1, \<dots>, bn\<^isub>r l\<^isub>r"}.
  1508   @{text "bn\<^isub>1 l\<^isub>1, \<dots>, bn\<^isub>r l\<^isub>r"}.
  1493   \end{center}
  1509   \end{center}
  1494 
  1510 
  1495   \noindent
  1511   \noindent
       
  1512   The tuple @{text L} is then @{text "(l\<^isub>1,\<dots>,l\<^isub>r)"} (similarly @{text "L'"})
       
  1513   and the compound equivalence relation @{text "R'"} is @{text "(\<approx>bn\<^isub>1,\<dots>,\<approx>bn\<^isub>r)"}. 
  1496   All premises for @{text "bc\<^isub>i"} are then given by
  1514   All premises for @{text "bc\<^isub>i"} are then given by
  1497   %
  1515   %
  1498   \begin{center}
  1516   \begin{center}
  1499   @{text "prems(bc\<^isub>i) \<equiv> P  \<and>  l\<^isub>1 \<approx>bn\<^isub>1 l\<PRIME>\<^isub>1  \<and> ... \<and>  l\<^isub>r \<approx>bn\<^isub>r l\<PRIME>\<^isub>r"}
  1517   @{text "prems(bc\<^isub>i) \<equiv> P  \<and>   L R' L'"}
  1500   \end{center} 
  1518   \end{center} 
  1501 
  1519 
  1502   \noindent 
  1520   \noindent 
  1503   where the auxiliary $\alpha$-equivalence relations @{text "\<approx>bn"}$_{1..m}$ 
  1521   The auxiliary $\alpha$-equivalence relations @{text "\<approx>bn"}$_{1..m}$ 
  1504   are defined as follows: assuming a @{text bn}-clause is of the form
  1522   in @{text "R'"} are defined as follows: assuming a @{text bn}-clause is of the form
  1505   %
  1523   %
  1506   \begin{center}
  1524   \begin{center}
  1507   @{text "bn (C z\<^isub>1 \<dots> z\<^isub>s) = rhs"}
  1525   @{text "bn (C z\<^isub>1 \<dots> z\<^isub>s) = rhs"}
  1508   \end{center}
  1526   \end{center}
  1509 
  1527 
  1510   \noindent
  1528   \noindent
  1511   where the @{text "z"}$_{1..s}$ are of types @{text "ty"}$_{1..s}$,
  1529   where the @{text "z"}$_{1..s}$ are of types @{text "ty"}$_{1..s}$,
  1512   then the $\alpha$-equivalence clause for @{text "\<approx>bn"} has the form
  1530   then the corresponding $\alpha$-equivalence clause for @{text "\<approx>bn"} has the form
  1513   %
  1531   %
  1514   \begin{center}
  1532   \begin{center}
  1515   \mbox{\infer{@{text "C z\<^isub>1 \<dots> z\<^isub>s \<approx>bn C z\<PRIME>\<^isub>1 \<dots> z\<PRIME>\<^isub>s"}}
  1533   \mbox{\infer{@{text "C z\<^isub>1 \<dots> z\<^isub>s \<approx>bn C z\<PRIME>\<^isub>1 \<dots> z\<PRIME>\<^isub>s"}}
  1516   {@{text "z\<^isub>1 R\<^isub>1 z\<PRIME>\<^isub>1 \<dots> z\<^isub>s R\<^isub>s z\<PRIME>\<^isub>s"}}}
  1534   {@{text "z\<^isub>1 R\<^isub>1 z\<PRIME>\<^isub>1 \<dots> z\<^isub>s R\<^isub>s z\<PRIME>\<^isub>s"}}}
  1517   \end{center}
  1535   \end{center}
  1535   \noindent
  1553   \noindent
  1536   This completes the definition of $\alpha$-equivalence. As a sanity check, we can show
  1554   This completes the definition of $\alpha$-equivalence. As a sanity check, we can show
  1537   that the premises of empty binding clauses are a special case of the clauses for 
  1555   that the premises of empty binding clauses are a special case of the clauses for 
  1538   non-empty ones (we just have to unfold the definition of $\approx_{\,\textit{set}}$ and take @{text "0"}
  1556   non-empty ones (we just have to unfold the definition of $\approx_{\,\textit{set}}$ and take @{text "0"}
  1539   for the existentially quantified permutation).
  1557   for the existentially quantified permutation).
  1540 *}
  1558 
  1541 (*<*)
  1559   Again let us take a look at a concrete example for these definitions. For \eqref{letrecs}
  1542 consts alpha_ty ::'a
       
  1543 consts alpha_trm ::'a
       
  1544 consts fa_trm :: 'a
       
  1545 consts alpha_trm2 ::'a
       
  1546 consts fa_trm2 :: 'a
       
  1547 consts ast :: 'a
       
  1548 consts ast' :: 'a
       
  1549 notation (latex output) 
       
  1550   alpha_ty ("\<approx>ty") and
       
  1551   alpha_trm ("\<approx>\<^bsub>trm\<^esub>") and
       
  1552   fa_trm ("fa\<^bsub>trm\<^esub>") and
       
  1553   alpha_trm2 ("'(\<approx>\<^bsub>assn\<^esub>, \<approx>\<^bsub>trm\<^esub>')") and
       
  1554   fa_trm2 ("'(fa\<^bsub>assn\<^esub>, fa\<^bsub>trm\<^esub>')") and
       
  1555   ast ("'(as, t')") and
       
  1556   ast' ("'(as', t\<PRIME> ')")
       
  1557 (*>*)
       
  1558 text {*
       
  1559   Again lets take a look at a concrete example for these definitions. For \eqref{letrecs}
       
  1560   we have three relations $\approx_{\textit{trm}}$, $\approx_{\textit{assn}}$ and
  1560   we have three relations $\approx_{\textit{trm}}$, $\approx_{\textit{assn}}$ and
  1561   $\approx_{\textit{bn}}$ with the following clauses:
  1561   $\approx_{\textit{bn}}$ with the following clauses:
  1562 
  1562 
  1563   \begin{center}
  1563   \begin{center}
  1564   \begin{tabular}{@ {}c @ {}}
  1564   \begin{tabular}{@ {}c @ {}}
  1565   \infer{@{text "Let as t \<approx>\<^bsub>trm\<^esub> Let as' t'"}}
  1565   \infer{@{text "Let as t \<approx>\<^bsub>trm\<^esub> Let as' t'"}}
  1566   {@{term "\<exists>p. (bn as, t) \<approx>lst alpha_trm fa_trm p (bn as', t')"} & @{text "as \<approx>\<^bsub>bn\<^esub> as'"}}\smallskip\\
  1566   {@{term "\<exists>p. (bn as, t) \<approx>lst alpha_trm fa_trm p (bn as', t')"} & @{text "as \<approx>\<^bsub>bn\<^esub> as'"}}\smallskip\\
  1567   \infer{@{text "Let_rec as t \<approx>\<^bsub>trm\<^esub> Let_rec as' t'"}}
  1567   \makebox[0mm]{\infer{@{text "Let_rec as t \<approx>\<^bsub>trm\<^esub> Let_rec as' t'"}}
  1568   {@{term "\<exists>p. (bn as, ast) \<approx>lst alpha_trm2 fa_trm2 p (bn as', ast')"}}
  1568   {@{term "\<exists>p. (bn as, ast) \<approx>lst alpha_trm2 fa_trm2 p (bn as', ast')"}}}
  1569   \end{tabular}
  1569   \end{tabular}
  1570   \end{center}
  1570   \end{center}
  1571 
  1571 
  1572   \begin{center}
  1572   \begin{center}
  1573   \begin{tabular}{@ {}c @ {}}
  1573   \begin{tabular}{@ {}c @ {}}
  1574   \infer{@{text "ANil \<approx>\<^bsub>assn\<^esub> ANil"}}{}\\
  1574   \infer{@{text "ANil \<approx>\<^bsub>assn\<^esub> ANil"}}{}\smallskip\\
  1575   \infer{@{text "ACons a t as \<approx>\<^bsub>assn\<^esub> ACons a' t' as"}}
  1575   \infer{@{text "ACons a t as \<approx>\<^bsub>assn\<^esub> ACons a' t' as"}}
  1576   {@{text "a = a'"} & @{text "t \<approx>\<^bsub>trm\<^esub> t'"} & @{text "as \<approx>\<^bsub>assn\<^esub> as'"}}
  1576   {@{text "a = a'"} & @{text "t \<approx>\<^bsub>trm\<^esub> t'"} & @{text "as \<approx>\<^bsub>assn\<^esub> as'"}}
  1577   \end{tabular}
  1577   \end{tabular}
  1578   \end{center}
  1578   \end{center}
  1579 
  1579 
  1580   \begin{center}
  1580   \begin{center}
  1581   \begin{tabular}{@ {}c @ {}}
  1581   \begin{tabular}{@ {}c @ {}}
  1582   \infer{@{text "ANil \<approx>\<^bsub>bn\<^esub> ANil"}}{}\\
  1582   \infer{@{text "ANil \<approx>\<^bsub>bn\<^esub> ANil"}}{}\smallskip\\
  1583   \infer{@{text "ACons a t as \<approx>\<^bsub>bn\<^esub> ACons a' t' as"}}
  1583   \infer{@{text "ACons a t as \<approx>\<^bsub>bn\<^esub> ACons a' t' as"}}
  1584   {@{text "t \<approx>\<^bsub>trm\<^esub> t'"} & @{text "as \<approx>\<^bsub>bn\<^esub> as'"}}
  1584   {@{text "t \<approx>\<^bsub>trm\<^esub> t'"} & @{text "as \<approx>\<^bsub>bn\<^esub> as'"}}
  1585   \end{tabular}
  1585   \end{tabular}
  1586   \end{center}
  1586   \end{center}
  1587 
  1587 
  1588   \noindent
  1588   \noindent
  1589   Note the difference between  $\approx_{\textit{assn}}$ and
  1589   Note the difference between  $\approx_{\textit{assn}}$ and
  1590   $\approx_{\textit{bn}}$: the latter only ``tracks'' $\alpha$-equivalence of 
  1590   $\approx_{\textit{bn}}$: the latter only ``tracks'' $\alpha$-equivalence of 
  1591   the components in an assignment that are \emph{not} bound. Therefore we have
  1591   the components in an assignment that are \emph{not} bound. This is needed in the 
  1592   a $\approx_{\textit{bn}}$-premise in the clause for @{text "Let"} (which is 
  1592   in the clause for @{text "Let"} (which is has
  1593   a non-recursive binder). The underlying reason is that the terms inside an assignment are not meant 
  1593   a non-recursive binder). The underlying reason is that the terms inside an assignment are not meant 
  1594   to be ``under'' the binder. Such a premise is \emph{not} needed in @{text "Let_rec"}, 
  1594   to be ``under'' the binder. Such a premise is \emph{not} needed in @{text "Let_rec"}, 
  1595   because there everything from the assignment is under the binder. 
  1595   because there everything from the assignment is under the binder. 
  1596 *}
  1596 *}
  1597 
  1597 
  1600 text {*
  1600 text {*
  1601   Having made all necessary definitions for raw terms, we can start
  1601   Having made all necessary definitions for raw terms, we can start
  1602   introducing the reasoning infrastructure for the $\alpha$-equated types the
  1602   introducing the reasoning infrastructure for the $\alpha$-equated types the
  1603   user originally specified. We sketch in this section the facts we need for establishing
  1603   user originally specified. We sketch in this section the facts we need for establishing
  1604   this reasoning infrastructure. First we have to show that the
  1604   this reasoning infrastructure. First we have to show that the
  1605   $\alpha$-equivalence relations defined in the previous section are indeed
  1605   $\alpha$-equivalence relations defined in the previous section are 
  1606   equivalence relations.
  1606   equivalence relations.
  1607 
  1607 
  1608   \begin{lemma}\label{equiv} 
  1608   \begin{lemma}\label{equiv} 
  1609   Given the raw types @{text "ty\<^isub>1, \<dots>, ty\<^isub>n"} and binding functions
  1609   Given the raw types @{text "ty\<^isub>1, \<dots>, ty\<^isub>n"} and binding functions
  1610   @{text "bn\<^isub>1, \<dots>, bn\<^isub>m"}, the relations @{text "\<approx>ty\<^isub>1, \<dots>, \<approx>ty\<^isub>n"} and 
  1610   @{text "bn\<^isub>1, \<dots>, bn\<^isub>m"}, the relations @{text "\<approx>ty\<^isub>1, \<dots>, \<approx>ty\<^isub>n"} and 
  1618   can be dealt with as in Lemma~\ref{alphaeq}.
  1618   can be dealt with as in Lemma~\ref{alphaeq}.
  1619   \end{proof}
  1619   \end{proof}
  1620 
  1620 
  1621   \noindent 
  1621   \noindent 
  1622   We can feed this lemma into our quotient package and obtain new types @{text
  1622   We can feed this lemma into our quotient package and obtain new types @{text
  1623   "ty\<AL>\<^bsub>1..n\<^esub>"} representing $\alpha$-equated terms of types @{text "ty\<^bsub>1..n\<^esub>"}. We also obtain 
  1623   "ty"}$^\alpha_{1..n}$ representing $\alpha$-equated terms of types @{text "ty"}$_{1..n}$. 
  1624   definitions for the term-constructors @{text
  1624   We also obtain definitions for the term-constructors @{text
  1625   "C"}$^\alpha_{1..m}$ from the raw term-constructors @{text
  1625   "C"}$^\alpha_{1..m}$ from the raw term-constructors @{text
  1626   "C"}$_{1..m}$, and similar definitions for the free-atom functions @{text
  1626   "C"}$_{1..m}$, and similar definitions for the free-atom functions @{text
  1627   "fa_ty"}$^\alpha_{1..n}$ and the binding functions @{text
  1627   "fa_ty"}$^\alpha_{1..n}$ and the binding functions @{text
  1628   "bn"}$^\alpha_{1..k}$. However, these definitions are not really useful to the 
  1628   "bn"}$^\alpha_{1..k}$. However, these definitions are not really useful to the 
  1629   user, since they are given in terms of the isomorphisms we obtained by 
  1629   user, since they are given in terms of the isomorphisms we obtained by 
  1650   In order to generate \eqref{distinctalpha} from \eqref{distinctraw}, the quotient
  1650   In order to generate \eqref{distinctalpha} from \eqref{distinctraw}, the quotient
  1651   package needs to know that the term-constructors @{text "C\<^isub>i"} and @{text "C\<^isub>j"} 
  1651   package needs to know that the term-constructors @{text "C\<^isub>i"} and @{text "C\<^isub>j"} 
  1652   are \emph{respectful} w.r.t.~the $\alpha$-equivalence relations (see \cite{Homeier05}).
  1652   are \emph{respectful} w.r.t.~the $\alpha$-equivalence relations (see \cite{Homeier05}).
  1653   Assuming @{text "C\<^isub>i"} is of type @{text "ty"} with argument types
  1653   Assuming @{text "C\<^isub>i"} is of type @{text "ty"} with argument types
  1654   @{text "ty\<^isub>1, \<dots>, ty\<^isub>n"}, then respectfulness amounts to showing that
  1654   @{text "ty\<^isub>1, \<dots>, ty\<^isub>n"}, then respectfulness amounts to showing that
  1655   
  1655   %
  1656   \begin{center}
  1656   \begin{center}
  1657   @{text "C\<^isub>i x\<^isub>1 \<dots> x\<^isub>n \<approx>ty C\<^isub>i y\<^isub>1 \<dots> y\<^isub>n"}
  1657   @{text "C\<^isub>i x\<^isub>1 \<dots> x\<^isub>n \<approx>ty C\<^isub>i y\<^isub>1 \<dots> y\<^isub>n"}
  1658   \end{center}  
  1658   \end{center}  
  1659 
  1659 
  1660   \noindent
  1660   \noindent
  1674   Having established respectfulness for every raw term-constructor, the 
  1674   Having established respectfulness for every raw term-constructor, the 
  1675   quotient package is able to automatically deduce \eqref{distinctalpha} from \eqref{distinctraw}.
  1675   quotient package is able to automatically deduce \eqref{distinctalpha} from \eqref{distinctraw}.
  1676   In fact we can from now on lift facts from the raw level to the $\alpha$-equated level
  1676   In fact we can from now on lift facts from the raw level to the $\alpha$-equated level
  1677   as long as they contain raw term-constructors only. The 
  1677   as long as they contain raw term-constructors only. The 
  1678   induction principles derived by the datatype package in Isabelle/HOL for the types @{text
  1678   induction principles derived by the datatype package in Isabelle/HOL for the types @{text
  1679   "ty\<^bsub>1..n\<^esub>"} fall into this category. So we can also add to our infrastructure
  1679   "ty"}$_{1..n}$ fall into this category. So we can also add to our infrastructure
  1680   induction principles that establish
  1680   induction principles that establish
  1681 
  1681 
  1682   \begin{center}
  1682   \begin{center}
  1683   @{text "P\<^bsub>ty\<AL>\<^esub>\<^isub>1 y\<^isub>1 \<dots> P\<^bsub>ty\<AL>\<^esub>\<^isub>n y\<^isub>n "}
  1683   @{text "P\<^bsub>ty\<AL>\<^esub>\<^isub>1 y\<^isub>1 \<dots> P\<^bsub>ty\<AL>\<^esub>\<^isub>n y\<^isub>n "}
  1684   \end{center} 
  1684   \end{center}