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