### Abstract

Much progress has been made recently on fully automated verification of higher-order functional programs, based on refinement types and higher-order model checking. Most of those verification techniques are, however, based on first-order refinement types, hence unable to verify certain properties of functions (such as the equality of two recursive functions and the monotonicity of a function, which we call relational properties). To relax this limitation, we introduce a restricted form of higher-order refinement types where refinement predicates can refer to functions, and formalize a systematic program transformation to reduce type checking/inference for higher-order refinement types to that for first-order refinement types, so that the latter can be automatically solved by using an existing software model checker. We also prove the soundness of the transformation, and report on implementation and experiments.

Original language | English |
---|---|

Pages (from-to) | 2-62 |

Number of pages | 61 |

Journal | Science of Computer Programming |

Volume | 137 |

DOIs | |

Publication status | Published - 2017 Apr 1 |

### Keywords

- Automated verification
- Higher-order functional language
- Refinement types

### ASJC Scopus subject areas

- Software

## Fingerprint Dive into the research topics of 'Verifying relational properties of functional programs by first-order refinement'. Together they form a unique fingerprint.

## Cite this

*Science of Computer Programming*,

*137*, 2-62. https://doi.org/10.1016/j.scico.2016.02.007