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