TY - JOUR
T1 - Higher-order uncurrying
AU - Hannan, John
AU - Hicks, Patrick
N1 - Funding Information:
⁄Partially supported by NSF CAREER Award #CCR-9502356. †Present address: Brother Boniface Hicks, O.S.B., St. Vincent Archabbey, Latrobe, PA 15650, USA.
PY - 2000/9
Y1 - 2000/9
N2 - We present a formal specification of unCurrying for a higher-order, functional language with ML-style let-polymorphism. This specification supports the general unCurrying of functions, even for functions that are passed as arguments or returned as values. The specification also supports partial unCurrying of any consecutive parameters of a function, rather than only unCurrying all of a function's parameters. We present the specification as a deductive system that axiomatizes a judgment relating a source term with an unCurried form of the term. We prove that this system relates only typeable terms and that it is correct with respect to an operational semantics. We define a practical algorithm, based on algorithm W, that implements unCurrying and prove this algorithm sound and complete with respect to the deductive system. This algorithm generates maximally unCurried forms of source terms. These results provide a declarative framework for reasoning about unCurrying and support a richer form of unCurrying than is currently found in compilers for functional languages.
AB - We present a formal specification of unCurrying for a higher-order, functional language with ML-style let-polymorphism. This specification supports the general unCurrying of functions, even for functions that are passed as arguments or returned as values. The specification also supports partial unCurrying of any consecutive parameters of a function, rather than only unCurrying all of a function's parameters. We present the specification as a deductive system that axiomatizes a judgment relating a source term with an unCurried form of the term. We prove that this system relates only typeable terms and that it is correct with respect to an operational semantics. We define a practical algorithm, based on algorithm W, that implements unCurrying and prove this algorithm sound and complete with respect to the deductive system. This algorithm generates maximally unCurried forms of source terms. These results provide a declarative framework for reasoning about unCurrying and support a richer form of unCurrying than is currently found in compilers for functional languages.
UR - http://www.scopus.com/inward/record.url?scp=0034268990&partnerID=8YFLogxK
UR - http://www.scopus.com/inward/citedby.url?scp=0034268990&partnerID=8YFLogxK
U2 - 10.1023/A:1010006229549
DO - 10.1023/A:1010006229549
M3 - Article
AN - SCOPUS:0034268990
SN - 1388-3690
VL - 13
SP - 179
EP - 216
JO - Higher-Order and Symbolic Computation
JF - Higher-Order and Symbolic Computation
IS - 3
ER -