A relational logic for higher-order programs

@article{Aguirre2019ARL,
  title={A relational logic for higher-order programs},
  author={Alejandro Aguirre and Gilles Barthe and Marco Gaboardi and Deepak Garg and Pierre-Yves Strub},
  journal={Proceedings of the ACM on Programming Languages},
  year={2019},
  volume={1},
  pages={1 - 29}
}
Relational program verification is a variant of program verification where one can reason about two programs and as a special case about two executions of a single program on different inputs. Relational program verification can be used for reasoning about a broad range of properties, including equivalence and refinement, and specialized notions such as continuity, information flow security or relative cost. In a higher-order setting, relational program verification can be achieved using… 
Bidirectional type checking for relational properties
TLDR
This paper develops bidirectional relational type checking for systems with relational refinements and effects, and significantly reduces the need for typing annotations through the combination of type checking and type inference.
A Monadic Framework for Relational Verification
TLDR
The essence of the approach is to model effectful computations using monads and to prove relational properties on their monadic representations, making the most of existing support for reasoning about pure programs.
A monadic framework for relational verification: applied to information security, program equivalence, and optimizations
TLDR
The essence of the approach is to model effectful computations using monads and to prove relational properties on their monadic representations, making the most of existing support for reasoning about pure programs.
The next 700 relational program logics
TLDR
The first framework for defining relational program logics for arbitrary monadic effects is proposed, and it is shown that this generic framework can be used to define relational programLogics for effects as diverse as state, input-output, nondeterminism, and discrete probabilities.
ReLoC: A Mechanised Relational Logic for Fine-Grained Concurrency
TLDR
ReLoC is a logic for proving refinements of programs in a language with higher-order state, fine-grained concurrency, polymorphism and recursive types, and a mechanisation of the logic in Coq is provided, which does not just contain a proof of soundness, but also tactics for interactively carrying out refinements proofs.
RHLE: Modular Deductive Verification of Relational $\forall\exists$ Properties.
TLDR
A novel form of function specification that requires the existence of certain behaviors in valid implementations is developed, and a tool is built which is used to verify a diverse set of relational properties drawn from the literature, including refinement and generalized noninterference.
ReLoC Reloaded: A Mechanized Relational Logic for Fine-Grained Concurrency and Logical Atomicity
TLDR
ReLoC Reloaded extends the ReLoC logic with various technical improvements, a new Coq mechanization, and support for Iris's prophecy variables, and expands the notion of logically atomic specifications to the relational case, which is called logically atomic relational specifications.
RHLE: Automatic Verification of $\forall\exists$-Hyperproperties
TLDR
RHLE is presented, a relational program logic for reasoning about a class of hyperproperties that all $\forall\exists$-hyperproperties, including refinement and non-interference properties, on a corpus of representative programs which is used to automatically verify a number of k-safety and k-liveness hyperproperties.
RHLE: Automatic Verification of ∀∃-Hyperproperties
TLDR
RHLE is presented, a relational program logic for reasoning about a class of hyperproperties that is capable of automatically verifying a number of ∀∃hyperproperties, including refinement and non-interference properties, on a corpus of representative programs.
Constraint-based Relational Verification
TLDR
This paper describes a novel and fully automated constraint-based approach to relational verification and presents a constraint solving method for pfwCSP based on stratified CounterExample-Guided Inductive Synthesis of ordinary, well-founded, and functional predicates.

References

SHOWING 1-10 OF 59 REFERENCES
A monadic framework for relational verification: applied to information security, program equivalence, and optimizations
TLDR
The essence of the approach is to model effectful computations using monads and to prove relational properties on their monadic representations, making the most of existing support for reasoning about pure programs.
A relational model of types-and-effects in higher-order concurrent separation logic
TLDR
This paper presents a relational model of a type-and-effect system for a higher-order, concurrent program- ming language that supports both effect-based optimizations and data abstraction and proves semantic invariants expressed by the effect annotations strong enough to prove advanced program transformations.
Relational Verification Using Product Programs
TLDR
This work provides a general notion of product program that supports a direct reduction of relational verification to standard verification, and illustrates the benefits of the method with selected examples, including non-interference, standard loop optimizations, and a state-of-the-art optimization for incremental computation.
Simple relational correctness proofs for static analyses and program transformations
We show how some classical static analyses for imperative programs, and the optimizing transformations which they enable, may be expressed and proved correct using elementary logical and
A relational modal logic for higher-order stateful ADTs
TLDR
The proposed model of LADR is based on Ahmed, Dreyer, and Rossberg's state-of-the-art step-indexed Kripke logical relation, which was designed to facilitate proofs of representation independence for "state-dependent" ADTs.
Verifying Relational Properties of Functional Programs by First-Order Refinement
TLDR
A restricted form of higher-order refinement types where refinement predicates can refer to functions is introduced, and a systematic program transformation is formalized to reduce type checking/inference for higher-orders refinement types to that for first- order refinement types, so that the latter can be automatically solved by using an existing software model checker.
Relational cost analysis
TLDR
This work proposes a relational cost analysis technique that is capable of establishing precise bounds on the difference in the execution cost of two programs by making use of relational properties of programs and inputs, and develops a refinement type and effect system for a higher-order functional language with recursion and subtyping.
Monadic refinements for relational cost analysis
TLDR
This paper derives two syntax-directed proof systems, UC and RC, for unary and relational cost analysis, by adding a cost monad to a (syntax-directed) logic of higher-order programs.
Probabilistic relational verification for cryptographic implementations
TLDR
RF*, a relational extension of F*, a general-purpose higher-order stateful programming language with a verification system based on refinement types, is presented, which is a relational Hoare logic for a higher- order, stateful, probabilistic language.
A core calculus of dependency
TLDR
It is argued that there is a central notion of dependency common to these settings that can be captured within a single calculus, the Dependency Core Calculus (DCC), a small extension of Moggi's computational lambda calculus.
...
...