PLEX: Normalization for Refinement Types

Publication date

2026-04-10

Authors

Ferrarini, Alessio
Vazou, Niki
Swierstra, W.S.ORCID 0000-0002-0295-7944ISNI 0000000426852359

Editors

Advisors

Supervisors

Document Type

Article
Open Access logo

License

cc_by

Abstract

Refinement types often use SMT solvers to automate program verification. However, since SMT solvers are first-order, verification of properties that requires higher-order reasoning is not possible. Proof by Logical Evaluation (PLE) is an algorithm that provides a layer between refinement types and SMT solvers that permits symbolic evaluation of functions, but it lacks support for higher-order reasoning. We introduce PLEX, an extension to PLE, that supports η-expansions, β-reductions, and dependent pattern matching. We prove that PLEX is sound and terminating, describe its implementation in Liquid Haskell, and evaluate it on examples that make essential use of higher-order data, and as such they cannot be handled by PLE. The new PLEX algorithm bridges the gap between higher-order languages and first-order SMT solvers via refinement types.

Keywords

higher-order reasoning, refinement types, SMT-based verification, Software, Safety, Risk, Reliability and Quality

Citation

Ferrarini, A, Vazou, N & Swierstra, W 2026, 'PLEX : Normalization for Refinement Types', Proceedings of the ACM on Programming Languages, vol. 10, no. OOPSLA1, pp. 1321-1347. https://doi.org/10.1145/3798248