Paper/Paper.thy
changeset 2604 431cf4e6a7e2
parent 2580 6b3e8602edcf
child 2605 213786e0bd45
equal deleted inserted replaced
2603:90779aefbf1a 2604:431cf4e6a7e2
    97   %also there one would like to bind multiple variables at once. 
    97   %also there one would like to bind multiple variables at once. 
    98 
    98 
    99   Binding multiple variables has interesting properties that cannot be captured
    99   Binding multiple variables has interesting properties that cannot be captured
   100   easily by iterating single binders. For example in the case of type-schemes we do not
   100   easily by iterating single binders. For example in the case of type-schemes we do not
   101   want to make a distinction about the order of the bound variables. Therefore
   101   want to make a distinction about the order of the bound variables. Therefore
   102   we would like to regard the following two type-schemes as $\alpha$-equivalent
   102   we would like to regard the first pair of type-schemes as $\alpha$-equivalent,
       
   103   but assuming that @{text x}, @{text y} and @{text z} are distinct variables,
       
   104   the second pair should \emph{not} be $\alpha$-equivalent:
   103   %
   105   %
   104   \begin{equation}\label{ex1}
   106   \begin{equation}\label{ex1}
   105   @{text "\<forall>{x, y}. x \<rightarrow> y  \<approx>\<^isub>\<alpha>  \<forall>{y, x}. x \<rightarrow> y"} 
   107   @{text "\<forall>{x, y}. x \<rightarrow> y  \<approx>\<^isub>\<alpha>  \<forall>{y, x}. x \<rightarrow> y"}\hspace{10mm}
   106   \end{equation}
   108   @{text "\<forall>{x, y}. x \<rightarrow> y  \<notapprox>\<^isub>\<alpha>  \<forall>{z}. z \<rightarrow> z"}
   107   %
       
   108   \noindent
       
   109   but assuming that @{text x}, @{text y} and @{text z} are distinct variables,
       
   110   the following two should \emph{not} be $\alpha$-equivalent
       
   111   %
       
   112   \begin{equation}\label{ex2}
       
   113   @{text "\<forall>{x, y}. x \<rightarrow> y  \<notapprox>\<^isub>\<alpha>  \<forall>{z}. z \<rightarrow> z"} 
       
   114   \end{equation}
   109   \end{equation}
   115   %
   110   %
   116   \noindent
   111   \noindent
   117   Moreover, we like to regard type-schemes as $\alpha$-equivalent, if they differ
   112   Moreover, we like to regard type-schemes as $\alpha$-equivalent, if they differ
   118   only on \emph{vacuous} binders, such as
   113   only on \emph{vacuous} binders, such as
   137   @{text "\<LET> x = 3 \<AND> y = 2 \<IN> x - y \<END>"}
   132   @{text "\<LET> x = 3 \<AND> y = 2 \<IN> x - y \<END>"}
   138   \end{equation}
   133   \end{equation}
   139 
   134 
   140   \noindent
   135   \noindent
   141   we might not care in which order the assignments @{text "x = 3"} and
   136   we might not care in which order the assignments @{text "x = 3"} and
   142   \mbox{@{text "y = 2"}} are given, but it would be unusual to regard
   137   \mbox{@{text "y = 2"}} are given, but it would be often unusual to regard
   143   \eqref{one} as $\alpha$-equivalent with
   138   \eqref{one} as $\alpha$-equivalent with
   144   %
   139   %
   145   \begin{center}
   140   \begin{center}
   146   @{text "\<LET> x = 3 \<AND> y = 2 \<AND> z = loop \<IN> x - y \<END>"}
   141   @{text "\<LET> x = 3 \<AND> y = 2 \<AND> z = loop \<IN> x - y \<END>"}
   147   \end{center}
   142   \end{center}
   380   from the Ott-tool, but we introduce crucial restrictions, and also extensions, so 
   375   from the Ott-tool, but we introduce crucial restrictions, and also extensions, so 
   381   that our specifications make sense for reasoning about $\alpha$-equated terms.  
   376   that our specifications make sense for reasoning about $\alpha$-equated terms.  
   382   The main improvement over Ott is that we introduce three binding modes
   377   The main improvement over Ott is that we introduce three binding modes
   383   (only one is present in Ott), provide formalised definitions for $\alpha$-equivalence and 
   378   (only one is present in Ott), provide formalised definitions for $\alpha$-equivalence and 
   384   for free variables of our terms, and also derive a reasoning infrastructure
   379   for free variables of our terms, and also derive a reasoning infrastructure
   385   for our specifications inside Isabelle/HOL from ``first principles''.
   380   for our specifications from ``first principles''.
   386 
   381 
   387 
   382 
   388   %\begin{figure}
   383   %\begin{figure}
   389   %\begin{boxedminipage}{\linewidth}
   384   %\begin{boxedminipage}{\linewidth}
   390   %%\begin{center}
   385   %%\begin{center}
   438 
   433 
   439   Two central notions in the nominal logic work are sorted atoms and
   434   Two central notions in the nominal logic work are sorted atoms and
   440   sort-respecting permutations of atoms. We will use the letters @{text "a,
   435   sort-respecting permutations of atoms. We will use the letters @{text "a,
   441   b, c, \<dots>"} to stand for atoms and @{text "p, q, \<dots>"} to stand for
   436   b, c, \<dots>"} to stand for atoms and @{text "p, q, \<dots>"} to stand for
   442   permutations. The purpose of atoms is to represent variables, be they bound or free. 
   437   permutations. The purpose of atoms is to represent variables, be they bound or free. 
   443   The sorts of atoms can be used to represent different kinds of
   438   %The sorts of atoms can be used to represent different kinds of
   444   variables, such as the term-, coercion- and type-variables in Core-Haskell.
   439   %variables, such as the term-, coercion- and type-variables in Core-Haskell.
   445   It is assumed that there is an infinite supply of atoms for each
   440   It is assumed that there is an infinite supply of atoms for each
   446   sort. In the interest of brevity, we shall restrict ourselves 
   441   sort. In the interest of brevity, we shall restrict ourselves 
   447   in what follows to only one sort of atoms.
   442   in what follows to only one sort of atoms.
   448 
   443 
   449   Permutations are bijective functions from atoms to atoms that are 
   444   Permutations are bijective functions from atoms to atoms that are 
   729   \begin{center}
   724   \begin{center}
   730   @{text "fa(x) = {x}"}  \hspace{5mm} @{text "fa(T\<^isub>1 \<rightarrow> T\<^isub>2) = fa(T\<^isub>1) \<union> fa(T\<^isub>2)"}
   725   @{text "fa(x) = {x}"}  \hspace{5mm} @{text "fa(T\<^isub>1 \<rightarrow> T\<^isub>2) = fa(T\<^isub>1) \<union> fa(T\<^isub>2)"}
   731   \end{center}
   726   \end{center}
   732 
   727 
   733   \noindent
   728   \noindent
   734   Now recall the examples shown in \eqref{ex1}, \eqref{ex2} and
   729   Now recall the examples shown in \eqref{ex1} and
   735   \eqref{ex3}. It can be easily checked that @{text "({x, y}, x \<rightarrow> y)"} and
   730   \eqref{ex3}. It can be easily checked that @{text "({x, y}, x \<rightarrow> y)"} and
   736   @{text "({y, x}, y \<rightarrow> x)"} are $\alpha$-equivalent according to
   731   @{text "({y, x}, y \<rightarrow> x)"} are $\alpha$-equivalent according to
   737   $\approx_{\,\textit{set}}$ and $\approx_{\,\textit{res}}$ by taking @{text p} to
   732   $\approx_{\,\textit{set}}$ and $\approx_{\,\textit{res}}$ by taking @{text p} to
   738   be the swapping @{term "(x \<rightleftharpoons> y)"}. In case of @{text "x \<noteq> y"}, then @{text
   733   be the swapping @{term "(x \<rightleftharpoons> y)"}. In case of @{text "x \<noteq> y"}, then @{text
   739   "([x, y], x \<rightarrow> y)"} $\not\approx_{\,\textit{list}}$ @{text "([y, x], x \<rightarrow> y)"}
   734   "([x, y], x \<rightarrow> y)"} $\not\approx_{\,\textit{list}}$ @{text "([y, x], x \<rightarrow> y)"}
   798   \begin{theorem}[Support of Abstractions]\label{suppabs} 
   793   \begin{theorem}[Support of Abstractions]\label{suppabs} 
   799   Assuming @{text x} has finite support, then
   794   Assuming @{text x} has finite support, then
   800 
   795 
   801   \begin{center}
   796   \begin{center}
   802   \begin{tabular}{l}
   797   \begin{tabular}{l}
   803   @{thm (lhs) supp_Abs(1)[no_vars]} $=$
   798   @{thm (lhs) supp_Abs(1)[no_vars]} $\;\;=\;\;$
   804   @{thm supp_Abs(2)[no_vars]}, and\\
   799   @{thm (lhs) supp_Abs(2)[no_vars]} $\;\;=\;\;$ @{thm (rhs) supp_Abs(2)[no_vars]}, and\\
   805   @{thm supp_Abs(3)[where bs="as", no_vars]}
   800   @{thm (lhs) supp_Abs(3)[where bs="as", no_vars]} $\;\;=\;\;$
       
   801   @{thm (rhs) supp_Abs(3)[where bs="as", no_vars]}
   806   \end{tabular}
   802   \end{tabular}
   807   \end{center}
   803   \end{center}
   808   \end{theorem}
   804   \end{theorem}
   809 
   805 
   810   \noindent
   806   \noindent
   811   This theorem states that the bound names do not appear in the support.
   807   This theorem states that the bound names do not appear in the support.
   812   For brevity we omit the proof and again refer the reader to
   808   For brevity we omit the proof and again refer the reader to
   813   our formalisation in Isabelle/HOL (or the appendix).
   809   our formalisation in Isabelle/HOL.
   814 
   810 
   815   %\noindent
   811   %\noindent
   816   %Below we will show the first equation. The others 
   812   %Below we will show the first equation. The others 
   817   %follow by similar arguments. By definition of the abstraction type @{text "abs_set"} 
   813   %follow by similar arguments. By definition of the abstraction type @{text "abs_set"} 
   818   %we have 
   814   %we have 
  1008   the use of shallow binders are the specification of lambda-terms, where a
  1004   the use of shallow binders are the specification of lambda-terms, where a
  1009   single name is bound, and type-schemes, where a finite set of names is
  1005   single name is bound, and type-schemes, where a finite set of names is
  1010   bound:
  1006   bound:
  1011 
  1007 
  1012   \begin{center}\small
  1008   \begin{center}\small
  1013   \begin{tabular}{@ {}c@ {\hspace{10mm}}c@ {}}
  1009   \begin{tabular}{@ {}c@ {\hspace{7mm}}c@ {}}
  1014   \begin{tabular}{@ {}l}
  1010   \begin{tabular}{@ {}l}
  1015   \isacommand{nominal\_datatype} @{text lam} $=$\\
  1011   \isacommand{nominal\_datatype} @{text lam} $=$\\
  1016   \hspace{5mm}\phantom{$\mid$}~@{text "Var name"}\\
  1012   \hspace{2mm}\phantom{$\mid$}~@{text "Var name"}\\
  1017   \hspace{5mm}$\mid$~@{text "App lam lam"}\\
  1013   \hspace{2mm}$\mid$~@{text "App lam lam"}\\
  1018   \hspace{5mm}$\mid$~@{text "Lam x::name t::lam"}\\
  1014   \hspace{2mm}$\mid$~@{text "Lam x::name t::lam"}~~\isacommand{bind} @{text x} \isacommand{in} @{text t}\\
  1019   \hspace{24mm}\isacommand{bind} @{text x} \isacommand{in} @{text t}\\
       
  1020   \end{tabular} &
  1015   \end{tabular} &
  1021   \begin{tabular}{@ {}l@ {}}
  1016   \begin{tabular}{@ {}l@ {}}
  1022   \isacommand{nominal\_datatype}~@{text ty} $=$\\
  1017   \isacommand{nominal\_datatype}~@{text ty} $=$\\
  1023   \hspace{5mm}\phantom{$\mid$}~@{text "TVar name"}\\
  1018   \hspace{5mm}\phantom{$\mid$}~@{text "TVar name"}\\
  1024   \hspace{5mm}$\mid$~@{text "TFun ty ty"}\\
  1019   \hspace{5mm}$\mid$~@{text "TFun ty ty"}\\
  1025   \isacommand{and}~@{text "tsc = All xs::(name fset) T::ty"}\\
  1020   \isacommand{and}~@{text "tsc = All xs::(name fset) T::ty"}~~%
  1026   \hspace{29mm}\isacommand{bind (res)} @{text xs} \isacommand{in} @{text T}\\
  1021   \isacommand{bind (res)} @{text xs} \isacommand{in} @{text T}\\
  1027   \end{tabular}
  1022   \end{tabular}
  1028   \end{tabular}
  1023   \end{tabular}
  1029   \end{center}
  1024   \end{center}
  1030 
  1025 
  1031   \noindent
  1026   \noindent
  1116   
  1111   
  1117   To make sure that atoms bound by deep binders cannot be free at the
  1112   To make sure that atoms bound by deep binders cannot be free at the
  1118   same time, we cannot have more than one binding function for a deep binder. 
  1113   same time, we cannot have more than one binding function for a deep binder. 
  1119   Consequently we exclude specifications such as
  1114   Consequently we exclude specifications such as
  1120   %
  1115   %
  1121   \begin{center}
  1116   \begin{center}\small
  1122   \begin{tabular}{@ {}l@ {\hspace{2mm}}l@ {}}
  1117   \begin{tabular}{@ {}l@ {\hspace{2mm}}l@ {}}
  1123   @{text "Baz\<^isub>1 p::pat t::trm"} & 
  1118   @{text "Baz\<^isub>1 p::pat t::trm"} & 
  1124      \isacommand{bind} @{text "bn\<^isub>1(p) bn\<^isub>2(p)"} \isacommand{in} @{text t}\\
  1119      \isacommand{bind} @{text "bn\<^isub>1(p) bn\<^isub>2(p)"} \isacommand{in} @{text t}\\
  1125   @{text "Baz\<^isub>2 p::pat t\<^isub>1::trm t\<^isub>2::trm"} & 
  1120   @{text "Baz\<^isub>2 p::pat t\<^isub>1::trm t\<^isub>2::trm"} & 
  1126      \isacommand{bind} @{text "bn\<^isub>1(p)"} \isacommand{in} @{text "t\<^isub>1"},
  1121      \isacommand{bind} @{text "bn\<^isub>1(p)"} \isacommand{in} @{text "t\<^isub>1"},
  1919   In the previous section we derived induction principles for $\alpha$-equated terms. 
  1914   In the previous section we derived induction principles for $\alpha$-equated terms. 
  1920   We call such induction principles \emph{weak}, because for a 
  1915   We call such induction principles \emph{weak}, because for a 
  1921   term-constructor \mbox{@{text "C\<^sup>\<alpha> x\<^isub>1\<dots>x\<^isub>r"}}
  1916   term-constructor \mbox{@{text "C\<^sup>\<alpha> x\<^isub>1\<dots>x\<^isub>r"}}
  1922   the induction hypothesis requires us to establish the implications \eqref{weakprem}.
  1917   the induction hypothesis requires us to establish the implications \eqref{weakprem}.
  1923   The problem with these implications is that in general they are difficult to establish.
  1918   The problem with these implications is that in general they are difficult to establish.
  1924   The reason is that we cannot make any assumption about the binders that might be in @{text "C\<^sup>\<alpha>"}. 
  1919   The reason is that we cannot make any assumption about the bound atoms that might be in @{text "C\<^sup>\<alpha>"}. 
  1925   %%(for example we cannot assume the variable convention for them).
  1920   %%(for example we cannot assume the variable convention for them).
  1926 
  1921 
  1927   In \cite{UrbanTasson05} we introduced a method for automatically
  1922   In \cite{UrbanTasson05} we introduced a method for automatically
  1928   strengthening weak induction principles for terms containing single
  1923   strengthening weak induction principles for terms containing single
  1929   binders. These stronger induction principles allow the user to make additional
  1924   binders. These stronger induction principles allow the user to make additional
  1930   assumptions about binders. 
  1925   assumptions about bound atoms. 
  1931   %These additional assumptions amount to a formal
  1926   %These additional assumptions amount to a formal
  1932   %version of the informal variable convention for binders. 
  1927   %version of the informal variable convention for binders. 
  1933   To sketch how this strengthening extends to the case of multiple binders, we use as
  1928   To sketch how this strengthening extends to the case of multiple binders, we use as
  1934   running example the term-constructors @{text "Lam"} and @{text "Let"}
  1929   running example the term-constructors @{text "Lam"} and @{text "Let"}
  1935   from example \eqref{letpat}. Instead of establishing @{text " P\<^bsub>trm\<^esub> t \<and> P\<^bsub>pat\<^esub> p"},
  1930   from example \eqref{letpat}. Instead of establishing @{text " P\<^bsub>trm\<^esub> t \<and> P\<^bsub>pat\<^esub> p"},
  1945   \end{tabular}
  1940   \end{tabular}
  1946   \end{center}
  1941   \end{center}
  1947 
  1942 
  1948   In \cite{UrbanTasson05} we showed how the weaker induction principles imply
  1943   In \cite{UrbanTasson05} we showed how the weaker induction principles imply
  1949   the stronger ones. This was done by some quite complicated, nevertheless automated,
  1944   the stronger ones. This was done by some quite complicated, nevertheless automated,
  1950   induction proofs. In this paper we simplify this work by leveraging the automated proof
  1945   induction proof. In this paper we simplify this work by leveraging the automated proof
  1951   methods from the function package of Isabelle/HOL. 
  1946   methods from the function package of Isabelle/HOL. 
  1952   The reasoning principle these methods employ is well-founded induction. 
  1947   The reasoning principle these methods employ is well-founded induction. 
  1953   To use them in our setting, we have to discharge
  1948   To use them in our setting, we have to discharge
  1954   two proof obligations: one is that we have
  1949   two proof obligations: one is that we have
  1955   well-founded measures (for each type @{text "ty"}$^\alpha_{1..n}$) that decrease in 
  1950   well-founded measures (for each type @{text "ty"}$^\alpha_{1..n}$) that decrease in 
  1956   every induction step and the other is that we have covered all cases. 
  1951   every induction step and the other is that we have covered all cases. 
  1957   As measures we use the size functions 
  1952   As measures we use the size functions 
  1958   @{text "size_ty"}$^\alpha_{1..n}$, which we lifted in the previous section and which are 
  1953   @{text "size_ty"}$^\alpha_{1..n}$, which we lifted in the previous section and which are 
  1959   all well-founded. It is straightforward to establish that these measures decrease 
  1954   all well-founded. %It is straightforward to establish that these measures decrease 
  1960   in every induction step.
  1955   %in every induction step.
  1961   
  1956   
  1962   What is left to show is that we covered all cases. To do so, we use 
  1957   What is left to show is that we covered all cases. To do so, we use 
  1963   a cases lemma derived for each type. For the terms in \eqref{letpat} 
  1958   a cases lemma derived for each type. For the terms in \eqref{letpat} 
  1964   this lemma is of the form
  1959   this lemma is of the form
  1965   %
  1960   %
  2007   permutes names bound by @{text bn} and leaves the other names unchanged. We do this again
  2002   permutes names bound by @{text bn} and leaves the other names unchanged. We do this again
  2008   by lifting. For a
  2003   by lifting. For a
  2009   clause @{text "bn (C x\<^isub>1 \<dots> x\<^isub>r) = rhs"}, we define 
  2004   clause @{text "bn (C x\<^isub>1 \<dots> x\<^isub>r) = rhs"}, we define 
  2010   %
  2005   %
  2011   \begin{center}
  2006   \begin{center}
  2012   @{text "p \<bullet>\<^bsub>bn\<^esub> (C x\<^isub>1 \<dots> x\<^isub>r) \<equiv> C y\<^isub>1 \<dots> y\<^isub>r"} \;\; with
  2007   @{text "p \<bullet>\<^bsub>bn\<^esub> (C x\<^isub>1 \<dots> x\<^isub>r) \<equiv> C y\<^isub>1 \<dots> y\<^isub>r"}  with
  2013   $\begin{cases}
  2008   $\begin{cases}
  2014   \text{@{text "y\<^isub>i \<equiv> x\<^isub>i"} provided @{text "x\<^isub>i"} does not occur in @{text "rhs"}}\\
  2009   \text{@{text "y\<^isub>i \<equiv> x\<^isub>i"} provided @{text "x\<^isub>i"} does not occur in @{text "rhs"}}\\
  2015   \text{@{text "y\<^isub>i \<equiv> p \<bullet>\<^bsub>bn'\<^esub> x\<^isub>i"} provided @{text "bn' x\<^isub>i"} is in @{text "rhs"}}\\
  2010   \text{@{text "y\<^isub>i \<equiv> p \<bullet>\<^bsub>bn'\<^esub> x\<^isub>i"} provided @{text "bn' x\<^isub>i"} is in @{text "rhs"}}\\
  2016   \text{@{text "y\<^isub>i \<equiv> p \<bullet> x\<^isub>i"} otherwise}  
  2011   \text{@{text "y\<^isub>i \<equiv> p \<bullet> x\<^isub>i"} otherwise}  
  2017   \end{cases}$
  2012   \end{cases}$
  2246   Ott can also generate theorem prover code using a raw representation of
  2241   Ott can also generate theorem prover code using a raw representation of
  2247   terms, and in Coq also a locally nameless representation. The developers of
  2242   terms, and in Coq also a locally nameless representation. The developers of
  2248   this tool have also put forward (on paper) a definition for
  2243   this tool have also put forward (on paper) a definition for
  2249   $\alpha$-equivalence of terms that can be specified in Ott.  This definition is
  2244   $\alpha$-equivalence of terms that can be specified in Ott.  This definition is
  2250   rather different from ours, not using any nominal techniques.  To our
  2245   rather different from ours, not using any nominal techniques.  To our
  2251   knowledge there is also no concrete mathematical result concerning this
  2246   knowledge there is no concrete mathematical result concerning this
  2252   notion of $\alpha$-equivalence.  Also the definition for the 
  2247   notion of $\alpha$-equivalence.  Also the definition for the 
  2253   notion of free variables
  2248   notion of free variables
  2254   is work in progress.
  2249   is work in progress.
  2255 
  2250 
  2256   Although we were heavily inspired by the syntax of Ott,
  2251   Although we were heavily inspired by the syntax of Ott,
  2257   its definition of $\alpha$-equivalence is unsuitable for our extension of
  2252   its definition of $\alpha$-equi\-valence is unsuitable for our extension of
  2258   Nominal Isabelle. First, it is far too complicated to be a basis for
  2253   Nominal Isabelle. First, it is far too complicated to be a basis for
  2259   automated proofs implemented on the ML-level of Isabelle/HOL. Second, it
  2254   automated proofs implemented on the ML-level of Isabelle/HOL. Second, it
  2260   covers cases of binders depending on other binders, which just do not make
  2255   covers cases of binders depending on other binders, which just do not make
  2261   sense for our $\alpha$-equated terms. Third, it allows empty types that have no
  2256   sense for our $\alpha$-equated terms. Third, it allows empty types that have no
  2262   meaning in a HOL-based theorem prover. We also had to generalise slightly Ott's 
  2257   meaning in a HOL-based theorem prover. We also had to generalise slightly Ott's 
  2338   them in others so that they make sense in the context of $\alpha$-equated terms. 
  2333   them in others so that they make sense in the context of $\alpha$-equated terms. 
  2339   We also introduced two binding modes (set and res) that do not 
  2334   We also introduced two binding modes (set and res) that do not 
  2340   exist in Ott. 
  2335   exist in Ott. 
  2341   We have tried out the extension with calculi such as Core-Haskell, type-schemes 
  2336   We have tried out the extension with calculi such as Core-Haskell, type-schemes 
  2342   and approximately a  dozen of other typical examples from programming 
  2337   and approximately a  dozen of other typical examples from programming 
  2343   language research~\cite{SewellBestiary}. The code
  2338   language research~\cite{SewellBestiary}. 
  2344   will eventually become part of the next Isabelle distribution.\footnote{For the moment
  2339   %The code
  2345   it can be downloaded from the Mercurial repository linked at
  2340   %will eventually become part of the next Isabelle distribution.\footnote{For the moment
  2346   \href{http://isabelle.in.tum.de/nominal/download}
  2341   %it can be downloaded from the Mercurial repository linked at
  2347   {http://isabelle.in.tum.de/nominal/download}.}
  2342   %\href{http://isabelle.in.tum.de/nominal/download}
       
  2343   %{http://isabelle.in.tum.de/nominal/download}.}
  2348 
  2344 
  2349   We have left out a discussion about how functions can be defined over
  2345   We have left out a discussion about how functions can be defined over
  2350   $\alpha$-equated terms involving general binders. In earlier versions of Nominal
  2346   $\alpha$-equated terms involving general binders. In earlier versions of Nominal
  2351   Isabelle \cite{UrbanBerghofer06} this turned out to be a thorny issue.  We
  2347   Isabelle this turned out to be a thorny issue.  We
  2352   hope to do better this time by using the function package that has recently
  2348   hope to do better this time by using the function package that has recently
  2353   been implemented in Isabelle/HOL and also by restricting function
  2349   been implemented in Isabelle/HOL and also by restricting function
  2354   definitions to equivariant functions (for such functions we can
  2350   definitions to equivariant functions (for them we can
  2355   provide more automation).
  2351   provide more automation).
  2356 
  2352 
  2357   %There are some restrictions we imposed in this paper that we would like to lift in
  2353   %There are some restrictions we imposed in this paper that we would like to lift in
  2358   %future work. One is the exclusion of nested datatype definitions. Nested
  2354   %future work. One is the exclusion of nested datatype definitions. Nested
  2359   %datatype definitions allow one to specify, for instance, the function kinds
  2355   %datatype definitions allow one to specify, for instance, the function kinds
  2384   \noindent
  2380   \noindent
  2385   {\bf Acknowledgements:} %We are very grateful to Andrew Pitts for  
  2381   {\bf Acknowledgements:} %We are very grateful to Andrew Pitts for  
  2386   %many discussions about Nominal Isabelle. 
  2382   %many discussions about Nominal Isabelle. 
  2387   We thank Peter Sewell for 
  2383   We thank Peter Sewell for 
  2388   making the informal notes \cite{SewellBestiary} available to us and 
  2384   making the informal notes \cite{SewellBestiary} available to us and 
  2389   also for patiently explaining some of the finer points of the work on the Ott-tool.
  2385   also for patiently explaining some of the finer points of the Ott-tool.\\[-7mm]    
  2390   %Stephanie Weirich suggested to separate the subgrammars
  2386   %Stephanie Weirich suggested to separate the subgrammars
  2391   %of kinds and types in our Core-Haskell example. \\[-6mm] 
  2387   %of kinds and types in our Core-Haskell example. \\[-6mm] 
  2392 *}
  2388 *}
  2393 
  2389 
  2394 
  2390