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} |