Paper/Paper.thy
changeset 2163 5dc48e1af733
parent 2156 029f8aabed12
child 2175 f11dd09fa3a7
--- a/Paper/Paper.thy	Tue May 18 14:40:05 2010 +0100
+++ b/Paper/Paper.thy	Wed May 19 12:43:38 2010 +0100
@@ -9,7 +9,7 @@
   alpha_bn :: "'a \<Rightarrow> 'a \<Rightarrow> bool"
   abs_set2 :: "'a \<Rightarrow> perm \<Rightarrow> 'b \<Rightarrow> 'c"
   Abs_dist :: "'a \<Rightarrow> 'b \<Rightarrow> 'c" 
-  
+  Abs_print :: "'a \<Rightarrow> 'b \<Rightarrow> 'c" 
 
 definition
  "equal \<equiv> (op =)" 
@@ -33,6 +33,7 @@
   Abs_lst ("[_]\<^raw:$\!$>\<^bsub>list\<^esub>._") and
   Abs_dist ("[_]\<^raw:$\!$>\<^bsub>#list\<^esub>._") and
   Abs_res ("[_]\<^raw:$\!$>\<^bsub>res\<^esub>._") and
+  Abs_print ("_\<^raw:$\!$>\<^bsub>set\<^esub>._") and
   Cons ("_::_" [78,77] 73) and
   supp_gen ("aux _" [1000] 10) and
   alpha_bn ("_ \<approx>bn _")
@@ -52,15 +53,15 @@
   \end{center}
 
   \noindent
-  where free and bound variables have names.  For such alpha-equated terms,  Nominal Isabelle
-  derives automatically a reasoning infrastructure that has been used
-  successfully in formalisations of an equivalence checking algorithm for LF
-  \cite{UrbanCheneyBerghofer08}, Typed
+  where free and bound variables have names.  For such alpha-equated terms,
+  Nominal Isabelle derives automatically a reasoning infrastructure that has
+  been used successfully in formalisations of an equivalence checking
+  algorithm for LF \cite{UrbanCheneyBerghofer08}, Typed
   Scheme~\cite{TobinHochstadtFelleisen08}, several calculi for concurrency
-  \cite{BengtsonParow09} and a strong normalisation result
-  for cut-elimination in classical logic \cite{UrbanZhu08}. It has also been
-  used by Pollack for formalisations in the locally-nameless approach to
-  binding \cite{SatoPollack10}.
+  \cite{BengtsonParow09} and a strong normalisation result for cut-elimination
+  in classical logic \cite{UrbanZhu08}. It has also been used by Pollack for
+  formalisations in the locally-nameless approach to binding
+  \cite{SatoPollack10}.
 
   However, Nominal Isabelle has fared less well in a formalisation of
   the algorithm W \cite{UrbanNipkow09}, where types and type-schemes are,
@@ -546,7 +547,7 @@
 
   \noindent or equivalently that a permutation applied to the application
   @{text "f x"} can be moved to the argument @{text x}. That means for equivariant
-  functions @{text f} we have for all permutations @{text p}
+  functions @{text f}, we have for all permutations @{text p}
   %
   \begin{equation}\label{equivariance}
   @{text "p \<bullet> f = f"} \;\;\;\textit{if and only if}\;\;\;
@@ -798,7 +799,8 @@
   \end{proof}
 
   \noindent
-  This lemma together with \eqref{absperm} allows us to show
+  Assuming that @{text "x"} has finite support, this lemma together 
+  with \eqref{absperm} allows us to show
   %
   \begin{equation}\label{halfone}
   @{thm abs_supports(1)[no_vars]}
@@ -918,11 +920,10 @@
   the second is for sets of binders (the order does not matter, but the
   cardinality does) and the last is for sets of binders (with vacuous binders
   preserving alpha-equivalence). The ``\isacommand{in}-part'' of a binding
-  clause will be called \emph{bodies} (there can be more than one); the 
-  ``\isacommand{bind}-part'' will be called \emph{binders}. 
-
-  In contrast to Ott, we allow multiple labels in binders and bodies. For example
-  we allow binding clauses of the form:
+  clause will be called \emph{bodies} (there can be more than one); the
+  ``\isacommand{bind}-part'' will be called \emph{binders}. In contrast to
+  Ott, we allow multiple labels in binders and bodies. For example we allow
+  binding clauses of the form:
 
   \begin{center}
   \begin{tabular}{@ {}ll@ {}}
