scholarly journals Abstract Contract Synthesis and Verification in the Symbolic 𝕂 Framework

2020 ◽  
Vol 177 (3-4) ◽  
pp. 235-273
Author(s):  
María Alpuente ◽  
Daniel Pardo ◽  
Alicia Villanueva

In this article, we propose a symbolic technique that can be used for automatically inferring software contracts from programs that are written in a non-trivial fragment of C, called KERNELC, that supports pointer-based structures and heap manipulation. Starting from the semantic definition of KERNELC in the 𝕂 semantic framework, we enrich the symbolic execution facilities recently provided by 𝕂 with novel capabilities for contract synthesis that are based on abstract subsumption. Roughly speaking, we define an abstract symbolic technique that axiomatically explains the execution of any (modifier) C function by using other (observer) routines in the same program. We implemented our technique in the automated tool KINDSPEC 2.1, which generates logical axioms that express pre- and post-condition assertions which define the precise input/output behavior of the C routines. Thanks to the integrated support for symbolic execution and deductive verification provided by 𝕂, some synthesized axioms that cannot be guaranteed to be correct by construction due to abstraction can finally be verified in our setting with little effort.

2003 ◽  
Vol 38 (4) ◽  
pp. 47-56 ◽  
Author(s):  
Lei Luo ◽  
Ming-Yuan Zhu ◽  
Qing-Li Zhang

1982 ◽  
Vol 17 (6) ◽  
pp. 327-333
Author(s):  
Terrence W. Pratt ◽  
George D. Maydwell

2017 ◽  
Vol 50 (1) ◽  
pp. 9766-9771 ◽  
Author(s):  
Ziad Alkhoury ◽  
Mihály Petreczky ◽  
Guillaume Mercère

2011 ◽  
Vol 11 (4-5) ◽  
pp. 611-627
Author(s):  
ANTÓNIO PORTO

AbstractProlog's very useful expressive power is not captured by traditional logic programming semantics, due mainly to the cut and goal and clause order. Several alternative semantics have been put forward, exposing operational details of the computation state. We propose instead to redesign Prolog around structured alternatives to the cut and clauses, keeping the expressive power and computation model but with a compositional denotational semantics over much simpler states—just variable bindings. This considerably eases reasoning about programs, by programmers and tools such as a partial evaluator, with safe unfolding of calls through predicate definitions. Anif-then-elseacross clauses replaces most uses of the cut, but the cut's full power is achieved by anuntilconstruct. Disjunction, conjunction anduntil, along with unification, are the primitive goal types with a compositional semantics yielding sequences of variable-binding solutions. This extends to programs via the usual technique of a least fixpoint construction. A simple interpreter for Prolog in the alternative language, and a definition ofuntilin Prolog, establish the identical expressive power of the two languages. Many useful control constructs are derivable from the primitives, and the semantic framework illuminates the discussion of alternative ones. The formalisation rests on a term language with variable abstraction as in the λ-calculus. A clause is an abstraction on the call arguments, a continuation, and the local variables. It can be inclusive or exclusive, expressing a local case bound to a continuation by either a disjunction or anif-then-else. Clauses are open definitions, composed (and closed) with simple functional application β-reduction). This paves the way for a simple account of flexible module composition mechanisms.Cube, a concrete language with the exposed principles, has been implemented on top of a Prolog engine and successfully used to build large real-world applications.


1963 ◽  
Vol 2 (1-2) ◽  
pp. 96-101
Author(s):  
P. V. Tavanets

1981 ◽  
Vol 10 (137) ◽  
Author(s):  
Neil D. Jones ◽  
Henning Christiansen

<p>A simple algebra-based algorithm for compiler generation is described. Its input is a semantic definition of a programming language, and its output is a ''compiling semantics'' which maps each source program into a sequence of compile-time actions whose net effect on execution is the production of a semantically equivalent target program. The method does not require individual compiler correctness proofs or the construction of specialized target algebras.</p><p>Source program execution is assumed to proceed by performing a series of elementary actions on a runtime state. A semantic algebra is introduced to represent and manipulate possible execution sequences. A source semantic definition has two parts: A set of semantic equations mapping source programs into terms of the algebra, and an interpretation which gives concrete definitions of the state and the elementary actions on it.</p>


Analysis ◽  
1948 ◽  
Vol 8 (4) ◽  
pp. 49-63 ◽  
Author(s):  
M. Black

Sign in / Sign up

Export Citation Format

Share Document