LMCS-Review
changeset 3126 d3d5225f4f24
parent 3104 f7c4b8e6918b
child 3129 8be3155c014f
equal deleted inserted replaced
3125:860df8e1262f 3126:d3d5225f4f24
    13 > Computer Science after minor revisions.
    13 > Computer Science after minor revisions.
    14 >
    14 >
    15 > The work reported is very good, but the presentation of the paper can
    15 > The work reported is very good, but the presentation of the paper can
    16 > be improved.
    16 > be improved.
    17 >
    17 >
    18 > This paper continues a line of work called "Nominal Isabelle" carried
    18 > [...]
    19 > out by the first author and his colleagues for many years.  The goal
       
    20 > of this work is to support formal (machine checked) reasoning about
       
    21 > languages with binding.  With the theoretical foundation of "nominal
       
    22 > logic" developed by Pitts and colleagues, these authors and their
       
    23 > co-workers have developed a package to support such reasoning in the
       
    24 > Isabelle proof tool for Higher Order Logic.  This toolkit has been
       
    25 > widely used, and although the technology sometimes shows through
       
    26 > (e.g. explicit name swapping required in arguments) it is a very good
       
    27 > package.
       
    28 >
       
    29 > Up to now, this package has supported single binders such as \lambda.
       
    30 > Multiple simultaneous binding (e.g. letrec) had to be coded using
       
    31 > iterated single binders.  Not only is this coding hard to reason
       
    32 > about, it often isn't a correct representation of the intended
       
    33 > language.  This paper describes a new version of the Isabelle package,
       
    34 > "Nominal2", supporting binding of sets and lists of names in the
       
    35 > Isabelle/HOL system.
       
    36 >
       
    37 > The amount of work involved is immense, and the first author
       
    38 > especially has shown real commitment to continuing development of both
       
    39 > theory and working tools. Everything provided in this package is
       
    40 > claimed to be a definitional extension of HOL: no assumptions or
       
    41 > built-in changes to the logic.  For all of these reasons, this is very
       
    42 > good work.
       
    43 >
    19 >
    44 > However, I recommend improvement of the presentation of the paper
    20 > However, I recommend improvement of the presentation of the paper
    45 > before it is accepted by LMCS.  While the motivation for the work of
    21 > before it is accepted by LMCS.  While the motivation for the work of
    46 > this paper is clear to anyone who has tried to formalize such
    22 > this paper is clear to anyone who has tried to formalize such
    47 > reasoning, it is not explained in the paper.  E.g. on p.1 "However,
    23 > reasoning, it is not explained in the paper.  E.g. on p.1 "However,
    49 > algorithm W [...]."  But there is no analysis in the paper of what was
    25 > algorithm W [...]."  But there is no analysis in the paper of what was
    50 > hard in algorithm W coded with single binders, or explanation of how
    26 > hard in algorithm W coded with single binders, or explanation of how
    51 > it would be done in the new system reported in this paper showing why
    27 > it would be done in the new system reported in this paper showing why
    52 > the new approach works better in practice.  
    28 > the new approach works better in practice.  
    53 
    29 
    54 Added
    30 We have expanded on the point why single binders lead to clumsy
       
    31 formalisations.
    55 
    32 
    56 > Although this example is
    33 > Although this example is
    57 > one of the main motivations given for the work, there is apparently no
    34 > one of the main motivations given for the work, there is apparently no
    58 > formalization of algorithm W in the library of examples that comes
    35 > formalization of algorithm W in the library of examples that comes
    59 > with Nominal2 described in this paper.  I think that should be
    36 > with Nominal2 described in this paper.  I think that should be
    62 > Isabelle and similar theorem provers that only provide mechanisms for
    39 > Isabelle and similar theorem provers that only provide mechanisms for
    63 > binding single variables have not fared extremely well with the more
    40 > binding single variables have not fared extremely well with the more
    64 > advanced tasks in the POPLmark challenge [2], because also there one
    41 > advanced tasks in the POPLmark challenge [2], because also there one
    65 > would like to bind multiple variables at once.").
    42 > would like to bind multiple variables at once.").
    66 
    43 
    67 No time to provide full examples yet. They will be provided
    44 We proved the main properties about type-schemes in algorithm W. 
    68 once Nominal2 becomes more mature and people are using it
    45 Though the complete formalisation is not yet in place.
    69 and help to provide theories.
       
    70 
    46 
    71 > The new Isabelle package "Nominal2", described in this paper, is not
    47 > The new Isabelle package "Nominal2", described in this paper, is not
    72 > ready for users without a lot of hand-holding from the Nominal2
    48 > ready for users without a lot of hand-holding from the Nominal2
    73 > developers.  This paper would have more impact if interested users
    49 > developers.  This paper would have more impact if interested users
    74 > could try the tool without so much difficulty.
    50 > could try the tool without so much difficulty.
    75 
    51 
    76 The plan is to have Nominal Isabelle be part of the next stable 
    52 The plan is to have Nominal Isabelle be part of the next stable 
    77 release of Isabelle, which should be out before the summer 2012.
    53 release of Isabelle, which should be out in the summer 2012.
    78 At the moment it can be downloaded as a bundle and is ready
    54 At the moment it can be downloaded as a bundle and is ready
    79 to be used (we have confirmation from two groups for this). 
    55 to be used (there are two groups that already use Nominal2 and 
       
    56 only occasionally ask questions on the mailing list). 
    80 
    57 
    81 > A few more specific points:
    58 > A few more specific points:
    82 >
    59 >
    83 > Bottom of p.7: I don't understand the paragraph containing equations
    60 > Bottom of p.7: I don't understand the paragraph containing equations
    84 > (2.4) and (2.5).
    61 > (2.4) and (2.5).
    85 
    62 
       
    63 We reworded this paragraph.
    86 
    64 
    87 > Bottom of p.9: The parameters R and fa of the alpha equivalence
    65 > Bottom of p.9: The parameters R and fa of the alpha equivalence
    88 > relation are dropped in the examples, so the examples are not clear.
    66 > relation are dropped in the examples, so the examples are not clear.
       
    67 
       
    68 We have two minds with this: Keeping R and fa is more faithful to
       
    69 the definition, but it would not provide much intuition into
       
    70 the definition. We feel explaining the definition in special
       
    71 cases is most beneficial to the reader.
       
    72 
    89 > I think there is a typo in the first example: "It can be easily
    73 > I think there is a typo in the first example: "It can be easily
    90 > checked that ({x,y},x->y) and ({y,x},y->x) are alpha-equivalent [...]"
    74 > checked that ({x,y},x->y) and ({y,x},y->x) are alpha-equivalent [...]"
    91 > Did you mean "({x,y},x->y) and ({y,x},x->y) are alpha-equivalent"?
    75 > Did you mean "({x,y},x->y) and ({y,x},x->y) are alpha-equivalent"?
    92 
    76 
    93 
    77 Both are equivalent since sets {x, y} and {y, x} are equal. But we made
       
    78 it clearer as you suggest.
    94 
    79 
    95 > Referee no 2:
    80 > Referee no 2:
    96 >
    81 >
    97 >  * The paper can be accepted for Logical Methods in Computer Science 
    82 > [...]
    98 > after minor
       
    99 > revisions
       
   100 >
       
   101 > General comments
       
   102 >
       
   103 > This paper describes a new implementation of the nominal_datatype package
       
   104 > within the Isabelle/HL theorem prover. This implementation is more modular
       
   105 > than previous versions, because it relies on (I think) three non-trivial
       
   106 > independent packages, namely the datatype package, the function package, and
       
   107 > the quotient package. This implementation is also more powerful than previous
       
   108 > versions, because it deals with abstractions that bind multiple names 
       
   109 > at once,
       
   110 > and because it offers two variants of these abstractions (baptised "set" and
       
   111 > "set+") where certain structural equivalence laws, namely the exchange of two
       
   112 > binders and the elimination/introduction of a vacuous binder, are built
       
   113 > directly into the alpha-equivalence relation.
       
   114 >
       
   115 > Overall, I like the paper because it describes a useful piece of software,
       
   116 > because the architecture of this software is quite non-trivial and well
       
   117 > designed, and because the paper is written in a very understandable style.
       
   118 > For these reasons, I believe the paper should be accepted. I do have a series
       
   119 > of questions and suggestions for potential improvements and would be happy to
       
   120 > review a revised version of the paper if the editor sees fit.
       
   121 >
    83 >
   122 > My main criticisms of the paper are:
    84 > My main criticisms of the paper are:
   123 >
    85 >
   124 > * The definition of the "nominal signature" language is not completely clear.
    86 > * The definition of the "nominal signature" language is not completely clear.
   125 >   The general format at the beginning of section 4 is very clear, but is in
    87 >   The general format at the beginning of section 4 is very clear, but is in
   126 >   fact too general: not everything that can be written in this format makes
    88 >   fact too general: not everything that can be written in this format makes
   127 >   sense. The authors then walk the reader through a series of 
    89 >   sense. The authors then walk the reader through a series of 
   128 > examples of what
    90 >   examples of what
   129 >   is *forbidden* (with informal explanations why these examples are
    91 >   is *forbidden* (with informal explanations why these examples are
   130 >   forbidden), but in the end, a positive definition of what is *permitted*
    92 >   forbidden), but in the end, a positive definition of what is *permitted*
   131 >   seems to be missing.
    93 >   seems to be missing.
   132 >
    94 
       
    95 Yes, we agree very much, a positive definition would be very desirable.
       
    96 Unfortunately, this is not as easy as one would hope. Already a positive
       
    97 definition for a *datatype* in HOL is rather tricky. We would rely on this
       
    98 for nominal datatypes. The only real defence for not giving a positive 
       
    99 we have is that we give a sensible "upper bound". To appreciate this point, 
       
   100 you need to consider that systems like Ott go beyond this upper bound and  
       
   101 give definitions which are not sensible as (named) alpha-equated structures.
       
   102 
   133 > * The authors have isolated an important building block, the notion of
   103 > * The authors have isolated an important building block, the notion of
   134 >   (multiple-name) abstraction (in Section 3). (Actually, there are three
   104 >   (multiple-name) abstraction (in Section 3). (Actually, there are three
   135 >   variants of it.) This is good: it makes the whole construction modular
   105 >   variants of it.) This is good: it makes the whole construction modular
   136 >   and helps simplify what follows. I don't know if this will make sense
   106 >   and helps simplify what follows. I don't know if this will make sense
   137 >   for the authors, but I would like them to go further in this direction:
   107 >   for the authors, but I would like them to go further in this direction:
   146 >   binders, and a distinction between "shallow" and "deep" binders. If
   116 >   binders, and a distinction between "shallow" and "deep" binders. If
   147 >   one could identify a small number of elementary building blocks and
   117 >   one could identify a small number of elementary building blocks and
   148 >   explain/motivate the design of the surface specification language in
   118 >   explain/motivate the design of the surface specification language in
   149 >   terms of these elementary notions, the paper might become all the more
   119 >   terms of these elementary notions, the paper might become all the more
   150 >   compelling.
   120 >   compelling.
   151 >
   121 
       
   122 We are not sure whether we can make progress with this. There is such a
       
   123 "combinator approach" described by Francois Pottier for C\alphaML. His approach
       
   124 only needs an inner and outer combinator. However, this has led to quite
       
   125 non-intuitive representations of "nominal datatypes". We attempted
       
   126 to be as close as possible to what is used in the "wild". This led
       
   127 us to isolate the notions of shallow, deep and recursive binders.
       
   128 
   152 >   In the present state of the paper, I think the *implementation* of the
   129 >   In the present state of the paper, I think the *implementation* of the
   153 >   nominal package is very useful for the end user, but the *theory* that is
   130 >   nominal package is very useful for the end user, but the *theory* that is
   154 >   presented in this paper is still a bit cumbersome: the definitions of free
   131 >   presented in this paper is still a bit cumbersome: the definitions of free
   155 >   atoms, alpha-equivalence, etc. presented on pages 16-20 are understandable
   132 >   atoms, alpha-equivalence, etc. presented on pages 16-20 are understandable
   156 >   but not compelling by their simplicity.
   133 >   but not compelling by their simplicity.
   157 >
   134 
       
   135 We agree - simpler would be much better. We refer the referee to "competing" 
       
   136 definitions that are substantially more complicated. Please try to understand 
       
   137 the notion of alpha-equivalence for Ott (which is published in he literature). 
       
   138 So we really of the opinion our definitions are a substantial improvement,
       
   139 as witnessed we were actually able to code them up.
       
   140 
   158 > * I do not quite understand the treatment of the finiteness restriction.
   141 > * I do not quite understand the treatment of the finiteness restriction.
   159 >   I understand that things must have finite support so as to allow picking
   142 >   I understand that things must have finite support so as to allow picking
   160 >   atoms outside of their support. But finiteness side conditions seem to
   143 >   atoms outside of their support. But finiteness side conditions seem to
   161 >   appear pretty early and in unexpected places; e.g. I would expect the
   144 >   appear pretty early and in unexpected places; e.g. I would expect the
   162 >   support of a set of atoms "as" to be equal to "as", regardless of whether
   145 >   support of a set of atoms "as" to be equal to "as", regardless of whether
   163 >   "as" is finite or infinite. This could be clarified.
   146 >   "as" is finite or infinite. This could be clarified.
   164 >
   147 
       
   148 This is a peculiarity of support which has been explained elsewhere in the nominal
       
   149 literature. Assume all_atoms is the set of all atoms then
       
   150 
       
   151      supp all_atoms = {}
       
   152 
       
   153 For sets of atoms the support behaves as follows:
       
   154 
       
   155      supp as = as             if as is finite
       
   156      supp as = all_atoms      if as and all_atoms - as are infinite
       
   157      supp as = all_atoms - as if as is co-finite 
       
   158 
       
   159 As said, such properties have been described in the literature and it would be
       
   160 overkill to include them again. Since in programming language research nearly
       
   161 always only finitely supported structures are of interest, we often restrict
       
   162 to these cases only. Knowing that an object of interest has only finite support
       
   163 is needed when fresh atoms need to be chosen. 
       
   164 
   165 > * The choice of abstraction "style" is limited to three built-in forms (list,
   165 > * The choice of abstraction "style" is limited to three built-in forms (list,
   166 >   set, and set+). Perhaps one could make this user-extensible. After 
   166 >   set, and set+). Perhaps one could make this user-extensible. After 
   167 > all, very
   167 >   all, very few properties seem to be required of the basic abstraction forms, 
   168 >   few properties seem to be required of the basic abstraction forms, 
   168 >   so why not let the user define new ones?
   169 > so why not
   169 
   170 >   let the user define new ones?
   170 This would be nice, but we do make use of the equality properties
   171 >
   171 of abstractions (which are different in the set, set+ and list case).
       
   172 So we have not found a unifying framework yet.
       
   173 
   172 > * One may argue that the set-abstractions are an attempt to kill two birds
   174 > * One may argue that the set-abstractions are an attempt to kill two birds
   173 >   with one stone. On the one hand, we take the quotient raw terms modulo a
   175 >   with one stone. On the one hand, we take the quotient raw terms modulo a
   174 >   standard notion of alpha-equivalence; on the other hand, at the same time,
   176 >   standard notion of alpha-equivalence; on the other hand, at the same time,
   175 >   we take the quotient modulo a notion of structural equivalence (permutation
   177 >   we take the quotient modulo a notion of structural equivalence (permutation
   176 >   of binders, removal or introduction of vacuous binders). One could argue
   178 >   of binders, removal or introduction of vacuous binders). One could argue
   177 >   that dealing with structural equivalence should be left to the 
   179 >   that dealing with structural equivalence should be left to the user, because
   178 > user, because
       
   179 >   in general the structural equivalence axioms that the user needs can be
   180 >   in general the structural equivalence axioms that the user needs can be
   180 >   arbitrarily complex and application-specific. There are object languages,
   181 >   arbitrarily complex and application-specific. 
       
   182 
       
   183 Yes, we can actually only deal with one non-trivial structural equivalence,
       
   184 namely set+ (introduction of vacuous binders). For us, it seems an application
       
   185 that occurs more often than not. Type-schemes are one example; the Psi-calculus
       
   186 from the group around Joachim Parrow are another. So we like to give automated
       
   187 support for set+. Going beyond this is actually quite painful for the user
       
   188 if no automatic support is provided.
       
   189 
       
   190 >   There are object languages,
   181 >   for instance, where abstractions commute with pairs: binding a name in a
   191 >   for instance, where abstractions commute with pairs: binding a name in a
   182 >   pair is the same as binding a name within each of the pair components.
   192 >   pair is the same as binding a name within each of the pair components.
   183 >   (This is the case in first-order logic where forall distributes over
   193 >   (This is the case in first-order logic where forall distributes over
   184 >   conjunction.) Thus, one may fear that in many cases, the set and set+
   194 >   conjunction.) Thus, one may fear that in many cases, the set and set+
   185 >   abstractions will not be sufficiently powerful to encode the desired
   195 >   abstractions will not be sufficiently powerful to encode the desired
   186 >   structural equivalence, and the user will need to explicitly define 
   196 >   structural equivalence, and the user will need to explicitly define 
   187 > a notion
   197 > a notion
   188 >   of structural equivalence anyway. I don't think that the paper provides
   198 >   of structural equivalence anyway. I don't think that the paper provides
   189 >   convincing evidence that set and set+ abstractions are useful. (That said,
   199 >   convincing evidence that set and set+ abstractions are useful. (That said,
   190 >   they don't cost much, so why not include them? Sure.)
   200 >   they don't cost much, so why not include them? Sure.)
   191 >
   201 
       
   202 From our experience, once a feature is included, applications will
       
   203 be found. Case in point, the set+ binder arises naturally in the
       
   204 psi-calculus. 
       
   205 
   192 > * Here is little challenge related to set-abstractions. Could you explain how
   206 > * Here is little challenge related to set-abstractions. Could you explain how
   193 >   to define the syntax of an object language with a construct like this:
   207 >   to define the syntax of an object language with a construct like this:
   194 >
   208 >
   195 >     let x1 = t1 and ... and xn = tn in t
   209 >     let x1 = t1 and ... and xn = tn in t
   196 >
   210 >
   202 >   using a set of pairs (or a map of names to terms) as opposed to a list
   216 >   using a set of pairs (or a map of names to terms) as opposed to a list
   203 >   of pairs. I think that the system should at the very least allow encoding
   217 >   of pairs. I think that the system should at the very least allow encoding
   204 >   this example, otherwise set-abstractions will not be very useful in
   218 >   this example, otherwise set-abstractions will not be very useful in
   205 >   practice.
   219 >   practice.
   206 
   220 
   207 >> datatype trm =
   221 We can. We added this as an example in the conclusion section.
   208 >>       Var string
   222 
   209 >>     | App trm trm
   223 
   210 >>     | Lam string trm
       
   211 >>     | Let "(string * trm) fset" trm
       
   212 >> Not a problem. Both finite sets and bags should be possible as
       
   213 >> constructors within the new package.
       
   214 >> Best regards and a happy new year!
       
   215 >> Andrei Popescu
       
   216 
       
   217 
       
   218 >
       
   219 > Detailed comments
       
   220 >
       
   221 > [Written while I was reading, so sometimes I ask a question whose 
       
   222 > answer comes
       
   223 > a bit later in the paper.]
       
   224 >
       
   225 > p.2, "this leads to a rather clumsy formalisation of W". Could you explain
   224 > p.2, "this leads to a rather clumsy formalisation of W". Could you explain
   226 > why? Although I can understand why in some circumstances it is desirable to
   225 > why? Although I can understand why in some circumstances it is desirable to
   227 > have a notion of alpha-equivalence that includes re-ordering binders, 
   226 > have a notion of alpha-equivalence that includes re-ordering binders, 
   228 > I am not
   227 > I am not
   229 > sure that the ML type system (or its inference algorithm) is a good
   228 > sure that the ML type system (or its inference algorithm) is a good
   235 > schemes*. Type schemes are constructed and eliminated; they are never 
   234 > schemes*. Type schemes are constructed and eliminated; they are never 
   236 > compared
   235 > compared
   237 > with one another. For this reason, it is not clear that a notion of
   236 > with one another. For this reason, it is not clear that a notion of
   238 > alpha-equivalence for type schemes is required at all, let alone that it must
   237 > alpha-equivalence for type schemes is required at all, let alone that it must
   239 > allow re-ordering binders and/or disregarding vacuous binders.
   238 > allow re-ordering binders and/or disregarding vacuous binders.
   240 >
   239 
       
   240 In the correctness proof of W, the notion of capture-avoiding 
       
   241 substitution plays a crucial role. The notion of capture-avoiding
       
   242 substitution without the notion of alpha-equivalence does not make
       
   243 any sense. This is different from *implementations* of W. They
       
   244 might get away with concrete representations of tyep-schemes. 
       
   245 
   241 > p.3, "let the user chose" -> "choose"
   246 > p.3, "let the user chose" -> "choose"
   242 >
   247 
       
   248 Fixed.
       
   249 
   243 > p.5, I am not sure what you mean by "automatic proofs". Do you mean
   250 > p.5, I am not sure what you mean by "automatic proofs". Do you mean
   244 > automatically-generated proof scripts, or proofs performed automatically by a
   251 > automatically-generated proof scripts, or proofs performed automatically by a
   245 > decision procedure, or ... ?
   252 > decision procedure, or ... ?
   246 >
   253 
       
   254 Fixed.
       
   255 
   247 > p.5, "adaption"
   256 > p.5, "adaption"
   248 >
   257 
       
   258 Fixed.
       
   259 
   249 > p.5, it seems strange to use the symbol "+" for composition, a 
   260 > p.5, it seems strange to use the symbol "+" for composition, a 
   250 > non-commutative
   261 > non-commutative
   251 > operation.
   262 > operation.
   252 >
   263 
       
   264 Yes. This is a "flaw" in the type-class setup. If we want to reuse libraries
       
   265 from Isabelle, we have to bite into this "sour" apple.
       
   266 
   253 > Equation (2.2) is unfamiliar to me. I am used to seeing "supp x" defined as
   267 > Equation (2.2) is unfamiliar to me. I am used to seeing "supp x" defined as
   254 > the least set L such that for every permutation pi, if pi fixes L, then pi
   268 > the least set L such that for every permutation pi, if pi fixes L, then pi
   255 > fixes x. I assume that the two definitions are equivalent? Is there a reason
   269 > fixes x. I assume that the two definitions are equivalent? Is there a reason
   256 > why you prefer this one?
   270 > why you prefer this one?
   257 >
   271 
       
   272 Our definition is equivalent to yours for finite supported x. 
       
   273 The advantage of our definition is that can be easily stated
       
   274 in a theorem prover since it fits into the scheme
       
   275 
       
   276    lhs = rhs
       
   277 
       
   278 Your definition as the least set...does not fit into this simple 
       
   279 scheme. Our definition has been described extensively elsewhere,
       
   280 to which we refer the reader.
       
   281 
   258 > Proposition 2.3, item (i) is not very easy to read, because text and math
   282 > Proposition 2.3, item (i) is not very easy to read, because text and math
   259 > are mixed and "as" happens to be an English word. More importantly, could
   283 > are mixed and "as" happens to be an English word. 
       
   284 
       
   285 Replaced by bs.
       
   286 
       
   287 > More importantly, could
   260 > you explain why the hypothesis "finite as" is needed? The proposition seems
   288 > you explain why the hypothesis "finite as" is needed? The proposition seems
   261 > intuitively true if we remove this hypothesis: it states exactly that 
   289 > intuitively true if we remove this hypothesis: it states exactly that 
   262 > "supp x"
   290 > "supp x"
   263 > is the least set that supports x (this is actually the definition of "supp"
   291 > is the least set that supports x (this is actually the definition of "supp"
   264 > that I expected, as mentioned above).
   292 > that I expected, as mentioned above).
   265 >
   293 
       
   294 It does not work for non-finitely supported sets of atoms. Imagine
       
   295 bs is the set of "even" atoms (a set that is not finite nor co-finite).
       
   296 
       
   297    bs supports bs
       
   298 
       
   299 but 
       
   300 
       
   301    supp bs = all_atoms    !<=   bs 
       
   302 
   266 > p.8, "equivariant functions have empty support". I suppose the converse is
   303 > p.8, "equivariant functions have empty support". I suppose the converse is
   267 > true, i.e. "functions that have empty support are equivariant". If this is
   304 > true, i.e. "functions that have empty support are equivariant". If this is
   268 > correct, please say so.
   305 > correct, please say so.
   269 >
   306 
   270 > p.8, "we used extensively Property 2.1". You mean "Proposition 2.1". Perhaps
   307 We have reworded this paragraph.
   271 > it would be good to choose distinct numbers for inline equations and for
   308 
   272 > propositions.
   309 > p.8, "we used extensively Property 2.1". You mean "Proposition 2.1". 
   273 >
   310 
       
   311 Fixed.
       
   312 
   274 > p.8, "we identify four conditions: (i) [...] x and y need to have the same
   313 > p.8, "we identify four conditions: (i) [...] x and y need to have the same
   275 > set of free atoms". You seem to be saying that fa(x) and fa(y) should be
   314 > set of free atoms". You seem to be saying that fa(x) and fa(y) should be
   276 > equal. But this is too strong; I suppose you mean fa(x) \ as = fa(y) \ bs.
   315 > equal. But this is too strong; I suppose you mean fa(x) \ as = fa(y) \ bs.
   277 > Please clarify. (Definition 3.1 indeed clarifies this, but I believe that
   316 > Please clarify. (Definition 3.1 indeed clarifies this, but I believe that
   278 > the text that precedes it is a bit confusing.)
   317 > the text that precedes it is a bit confusing.)
   279 >
   318 
       
   319 Fixed.
       
   320 
   280 > p.9, it seems to me that alpha-equivalence for Set+ bindings (Definition 3.3)
   321 > p.9, it seems to me that alpha-equivalence for Set+ bindings (Definition 3.3)
   281 > is in a sense the most general of the three notions presented here. Indeed,
   322 > is in a sense the most general of the three notions presented here. Indeed,
   282 > alpha-equivalence for Set bindings can be defined in terms of it, as follows:
   323 > alpha-equivalence for Set bindings can be defined in terms of it, as follows:
   283 >
   324 >
   284 >   (as, x) =_{Set} (bs, y)
   325 >   (as, x) =_{Set} (bs, y)
   298 > Am I correct to think that one can do this? If so, could this help eliminate
   339 > Am I correct to think that one can do this? If so, could this help eliminate
   299 > some redundancy in the paper or in the implementation? And, for a 
   340 > some redundancy in the paper or in the implementation? And, for a 
   300 > more radical
   341 > more radical
   301 > suggestion, could one decide to expose only Set+ equality to the programmer,
   342 > suggestion, could one decide to expose only Set+ equality to the programmer,
   302 > and let him/her explicitly encode Set/List equality where desired?
   343 > and let him/her explicitly encode Set/List equality where desired?
   303 >
   344 
       
   345 The second property holds outright. The first holds provided as and bs
       
   346 are finite sets of atoms. However, we seem to not gain much code reduction
       
   347 from these properties, except for defining the modes Set and List in terms 
       
   348 of Set+. But since they are three different modes and they behave differently
       
   349 as alpha-equivalence, the encoding, in our opinion, blurrs this difference.
       
   350 We noted these facts in the conclusion. 
       
   351 
   304 > p.10, "in these relation"
   352 > p.10, "in these relation"
   305 >
   353 
       
   354 Fixed.
       
   355 
   306 > p.10, isn't equation (3.3) a *definition* of the action of permutations
   356 > p.10, isn't equation (3.3) a *definition* of the action of permutations
   307 > on the newly defined quotient type "beta abs_{set}"?
   357 > on the newly defined quotient type "beta abs_{set}"?
   308 >
   358 
       
   359 Yes, in principle this could be given as the definition. Unfortunately, this is not
       
   360 as straightforward in Isabelle - it would need the function package
       
   361 and a messy proof that the function is "proper". It is easier to
       
   362 define permutation on abstractions as the lifted version of the permutation
       
   363 on pairs, and then derive (with the support of the quotient package) that
       
   364 (3.3) holds.
       
   365 
   309 > p.11, why do you need to "assume that x has finite support" in order to
   366 > p.11, why do you need to "assume that x has finite support" in order to
   310 > obtain property 3.4? It seems to me that this fact should also hold for
   367 > obtain property 3.4? It seems to me that this fact should also hold for
   311 > an x with infinite support. Same remark in a couple of places further
   368 > an x with infinite support. 
       
   369 
       
   370 Fixed.
       
   371 
       
   372 > Same remark in a couple of places further
   312 > down on this page. You note that "supp bs = bs" holds "for every finite
   373 > down on this page. You note that "supp bs = bs" holds "for every finite
   313 > set of atoms bs". Is it *not* the case that this also holds for infinite
   374 > set of atoms bs". Is it *not* the case that this also holds for infinite
   314 > sets? If so, what *is* the support of an infinite set of atoms? Why not
   375 > sets? If so, what *is* the support of an infinite set of atoms? 
       
   376 
       
   377 This property only holds for finite sets bs. See above.
       
   378 
       
   379 > Why not
   315 > adopt a definition of support that validates "supp bs = bs" for *every*
   380 > adopt a definition of support that validates "supp bs = bs" for *every*
   316 > set of atoms bs? Is there a difficulty due to the fact that what you
   381 > set of atoms bs? Is there a difficulty due to the fact that what you
   317 > call a "permutation" is in a fact "a permutation with finite support"?
   382 > call a "permutation" is in a fact "a permutation with finite support"?
   318 > I think it would be good to motivate your technical choices and clarify
   383 > I think it would be good to motivate your technical choices and clarify
   319 > exactly where/why a finite support assumption is required.
   384 > exactly where/why a finite support assumption is required.
   320 >
   385 
       
   386 This cannot be made as it is very natural to have the property
       
   387 that the set of all atoms has empty support. There is no permutation
       
   388 that does not fix that set. We cannot see how this can be made
       
   389 to work so that
       
   390 
       
   391    supp bs = bs 
       
   392 
       
   393 for all sets.
       
   394 
   321 > p.11, "The other half is a bit more involved." I would suggest removing
   395 > p.11, "The other half is a bit more involved." I would suggest removing
   322 > this rather scary sentence. The proof actually appears very simple and
   396 > this rather scary sentence. The proof actually appears very simple and
   323 > elegant to me.
   397 > elegant to me.
   324 >
   398 
       
   399 Fixed.
       
   400 
   325 > p.12, "mutual recursive" -> "mutually recursive"
   401 > p.12, "mutual recursive" -> "mutually recursive"
   326 >
   402 
       
   403 Fixed.
       
   404 
   327 > p.12, does the tool support parameterized data type definitions? If so,
   405 > p.12, does the tool support parameterized data type definitions? If so,
   328 > please mention it, otherwise explain whether there is a difficulty (e.g.
   406 > please mention it, otherwise explain whether there is a difficulty (e.g.
   329 > the parameters would need to come with a notion of permutation).
   407 > the parameters would need to come with a notion of permutation).
   330 >
   408 
       
   409 Yes. Note added.
       
   410 
   331 > p.12, "Interestingly, [...] will make a difference [...]". At this 
   411 > p.12, "Interestingly, [...] will make a difference [...]". At this 
   332 > point, upon
   412 > point, upon
   333 > first reading, this is not "interesting" but rather frustrating, because it
   413 > first reading, this is not "interesting" but rather frustrating, because it
   334 > does not sound natural: my understanding would be very much simplified if
   414 > does not sound natural: my understanding would be very much simplified if
   335 > "binds ... in t u" was equivalent to "binds ... in t, binds ... in 
   415 > "binds ... in t u" was equivalent to "binds ... in t, binds ... in 
   336 > u". Because
   416 > u". Because
   337 > a forward pointer is missing, I cannot find immediately where this is
   417 > a forward pointer is missing, I cannot find immediately where this is
   338 > explained, and this problem hinders my reading of the beginning of section 5.
   418 > explained, and this problem hinders my reading of the beginning of section 5.
   339 >
   419 
   340 > p.13, the type of sets now seems to be "fset" whereas it was "set"
   420 We have given a forward pointer.
   341 > previously.
   421 
   342 >
       
   343 > p.13, the type of atoms now seems to be "name", whereas it was previously
   422 > p.13, the type of atoms now seems to be "name", whereas it was previously
   344 > "atom". The remark on the last line of page 13 leads me to understand that
   423 > "atom". The remark on the last line of page 13 leads me to understand that
   345 > "name" refers to one specific sort of atoms, whereas "atom" refers to an
   424 > "name" refers to one specific sort of atoms, whereas "atom" refers to an
   346 > atom of any sort (right?). The function "atom" converts one to the other;
   425 > atom of any sort (right?). The function "atom" converts one to the other;
   347 > but what is its type (is it overloaded?).
   426 > but what is its type (is it overloaded?).
   348 >
   427 
       
   428 Yes, atom is overloaded. 
       
   429 
   349 > p.13, you distinguish shallow binders (binds x in ...) and deep binders
   430 > p.13, you distinguish shallow binders (binds x in ...) and deep binders
   350 > (binds bn(x) in ...). I would hope that a shallow binder is just syntactic
   431 > (binds bn(x) in ...). I would hope that a shallow binder is just syntactic
   351 > sugar for a deep binder where "bn" is the "singleton list" or "singleton
   432 > sugar for a deep binder where "bn" is the "singleton list" or "singleton
   352 > set" function. Is this the case? If not, why not? If yes, perhaps you could
   433 > set" function. Is this the case? If not, why not? If yes, perhaps you could
   353 > remove all mentions to shallow binders in section 5.
   434 > remove all mentions to shallow binders in section 5.
   354 >
   435 
       
   436 No, quite. A deep binder can be recursive, which is a notion
       
   437 that does not make sense for shallow binders.
       
   438 
   355 > p.14, "we cannot have more than one binding function for a deep binder".  You
   439 > p.14, "we cannot have more than one binding function for a deep binder".  You
   356 > exclude "binds bn_1(p) bn_2(p) in t". Couldn't this be accepted and
   440 > exclude "binds bn_1(p) bn_2(p) in t". Couldn't this be accepted and
   357 > interpreted as "binds bn_1(p) \cup bn_2(p) in t"? (I guess it does not matter
   441 > interpreted as "binds bn_1(p) \cup bn_2(p) in t"? (I guess it does not matter
   358 > much either way.)
   442 > much either way.)
   359 >
   443 
       
   444 That would make the definition of fa-function more complicated.
       
   445 
   360 > p.14, you also exclude "binds bn1(p) in t1, binds bn2(p) in t2". Two
   446 > p.14, you also exclude "binds bn1(p) in t1, binds bn2(p) in t2". Two
   361 > questions. First, a clarification: if bn1 and bn2 are the same function, is
   447 > questions. First, a clarification: if bn1 and bn2 are the same function, is
   362 > this allowed or excluded? Second, I don't understand why you need this
   448 > this allowed or excluded? 
       
   449 
       
   450 For practical purposes, this is excluded. But the theory would
       
   451 support this case.
       
   452 
       
   453 > Second, I don't understand why you need this
   363 > restriction, that is, why you are trying to prevent an atom to be "bound and
   454 > restriction, that is, why you are trying to prevent an atom to be "bound and
   364 > free at the same time" (bound in one sub-term and free in another). I 
   455 > free at the same time" (bound in one sub-term and free in another). I 
   365 > mean, in
   456 > mean, in
   366 > the case of single binders, you seem to allow "binds x y in t1, binds 
   457 > the case of single binders, you seem to allow "binds x y in t1, binds 
   367 > y in t2"
   458 > y in t2"
   368 > (at least, you have not stated that you disallow this). There, occurrences of
   459 > (at least, you have not stated that you disallow this). There, occurrences of
   369 > x in t1 are considered bound, whereas occurrences of x in t2 are considered
   460 > x in t1 are considered bound, whereas occurrences of x in t2 are considered
   370 > free; is this correct? If so, why not allow "binds bn1(p) in t1, binds bn2(p)
   461 > free; is this correct? If so, why not allow "binds bn1(p) in t1, binds bn2(p)
   371 > in t2", which seems to be of a similar nature? Is this a somewhat ad hoc
   462 > in t2", which seems to be of a similar nature? 
   372 > restriction that simplifies your implementation work, or is there really a
   463 
   373 > deep reason why accepting this clause would not make sense?
   464 The problem is that bn1 and bn2 can pick out different atoms to
   374 >
   465 be free and bound in p. This requires to exclude this case.
       
   466 
   375 > p.14, example 4.4, the restriction that you impose here seems to rule out
   467 > p.14, example 4.4, the restriction that you impose here seems to rule out
   376 > an interesting and potentially useful pattern, namely telescopes. A telescope
   468 > an interesting and potentially useful pattern, namely telescopes. A telescope
   377 > is a list of binders, where each binder scopes over the rest of the 
   469 > is a list of binders, where each binder scopes over the rest of the 
   378 > telescope,
   470 > telescope,
   379 > and in addition all of the names introduced by the telescope are considered
   471 > and in addition all of the names introduced by the telescope are considered
   411 > I conclude that your design (which seems very reasonable) cannot currently
   503 > I conclude that your design (which seems very reasonable) cannot currently
   412 > express telescopes. It would be nice if you could explicitly discuss this
   504 > express telescopes. It would be nice if you could explicitly discuss this
   413 > issue. Is it conceivable that an extension of your system could deal with
   505 > issue. Is it conceivable that an extension of your system could deal with
   414 > telescopes? Other researchers have proposed approaches that can deal with
   506 > telescopes? Other researchers have proposed approaches that can deal with
   415 > them (I am thinking e.g. of ``Binders Unbound'' by Weirich et al.).
   507 > them (I am thinking e.g. of ``Binders Unbound'' by Weirich et al.).
   416 >
   508 
       
   509 Yes, we cannot deal with telescopes. We added a comment. 
       
   510 
   417 > Here is another general question. How would you declare a nominal data type
   511 > Here is another general question. How would you declare a nominal data type
   418 > for ML patterns? Informally, the syntax of patterns is:
   512 > for ML patterns? Informally, the syntax of patterns is:
   419 >
   513 >
   420 >   p ::=
   514 >   p ::=
   421 >     x                                                    (variable)
   515 >     x                                                    (variable)
   427 > two components bind disjoint sets of names, whereas in the case of a
   521 > two components bind disjoint sets of names, whereas in the case of a
   428 > disjunction pattern, one requires that the two components bind exactly the
   522 > disjunction pattern, one requires that the two components bind exactly the
   429 > same sets of names. How would you deal with this? I imagine that one could
   523 > same sets of names. How would you deal with this? I imagine that one could
   430 > just omit these two side conditions in the definition of the nominal data
   524 > just omit these two side conditions in the definition of the nominal data
   431 > type, and deal with them separately by defining a well-formedness predicate.
   525 > type, and deal with them separately by defining a well-formedness predicate.
       
   526 
       
   527 Yes, that is how we would exclude non-linear patterns.
       
   528 
   432 > One question: in the definition of the "term" data type, at the point where
   529 > One question: in the definition of the "term" data type, at the point where
   433 > one writes "binds bn(p) in t", which variant of the "binds" keyword would one
   530 > one writes "binds bn(p) in t", which variant of the "binds" keyword would one
   434 > use: "binds", "binds(set)", or "binds(set+)"? Does it make any difference,
   531 > use: "binds", "binds(set)", or "binds(set+)"? Does it make any difference,
   435 > considering that a pattern can have multiple occurrences of a name in binding
   532 > considering that a pattern can have multiple occurrences of a name in binding
   436 > position? It would be interesting if you could explain how you would handle
   533 > position? It would be interesting if you could explain how you would handle
   437 > this example.
   534 > this example.
   438 >
   535 
   439 > Another interesting (perhaps even more tricky) example is the syntax of the
   536 You can write 
   440 > join-calculus. In terms of binding, it is really quite subtle and worth a
   537     
   441 > look.
   538     binds bn(p) in t, 
   442 >
   539     binds(set) bn(p) in t, 
       
   540     binds(set+) bn(p) in t
       
   541 
       
   542 
   443 > p.15, just before section 5, I note that the completion process does *not*
   543 > p.15, just before section 5, I note that the completion process does *not*
   444 > produce any clause of the form "binds ... in x" (in the Lam case). One could
   544 > produce any clause of the form "binds ... in x" (in the Lam case). One could
   445 > have expected it to produce "binds x in x", for instance. One could imagine
   545 > have expected it to produce "binds x in x", for instance. One could imagine
   446 > that, for *every* constructor argument t, there is a clause of the 
   546 > that, for *every* constructor argument t, there is a clause of the 
   447 > form "binds
   547 > form "binds
   461 > (for some definition of "bn"). This would be forbidden because t1 and t2 are
   561 > (for some definition of "bn"). This would be forbidden because t1 and t2 are
   462 > used both as "terms" and as "binders" (both on the left-hand and right-hand
   562 > used both as "terms" and as "binders" (both on the left-hand and right-hand
   463 > side of a "binds" clause). As far as I can see, however, you have not
   563 > side of a "binds" clause). As far as I can see, however, you have not
   464 > explicitly forbidden this situation. So, is it forbidden or allowed? Please
   564 > explicitly forbidden this situation. So, is it forbidden or allowed? Please
   465 > clarify.
   565 > clarify.
   466 >
   566 
   467 > If there is indeed a partition between "terms" and "binders", please justify
   567 It is disallowed. We clarified the text.
   468 > why things must be so. I can think of a more general and more symmetric
   568 
   469 > approach, where instead of writing "binds bn(p) in t" and considering that "p
       
   470 > is a binder" and "t is a term", one would write "binds bn(p) in p t" and
       
   471 > consider that p and t play a priori symmetric roles: the only difference
       
   472 > between them stems from the fact that we collect the bound names 
       
   473 > inside p, but
       
   474 > not inside t. (I am not suggesting that the user should write this, but that
       
   475 > the user syntax could be desugared down to something like this if this makes
       
   476 > the theory simpler.) Ah, but I guess that if one were to follow this path,
       
   477 > then one would need a way of distinguishing recursive versus non-recursive
       
   478 > binders. I guess I see why your design makes sense, but perhaps you should
       
   479 > better explain that it is a compromise between several other possible designs
       
   480 > (``alphacaml'', ``binders unbound'', etc. are examples of other designs) and
       
   481 > how you reached this particular point in the design space.
       
   482 >
       
   483 > OK, now I see that, since you allow ``recursive binders'', there is not a
   569 > OK, now I see that, since you allow ``recursive binders'', there is not a
   484 > partition between ``terms'' and ``binders''. A recursive binder appears both
   570 > partition between ``terms'' and ``binders''. A recursive binder appears both
   485 > on the left- and right-hand sides of a binds clause. Do you require that it
   571 > on the left- and right-hand sides of a binds clause. Do you require that it
   486 > appears on the left- and right-hand sides of *the same* binds clause, or do
   572 > appears on the left- and right-hand sides of *the same* binds clause, or do
   487 > you allow the above example ("binds bn(t1) in t2, binds bn(t2) in t1")? If
   573 > you allow the above example ("binds bn(t1) in t2, binds bn(t2) in t1")? If
   488 > you do allow it, then I suppose t1 is viewed as a (non-recursive) binder in
   574 > you do allow it, then I suppose t1 is viewed as a (non-recursive) binder in
   489 > the first clause, while t2 is viewed as a (non-recursive) binder in the
   575 > the first clause, while t2 is viewed as a (non-recursive) binder in the
   490 > second clause. This would be kind of weird, and (I imagine) will not lead
   576 > second clause. This would be kind of weird, and (I imagine) will not lead
   491 > to a reasonable notion of alpha-equivalence. I am hoping to find out later
   577 > to a reasonable notion of alpha-equivalence. I am hoping to find out later
   492 > in the paper.
   578 > in the paper.
   493 >
   579 
   494 > p.17, "we have to add in (5.3) the set [...]". It is not very clear whether
       
   495 > you are suggesting that equation 5.3 is incomplete and something should be
       
   496 > added to it, or equation 5.3 is fine and you are referring to B' which is
       
   497 > there already. I suppose the latter.
       
   498 >
       
   499 > p.17, "for each of the arguments we calculate the free atoms as 
   580 > p.17, "for each of the arguments we calculate the free atoms as 
   500 > follows": this
   581 > follows": this
   501 > definition relies on the fact that "rhs" must be of a specific *syntactic*
   582 > definition relies on the fact that "rhs" must be of a specific *syntactic*
   502 > form (unions of expressions of the form "constant set" or "recursive call").
   583 > form (unions of expressions of the form "constant set" or "recursive call").
   503 > For instance, "rhs" cannot contain the expression "my_empty_set z_i", where
   584 > For instance, "rhs" cannot contain the expression "my_empty_set z_i", where
   506 > as neither free nor bound. You have mentioned near the top of page 15 that
   587 > as neither free nor bound. You have mentioned near the top of page 15 that
   507 > binding functions "can only return" certain results. You should clarify that
   588 > binding functions "can only return" certain results. You should clarify that
   508 > you are not restricting just *the values* that these functions can 
   589 > you are not restricting just *the values* that these functions can 
   509 > return, but
   590 > return, but
   510 > the *syntactic form* of these functions.
   591 > the *syntactic form* of these functions.
   511 >
   592 
       
   593 Fixed.
       
   594 
   512 > p.23, "We call these conditions as": not really grammatical.
   595 > p.23, "We call these conditions as": not really grammatical.
   513 >
   596 
       
   597 Fixed.
       
   598 
   514 > p.23, "cases lemmas": I suppose this means an elimination principle?
   599 > p.23, "cases lemmas": I suppose this means an elimination principle?
   515 >
   600 
       
   601 Yes.
       
   602 
   516 > p.23, "Note that for the term constructors" -> "constructor"
   603 > p.23, "Note that for the term constructors" -> "constructor"
   517 >
   604 
       
   605 Fixed.
       
   606 
   518 > p.26, "avoid, or being fresh for" -> "avoid, or are fresh for"
   607 > p.26, "avoid, or being fresh for" -> "avoid, or are fresh for"
   519 >
   608 
       
   609 Fixed.
       
   610 
   520 > p.30, "Second, it covers cases of binders depending on other binders,
   611 > p.30, "Second, it covers cases of binders depending on other binders,
   521 > which just do no not make sense [...]". I am curious why the designers
   612 > which just do no not make sense [...]". I am curious why the designers
   522 > of Ott thought that these cases make sense and you don't. Perhaps this
   613 > of Ott thought that these cases make sense and you don't. Perhaps this
   523 > point would deserve an example and a deeper discussion?
   614 > point would deserve an example and a deeper discussion?
   524 >
   615 
   525 > p.30, at last, here is the discussion of "binds ... in s t" versus
   616 We have added more comments why such binders would not make sense
   526 > "binds ... in s, binds ... in t". I see that the difference in the
   617 for alpha-equated terms (fa-functions would not lift). We do not
   527 > two interpretations boils down to an abstraction whose body is a pair,
   618 know why Ott allows them - probably because they do not establish
   528 > versus a pair of abstractions. It is indeed interesting to note that
   619 a reasoning infrastructure for alpha-equated terms.
   529 > these notions coincide for single-name abstractions, and for list
   620 
   530 > abstractions, but not for set and set+ abstractions.
       
   531 >
       
   532 > p.32, "It remains to be seen whether properties like [...] allow us
   621 > p.32, "It remains to be seen whether properties like [...] allow us
   533 > to support more interesting binding functions." Could you clarify
   622 > to support more interesting binding functions." Could you clarify
   534 > what you mean? Do you mean (perhaps) that fa_bn(x) could be defined
   623 > what you mean? Do you mean (perhaps) that fa_bn(x) could be defined
   535 > as fa_ty(x) \ bn(x), regardless of the definition of bn(x), instead
   624 > as fa_ty(x) \ bn(x), regardless of the definition of bn(x), instead
   536 > of by induction over x? Do you mean something else?
   625 > of by induction over x? Do you mean something else?
   537 >
   626 
   538 > The example in Figures 1 and 2 do not seem very interesting to me.  It
   627 Yes.
   539 > involves single binders and flat lists of binders. Not much subtlety going on
   628 
   540 > here. I think this example could be reduced in size without losing 
       
   541 > anything in
       
   542 > terms of content. And perhaps a trickier example could be added (I have two
       
   543 > suggestions, which I mentioned above already: ML with conjunction and
       
   544 > disjunction patterns; and the join-calculus).
       
   545 >
       
   546 >
       
   547 >
       
   548 >
       
   549 >
       
   550 >
       
   551 >
       
   552