Recurrence Extraction for Functional Programs through Call-by-Push-Value (Extended Version)
Abstract
The main way of analyzing the complexity of a program is that of extracting and solving a recurrence that expresses its running time in terms of the size of its input. We develop a method that automatically extracts such recurrences from the syntax of higher-order recursive functional programs. The resulting recurrences, which are programs in a call-by-name language with recursion, explicitly compute the running time in terms of the size of the input. In order to achieve this in a uniform way that covers both call-by-name and call-by-value evaluation strategies, we use Call-by-Push-Value (CBPV) as an intermediate language. Finally, we use domain theory to develop a denotational cost semantics for the resulting recurrences.
- Publication:
-
arXiv e-prints
- Pub Date:
- November 2019
- DOI:
- 10.48550/arXiv.1911.04588
- arXiv:
- arXiv:1911.04588
- Bibcode:
- 2019arXiv191104588K
- Keywords:
-
- Computer Science - Programming Languages;
- Computer Science - Logic in Computer Science;
- F.3.2
- E-Print:
- POPL 2020