Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Matt Lewis is active.

Publication


Featured researches published by Matt Lewis.


computer aided verification | 2013

Under-Approximating Loops in C Programs for Fast Counterexample Detection

Daniel Kroening; Matt Lewis; Georg Weissenbacher

Many software model checkers only detect counterexamples with deep loops after exploring numerous spurious and increasingly longer counterexamples. We propose a technique that aims at eliminating this weakness by constructing auxiliary paths that represent the effect of a range of loop iterations. Unlike acceleration, which captures the exact effect of arbitrarily many loop iterations, these auxiliary paths may under-approximate the behaviour of the loops. In return, the approximation is sound with respect to the bit-vector semantics of programs. Our approach supports arbitrary conditions and assignments to arrays in the loop body, but may as a result introduce quantified conditionals. To reduce the resulting performance penalty, we present two quantifier elimination techniques specially geared towards our application. Loop under-approximation can be combined with a broad range of verification techniques. We paired our techniques with lazy abstraction and bounded model checking, and evaluated the resulting tool on a number of buffer overflow benchmarks, demonstrating its ability to efficiently detect deep counterexamples in C programs that manipulate arrays.


european symposium on programming | 2015

Unrestricted Termination and Non-termination Arguments for Bit-Vector Programs

Cristina David; Daniel Kroening; Matt Lewis

Proving program termination is typically done by finding a well-founded ranking function for the program states. Existing termination provers typically find ranking functions using either linear algebra or templates. As such they are often restricted to finding linear ranking functions over mathematical integers. This class of functions is insufficient for proving termination of many terminating programs, and furthermore a termination argument for a program operating on mathematical integers does not always lead to a termination argument for the same program operating on fixed-width machine integers. We propose a termination analysis able to generate nonlinear, lexicographic ranking functions and nonlinear recurrence sets that are correct for fixed-width machine arithmetic and floating-point arithmetic. Our technique is based on a reduction from program termination to second-order satisfaction. We provide formulations for termination and non-termination in a fragment of second-order logic with restricted quantification which is decidable over finite domains [1]. The resulting technique is a sound and complete analysis for the termination of finite-state programs with fixed-width integers and IEEE floating-point arithmetic.


international conference on logic programming | 2015

Using Program Synthesis for Program Analysis

Cristina David; Daniel Kroening; Matt Lewis

In this paper, we propose a unified framework for designing static analysers based on program synthesis. For this purpose, we identify a fragment of second-order logic with restricted quantification that is expressive enough to capture numerous static analysis problems e.g. safety proving, bug finding, termination and non-termination proving, superoptimisation. We call this fragment the synthesis fragment. We build a decision procedure for the synthesis fragment over finite domains in the form of a program synthesiser. Given our initial motivation to solve static analysis problems, this synthesiser is specialised for such analyses. Our experimental results show that, on benchmarks capturing static analysis problems, our program synthesiser compares positively with other general purpose synthesisers.


fundamental approaches to software engineering | 2015

Evaluation of Measures for Statistical Fault Localisation and an Optimising Scheme

David Landsberg; Hana Chockler; Daniel Kroening; Matt Lewis

Statistical Fault Localisation (SFL) is a widely used method for localizing faults in software. SFL gathers coverage details of passed and failed executions over a faulty program and then uses a measure to assign a degree of suspiciousness to each of a chosen set of program entities (statements, predicates, etc.) in that program. The program entities are then inspected by the engineer in descending order of suspiciousness until the bug is found. The effectiveness of this process relies on the quality of the suspiciousness measure. In this paper, we compare 157 measures, 95 of which are new to SFL and borrowed from other branches of science and philosophy. We also present a new measure optimiser Lex g , which optimises a given measure g according to a criterion of single bug optimality. An experimental comparison on benchmarks from the Software-artifact Infrastructure Repository (SIR) indicates that many of the new measures perform competitively with the established ones. Furthermore, the large-scale comparison reveals that the new measures Lex Ochiai and Pattern-Similarity perform best overall.


formal methods | 2015

Proving Safety with Trace Automata and Bounded Model Checking

Daniel Kroening; Matt Lewis; Georg Weissenbacher

Loop under-approximation is a technique that enriches C programs with additional branches that represent the effect of a (limited) range of loop iterations. While this technique can speed up the detection of bugs significantly, it introduces redundant execution traces which may complicate the verification of the program. This holds particularly true for verification tools based on Bounded Model Checking, which incorporate simplistic heuristics to determine whether all feasible iterations of a loop have been considered. We present a technique that uses \emph{trace automata} to eliminate redundant executions after performing loop acceleration. The method reduces the diameter of the program under analysis, which is in certain cases sufficient to allow a safety proof using Bounded Model Checking. Our transformation is precise---it does not introduce false positives, nor does it mask any errors. We have implemented the analysis as a source-to-source transformation, and present experimental results showing the applicability of the technique.


PLOS ONE | 2013

Additive Toxicity of β-Amyloid by a Novel Bioactive Peptide In Vitro: Possible Implications for Alzheimer’s Disease

Sara Garcia-Ratés; Matt Lewis; Rosemary Worrall; Susan A. Greenfield

