|    342   For example, we will not be able to lift a bound-variable function. Although |    342   For example, we will not be able to lift a bound-variable function. Although | 
|    343   this function can be defined for raw terms, it does not respect |    343   this function can be defined for raw terms, it does not respect | 
|    344   alpha-equivalence and therefore cannot be lifted. To sum up, every lifting |    344   alpha-equivalence and therefore cannot be lifted. To sum up, every lifting | 
|    345   of theorems to the quotient level needs proofs of some respectfulness |    345   of theorems to the quotient level needs proofs of some respectfulness | 
|    346   properties (see \cite{Homeier05}). In the paper we show that we are able to |    346   properties (see \cite{Homeier05}). In the paper we show that we are able to | 
|    347   automate these proofs and therefore can establish a reasoning infrastructure |    347   automate these proofs and as a result can automatically establish a reasoning  | 
|    348   for alpha-equated terms. |    348   infrastructure for alpha-equated terms. | 
|    349  |    349  | 
|    350   The examples we have in mind where our reasoning infrastructure will be |    350   The examples we have in mind where our reasoning infrastructure will be | 
|    351   helpful includes the term language of System @{text "F\<^isub>C"}, also |    351   helpful includes the term language of System @{text "F\<^isub>C"}, also | 
|    352   known as Core-Haskell (see Figure~\ref{corehas}). This term language |    352   known as Core-Haskell (see Figure~\ref{corehas}). This term language | 
|    353   involves patterns that have lists of type-, coercion- and term-variables, |    353   involves patterns that have lists of type-, coercion- and term-variables, | 
|    561   % |    561   % | 
|    562   \begin{center} |    562   \begin{center} | 
|    563   @{text "x R y"} \;\;implies\;\; @{text "(p \<bullet> x) R (p \<bullet> y)"} |    563   @{text "x R y"} \;\;implies\;\; @{text "(p \<bullet> x) R (p \<bullet> y)"} | 
|    564   \end{center} |    564   \end{center} | 
|    565  |    565  | 
|    566   Finally, the nominal logic work provides us with convenient means to rename  |    566   Finally, the nominal logic work provides us with general means to rename  | 
|    567   binders. While in the older version of Nominal Isabelle, we used extensively  |    567   binders. While in the older version of Nominal Isabelle, we used extensively  | 
|    568   Property~\ref{swapfreshfresh} for renaming single binders, this property  |    568   Property~\ref{swapfreshfresh} for renaming single binders, this property  | 
|    569   proved unwieldy for dealing with multiple binders. For such binders the  |    569   proved unwieldy for dealing with multiple binders. For such binders the  | 
|    570   following generalisations turned out to be easier to use. |    570   following generalisations turned out to be easier to use. | 
|    571  |    571  | 
|    588   as long as it is finitely supported) and also @{text "p"} does not affect anything |    588   as long as it is finitely supported) and also @{text "p"} does not affect anything | 
|    589   in the support of @{text x} (that is @{term "supp x \<sharp>* p"}). The last  |    589   in the support of @{text x} (that is @{term "supp x \<sharp>* p"}). The last  | 
|    590   fact and Property~\ref{supppermeq} allow us to ``rename'' just the binders  |    590   fact and Property~\ref{supppermeq} allow us to ``rename'' just the binders  | 
|    591   @{text as} in @{text x}, because @{term "p \<bullet> x = x"}. |    591   @{text as} in @{text x}, because @{term "p \<bullet> x = x"}. | 
|    592  |    592  | 
|    593   Most properties given in this section are described in \cite{HuffmanUrban10} |    593   Most properties given in this section are described in detail in \cite{HuffmanUrban10} | 
|    594   and of course all are formalised in Isabelle/HOL. In the next sections we will make  |    594   and of course all are formalised in Isabelle/HOL. In the next sections we will make  | 
|    595   extensively use of these properties in order to define alpha-equivalence in  |    595   extensively use of these properties in order to define alpha-equivalence in  | 
|    596   the presence of multiple binders. |    596   the presence of multiple binders. | 
|    597 *} |    597 *} | 
|    598  |    598  | 
|    608   In order to keep our work with deriving the reasoning infrastructure |    608   In order to keep our work with deriving the reasoning infrastructure | 
|    609   manageable, we will wherever possible state definitions and perform proofs |    609   manageable, we will wherever possible state definitions and perform proofs | 
|    610   on the user-level of Isabelle/HOL, as opposed to write custom ML-code that |    610   on the user-level of Isabelle/HOL, as opposed to write custom ML-code that | 
|    611   generates them anew for each specification. To that end, we will consider |    611   generates them anew for each specification. To that end, we will consider | 
|    612   first pairs @{text "(as, x)"} of type @{text "(atom set) \<times> \<beta>"}.  These pairs |    612   first pairs @{text "(as, x)"} of type @{text "(atom set) \<times> \<beta>"}.  These pairs | 
|    613   are intended to represent the abstraction, or binding, of the set @{text |    613   are intended to represent the abstraction, or binding, of the set of atoms @{text | 
|    614   "as"} in the body @{text "x"}. |    614   "as"} in the body @{text "x"}. | 
|    615  |    615  | 
|    616   The first question we have to answer is when two pairs @{text "(as, x)"} and |    616   The first question we have to answer is when two pairs @{text "(as, x)"} and | 
|    617   @{text "(bs, y)"} are alpha-equivalent? (For the moment we are interested in |    617   @{text "(bs, y)"} are alpha-equivalent? (For the moment we are interested in | 
|    618   the notion of alpha-equivalence that is \emph{not} preserved by adding |    618   the notion of alpha-equivalence that is \emph{not} preserved by adding | 
|    735  |    735  | 
|    736   \noindent |    736   \noindent | 
|    737   This lemma allows us to use our quotient package and introduce  |    737   This lemma allows us to use our quotient package and introduce  | 
|    738   new types @{text "\<beta> abs_set"}, @{text "\<beta> abs_res"} and @{text "\<beta> abs_list"} |    738   new types @{text "\<beta> abs_set"}, @{text "\<beta> abs_res"} and @{text "\<beta> abs_list"} | 
|    739   representing alpha-equivalence classes of pairs of type  |    739   representing alpha-equivalence classes of pairs of type  | 
|    740   @{text "(atom set) \<times> \<beta>"} (in the first two cases) and of type @{text "(atom list) \<times> \<beta>"}.  |    740   @{text "(atom set) \<times> \<beta>"} (in the first two cases) and of type @{text "(atom list) \<times> \<beta>"} | 
|         |    741   (in the third case).  | 
|    741   The elements in these types will be, respectively, written as: |    742   The elements in these types will be, respectively, written as: | 
|    742  |    743  | 
|    743   \begin{center} |    744   \begin{center} | 
|    744   @{term "Abs as x"} \hspace{5mm}  |    745   @{term "Abs as x"} \hspace{5mm}  | 
|    745   @{term "Abs_res as x"} \hspace{5mm} |    746   @{term "Abs_res as x"} \hspace{5mm} | 
|    795   the assumptions give us @{term "(a \<rightleftharpoons> b) \<bullet> (supp x - as) = (supp x - as)"}. |    796   the assumptions give us @{term "(a \<rightleftharpoons> b) \<bullet> (supp x - as) = (supp x - as)"}. | 
|    796   Moreover @{text supp} and set difference are equivariant (see \cite{HuffmanUrban10}). |    797   Moreover @{text supp} and set difference are equivariant (see \cite{HuffmanUrban10}). | 
|    797   \end{proof} |    798   \end{proof} | 
|    798  |    799  | 
|    799   \noindent |    800   \noindent | 
|    800   This lemma allows us to show |    801   This lemma together with \eqref{absperm} allows us to show | 
|    801   % |    802   % | 
|    802   \begin{equation}\label{halfone} |    803   \begin{equation}\label{halfone} | 
|    803   @{thm abs_supports(1)[no_vars]} |    804   @{thm abs_supports(1)[no_vars]} | 
|    804   \end{equation} |    805   \end{equation} | 
|    805    |    806    | 
|    888   \begin{center} |    889   \begin{center} | 
|    889   @{text "C\<^sup>\<alpha> label\<^isub>1::ty"}$'_1$ @{text "\<dots> label\<^isub>l::ty"}$'_l\;\;$  @{text "binding_clauses"}  |    890   @{text "C\<^sup>\<alpha> label\<^isub>1::ty"}$'_1$ @{text "\<dots> label\<^isub>l::ty"}$'_l\;\;$  @{text "binding_clauses"}  | 
|    890   \end{center} |    891   \end{center} | 
|    891    |    892    | 
|    892   \noindent |    893   \noindent | 
|    893   whereby some of the @{text ty}$'_{1..l}$ (or their components) might be contained |    894   whereby some of the @{text ty}$'_{1..l}$ (or their components) can be contained | 
|    894   in the collection of @{text ty}$^\alpha_{1..n}$ declared in |    895   in the collection of @{text ty}$^\alpha_{1..n}$ declared in | 
|    895   \eqref{scheme}.  |    896   \eqref{scheme}.  | 
|    896   In this case we will call the corresponding argument a |    897   In this case we will call the corresponding argument a | 
|    897   \emph{recursive argument} of @{text "C\<^sup>\<alpha>"}.  |    898   \emph{recursive argument} of @{text "C\<^sup>\<alpha>"}.  | 
|    898   %The types of such recursive  |    899   %The types of such recursive  | 
|    939   Shallow binders are of the form \isacommand{bind}\; {\it labels}\; |    940   Shallow binders are of the form \isacommand{bind}\; {\it labels}\; | 
|    940   \isacommand{in}\; {\it labels'} (similar for the other two modes). The |    941   \isacommand{in}\; {\it labels'} (similar for the other two modes). The | 
|    941   restriction we impose on shallow binders is that in case of |    942   restriction we impose on shallow binders is that in case of | 
|    942   \isacommand{bind\_set} and \isacommand{bind\_res} the {\it labels} must |    943   \isacommand{bind\_set} and \isacommand{bind\_res} the {\it labels} must | 
|    943   either refer to atom types or to sets of atom types; in case of |    944   either refer to atom types or to sets of atom types; in case of | 
|    944   \isacommand{bind} we allow labels to atom types or lists of atom types. Two |    945   \isacommand{bind} we allow labels to refer to atom types or lists of atom types. Two | 
|    945   examples for the use of shallow binders are the specification of |    946   examples for the use of shallow binders are the specification of | 
|    946   lambda-terms, where a single name is bound, and type-schemes, where a finite |    947   lambda-terms, where a single name is bound, and type-schemes, where a finite | 
|    947   set of names is bound: |    948   set of names is bound: | 
|    948  |    949  | 
|    949   \begin{center} |    950   \begin{center} | 
|    964   \end{tabular} |    965   \end{tabular} | 
|    965   \end{tabular} |    966   \end{tabular} | 
|    966   \end{center} |    967   \end{center} | 
|    967  |    968  | 
|    968   \noindent |    969   \noindent | 
|    969   Note that in this specification @{text "name"} refers to an atom type, and |    970   Note that for @{text lam} we have a choice which mode we use. The reason is that  | 
|    970   @{text "fset"} to the type of finite sets. Shallow binders can occur in the  |    971   we bind only a single @{text name}. Having \isacommand{bind\_set} in the second | 
|    971   binding part of several binding clauses.  |    972   case changes the semantics of the specification.  | 
|    972   |    973   Note also that in these specifications @{text "name"} refers to an atom type, and | 
|    973   A \emph{deep} binder uses an auxiliary binding function that ``picks'' out |    974   @{text "fset"} to the type of finite sets.  | 
|         |    975  | 
|         |    976   The restrictions are as follows: | 
|         |    977   Shallow binders can occur in the binding part of several binding clauses.  | 
|         |    978   A \emph{deep} binder, on the other hand, uses an auxiliary binding function that ``picks'' out | 
|    974   the atoms in one argument of the term-constructor, which can be bound in   |    979   the atoms in one argument of the term-constructor, which can be bound in   | 
|    975   other arguments and also in the same argument (we will |    980   other arguments and also in the same argument (we will | 
|    976   call such binders \emph{recursive}, see below).  |    981   call such binders \emph{recursive}, see below).  | 
|    977   The corresponding binding functions are expected to return either a set of atoms |    982   The corresponding binding functions are expected to return either a set of atoms | 
|    978   (for \isacommand{bind\_set} and \isacommand{bind\_res}) or a list of atoms |    983   (for \isacommand{bind\_set} and \isacommand{bind\_res}) or a list of atoms | 
|   1002   \end{tabular}} |   1007   \end{tabular}} | 
|   1003   \end{equation} |   1008   \end{equation} | 
|   1004    |   1009    | 
|   1005   \noindent |   1010   \noindent | 
|   1006   In this specification the function @{text "bn"} determines which atoms of @{text  p} are |   1011   In this specification the function @{text "bn"} determines which atoms of @{text  p} are | 
|   1007   bound in the argument @{text "t"}. Note that in the second-last clause the function @{text "atom"} |   1012   bound in the argument @{text "t"}. Note that in the second-last @{text bn}-clause the  | 
|         |   1013   function @{text "atom"} | 
|   1008   coerces a name into the generic atom type of Nominal Isabelle \cite{HuffmanUrban10}. This allows |   1014   coerces a name into the generic atom type of Nominal Isabelle \cite{HuffmanUrban10}. This allows | 
|   1009   us to treat binders of different atom type uniformly.  |   1015   us to treat binders of different atom type uniformly.  | 
|   1010  |   1016  | 
|   1011   The most drastic restriction we have to impose on deep binders is that  |   1017   The most drastic restriction we have to impose on deep binders is that  | 
|   1012   we cannot have ``overlapping'' deep binders. Consider for example the  |   1018   we cannot have ``overlapping'' deep binders. Consider for example the  |