@@ -936,8 +937,9 @@
 
   \noindent
   Similarly for the other binding modes. Interestingly, in case of \isacommand{bind\_set}
-  and \isacommand{bind\_res} the binding clauses will make a difference in
-  terms of the corresponding alpha-equivalence. We will show this later with an example.
+  and \isacommand{bind\_res} the binding clauses will make a difference to the semantics
+  of the specification (the corresponding alpha-equivalence will differ). We will 
+  show this later with an example.
   
   There are some restrictions we need to impose: First, a body can only occur
   in \emph{one} binding clause of a term constructor. For binders we
@@ -972,8 +974,8 @@
   \noindent
   Note that for @{text lam} it does not matter which binding mode we use. The
   reason is that we bind only a single @{text name}. However, having
-  \isacommand{bind\_set} or \isacommand{bind} in the second case again makes a
-  difference to the underlying notion of alpha-equivalence. Note also that in
+  \isacommand{bind\_set} or \isacommand{bind} in the second case makes again a
+  difference to the semantics of the specification. Note also that in
   these specifications @{text "name"} refers to an atom type, and @{text
   "fset"} to the type of finite sets.
 
@@ -1032,7 +1034,7 @@
   binders \emph{recursive}.  To see the purpose of such recursive binders,
   compare ``plain'' @{text "Let"}s and @{text "Let_rec"}s in the following
   specification:
