DeepAI AI Chat
Log In Sign Up

Recurrence Extraction for Functional Programs through Call-by-Push-Value (Extended Version)

by   G. A. Kavvos, et al.

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.


Denotational recurrence extraction for amortized analysis

A typical way of analyzing the time complexity of functional programs is...

The Unfolding Semantics of Functional Programs

The idea of using unfolding as a way of computing a program semantics ha...

Denotational semantics as a foundation for cost recurrence extraction for functional languages

A standard method for analyzing the asymptotic complexity of a program i...

A Probabilistic and Non-Deterministic Call-by-Push-Value Language

There is no known way of giving a domain-theoretic semantics to higher-o...

Pirouette: Higher-Order Typed Functional Choreographies

We present Pirouette, a language for typed higher-order functional chore...

A Domain Semantics for Higher-Order Recursive Processes

The polarized SILL programming language uniformly integrates functional ...

Data-Driven Debugging for Functional Side Channels

Functional side channels arise when an attacker knows that the secret va...