|      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  |         |