Background β-amyloid is regarded as a significant factor in Alzheimer’s disease: but inefficient therapies based on this rationale suggests that additional signalling molecules or intermediary mechanisms must be involved in the actual initiation of the characteristic degeneration of neurons. One clue could be that acetylcholinesterase, also present in amyloid plaques, is aberrant in peripheral tissues such as blood and adrenal medulla that can be implicated in Alzheimer’s disease. The aim of this study was to assess the bioactivity of a fragment of acetylcholinesterase responsible for its non-enzymatic functions, a thirty amino acid peptide (“T30”) which has homologies with β-amyloid. Methods Cell viability was measured by sulforhodamine B assay and also lactate dehydrogenase assay: meanwhile, changes in the status of living cells was monitored by measuring release of acetylcholinesterase in cell perfusates using the Ellman reagent. Findings T30 peptide and β-amyloid each have toxic effects on PC12 cells, comparable to hydrogen peroxide. However only the two peptides selectively then evoke a subsequent, enhanced release in acetylcholinesterase that could only be derived from the extant cells. Moreover, unlike hydrogen peroxide, the T30 peptide selectively shifted a sub-threshold dose of β-amyloid to a toxic effect, which also resulted in a comparable enhanced release of acetylcholinesterase. Interpretation This is the first study comparing directly the bioactivity of β-amyloid with a peptide derived from acetylcholinesterase: the similarity in action suggests that the sequence homology between the two compounds might have a functional and/or pathological relevance. The subsequent enhanced release of acetylcholinesterase from the extant cells could reflect a primary ‘compensatory’ response of cells prone to degeneration, paradoxically providing further availability of the toxic C-terminal peptide to modulate the potency of β-amyloid. Such a cycle of events may provide new insights into the mechanism of continuing selective cell loss in Alzheimer’s disease and related degenerative disorders.


formal methods | 2015

Under-approximating loops in C programs for fast counterexample detection

Daniel Kroening; Matt Lewis; Georg Weissenbacher

Many software model checkers only detect counterexamples with deep loops after exploring numerous spurious and increasingly longer counterexamples. We propose a technique that aims at eliminating this weakness by constructing auxiliary paths that represent the effect of a range of loop iterations. Unlike acceleration, which captures the exact effect of arbitrarily many loop iterations, these auxiliary paths may under-approximate the behaviour of the loops. In return, the approximation is sound with respect to the bit-vector semantics of programs. Our approach supports arbitrary conditions and assignments to arrays in the loop body, but may as a result introduce quantified conditionals. To reduce the resulting performance penalty, we present two quantifier elimination techniques specially geared towards our application. Loop under-approximation can be combined with a broad range of verification techniques. We paired our techniques with lazy abstraction and bounded model checking, and evaluated the resulting tool on a number of buffer overflow benchmarks, demonstrating its ability to efficiently detect deep counterexamples in C programs that manipulate arrays.


formal methods in computer-aided design | 2015

Accelerating invariant generation

Kumar Madhukar; Björn Wachter; Daniel Kroening; Matt Lewis; Mandayam K. Srivas

Acceleration is a technique for summarising loops by computing a closed-form representation of the loop behaviour. The closed form can be turned into an accelerator, which is a code snippet that skips over intermediate states of the loop to the end of the loop in a single step. Program analysers rely on invariant generation techniques to reason about loops. The state-of-the-art invariant generation techniques, in practice, often struggle to find concise loop invariants, and, instead, degrade into unrolling loops, which is ineffective for non-trivial programs. In this paper, we evaluate experimentally whether loop accelerators enable existing program analysis algorithm to discover loop invariants more reliably and more efficiently. This paper is the first comprehensive study on the synergies between acceleration and invariant generation. We report our experience with a collection of safe and unsafe programs drawn from the Software Verification Competition and the literature.


european symposium on programming | 2015

Propositional Reasoning about Safety and Termination of Heap-Manipulating Programs

Cristina David; Daniel Kroening; Matt Lewis

This paper shows that it is possible to reason about the safety and termination of programs handling potentially cyclic, singly-linked lists using propositional reasoning even when the safety invariants and termination arguments depend on constraints over the lengths of lists. For this purpose, we propose the theory SLH of singly-linked lists with length, which is able to capture non-trivial interactions between shape and arithmetic. When using the theory of bit-vector arithmetic as background theory, SLH is efficiently decidable via a reduction to SAT. We show the utility of SLH for software verification by using it to express safety invariants and termination arguments for programs manipulating potentially cyclic, singly-linked lists with unrestricted, unspecified sharing. We also provide an implementation of the decision procedure and apply it to check safety and termination proofs for several heap-manipulating programs.


ACM Transactions on Programming Languages and Systems | 2018

Program Synthesis for Program Analysis

Cristina David; Pascal Kesseli; Daniel Kroening; Matt Lewis

In this article, we propose a unified framework for designing static analysers based on program synthesis. For this purpose, we identify a fragment of second-order logic with restricted quantification that is expressive enough to model numerous static analysis problems (e.g., safety proving, bug finding, termination and non-termination proving, refactoring). As our focus is on programs that use bit-vectors, we build a decision procedure for this fragment over finite domains in the form of a program synthesiser. We provide instantiations of our framework for solving a diverse range of program verification tasks such as termination, non-termination, safety and bug finding, superoptimisation, and refactoring. Our experimental results show that our program synthesiser compares positively with specialised tools in each area as well as with general-purpose synthesisers.

Collaboration


Dive into the Matt Lewis's collaboration.

Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Georg Weissenbacher

Vienna University of Technology

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Bryony Black

University of East Anglia

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar

D Hewitt

Loughborough University

View shared research outputs
Top Co-Authors

Avatar

Fiona Curtis

University College London

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Hongyan Cai

University of East Anglia

View shared research outputs
Researchain Logo
Decentralizing Knowledge