Alan Mycroft

dblp:m/AlanMycroft · DBLP profile ↗
← Back
63ranked-venue papers
9as first author
7since 2021 · last 2025
0000-0001-7013-8572ORCID · verified

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 43 · 5 first-author · 3 since 2021Theory of computation · 9 · 3 first-author · 2 since 2021Systems, architecture and hardware · 8 · 1 since 2021Artificial intelligence and machine learning · 2 · 1 first-author · 1 since 2021Databases, data management, data science and information retrieval · 1Graphics, computer vision, multimedia, augmented reality and games · 1 · 1 since 2021
YearPublicationVenuePosition
2025 Enhancing SQL Query Generation with Neurosymbolic Reasoning
abstract
We propose a neurosymbolic architecture aimed at boosting the performance of any Language Model (LM) for SQL query generation. This approach leverages symbolic reasoning to guide the LM's exploration of the search space by considering multiple paths, symbolically evaluating choices at each decision point to choose the next step, with the added novel ability to backtrack. A key innovation is the use of symbolic checks on both partially and fully generated SQL queries, enabling early truncation of unsuccessful search paths. Input consists of textual requirements on the desired query, along with optional example tuples to be selected by the query. Experiments on Xander, our open-source implementation, show it both reduces runtime and increases accuracy of the generated SQL. A specific result is an LM using Xander outperforming a four-times-larger LM.
Henrijs Princis, Cristina David, Alan Mycroft
AAAI3
2024 Galois connecting call-by-value and call-by-name
abstract
We establish a general framework for reasoning about the relationship between call-by-value and call-by-name. In languages with computational effects, call-by-value and call-by-name executions of programs often have different, but related, observable behaviours. For example, if a program might diverge but otherwise has no effects, then whenever it terminates under call-by-value, it terminates with the same result under call-by-name. We propose a technique for stating and proving properties like these. The key ingredient is Levy's call-by-push-value calculus, which we use as a framework for reasoning about evaluation orders. We show that the call-by-value and call-by-name translations of expressions into call-by-push-value have related observable behaviour under certain conditions on computational effects, which we identify. We then use this fact to construct maps between the call-by-value and call-by-name interpretations of types, and identify further properties of effects that imply these maps form a Galois connection. These properties hold for some computational effects (such as divergence), but not others (such as mutable state). This gives rise to a general reasoning principle that relates call-by-value and call-by-name. We apply the reasoning principle to example computational effects including divergence and nondeterminism.
Dylan McDermott, Alan Mycroft
Log. Methods Comput. Sci.2
2022 Galois Connecting Call-by-Value and Call-by-Name
abstract
We establish a general framework for reasoning about the relationship between call-by-value and call-by-name. In languages with side-effects, call-by-value and call-by-name executions of programs often have different, but related, observable behaviours. For example, if a program might diverge but otherwise has no side-effects, then whenever it terminates under call-by-value, it terminates with the same result under call-by-name. We propose a technique for stating and proving these properties. The key ingredient is Levy’s call-by-push-value calculus, which we use as a framework for reasoning about evaluation orders. We construct maps between the call-by-value and call-by-name interpretations of types. We then identify properties of side-effects that imply these maps form a Galois connection. These properties hold for some side-effects (such as divergence), but not others (such as mutable state). This gives rise to a general reasoning principle that relates call-by-value and call-by-name. We apply the reasoning principle to example side-effects including divergence and nondeterminism.
Dylan McDermott, Alan Mycroft
FSCD2
2021 Source code patches from dynamic analysis
abstract
Dynamic analysis can identify improvements to programs that cannot feasibly be identified by static analysis; concurrency improvements are a motivating example. However, mapping these dynamic-analysis-based improvements back to patch-like source-code changes is non-trivial. We describe a system, Scopda, for generating source-code patches for improvements identified by execution-trace-based dynamic analysis. Scopda uses a graph-based static program representation (abstract program graph, APG), containing inter-procedural control flow and local data flow information, to analyse and transform static source-code. We demonstrate Scopda's ability to generate sensible source code patches for Java programs, though it is fundamentally language agnostic.
Indigo Orton, Alan Mycroft
FTfJP@ECOOP2
2021 Refactoring traces to identify concurrency improvements
abstract
It is often difficult to analyse why a program executes more slowly than intended. This is particularly true for concurrent programs. We describe and evaluate a system, Rehype, which takes Java programs, performs low-overhead tracing of method calls, analyses the resulting trace-logs to detect inefficient uses of concurrency constructs, and suggests source-code-oriented improvements. Rehype deals with task-based concurrency, specifically a future-based model of tasks. Implementing the suggested improvements on an industrial API server more than doubled request-processing throughput.
Indigo Orton, Alan Mycroft
FTfJP@ECOOP2
2021 ParaDox: Eliminating Voltage Margins via Heterogeneous Fault Tolerance
abstract
Providing reliability is becoming a challenge for chip manufacturers, faced with simultaneously trying to improve miniaturization, performance and energy efficiency. This leads to very large margins on voltage and frequency, designed to avoid errors even in the worst case, along with significant hardware expenditure on eliminating voltage spikes and other forms of transient error, causing considerable inefficiency in power consumption and performance. We flip traditional ideas about reliability and performance around, by exploring the use of error resilience for power and performance gains. ParaMedic is a recent architecture that provides a solution for reliability with low overheads via automatic hardware error recovery. It works by splitting up checking onto many small cores in a heterogeneous multicore system with hardware logging support. However, its design is based on the idea that errors are exceptional. We transform ParaMedic into ParaDox, which shows high performance in both error-intensive and scarce-error scenarios, thus allowing correct execution even when undervolted and overclocked. Evaluation within error-intensive simulation environments confirms the error resilience of ParaDox and the low associated recovery cost. We estimate that compared to a non-resilient system with margins, ParaDox can reduce energy-delay product by 15% through undervolting, while completely recovering from any induced errors.
Sam Ainsworth 0001, Lionel Zoubritzky, Alan Mycroft, Timothy M. Jones 0001
HPCA3
2021 Tracing and its observer effect on concurrency
abstract
Execution tracing has an observer effect: the act of tracing perturbs program behaviour via its overhead, which can in turn affect the accuracy of subsequent dynamic analysis. We investigate this observer effect in the context of concurrent behaviour within JVM-based programs. Concurrent behaviour is especially fragile as task-scheduling ordering can change, which could even lead to deadlock via thread starvation under certain conditions. We analyse three dimensions of overhead, compute volume, memory volume, and uniformity, using a configurable-overhead tracer and a concurrency-performance analyser. We argue that uniformity is a key, and underappreciated, dimension of overhead that can have qualitative effects on program behaviour. Experimental results show that overhead significantly affects real-world concurrent behaviour and subsequent analysis, at times unintuitively.
Indigo Orton, Alan Mycroft
MPLR2
2020 Data-Flow Analyses as Effects and Graded Monads
abstract
In static analysis, two frameworks have been studied extensively: monotone data-flow analysis and type-and-effect systems. Whilst both are seen as general analysis frameworks, their relationship has remained unclear. Here we show that monotone data-flow analyses can be encoded as effect systems in a uniform way, via algebras of transfer functions. This helps to answer questions about the most appropriate structure for general effect algebras, especially with regards capturing control-flow precisely. Via the perspective of capturing data-flow analyses, we show the recent suggestion of using effect quantales is not general enough as it excludes non-distributive analyses e.g., constant propagation. By rephrasing the McCarthy transformation, we then model monotone data-flow effects via graded monads. This provides a model of data-flow analyses that can be used to reason about analysis correctness at the semantic level, and to embed data-flow analyses into type systems.
Andrej Ivaskovic, Alan Mycroft, Dominic A. Orchard
FSCD2
2020 Generalized Points-to Graphs: A Precise and Scalable Abstraction for Points-to Analysis
abstract
Computing precise (fully flow- and context-sensitive) and exhaustive (as against demand-driven) points-to information is known to be expensive. Top-down approaches require repeated analysis of a procedure for separate contexts. Bottom-up approaches need to model unknown pointees accessed indirectly through pointers that may be defined in the callers and hence do not scale while preserving precision. Therefore, most approaches to precise points-to analysis begin with a scalable but imprecise method and then seek to increase its precision. We take the opposite approach in that we begin with a precise method and increase its scalability. In a nutshell, we create naive but possibly non-scalable procedure summaries and then use novel optimizations to compact them while retaining their soundness and precision. For this purpose, we propose a novel abstraction called the generalized points-to graph (GPG), which views points-to relations as memory updates and generalizes them using the counts of indirection levels leaving the unknown pointees implicit. This allows us to construct GPGs as compact representations of bottom-up procedure summaries in terms of memory updates and control flow between them. Their compactness is ensured by strength reduction (which reduces the indirection levels), control flow minimization (which removes control flow edges while preserving soundness and precision), and call inlining (which enhances the opportunities of these optimizations). The effectiveness of GPGs lies in the fact that they discard as much control flow as possible without losing precision. This is the reason GPGs are very small even for main procedures that contain the effect of the entire program. This allows our implementation to scale to 158 kLoC for C programs. At a more general level, GPGs provide a convenient abstraction to represent and transform memory in the presence of pointers. Future investigations can try to combine it with other abstractions for static analyses that can benefit from points-to information.
Pritam M. Gharat, Uday P. Khedker, Alan Mycroft
ACM Trans. Program. Lang. Syst.3
2019 Extended Call-by-Push-Value: Reasoning About Effectful Programs and Evaluation Order
abstract
Traditionally, reasoning about programs under varying evaluation regimes (call-by-value, call-by-name etc.) was done at the meta-level, treating them as term rewriting systems. Levy’s call-by-push-value (CBPV) calculus provides a more powerful approach for reasoning, by treating CBPV terms as a common intermediate language which captures both call-by-value and call-by-name, and by allowing equational reasoning about changes to evaluation order between or within programs. We extend CBPV to additionally deal with call-by-need, which is non-trivial because of shared reductions. This allows the equational reasoning to also support call-by-need. As an example, we then prove that call-by-need and call-by-name are equivalent if nontermination is the only side-effect in the source language. We then show how to incorporate an effect system. This enables us to exploit static knowledge of the potential effects of a given expression to augment equational reasoning; thus a program fragment might be invariant under change of evaluation regime only because of knowledge of its effects.
Dylan McDermott, Alan Mycroft
ESOP2
2017 Polymorphism, subtyping, and type inference in MLsub
abstract
We present a type system combining subtyping and ML-style parametric polymorphism. Unlike previous work, our system supports type inference and has compact principal types. We demonstrate this system in the minimal language MLsub, which types a strict superset of core ML programs.
Stephen Dolan, Alan Mycroft
POPL2
2016 Flow- and Context-Sensitive Points-To Analysis Using Generalized Points-To Graphs
Pritam M. Gharat, Uday P. Khedker, Alan Mycroft
SAS3
2015 Source-code queries with graph databases - with application to programming language usage and evolution
Raoul-Gabriel Urma, Alan Mycroft
Sci. Comput. Program.2
2014 Liveness-Based Garbage Collection
Rahul Asati, Amitabha Sanyal, Amey Karkare, Alan Mycroft
CC4
2014 Coeffects: a calculus of context-dependent computation
abstract
The notion of context in functional languages no longer refers just to variables in scope. Context can capture additional properties of variables (usage patterns in linear logics; caching requirements in dataflow languages) as well as additional resources or properties of the execution environment (rebindable resources; platform version in a cross-platform application). The recently introduced notion of coeffects captures the latter, whole-context properties, but it failed to capture fine-grained per-variable properties.
Tomas Petricek 0001, Dominic A. Orchard, Alan Mycroft
ICFP3
2013 Dynamic Alias Protection with Aliasing Contracts
Janina Voigt, Alan Mycroft
APLAS2
2013 Coeffects: Unified Static Analysis of Context-Dependence
Tomas Petricek 0001, Dominic A. Orchard, Alan Mycroft
ICALP (2)3
2013 Rendezvous: a search engine for binary code
abstract
The problem of matching between binaries is important for software copyright enforcement as well as for identifying disclosed vulnerabilities in software. We present a search engine prototype called Rendezvous which enables indexing and searching for code in binary form. Rendezvous identifies binary code using a statistical model comprising instruction mnemonics, control flow sub-graphs and data constants which are simple to extract from a disassembly, yet normalising with respect to different compilers and optimisations. Experiments show that Rendezvous achieves F2measures of 86.7% and 83.0% on the GNU C library compiled with different compiler optimisations and the GNU coreutils suite compiled with gcc and clang respectively. These two code bases together comprise more than one million lines of code. Rendezvous will bring significant changes to the way patch management and copyright enforcement is currently performed.
Wei Ming Khoo, Alan Mycroft, Ross J. Anderson
MSR2
2013 Concise Analysis Using Implication Algebras for Task-Local Memory Optimisation
Leo White, Alan Mycroft
SAS2
2012 Schedulability Analysis Abstractions for Safety Critical Java
abstract
We present a compositional approach to schedulability analysis of safety-critical Java programs. We introduce a specification language in order to write abstract behavioural specifications regarding task execution-time and use of resources. Schedulability is checked on a model composed of the abstract specifications, possibly before any implementation, and as the specifications are implemented, these implementations can be checked individually. This means that library routines potentially can be separately checked and reused, and individual tasks can be verified according to their specifications without performing the full-system-analysis.
Thomas Bøgholm, Bent Thomsen, Kim G. Larsen, Alan Mycroft
ISORC4
2012 Control Flow Analysis for the Join Calculus
Peter Calvert, Alan Mycroft
SAS2
2012 Liveness-Based Pointer Analysis
Uday P. Khedker, Alan Mycroft, Prashant Singh Rawat
SAS2
2011 Petri-nets as an Intermediate Representation for Heterogeneous Architectures
Peter Calvert, Alan Mycroft
Euro-Par (2)2
2011 Extending monads with pattern matching
abstract
Sequencing of effectful computations can be neatly captured using monads and elegantly written using do notation. In practice such monads often allow additional ways of composing computations, which have to be written explicitly using combinators.
Tomas Petricek 0001, Alan Mycroft, Don Syme
Haskell2
2010 Estimating and Exploiting Potential Parallelism by Source-Level Dependence Profiling
Jonathan Chee Heng Mak, Karl-Filip Faxén, Sverker Janson, Alan Mycroft
Euro-Par (1)4
2010 Formally Efficient Program Instrumentation
Boris Feigin, Alan Mycroft
RV2
2010 Strictness Meets Data Flow
Tom Schrijvers, Alan Mycroft
SAS2
2009 Logical Testing
Kathryn E. Gray, Alan Mycroft
FASE2
2009 A new approach to parallelising tracing algorithms
abstract
Tracing algorithms visit reachable nodes in a graph and are central to activities such as garbage collection, marshalling etc. Traditional sequential algorithms use a worklist, replacing a nodes with their unvisited children. Previous work on parallel tracing is processor-oriented in associating one worklist per processor: worklist inser-tion and removal requires no locking, and load balancing requires only occasional locking. However, since multiple queues may con-tain the same node, significant locking is necessary to avoid con-current visits by competing processors. This paper presents a memory-oriented solution: memory is par-titioned into segments and each segment has its own worklist con-taining only nodes in that segment. At a given time at most one pro-cessor owns a given worklist. By arranging separate single-reader-single-writer forwarding queues to pass nodes from processor i to processor j we can process objects in an order that gives lock-free mainline code and improved locality of reference. This refactoring is analogous to the way in which a compiler changes an iteration space to eliminate data dependencies. While it is clear that our solution can be more effective on NUMA systems, and even necessary when processor-local memory may not be addressed from other processors, slightly surprisingly, it often gives significantly better speed-up on modern multi-cores architectures too. Using caches to hide memory latency loses much of its effectiveness when there is significant cross-processor mem-ory contention or when locking is necessary.
Cosmin E. Oancea, Alan Mycroft, Stephen M. Watt
ISMM2
2009 A lightweight in-place implementation for software thread-level speculation
abstract
Thread-level speculation (TLS) is a technique that allows parts of a sequential program to be executed in parallel. TLS ensures the parallel program’s behaviour remains true to the language’s original sequential semantics; for example, allowing multiple iterations of a loop to run in parallel if there are no conflicts between them. Conventional software-TLS algorithms detect conflicts dynamically. They suffer from a number of problems. TLS implementations can impose large storage overheads caused by buffering speculative work. TLS implementations can offer disappointing scalability, if threads can only commit speculative work back to the “real ” heap sequentially. TLS implementations can be slow because speculative reads must consult look-aside tables to see earlier speculative writes, or because speculative operations replace normal reads and writes with expensive synchronisation primitives (e.g. CAS or memory fences). We present a streamlined software-TLS algorithm for mostlyparallel loops that aims to avoid these problems. We allow speculative work to be performed in place, so we avoid buffering, and so that reads naturally see earlier writes. We avoid needing a serialcommit protocol. We avoid the need for CAS or memory fences in common operations. We strive to reduce the size of TLS-related conflict-detection state, and to interact well with typical data-cache implementations. We evaluate our implementation on off-the-shelf hardware using seven applications from SciMark2, BYTEmark and JOlden. We achieve an average 77 % of the speed-up of manuallyparallelized versions of the benchmarks for fully parallel loops. We achieve a maximum of a 5.8x speed-up on an 8-core machine.
Cosmin E. Oancea, Alan Mycroft, Tim Harris 0001
SPAA2
2008 Kilim: Isolation-Typed Actors for Java
Sriram Srinivasan 0002, Alan Mycroft
ECOOP2
2008 Language-Based Optimisation of Sensor-Driven Distributed Computing Applications
Jonathan J. Davies, Alastair R. Beresford, Alan Mycroft
FASE3
2008 Jones optimality and hardware virtualization: a report on work in progress
abstract
The growing popularity of hardware virtualization (VMware and Xen being two prominent implementations) leads us to examine the common ground between this yet-again vibrant technology and partial evaluation. A virtual machine executes on host hardware and presents to its guest program a replica of that host environment, complete with CPU, memory, and I/O devices. A virtual machine can be seen as a self-interpreter.
Boris Feigin, Alan Mycroft
PEPM2
2007 A Lightweight Model for Software Thread-Level Speculation (TLS)
Cosmin E. Oancea, Alan Mycroft
PACT2
2007 Delayed Side-Effects Ease Multi-core Programming
Anton Lokhmotov, Alan Mycroft, Andrew Richards
Euro-Par2
2007 Choosing Method of the Most Effective Nested Loop Shearing for Parallelism
abstract
Our loop parallelizing method of compiler for SIMD architecture enables SIMD instructions to be generated from loops which include complicated data dependency. The characteristic of our method is in choosing the more optimising method for parallelization from two shearing conversions by inner and outer loop carried data dependences. One of them is novel and involves shearing horizontally along the inner loop index and the other is well-established shearing vertically along the outer loop index. These loop transformations are formalized by matrix operations. They enable the original loop indexes to be expressed using new loop indexes so that compiler does not need to make any change in loop body. At this point, simple templates suffice to generate optimal code. To conclude we summarize the conditions for choosing suitable shearing method and the requirements for conversion.
Kyoko Iwasawa, Alan Mycroft
PDCAT2
2007 Programming Language Design and Analysis Motivated by Hardware Evolution
Alan Mycroft
SAS1
2007 Optimal bit-reversal using vector permutations
abstract
We have developed a bit-reversal algorithm (BRAVO) using vector permute operations, which is optimal in the number of permutations, and its cache-optimal version (COBRAVO). Our implementation on PowerMac G5 shows 2-4.5 fold improvement for small data sets and 15-75% improvement for large data sets (depending on the data element size) over the best known approach (COBRA).
Anton Lokhmotov, Alan Mycroft
SPAA2
2007 Abstract interpretation of combinational asynchronous circuits
Sarah Thompson, Alan Mycroft
Sci. Comput. Program.2
2006 Haskell Is Not Not ML
Ben Rudiak-Gould, Alan Mycroft, Simon L. Peyton Jones
ESOP2
2006 Bit-level partial evaluation of synchronous circuits
abstract
Partial evaluation has been known for some time to be very effective when applied to software; in this paper we demonstrate that it can also be usefully applied to hardware. We present a bit-level algorithm that supports the offline partial evaluation of synchronous digital circuits. Full PE of combinational logic is noted to be equivalent to Boolean minimisation. A loop unrolling technique, supporting both partial and full unrolling, is described. Experimental results are given, showing that partial evaluation of a simple micro-processor against a ROM image is equivalent to compiling the ROM program directly into low level hardware.
Sarah Thompson, Alan Mycroft
PEPM2
2005 Task Partitioning for Multi-core Network Processors
Robert Ennals, Richard Sharp, Alan Mycroft
CC3
2004 Using Multiple Memory Access Instructions for Reducing Code Size
Neil Johnson 0002, Alan Mycroft
CC2
2004 Overhead-Free Polymorphism in Network-on-Chip Implementation of Object-Oriented Models
abstract
We unify virtual-method despatch (polymorphism implementation) and network packet-routing operations; virtual-method calls correspond to network packets, and network addresses are allocated such that routing the packet corresponds to dispatching the call. As the run-time routing structure is inherent in network-on-chip platforms, this unification implements polymorphism for free.
Maziar Goudarzi, Shaahin Hessabi, Alan Mycroft
DATE3
2004 Linear Types for Packet Processing
Robert Ennals, Richard Sharp, Alan Mycroft
ESOP3
2004 Abstract Interpretation of Combinational Asynchronous Circuits
Sarah Thompson, Alan Mycroft
SAS2
2003 Combined Code Motion and Register Allocation Using the Value State Dependence Graph
Neil Johnson 0002, Alan Mycroft
CC2
2003 Spatial Security Policies for Mobile Agents in a Sentient Computing Environment
David J. Scott, Alastair R. Beresford, Alan Mycroft
FASE3
2003 Object-Oriented ASIP Design and Synthesis
Maziar Goudarzi, Shaahin Hessabi, Alan Mycroft
FDL3
2003 Bidirectional data flow analysis for type inferencing
Uday P. Khedker, Dhananjay M. Dhamdhere, Alan Mycroft
Comput. Lang. Syst. Struct.3
2003 Higher-level techniques for hardware description and synthesis
Alan Mycroft, Richard Sharp
Int. J. Softw. Tools Technol. Transf.1
2001 Soft Scheduling for Hardware
Richard Sharp, Alan Mycroft
SAS2
2001 Hardware/Software Co-Design Using Functional Languages
Alan Mycroft, Richard Sharp
TACAS1
2000 A Statically Allocated Parallel Functional Language
Alan Mycroft, Richard Sharp
ICALP1
1999 Type-Based Decompilation (or Program Reconstruction via Type Reconstruction)
Alan Mycroft
ESOP1
1995 Untyped Strictness Analysis
abstract
Abstract We re-express Hudak and Young's higher-order strictness analysis for the untyped λ-calculus in a conceptually simpler and more semantically-based manner. We show our analysis to be a sound abstraction of Hudak and Young's which is also complete in a sense we make precise.
Christine Ernoult, Alan Mycroft
J. Funct. Program.2
1993 Completeness and predicate-based abstract interpretation
abstract
Traditionally, the theory of abstract interpretation has concentrated on the study of when one interpretation is sound (also safe or correct) with respect to another. We consider the dual notion of when one interpretation is complete with respect to another. Under the usual formulation of abstract interpretation, undecidability in general implies that a finitely computable sound abstraction of the standard interpretation is not complete. (For example, if we simplify 643 * (-192) to (+) * (-) using the “rule of signs” we cannot expect to retrieve -123456 from the resulting (1), even though we are certain that the result is negative.) Based on the idea that compilers can only depend on a finite number of program properties, we augment interpretations with predicate symbols specifying properties of interest (thereby replacing algebraic interpretations with logic interpretations). Interpretation J being sound (resp. complete) with respect to I is now phrased as “all questions (formulae) yielding true for J (resp. I) also yield true for I (resp. J)”.The traditional “rule of signs” turns out to be sound and complete for multiplication but only sound for addition.Sometimes abstract interpretations have spurious domain elements. The state minimisation algorithm for finite deterministic automata can be used to produce a canonical (simplest) abstract interpretation which is sound and complete with respect to any given finite abstract interpretation but possibly simpler to compute.A homomorphism always yields a sound and complete abstraction. Moreover, we show that a sound and complete abstraction map is not necessarily a homomorphism, but its composition with the natural map to the canonical interpretation is a homomorphism,One side-effect of our formulation of abstract interpretation is that it de-emphasises the ordering on the abstract domain which is relegated to an (optional) proof basis.
Alan Mycroft
PEPM1
1991 Uniform Ideals and Strictness Analysis
Christine Ernoult, Alan Mycroft
ICALP2
1986 Data Flow Analysis of Applicative Programs Using Minimal Function Graphs
abstract
Data or program flow analysis is concerned with the static analysis of programs, to obtain as much information as possible about their possible run time behavior without actually having to run the programs. Due to the unsolvability of the halting problem (and nearly any other question concerning program behavior), such analyses are necessarily only approximate whenever the analysis algorithm is guaranteed to terminate. Further, exact analysis may be impossible due to the lack of knowledge of input data values, so the analysis can at best yield information about sets of possible computations.
Neil D. Jones, Alan Mycroft
POPL2
1984 On the Relationship of CCS and Petri Nets
Ursula Goltz, Alan Mycroft
ICALP2
1984 Logic Programs and Many-Valued Logic
Alan Mycroft
STACS1
1984 A Polymorphic Type System for Prolog
Alan Mycroft, Richard A. O'Keefe
Artif. Intell.1
1983 Strong Abstract Interpretation Using Power Domains (Extended Abstract)
Alan Mycroft, Flemming Nielson
ICALP1