• Home
  • Search
  • Verification by Reduction to Functional Programs
  • Cite Icon4
  • https://doi.org/10.5075/epfl-thesis-7636Copy DOI Icon

Verification by Reduction to Functional Programs

  • Abstract
  • Literature Map
  • Citations
  • Similar Papers
Abstract

In this thesis, we explore techniques for the development and verification of programs in a high-level, expressive, and safe programming language. Our programs can express problems over unbounded domains and over recursive and mutable data structures. We present an implementation language flexible enough to build interesting and useful systems. We mostly maintain a core shared language for the specifications and the implementation, with only a few extensions specific to expressing the specifications. Extensions of the core shared language include imperative features with state and side effects, which help when implementing efficient systems. Our language is a subset of the Scala programming language. Once verified, programs can be compiled and executed using the existing Scala tools. We present algorithms for verifying programs written in this language. We take a layer-based approach, where we reduce, at each step, the program to an equivalent program in a simpler language. We first purify functions by transforming away mutations into explicit return types in the functions' signatures. This step rewrites all mutations of data structures into cloning operations. We then translate local state into a purely functional code, hence eliminating all traces of imperative programming. The final language is a functional subset of Scala, on which we apply verification. We integrate our pipeline of translations into Leon, a verifier for Scala. We verify the core functional language by using an algorithm already developed inside Leon. The program is encoded into equivalent first-order logic formulas over a combination of theories and recursive functions. The formulas are eventually discharged to an external SMT solver. We extend this core language and the solving algorithm with support for both infinite-precision integers and bit-vectors. The algorithm takes into account the semantics gap between the two domains, and the programmer is ultimately responsible to use the proper type to represent the data. We build a reusable interface for SMT-LIB that enables us to swap solvers transparently in order to validate the formulas emitted by Leon. We experiment with writing solvers in Scala; they could offer both a better and safer integration with the rest of the system. We evaluate the cost of using a higher-order language to implement such solvers, traditionally written in C/C++. Finally, we experiment with the system by building fully working and verified applications. We rely on the intersection of many features including higher-order functions, mutable data structures, recursive functions, and nondeterministic environment dependencies, to build concise and verified applications.

Similar Papers
  • Supplementary Content

Formal Design and Analysis for DNA Implementations of Chemical Reaction Networks

  • Jul 16, 2020
  • Robert F Johnson
  • Supplementary Content

Costrutti ed Applicazioni di Programmazione Generica in Linguaggi Object-Oriented

  • Apr 30, 2010
  • AMS Dottorato Institutional Doctoral Theses Repository (University of Bologna)
  • Maurizio Cimadamore
  • Conference Article
  • Citations1

Probabilistic Programming (Invited Talk)

  • Jan 01, 2017
  • DROPS (Schloss Dagstuhl – Leibniz Center for Informatics)
  • Hongseok Yang
  • Research Article

An Approach About Monitoring Generic Properties on C Programs Using Aspect-Oriented Programming with ACC (AspeCtC)

  • Jun 08, 2016
  • Pikeroen Olivier
  • Research Article
  • Citations321

Concurrency State Models and Java Programs

  • Jan 01, 2000
  • Scalable Computing Practice and Experience
  • William F Gilreath
  • Research Article
  • Citations2

A New Approach for Code Generation from UML State Machine

  • Feb 28, 2013
  • International Review on Computers and Software
  • My Hafid Aabidi +3
  • Supplementary Content

Co-Contextual Type Systems: Contextless Deductive Reasoning for Correct Incremental Type Checking

  • Mar 02, 2020
  • TUbilio (Technical University of Darmstadt)
  • Edlira Kuci
  • Research Article

A Study of Flaws in Delivering Programming languages and to impart programming logic in a reasonable approach

  • May 02, 2015
  • Asian Journal of Computer Science And Information Technology
  • Rakesh Kumar
  • Conference Article

Mechanized Metatheory Revisited: An Extended Abstract (Invited Paper)

  • Jan 01, 2018
  • DROPS (Schloss Dagstuhl – Leibniz Center for Informatics)
  • Dale Miller
  • Research Article
  • Citations32

Object-oriented programming with class dictionaries

  • Sep 01, 1988
  • Lisp and Symbolic Computation
  • Karl J Lieberherr
  • Research Article

Some Program Anomalies and the Parameter Theorem

  • Apr 01, 1989
  • Mathematics Magazine
  • David Pokrass
  • Conference Article

A Deadlock Detector for Synchronous Java

  • Jan 01, 2005
  • Infoscience (Ecole Polytechnique Fédérale de Lausanne)
  • D Vo-Duc +1
  • Research Article

Intelligent JAVA Applications for the Internet and Intranets

  • Jan 01, 1998
  • Scalable Computing Practice and Experience
  • Haklin Kimm
  • Research Article

DEVELOPING A BIDIRECTIONAL AND BILINGUAL ELECTRONIC DICTIONARY FOR SCHOOL CHILDREN WITH SPECIAL REFERENCE TO TAMIL AND ENGLISH

  • Apr 02, 2015
  • R Saranya +1
  • Research Article
  • Citations5

Promoting rewriting to a programming language: a compiler for non-deterministic rewrite programs in associative-commutative theories

  • Mar 01, 2001
  • Journal of Functional Programming
  • Kirchnerhélène +1
Cactus Communications logo

Copyright 2026 Cactus Communications. All rights reserved.