LMCS-Review
changeset 3129 8be3155c014f
parent 3126 d3d5225f4f24
equal deleted inserted replaced
3128:4bad521e3b9e 3129:8be3155c014f
    25 > 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
    26 > 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
    27 > 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
    28 > the new approach works better in practice.  
    28 > the new approach works better in practice.  
    29 
    29 
    30 We have expanded on the point why single binders lead to clumsy
    30 We have expanded on the point and given details why single 
    31 formalisations.
    31 binders lead to clumsy formalisations of W.
    32 
    32 
    33 > Although this example is
    33 > Although this example is
    34 > 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
    35 > formalization of algorithm W in the library of examples that comes
    35 > formalization of algorithm W in the library of examples that comes
    36 > with Nominal2 described in this paper.  I think that should be
    36 > with Nominal2 described in this paper.  I think that should be
    39 > Isabelle and similar theorem provers that only provide mechanisms for
    39 > Isabelle and similar theorem provers that only provide mechanisms for
    40 > binding single variables have not fared extremely well with the more
    40 > binding single variables have not fared extremely well with the more
    41 > advanced tasks in the POPLmark challenge [2], because also there one
    41 > advanced tasks in the POPLmark challenge [2], because also there one
    42 > would like to bind multiple variables at once.").
    42 > would like to bind multiple variables at once.").
    43 
    43 
    44 We proved the main properties about type-schemes in algorithm W. 
    44 We proved the main properties about type-schemes in algorithm W: 
    45 Though the complete formalisation is not yet in place.
    45 the ones that caused problems in our earlier formalisation. Though 
       
    46 the complete formalisation of W is not yet in place.
    46 
    47 
    47 > The new Isabelle package "Nominal2", described in this paper, is not
    48 > The new Isabelle package "Nominal2", described in this paper, is not
    48 > ready for users without a lot of hand-holding from the Nominal2
    49 > ready for users without a lot of hand-holding from the Nominal2
    49 > developers.  This paper would have more impact if interested users
    50 > developers.  This paper would have more impact if interested users
    50 > could try the tool without so much difficulty.
    51 > could try the tool without so much difficulty.
    51 
    52 
    52 The plan is to have Nominal Isabelle be part of the next stable 
    53 The plan is to have Nominal Isabelle be part of the next stable 
    53 release of Isabelle, which should be out in the summer 2012.
    54 release of Isabelle, which should be out in Autumn 2012.
    54 At the moment it can be downloaded as a bundle and is ready
    55 At the moment it can be downloaded as a bundle and is ready
    55 to be used (there are two groups that already use Nominal2 and 
    56 to be used (there are two groups that use Nominal2 and 
    56 only occasionally ask questions on the mailing list). 
    57 only occasionally ask questions on the mailing list). 
    57 
    58 
    58 > A few more specific points:
    59 > A few more specific points:
    59 >
    60 >
    60 > Bottom of p.7: I don't understand the paragraph containing equations
    61 > Bottom of p.7: I don't understand the paragraph containing equations
    66 > relation are dropped in the examples, so the examples are not clear.
    67 > relation are dropped in the examples, so the examples are not clear.
    67 
    68 
    68 We have two minds with this: Keeping R and fa is more faithful to
    69 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, but it would not provide much intuition into
    70 the definition. We feel explaining the definition in special
    71 the definition. We feel explaining the definition in special
    71 cases is most beneficial to the reader.
    72 cases is more beneficial to the reader.
    72 
    73 
    73 > I think there is a typo in the first example: "It can be easily
    74 > I think there is a typo in the first example: "It can be easily
    74 > checked that ({x,y},x->y) and ({y,x},y->x) are alpha-equivalent [...]"
    75 > checked that ({x,y},x->y) and ({y,x},y->x) are alpha-equivalent [...]"
    75 > Did you mean "({x,y},x->y) and ({y,x},x->y) are alpha-equivalent"?
    76 > Did you mean "({x,y},x->y) and ({y,x},x->y) are alpha-equivalent"?
    76 
    77 
    90 >   examples of what
    91 >   examples of what
    91 >   is *forbidden* (with informal explanations why these examples are
    92 >   is *forbidden* (with informal explanations why these examples are
    92 >   forbidden), but in the end, a positive definition of what is *permitted*
    93 >   forbidden), but in the end, a positive definition of what is *permitted*
    93 >   seems to be missing.
    94 >   seems to be missing.
    94 
    95 
    95 Yes, we agree very much, a positive definition would be very desirable.
    96 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 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 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 for nominal datatypes. Then we would need to think about what to do with
    99 we have is that we give a sensible "upper bound". To appreciate this point, 
   100 nested datatype, before coming to nominal matters.
   100 you need to consider that systems like Ott go beyond this upper bound and  
   101 
   101 give definitions which are not sensible as (named) alpha-equated structures.
   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.
   102 
   106 
   103 > * The authors have isolated an important building block, the notion of
   107 > * The authors have isolated an important building block, the notion of
   104 >   (multiple-name) abstraction (in Section 3). (Actually, there are three
   108 >   (multiple-name) abstraction (in Section 3). (Actually, there are three
   105 >   variants of it.) This is good: it makes the whole construction modular
   109 >   variants of it.) This is good: it makes the whole construction modular
   106 >   and helps simplify what follows. I don't know if this will make sense
   110 >   and helps simplify what follows. I don't know if this will make sense
   118 >   explain/motivate the design of the surface specification language in
   122 >   explain/motivate the design of the surface specification language in
   119 >   terms of these elementary notions, the paper might become all the more
   123 >   terms of these elementary notions, the paper might become all the more
   120 >   compelling.
   124 >   compelling.
   121 
   125 
   122 We are not sure whether we can make progress with this. There is such a
   126 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
   127 "combinator approach" described by Francois Pottier for C-alpha-ML. His approach
   124 only needs an inner and outer combinator. However, this has led to quite
   128 only needs an inner and outer combinator. However, this has led to quite
   125 non-intuitive representations of "nominal datatypes". We attempted
   129 non-intuitive representations of "nominal datatypes". We attempted
   126 to be as close as possible to what is used in the "wild". This led
   130 to be as close as possible to what is used in the "wild" (and in Ott). 
   127 us to isolate the notions of shallow, deep and recursive binders.
   131 This led us to isolate the notions of shallow, deep and recursive binders.
   128 
   132 
   129 >   In the present state of the paper, I think the *implementation* of the
   133 >   In the present state of the paper, I think the *implementation* of the
   130 >   nominal package is very useful for the end user, but the *theory* that is
   134 >   nominal package is very useful for the end user, but the *theory* that is
   131 >   presented in this paper is still a bit cumbersome: the definitions of free
   135 >   presented in this paper is still a bit cumbersome: the definitions of free
   132 >   atoms, alpha-equivalence, etc. presented on pages 16-20 are understandable
   136 >   atoms, alpha-equivalence, etc. presented on pages 16-20 are understandable
   133 >   but not compelling by their simplicity.
   137 >   but not compelling by their simplicity.
   134 
   138 
   135 We agree - simpler would be much better. We refer the referee to "competing" 
   139 We agree - simpler would be much better. However, we refer the referee to "competing" 
   136 definitions that are substantially more complicated. Please try to understand 
   140 definitions that are substantially more complicated. Please try to understand 
   137 the notion of alpha-equivalence for Ott (which is published in he literature). 
   141 the notion of alpha-equivalence for Ott (which has been published). Taking 
   138 So we really of the opinion our definitions are a substantial improvement,
   142 tgis into account, we really think our definitions are a substantial improvement,
   139 as witnessed we were actually able to code them up.
   143 as witnessed by the fact that we were actually able to code them up.
   140 
   144 
   141 > * I do not quite understand the treatment of the finiteness restriction.
   145 > * I do not quite understand the treatment of the finiteness restriction.
   142 >   I understand that things must have finite support so as to allow picking
   146 >   I understand that things must have finite support so as to allow picking
   143 >   atoms outside of their support. But finiteness side conditions seem to
   147 >   atoms outside of their support. But finiteness side conditions seem to
   144 >   appear pretty early and in unexpected places; e.g. I would expect the
   148 >   appear pretty early and in unexpected places; e.g. I would expect the
   145 >   support of a set of atoms "as" to be equal to "as", regardless of whether
   149 >   support of a set of atoms "as" to be equal to "as", regardless of whether
   146 >   "as" is finite or infinite. This could be clarified.
   150 >   "as" is finite or infinite. This could be clarified.
   147 
   151 
   148 This is a peculiarity of support which has been explained elsewhere in the nominal
   152 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
   153 literature (pointers in the paper). Assume all_atoms is the set of all atoms then
   150 
   154 
   151      supp all_atoms = {}
   155      supp all_atoms = {}
   152 
   156 
   153 For sets of atoms the support behaves as follows:
   157 For sets of atoms the support behaves as follows:
   154 
   158 
   155      supp as = as             if as is finite
   159      supp as = as             if as is finite
   156      supp as = all_atoms      if as and all_atoms - as are infinite
   160      supp as = all_atoms      if as and all_atoms - as are infinite
   157      supp as = all_atoms - as if as is co-finite 
   161      supp as = all_atoms - as if as is co-finite 
   158 
   162 
   159 As said, such properties have been described in the literature and it would be
   163 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
   164 overkill to include them again in this paper. Since in programming language research 
   161 always only finitely supported structures are of interest, we often restrict
   165 nearly always considers only finitely supported structures, we often restrict
   162 to these cases only. Knowing that an object of interest has only finite support
   166 our work to these cases. Knowing that an object of interest has only finite support
   163 is needed when fresh atoms need to be chosen. 
   167 is needed when fresh atoms need to be chosen. 
   164 
   168 
   165 > * The choice of abstraction "style" is limited to three built-in forms (list,
   169 > * 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 
   170 >   set, and set+). Perhaps one could make this user-extensible. After 
   167 >   all, very few properties seem to be required of the basic abstraction forms, 
   171 >   all, very few properties seem to be required of the basic abstraction forms, 
   168 >   so why not let the user define new ones?
   172 >   so why not let the user define new ones?
   169 
   173 
   170 This would be nice, but we do make use of the equality properties
   174 This would be nice, but we do make use of the equality properties
   171 of abstractions (which are different in the set, set+ and list case).
   175 of abstractions (which are different for the set, set+ and list cases).
   172 So we have not found a unifying framework yet.
   176 So we have yet to find a unifying framework.
   173 
   177 
   174 > * One may argue that the set-abstractions are an attempt to kill two birds
   178 > * One may argue that the set-abstractions are an attempt to kill two birds
   175 >   with one stone. On the one hand, we take the quotient raw terms modulo a
   179 >   with one stone. On the one hand, we take the quotient raw terms modulo a
   176 >   standard notion of alpha-equivalence; on the other hand, at the same time,
   180 >   standard notion of alpha-equivalence; on the other hand, at the same time,
   177 >   we take the quotient modulo a notion of structural equivalence (permutation
   181 >   we take the quotient modulo a notion of structural equivalence (permutation
   178 >   of binders, removal or introduction of vacuous binders). One could argue
   182 >   of binders, removal or introduction of vacuous binders). One could argue
   179 >   that dealing with structural equivalence should be left to the user, because
   183 >   that dealing with structural equivalence should be left to the user, because
   180 >   in general the structural equivalence axioms that the user needs can be
   184 >   in general the structural equivalence axioms that the user needs can be
   181 >   arbitrarily complex and application-specific. 
   185 >   arbitrarily complex and application-specific. 
   182 
   186 
   183 Yes, we can actually only deal with one non-trivial structural equivalence,
   187 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
   188 namely set+ (introduction of vacuous binders). For us, it seems this is an application
   185 that occurs more often than not. Type-schemes are one example; the Psi-calculus
   189 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
   190 from the group around Joachim Parrow are another; in the paper we also point to
   187 support for set+. Going beyond this is actually quite painful for the user
   191 work by Altenkirch that uses set+. Therefore we like to give automated support 
   188 if no automatic support is provided.
   192 for set+. Doing this without automatic support would be quite painful for the user.
   189 
   193 
   190 >   There are object languages,
   194 >   There are object languages,
   191 >   for instance, where abstractions commute with pairs: binding a name in a
   195 >   for instance, where abstractions commute with pairs: binding a name in a
   192 >   pair is the same as binding a name within each of the pair components.
   196 >   pair is the same as binding a name within each of the pair components.
   193 >   (This is the case in first-order logic where forall distributes over
   197 >   (This is the case in first-order logic where forall distributes over
   199 >   convincing evidence that set and set+ abstractions are useful. (That said,
   203 >   convincing evidence that set and set+ abstractions are useful. (That said,
   200 >   they don't cost much, so why not include them? Sure.)
   204 >   they don't cost much, so why not include them? Sure.)
   201 
   205 
   202 From our experience, once a feature is included, applications will
   206 From our experience, once a feature is included, applications will
   203 be found. Case in point, the set+ binder arises naturally in the
   207 be found. Case in point, the set+ binder arises naturally in the
   204 psi-calculus. 
   208 psi-calculus and is used in work by Altenkirch.
   205 
   209 
   206 > * Here is little challenge related to set-abstractions. Could you explain how
   210 > * Here is little challenge related to set-abstractions. Could you explain how
   207 >   to define the syntax of an object language with a construct like this:
   211 >   to define the syntax of an object language with a construct like this:
   208 >
   212 >
   209 >     let x1 = t1 and ... and xn = tn in t
   213 >     let x1 = t1 and ... and xn = tn in t
   217 >   of pairs. I think that the system should at the very least allow encoding
   221 >   of pairs. I think that the system should at the very least allow encoding
   218 >   this example, otherwise set-abstractions will not be very useful in
   222 >   this example, otherwise set-abstractions will not be very useful in
   219 >   practice.
   223 >   practice.
   220 
   224 
   221 We can. We added this as an example in the conclusion section.
   225 We can. We added this as an example in the conclusion section.
   222 
       
   223 
   226 
   224 > p.2, "this leads to a rather clumsy formalisation of W". Could you explain
   227 > p.2, "this leads to a rather clumsy formalisation of W". Could you explain
   225 > why? Although I can understand why in some circumstances it is desirable to
   228 > why? Although I can understand why in some circumstances it is desirable to
   226 > have a notion of alpha-equivalence that includes re-ordering binders, 
   229 > have a notion of alpha-equivalence that includes re-ordering binders, 
   227 > I am not
   230 > I am not
   235 > compared
   238 > compared
   236 > with one another. For this reason, it is not clear that a notion of
   239 > with one another. For this reason, it is not clear that a notion of
   237 > alpha-equivalence for type schemes is required at all, let alone that it must
   240 > alpha-equivalence for type schemes is required at all, let alone that it must
   238 > allow re-ordering binders and/or disregarding vacuous binders.
   241 > allow re-ordering binders and/or disregarding vacuous binders.
   239 
   242 
   240 In the correctness proof of W, the notion of capture-avoiding 
   243 In the correctness *proof* of W, the notion of capture-avoiding 
   241 substitution plays a crucial role. The notion of capture-avoiding
   244 substitution plays a crucial role. The notion of capture-avoiding
   242 substitution without the notion of alpha-equivalence does not make
   245 substitution without the notion of alpha-equivalence does not make
   243 any sense. This is different from *implementations* of W. They
   246 much sense. This is different from *implementations* of W. They
   244 might get away with concrete representations of tyep-schemes. 
   247 might get away with concrete representations of type-schemes. 
   245 
   248 
   246 > p.3, "let the user chose" -> "choose"
   249 > p.3, "let the user chose" -> "choose"
   247 
   250 
   248 Fixed.
   251 Fixed.
   249 
   252 
   267 > Equation (2.2) is unfamiliar to me. I am used to seeing "supp x" defined as
   270 > Equation (2.2) is unfamiliar to me. I am used to seeing "supp x" defined as
   268 > the least set L such that for every permutation pi, if pi fixes L, then pi
   271 > the least set L such that for every permutation pi, if pi fixes L, then pi
   269 > fixes x. I assume that the two definitions are equivalent? Is there a reason
   272 > fixes x. I assume that the two definitions are equivalent? Is there a reason
   270 > why you prefer this one?
   273 > why you prefer this one?
   271 
   274 
   272 Our definition is equivalent to yours for finite supported x. 
   275 Our definition is equivalent to yours for finitely supported x. 
   273 The advantage of our definition is that can be easily stated
   276 The advantage of our definition is that can be easily stated
   274 in a theorem prover since it fits into the scheme
   277 in a theorem prover since it fits into the scheme
   275 
   278 
   276    lhs = rhs
   279    constant args = term
   277 
   280 
   278 Your definition as the least set...does not fit into this simple 
   281 Your definition as the least set...does not fit into this simple 
   279 scheme. Our definition has been described extensively elsewhere,
   282 scheme. Our definition has been described extensively elsewhere,
   280 to which we refer the reader.
   283 to which we refer the reader.
   281 
   284 
   289 > intuitively true if we remove this hypothesis: it states exactly that 
   292 > intuitively true if we remove this hypothesis: it states exactly that 
   290 > "supp x"
   293 > "supp x"
   291 > is the least set that supports x (this is actually the definition of "supp"
   294 > is the least set that supports x (this is actually the definition of "supp"
   292 > that I expected, as mentioned above).
   295 > that I expected, as mentioned above).
   293 
   296 
   294 It does not work for non-finitely supported sets of atoms. Imagine
   297 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).
   298 bs is the set of "even" atoms (a set that is not finite nor co-finite).
   296 
   299 
   297    bs supports bs
   300    bs supports bs
   298 
   301 
   299 but 
   302 but 
   342 > suggestion, could one decide to expose only Set+ equality to the programmer,
   345 > suggestion, could one decide to expose only Set+ equality to the programmer,
   343 > and let him/her explicitly encode Set/List equality where desired?
   346 > and let him/her explicitly encode Set/List equality where desired?
   344 
   347 
   345 The second property holds outright. The first holds provided as and bs
   348 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
   349 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 
   350 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
   351 of set+. Also often proving properties for set+ is harder than for the
   349 as alpha-equivalence, the encoding, in our opinion, blurrs this difference.
   352 other modes.
   350 We noted these facts in the conclusion. 
   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. 
   351 
   356 
   352 > p.10, "in these relation"
   357 > p.10, "in these relation"
   353 
   358 
   354 Fixed.
   359 Fixed.
   355 
   360 
   356 > p.10, isn't equation (3.3) a *definition* of the action of permutations
   361 > p.10, isn't equation (3.3) a *definition* of the action of permutations
   357 > on the newly defined quotient type "beta abs_{set}"?
   362 > on the newly defined quotient type "beta abs_{set}"?
   358 
   363 
   359 Yes, in principle this could be given as the definition. Unfortunately, this is not
   364 Yes, we have this now as the definition. Earlier we really had
   360 as straightforward in Isabelle - it would need the function package
   365 derived this. Both methods need equal work (the definition
   361 and a messy proof that the function is "proper". It is easier to
   366 needs a proof to be proper). Having it as definition is clearer.
   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 
   367 
   366 > p.11, why do you need to "assume that x has finite support" in order to
   368 > p.11, why do you need to "assume that x has finite support" in order to
   367 > obtain property 3.4? It seems to me that this fact should also hold for
   369 > obtain property 3.4? It seems to me that this fact should also hold for
   368 > an x with infinite support. 
   370 > an x with infinite support. 
   369 
   371 
   431 > (binds bn(x) in ...). I would hope that a shallow binder is just syntactic
   433 > (binds bn(x) in ...). I would hope that a shallow binder is just syntactic
   432 > sugar for a deep binder where "bn" is the "singleton list" or "singleton
   434 > sugar for a deep binder where "bn" is the "singleton list" or "singleton
   433 > set" function. Is this the case? If not, why not? If yes, perhaps you could
   435 > set" function. Is this the case? If not, why not? If yes, perhaps you could
   434 > remove all mentions to shallow binders in section 5.
   436 > remove all mentions to shallow binders in section 5.
   435 
   437 
   436 No, quite. A deep binder can be recursive, which is a notion
   438 Not quite. A deep binder can be recursive, which is a notion
   437 that does not make sense for shallow binders.
   439 that does not make sense for shallow binders.
   438 
   440 
   439 > p.14, "we cannot have more than one binding function for a deep binder".  You
   441 > p.14, "we cannot have more than one binding function for a deep binder".  You
   440 > exclude "binds bn_1(p) bn_2(p) in t". Couldn't this be accepted and
   442 > exclude "binds bn_1(p) bn_2(p) in t". Couldn't this be accepted and
   441 > interpreted as "binds bn_1(p) \cup bn_2(p) in t"? (I guess it does not matter
   443 > interpreted as "binds bn_1(p) \cup bn_2(p) in t"? (I guess it does not matter
   446 > p.14, you also exclude "binds bn1(p) in t1, binds bn2(p) in t2". Two
   448 > p.14, you also exclude "binds bn1(p) in t1, binds bn2(p) in t2". Two
   447 > questions. First, a clarification: if bn1 and bn2 are the same function, is
   449 > questions. First, a clarification: if bn1 and bn2 are the same function, is
   448 > this allowed or excluded? 
   450 > this allowed or excluded? 
   449 
   451 
   450 For practical purposes, this is excluded. But the theory would
   452 For practical purposes, this is excluded. But the theory would
   451 support this case.
   453 support this case. I added a comment in the paper.
   452 
   454 
   453 > Second, I don't understand why you need this
   455 > Second, I don't understand why you need this
   454 > restriction, that is, why you are trying to prevent an atom to be "bound and
   456 > restriction, that is, why you are trying to prevent an atom to be "bound and
   455 > free at the same time" (bound in one sub-term and free in another). I 
   457 > free at the same time" (bound in one sub-term and free in another). I 
   456 > mean, in
   458 > mean, in
   460 > x in t1 are considered bound, whereas occurrences of x in t2 are considered
   462 > x in t1 are considered bound, whereas occurrences of x in t2 are considered
   461 > free; is this correct? If so, why not allow "binds bn1(p) in t1, binds bn2(p)
   463 > free; is this correct? If so, why not allow "binds bn1(p) in t1, binds bn2(p)
   462 > in t2", which seems to be of a similar nature? 
   464 > in t2", which seems to be of a similar nature? 
   463 
   465 
   464 The problem is that bn1 and bn2 can pick out different atoms to
   466 The problem is that bn1 and bn2 can pick out different atoms to
   465 be free and bound in p. This requires to exclude this case.
   467 be free and bound in p. Therefore we have to exclude this case.
   466 
   468 
   467 > p.14, example 4.4, the restriction that you impose here seems to rule out
   469 > p.14, example 4.4, the restriction that you impose here seems to rule out
   468 > an interesting and potentially useful pattern, namely telescopes. A telescope
   470 > an interesting and potentially useful pattern, namely telescopes. A telescope
   469 > is a list of binders, where each binder scopes over the rest of the 
   471 > is a list of binders, where each binder scopes over the rest of the 
   470 > telescope,
   472 > telescope,
   564 > explicitly forbidden this situation. So, is it forbidden or allowed? Please
   566 > explicitly forbidden this situation. So, is it forbidden or allowed? Please
   565 > clarify.
   567 > clarify.
   566 
   568 
   567 It is disallowed. We clarified the text.
   569 It is disallowed. We clarified the text.
   568 
   570 
   569 > OK, now I see that, since you allow ``recursive binders'', there is not a
       
   570 > partition between ``terms'' and ``binders''. A recursive binder appears both
       
   571 > on the left- and right-hand sides of a binds clause. Do you require that it
       
   572 > appears on the left- and right-hand sides of *the same* binds clause, or do
       
   573 > you allow the above example ("binds bn(t1) in t2, binds bn(t2) in t1")? If
       
   574 > you do allow it, then I suppose t1 is viewed as a (non-recursive) binder in
       
   575 > the first clause, while t2 is viewed as a (non-recursive) binder in the
       
   576 > second clause. This would be kind of weird, and (I imagine) will not lead
       
   577 > to a reasonable notion of alpha-equivalence. I am hoping to find out later
       
   578 > in the paper.
       
   579 
       
   580 > p.17, "for each of the arguments we calculate the free atoms as 
   571 > p.17, "for each of the arguments we calculate the free atoms as 
   581 > follows": this
   572 > follows": this
   582 > definition relies on the fact that "rhs" must be of a specific *syntactic*
   573 > definition relies on the fact that "rhs" must be of a specific *syntactic*
   583 > form (unions of expressions of the form "constant set" or "recursive call").
   574 > form (unions of expressions of the form "constant set" or "recursive call").
   584 > For instance, "rhs" cannot contain the expression "my_empty_set z_i", where
   575 > For instance, "rhs" cannot contain the expression "my_empty_set z_i", where