-  %
+
   \begin{equation}\label{letrecs}
   \mbox{%
   \begin{tabular}{@ {}l@ {}}
@@ -1055,11 +1057,10 @@
   The difference is that with @{text Let} we only want to bind the atoms @{text
   "bn(as)"} in the term @{text t}, but with @{text "Let_rec"} we also want to bind the atoms
   inside the assignment. This difference has consequences for the free-variable 
-  function and alpha-equivalence relation, which we are going to describe in the 
-  rest of this section.
+  function and alpha-equivalence relation, which we are going to define below.
   
-  The restriction we have to impose on deep binders is that we cannot have
-  more than one binding function for one binder. So we exclude:
+  For this definition, we have to impose some restrictions on deep binders. First,
+  we cannot have more than one binding function for one binder. So we exclude:
 
   \begin{center}
   \begin{tabular}{ll}
@@ -1090,8 +1091,8 @@
   In order to simplify our definitions, we shall assume specifications 
   of term-calculi are \emph{completed}. By this we mean that  
   for every argument of a term-constructor that is \emph{not} 
-  already part of a binding clause, we add implicitly a special \emph{empty} binding
-  clause, written \isacommand{bind}~@{term "{}"}~\isacommand{in}~@{text "label"}. In case
+  already part of a binding clause given by the user, we add implicitly a special \emph{empty} binding
+  clause, written \isacommand{bind}~@{term "{}"}~\isacommand{in}~@{text "labels"}. In case
   of the lambda-calculus, the completion produces
 
   \begin{center}
@@ -1100,8 +1101,7 @@
   \hspace{5mm}\phantom{$\mid$}~@{text "Var x::name"}
     \;\;\isacommand{bind}~@{term "{}"}~\isacommand{in}~@{text "x"}\\
   \hspace{5mm}$\mid$~@{text "App t\<^isub>1::lam t\<^isub>2::lam"}
-    \;\;\isacommand{bind}~@{term "{}"}~\isacommand{in}~@{text "t\<^isub>1"},
-        \isacommand{bind}~@{term "{}"}~\isacommand{in}~@{text "t\<^isub>2"}\\
+    \;\;\isacommand{bind}~@{term "{}"}~\isacommand{in}~@{text "t\<^isub>1 t\<^isub>2"}\\
   \hspace{5mm}$\mid$~@{text "Lam x::name t::lam"}
     \;\;\isacommand{bind}~@{text x} \isacommand{in} @{text t}\\
   \end{tabular}
@@ -1913,13 +1913,13 @@
   approach to binding \cite{chargueraud09}.  There, de-Bruijn indices consist
   of two numbers, one referring to the place where a variable is bound and the
   other to which variable is bound. The reasoning infrastructure for both
-  representations of bindings comes for free in the theorem provers, like Isabelle/HOL or
+  representations of bindings comes for free in theorem provers like Isabelle/HOL or
   Coq, as the corresponding term-calculi can be implemented as ``normal''
   datatypes.  However, in both approaches it seems difficult to achieve our
   fine-grained control over the ``semantics'' of bindings (i.e.~whether the
   order of binders should matter, or vacuous binders should be taken into
   account). To do so, one would require additional predicates that filter out
-  unwanted terms. Our guess is that such predicates results in rather
+  unwanted terms. Our guess is that such predicates result in rather
   intricate formal reasoning.
 
   Another representation technique for binding is higher-order abstract syntax
@@ -1936,39 +1936,93 @@
   all the unwanted consequences when reasoning about the resulting terms.
 
   Two formalisations involving general binders have also been performed in older
-  versions of Nominal Isabelle \cite{BengtsonParow09, UrbanNipkow09}.  Both
+  versions of Nominal Isabelle (one about Psi-calculi and one about alpgorithm W 
+  \cite{BengtsonParow09, UrbanNipkow09}).  Both
   use the approach based on iterated single binders. Our experience with
   the latter formalisation has been disappointing. The major pain arose from
   the need to ``unbind'' variables. This can be done in one step with our
-  general binders, for example @{term "Abs as x"}, but needs a cumbersome
+  general binders, but needs a cumbersome
   iteration with single binders. The resulting formal reasoning turned out to
   be rather unpleasant. The hope is that the extension presented in this paper
   is a substantial improvement.
  
-  The most closely related work to the one presented here is the Ott-tool \cite{ott-jfp}. This tool is a
-  nifty front-end for creating \LaTeX{} documents from specifications of
-  term-calculi involving general binders. For a subset of the specifications, Ott can also generate
-  theorem prover code using a raw representation of terms, and in Coq also a
-  locally nameless representation. The developers of this tool have also put
-  forward (on paper) a definition for alpha-equivalence of terms that can be
-  specified in Ott.  This definition is rather different from ours, not using
-  any nominal techniques. Although we were heavily inspired by their syntax,
+  The most closely related work to the one presented here is the Ott-tool
+  \cite{ott-jfp} and the C$\alpha$ml language \cite{Pottier06}. Ott is a nifty
+  front-end for creating \LaTeX{} documents from specifications of
+  term-calculi involving general binders. For a subset of the specifications,
+  Ott can also generate theorem prover code using a raw representation of
+  terms, and in Coq also a locally nameless representation. The developers of
+  this tool have also put forward (on paper) a definition for
+  alpha-equivalence of terms that can be specified in Ott.  This definition is
+  rather different from ours, not using any nominal techniques.  To our
+  knowledge there is also no concrete mathematical result concerning this
+  notion of alpha-equivalence.  A definition for the notion of free variables
+  in a term are work in progress in Ott.
+
+  Although we were heavily inspired by their syntax,
   their definition of alpha-equivalence is unsuitable for our extension of
   Nominal Isabelle. First, it is far too complicated to be a basis for
   automated proofs implemented on the ML-level of Isabelle/HOL. Second, it
   covers cases of binders depending on other binders, which just do not make
   sense for our alpha-equated terms. Third, it allows empty types that have no
-  meaning in a HOL-based theorem prover.
+  meaning in a HOL-based theorem prover. We also had to generalise slightly their 
+  binding clauses. In Ott you specify binding clauses with a single body; we 
+  allow more than one. We have to do this, because this makes a difference 
+  for our notion of alpha-equivalence in case of \isacommand{bind\_set} and 
+  \isacommand{bind\_res}. This makes 
+
+  \begin{center}
+  \begin{tabular}{@ {}ll@ {}}
+  @{text "Foo\<^isub>1 xs::name fset x::name y::name"} &  
+      \isacommand{bind\_set} @{text "xs"} \isacommand{in} @{text "x y"}\\
+  @{text "Foo\<^isub>2 xs::name fset x::name y::name"} &  
+      \isacommand{bind\_set} @{text "xs"} \isacommand{in} @{text "x"}, 
+      \isacommand{bind\_set} @{text "xs"} \isacommand{in} @{text "y"}\\
+  \end{tabular}
+  \end{center}
+
+  \noindent
+  behave differently. To see this, consider the following equations 
+
+  \begin{center}
+  \begin{tabular}{c}
+  @{term "Abs_print [a,b] (a, b) = Abs_print [a,b] (b, a)"}\\
+  @{term "Abs_print [a,b] (a, b) = Abs_print [a,b] (a, b)"}\\
+  \end{tabular}
+  \end{center}
+  
+  \noindent
+  The interesting point is that they do not imply
+
+   \begin{center}
+  \begin{tabular}{c}
+  @{term "Abs_print [a,b] ((a, b), (a, b)) = Abs_print [a,b] ((a, b), (b, a))"}\\
+  \end{tabular}
+  \end{center}
 
   Because of how we set up our definitions, we had to impose restrictions,
-  like excluding overlapping deep binders, that are not present in Ott. Our
+  like a single binding function for a deep binder, that are not present in Ott. Our
   expectation is that we can still cover many interesting term-calculi from
   programming language research, for example Core-Haskell. For providing support
   of neat features in Ott, such as subgrammars, the existing datatype
   infrastructure in Isabelle/HOL is unfortunately not powerful enough. On the
   other hand, we are not aware that Ott can make the distinction between our
-  three different binding modes. Also, definitions for notions like the free
-  variables of a term are work in progress in Ott.
+  three different binding modes.
+
+  Pottier presents in \cite{Pottier06} a language, called C$\alpha$ml, for 
+  representing terms with general binders inside OCaml. This language is
+  implemented as a front-end that can be translated to OCaml with a help of
+  a library. He presents a type-system in which the scope of general binders
+  can be indicated with some special constructs, written @{text "inner"} and 
+  @{text "outer"}. With this, it seems, our and his specifications can be
+  inter-translated, but we have not proved this. However, we believe the
+  binding specifications in the style of Ott are a more natural way for 
+  representing terms involving bindings. Pottier gives a definition for 
+  alpha-equivalence, which is similar to our binding mod \isacommand{bind}. 
+  Although he uses also a permutation in case of abstractions, his
+  definition is rather different from ours. He proves that his notion
+  of alpha-equivalence is indeed a equivalence relation, but a complete
+  reasoning infrastructure is well beyond the purposes of his language. 
 *}
 
 section {* Conclusion *}
