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