6,201 research outputs found
Exploiting Term Hiding to Reduce Run-time Checking Overhead
One of the most attractive features of untyped languages is the flexibility
in term creation and manipulation. However, with such power comes the
responsibility of ensuring the correctness of these operations. A solution is
adding run-time checks to the program via assertions, but this can introduce
overheads that are in many cases impractical. While static analysis can greatly
reduce such overheads, the gains depend strongly on the quality of the
information inferred. Reusable libraries, i.e., library modules that are
pre-compiled independently of the client, pose special challenges in this
context. We propose a technique which takes advantage of module systems which
can hide a selected set of functor symbols to significantly enrich the shape
information that can be inferred for reusable libraries, as well as an improved
run-time checking approach that leverages the proposed mechanisms to achieve
large reductions in overhead, closer to those of static languages, even in the
reusable-library context. While the approach is general and system-independent,
we present it for concreteness in the context of the Ciao assertion language
and combined static/dynamic checking framework. Our method maintains the full
expressiveness of the assertion language in this context. In contrast to other
approaches it does not introduce the need to switch the language to a (static)
type system, which is known to change the semantics in languages like Prolog.
We also study the approach experimentally and evaluate the overhead reduction
achieved in the run-time checks.Comment: 26 pages, 10 figures, 2 tables; an extension of the paper version
accepted to PADL'18 (includes proofs, extra figures and examples omitted due
to space reasons
Verified AIG Algorithms in ACL2
And-Inverter Graphs (AIGs) are a popular way to represent Boolean functions
(like circuits). AIG simplification algorithms can dramatically reduce an AIG,
and play an important role in modern hardware verification tools like
equivalence checkers. In practice, these tricky algorithms are implemented with
optimized C or C++ routines with no guarantee of correctness. Meanwhile, many
interactive theorem provers can now employ SAT or SMT solvers to automatically
solve finite goals, but no theorem prover makes use of these advanced,
AIG-based approaches.
We have developed two ways to represent AIGs within the ACL2 theorem prover.
One representation, Hons-AIGs, is especially convenient to use and reason
about. The other, Aignet, is the opposite; it is styled after modern AIG
packages and allows for efficient algorithms. We have implemented functions for
converting between these representations, random vector simulation, conversion
to CNF, etc., and developed reasoning strategies for verifying these
algorithms.
Aside from these contributions towards verifying AIG algorithms, this work
has an immediate, practical benefit for ACL2 users who are using GL to
bit-blast finite ACL2 theorems: they can now optionally trust an off-the-shelf
SAT solver to carry out the proof, instead of using the built-in BDD package.
Looking to the future, it is a first step toward implementing verified AIG
simplification algorithms that might further improve GL performance.Comment: In Proceedings ACL2 2013, arXiv:1304.712
Safe abstractions of data encodings in formal security protocol models
When using formal methods, security protocols are usually modeled at a high level of abstraction. In particular, data encoding and decoding transformations are often abstracted away. However, if no assumptions at all are made on the behavior of such transformations, they could trivially lead to security faults, for example leaking secrets or breaking freshness by collapsing nonces into constants. In order to address this issue, this paper formally states sufficient conditions, checkable on sequential code, such that if an abstract protocol model is secure under a Dolev-Yao adversary, then a refined model, which takes into account a wide class of possible implementations of the encoding/decoding operations, is implied to be secure too under the same adversary model. The paper also indicates possible exploitations of this result in the context of methods based on formal model extraction from implementation code and of methods based on automated code generation from formally verified model
On Improving Run-time Checking in Dynamic Languages
In order to detect incorrect program behaviors, a number of approaches
have been proposed, which include a combination of language-level
constructs (procedure-level annotations such as assertions/contracts,
gradual types, etc.) and associated tools (such as static code analyzers
and run-time verification frameworks).
However, it is often the case that these constructs and tools are not
used to their full extent in practice due to a number of limitations
such as excessive run-time overhead and/or limited expressiveness.
The issue is especially prominent in the context of dynamic
languages without an underlying strong type system, such as Prolog.
In our work we propose several practical solutions for minimizing the
run-time overhead associated with assertion-based verification while
keeping the correctness guarantees provided by run-time checks.
We present the solutions in the context of the Ciao system, where a
combination of an abstract interpretation-based static analyzer and
run-time verification framework is available, although our proposals
can be straightforwardly adapted to any other similar system
Formal Verification of Security Protocol Implementations: A Survey
Automated formal verification of security protocols has been mostly focused on analyzing high-level abstract models which, however, are significantly different from real protocol implementations written in programming languages. Recently, some researchers have started investigating techniques that bring automated formal proofs closer to real implementations. This paper surveys these attempts, focusing on approaches that target the application code that implements protocol logic, rather than the libraries that implement cryptography. According to these approaches, libraries are assumed to correctly implement some models. The aim is to derive formal proofs that, under this assumption, give assurance about the application code that implements the protocol logic. The two main approaches of model extraction and code generation are presented, along with the main techniques adopted for each approac
Reducing Computational Fluid Dynamics Simulation Cost by Intelligently Reducing Geometric Complexity
Computational Fluid Dynamic (CFD) Simulations enable a wide range of analysis but are costly to perform. This research looks at taking existing geometry from Building Information Models or CAD, and performing Geometric Abstraction to make them ready for simulation quickly, as well as reducing the computational cost to simulate them. The aim is to make CFD more accessible, so it can be applied more readily to existing and new problems
Reducing resources for verification of quantum computations
We present two verification protocols where the correctness of a "target"
computation is checked by means of "trap" computations that can be efficiently
simulated on a classical computer. Our protocols rely on a minimal set of
noise-free operations (preparation of eight single-qubit states or measurement
of four observables, both on a single plane of the Bloch sphere) and achieve
linear overhead. To the best of our knowledge, our protocols are the least
demanding techniques able to achieve linear overhead. They represent a step
towards further reducing the quantum requirements for verification.Comment: Accepted versio
- …