@@ -2002,45 +2056,7 @@
   version @{text "TFun string ty_list"} in Figure~\ref{nominalcorehas}. For
   them we need a more clever implementation than we have at the moment. 
 
-  More
-  interesting is lifting our restriction about overlapping deep binders. Given
-  our current setup, we cannot deal with specifications such as
-
- 
-  \begin{center}
-  \begin{tabular}{ll}
-  @{text "Foo r::pat s::pat t::trm"} & 
-     \isacommand{bind} @{text "bn(r)"} \isacommand{in} @{text t},\;
-     \isacommand{bind} @{text "bn(s)"} \isacommand{in} @{text t}
-  \end{tabular}
-  \end{center}
-  
-  \noindent
-  where the deep binders @{text "bn(r)"} and @{text "bn(s)"} overlap. 
-  The difficulty is that we would need to implement such overlapping bindings 
-  with alpha-equivalences like
-
-  \begin{center}
-  @{term "\<exists>p q. abs_set2 (bn r\<^isub>1, t\<^isub>1) p (bn r\<^isub>2, t\<^isub>2) \<and> abs_set2 (bn s\<^isub>1, t\<^isub>1) q (bn s\<^isub>2, t\<^isub>2)"}
-  \end{center}
-
-  \noindent
-  or
-
-  \begin{center}
-  @{term "\<exists>p q. abs_set2 (bn r\<^isub>1 \<union> bn s\<^isub>1, t\<^isub>1) (p + q)  (bn r\<^isub>2 \<union> bn s\<^isub>2, t\<^isub>2)"}
-  \end{center}
-
-  \noindent
-  Both versions require two permutations (for each binding). But unfortunately the 
-  first version cannot work since it leaves some atoms unbound that should be 
-  bound by the respective other binder. This problem is avoided in the second
-  version, but at the expense that the two permutations can interfere with each 
-  other. We have not yet been able to find a way to avoid such interferences. 
-  On the other hand, such bindings can be made sense of informally \cite{SewellBestiary}.
-  This suggest there should be an approriate notion of alpha-equivalence.
-
-  Another interesting line of investigation is whether we can go beyond the 
+  More interesting line of investigation is whether we can go beyond the 
   simple-minded form for binding functions that we adopted from Ott. At the moment, binding
   functions can only return the empty set, a singleton atom set or unions
   of atom sets (similarly for lists). It remains to be seen whether