VLDB 2026 Research / reviewers in the wild / expert
Manuel V. Hermenegildo
dblp:h/ManuelVHermenegildo
· DBLP profile ↗
147ranked-venue papers
23as first author
15since 2021 · last 2026
0000-0002-7583-323XORCID · verified
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 131 · 16 first-author · 15 since 2021Theory of computation · 65 · 12 first-author · 3 since 2021Systems, architecture and hardware · 8 · 5 first-authorArtificial intelligence and machine learning · 5
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2026 | Multi-configurable Search Rules in Prolog and Application to Testing
Daniela Ferreiro, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
PADL | 4 |
| 2026 | Abstractions of sequences, functions and operatorsabstractAbstract We present theoretical and practical results on the order theory of lattices of functions, focusing on Galois connections that abstract (sets of) functions – a topic known as higher-order abstract interpretation . We are motivated by the challenge of inferring closed-form bounds on functions which are defined recursively, i.e. as the fixed point of an operator or, equivalently, as the solution to a functional equation. This has multiple applications in program analysis (e.g. cost analysis, loop acceleration, declarative language analysis) and in hybrid systems governed by differential equations. Our main contribution is a new family of constraint-based abstract domains for abstracting numerical functions, $\mathfrak {B}$ B -bound domains , which abstract a function $f$ f by a conjunction of bounds from a preselected set of boundary functions. They allow inferring highly non-linear numerical invariants , which classical numerical abstract domains struggle with. We uncover a convexity property in the constraint space that simplifies, and, in some cases, fully automates , transfer function design. We also introduce domain abstraction , a functor that lifts arbitrary mappings in value space to Galois connections in function space. This supports abstraction from symbolic to numerical functions (i.e. size abstraction ), and enables dimensionality reduction of equations. We base our constructions of transfer functions on a simple operator language , starting with sequences , and extending to more general functions , including multivariate, piecewise, and non-discrete domains. Louis Rustenholz, Pedro López-García 0001, Manuel V. Hermenegildo |
Int. J. Softw. Tools Technol. Transf. | 3 |
| 2025 | Extending the FSyntax/Hiord Approach with Imperative Notation
Paula Corral, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
LOPSTR | 4 |
| 2025 | Hiord $^{{\kern2pt}\sharp}$ : An Approach to the Specification and Verification of Higher-Order (C)LP ProgramsabstractAbstract Higher-order constructs enable more expressive and concise code by allowing procedures to be parameterized by other procedures. Assertions allow expressing partial program specifications, which can be verified either at compile time (statically) or run time (dynamically). In higher-order programs, assertions can also describe higher-order arguments. While in the context of (constraint) logic programming ((C)LP), run-time verification of higher-order assertions has received some attention, compile-time verification remains relatively unexplored. We propose a novel approach for statically verifying higher-order (C)LP programs with higher-order assertions. Although we use the Ciao assertion language for illustration, our approach is quite general, and we believe is applicable to similar contexts. Higher-order arguments are described using predicate properties – a special kind of property which exploits the ( Ciao ) assertion language. We refine the syntax and semantics of these properties and introduce an abstract criterion to determine conformance to a predicate property at compile time, based on a semantic order relation comparing the predicate property with the predicate assertions. We then show how to handle these properties using an abstract interpretation-based static analyzer for programs with first-order assertions by reducing predicate properties to first-order properties. Finally, we report on a prototype implementation and evaluate it through various examples within the Ciao system. Marco Ciccalè, Daniel Jurjo-Rivas, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 5 |
| 2025 | Checkification: A Practical Approach for Testing Static Analysis TruthsabstractAbstract Static analysis is an essential component of many modern software development tools. Unfortunately, the ever-increasing complexity of static analyzers makes their coding error-prone. Even analysis tools based on rigorous mathematical techniques, such as abstract interpretation, are not immune to bugs. Ensuring the correctness and reliability of software analyzers is critical if they are to be inserted in production compilers and development environments. While compiler validation has seen notable success, formal validation of static analysis tools remains relatively unexplored. In this paper we present checkification , a simple, automatic method for testing static analyzers. Broadly, it consists in checking, over a suite of benchmarks, that the properties inferred statically are satisfied dynamically. The main advantage of our approach lies in its simplicity, which stems directly from framing it within the Ciao assertion-based validation framework, and its blended static/dynamic assertion checking approach. We demonstrate that in this setting, the analysis can be tested with little effort by combining the following components already present in the framework: 1) the static analyzer , which outputs its results as the original program source with assertions interspersed; 2) the assertion run-time checking mechanism, which instruments a program to ensure that no assertion is violated at run time; 3) the random test case generator , which generates random test cases satisfying the properties present in assertion preconditions; and 4) the unit-test framework , which executes those test cases. We have applied our approach to the CiaoPP static analyzer, resulting in the identification of many bugs with reasonable overhead. Most of these bugs have been either fixed or confirmed, helping us detect a range of errors not only related to analysis soundness but also within other aspects of the framework. Daniela Ferreiro, Ignacio Casso, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 5 |
| 2024 | An Order Theory Framework of Recurrence Equations for Static Cost Analysis - Dynamic Inference of Non-Linear Inequality Invariants
Louis Rustenholz, Pedro López-García 0001, José F. Morales 0001, Manuel V. Hermenegildo |
SAS | 4 |
| 2024 | Abstract Environment TrimmingabstractAbstract Variable sharing is a fundamental property in the static analysis of logic programs, since it is instrumental for ensuring correctness and increasing precision while inferring many useful program properties. Such properties include modes, determinacy, non-failure, cost, etc. This has motivated significant work on developing abstract domains to improve the precision and performance of sharing analyses. Much of this work has centered around the family of set-sharing domains, because of the high precision they offer. However, this comes at a price: their scalability to a wide set of realistic programs remains challenging and this hinders their wider adoption. In this work, rather than defining new sharing abstract domains, we focus instead on developing techniques which can be incorporated in the analyzers to address aspects that are known to affect the efficiency of these domains, such as the number of variables, without affecting precision. These techniques are inspired in others used in the context of compiler optimizations, such as expression reassociation and variable trimming. We present several such techniques and provide an extensive experimental evaluation of over 1100 program modules taken from both production code and classical benchmarks. This includes the Spectector cache analyzer, the s(CASP) system, the libraries of the Ciao system, the LPdoc documenter, the PLAI analyzer itself, etc. The experimental results are quite encouraging: we have obtained significant speedups, and, more importantly, the number of modules that require a timeout was cut in half. As a result, many more programs can be analyzed precisely in reasonable times. Daniel Jurjo-Rivas, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 4 |
| 2023 | Transforming Big-Step to Small-Step Semantics Using Interpreter Specialisation
John P. Gallagher, Manuel V. Hermenegildo, José F. Morales 0001, Pedro López-García 0001 |
LOPSTR | 2 |
| 2023 | A Rule-Based Approach for Designing and Composing Abstract Domains
Daniel Jurjo-Rivas, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
LOPSTR | 4 |
| 2022 | Analysis and Transformation of Constrained Horn Clauses for Program VerificationabstractAbstract This paper surveys recent work on applying analysis and transformation techniques that originate in the field of constraint logic programming (CLP) to the problem of verifying software systems. We present specialization-based techniques for translating verification problems for different programming languages, and in general software systems, into satisfiability problems for constrained Horn clauses (CHCs), a term that has become popular in the verification field to refer to CLP programs. Then, we describe static analysis techniques for CHCs that may be used for inferring relevant program properties, such as loop invariants. We also give an overview of some transformation techniques based on specialization and fold/unfold rules, which are useful for improving the effectiveness of CHC satisfiability tools. Finally, we discuss future developments in applying these techniques. Emanuele De Angelis, Fabio Fioravanti, John P. Gallagher, Manuel V. Hermenegildo, Alberto Pettorossi, Maurizio Proietti |
Theory Pract. Log. Program. | 4 |
| 2022 | Parallel Logic Programming: A SequelabstractAbstract Multi-core and highly connected architectures have become ubiquitous, and this has brought renewed interest in language-based approaches to the exploitation of parallelism. Since its inception, logic programming has been recognized as a programming paradigm with great potential for automated exploitation of parallelism. The comprehensive survey of the first twenty years of research in parallel logic programming, published in 2001, has served since as a fundamental reference to researchers and developers. The contents are quite valid today, but at the same time the field has continued evolving at a fast pace in the years that have followed. Many of these achievements and ongoing research have been driven by the rapid pace of technological innovation, that has led to advances such as very large clusters, the wide diffusion of multi-core processors, the game-changing role of general-purpose graphic processing units, and the ubiquitous adoption of cloud computing. This has been paralleled by significant advances within logic programming, such as tabling, more powerful static analysis and verification, the rapid growth of Answer Set Programming, and in general, more mature implementations and systems. This survey provides a review of the research in parallel logic programming covering the period since 2001, thus providing a natural continuation of the previous survey. In order to keep the survey self-contained, it restricts its attention to parallelization of the major logic programming languages (Prolog, Datalog, Answer Set Programming) and with an emphasis on automated parallelization and preservation of the sequential observable semantics of such languages. The goal of the survey is to serve not only as a reference for researchers and developers of logic programming systems but also as engaging reading for anyone interested in logic and as a useful source for researchers in parallel systems outside logic programming. Agostino Dovier, Andrea Formisano 0001, Gopal Gupta 0001, Manuel V. Hermenegildo, Enrico Pontelli, Ricardo Rocha 0001 |
Theory Pract. Log. Program. | 4 |
| 2022 | Fifty Years of Prolog and BeyondabstractAbstract Both logic programming in general and Prolog in particular have a long and fascinating history, intermingled with that of many disciplines they inherited from or catalyzed. A large body of research has been gathered over the last 50 years, supported by many Prolog implementations. Many implementations are still actively developed, while new ones keep appearing. Often, the features added by different systems were motivated by the interdisciplinary needs of programmers and implementors, yielding systems that, while sharing the “classic” core language, in particular, the main aspects of the ISO-Prolog standard, also depart from each other in other aspects. This obviously poses challenges for code portability. The field has also inspired many related, but quite different languages that have created their own communities. This article aims at integrating and applying the main lessons learned in the process of evolution of Prolog. It is structured into three major parts. First, we overview the evolution of Prolog systems and the community approximately up to the ISO standard, considering both the main historic developments and the motivations behind several Prolog implementations, as well as other logic programming languages influenced by Prolog. Then, we discuss the Prolog implementations that are most active after the appearance of the standard: their visions, goals, commonalities, and incompatibilities. Finally, we perform a SWOT analysis in order to better identify the potential of Prolog and propose future directions along with which Prolog might continue to add useful features, interfaces, libraries, and tools, while at the same time improving compatibility between implementations. Philipp Koerner, Michael Leuschel, João Barbosa, Vítor Santos Costa, Verónica Dahl, Manuel V. Hermenegildo, José F. Morales 0001, Jan Wielemaker, Daniel Diaz 0001, Salvador Abreu |
Theory Pract. Log. Program. | 6 |
| 2021 | Incremental and Modular Context-sensitive AnalysisabstractAbstract Context-sensitive global analysis of large code bases can be expensive, which can make its use impractical during software development. However, there are many situations in which modifications are small and isolated within a few components, and it is desirable to reuse as much as possible previous analysis results. This has been achieved to date through incremental global analysis fixpoint algorithms that achieve cost reductions at fine levels of granularity, such as changes in program lines. However, these fine-grained techniques are neither directly applicable to modular programs nor are they designed to take advantage of modular structures. This paper describes, implements, and evaluates an algorithm that performs efficient context-sensitive analysis incrementally on modular partitions of programs. The experimental results show that the proposed modular algorithm shows significant improvements, in both time and memory consumption, when compared to existing non-modular, fine-grain incremental analysis techniques. Furthermore, thanks to the proposed intermodular propagation of analysis information, our algorithm also outperforms traditional modular analysis even when analyzing from scratch. Isabel Garcia-Contreras, José F. Morales 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 3 |
| 2021 | A general framework for static profiling of parametric resource usage - CORRIGENDUM
Pedro López-García 0001, Maximiliano Klemen, Umer Liqat, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 4 |
| 2021 | VeriFly: On-the-fly Assertion Checking via IncrementalityabstractAbstract Assertion checking is an invaluable programmer’s tool for finding many classes of errors or verifying their absence in dynamic languages such as Prolog. For Prolog programmers, this means being able to have relevant properties, such as modes, types, determinacy, nonfailure, sharing, constraints, and cost, checked and errors flagged without having to actually run the program. Such global static analysis tools are arguably most useful the earlier they are used in the software development cycle, and fast response times are essential for interactive use. Triggering a full and precise semantic analysis of a software project every time a change is made can be prohibitively expensive. This is specially the case when complex properties need to be inferred for large, realistic code bases. In our static analysis and verification framework, this challenge is addressed through a combination of modular and incremental (context- and path-sensitive) analysis that is responsive to program edits, at different levels of granularity. In this tool paper, we present how the combination of this framework within an integrated development environment (IDE) takes advantage of such incrementality to achieve a high level of reactivity when reflecting analysis and verification results back as colorings and tooltips directly on the program text – the tool’s VeriFly mode. The concrete implementation that we describe is Emacs-based and reuses in part off-the-shelf “on-the-fly” syntax checking facilities (flycheck). We believe that similar extensions are also reproducible with low effort in other mature development environments. Our initial experience with the tool shows quite promising results, with low latency times that provide early, continuous, and precise assertion checking and other semantic feedback to programmers during the development process. The tool supports Prolog natively, as well as other languages by semantic transformation into Horn clauses. Miguel A. Sanchez-Ordaz, Isabel Garcia-Contreras, Victor Perez 0001, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 6 |
| 2020 | Testing Your (Static Analysis) Truths
Ignacio Casso, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
LOPSTR | 4 |
| 2020 | Cost Analysis of Smart Contracts Via Parametric Resource Analysis
Victor Perez 0001, Maximiliano Klemen, Pedro López-García 0001, José F. Morales 0001, Manuel V. Hermenegildo |
SAS | 5 |
| 2020 | Preface
Manuel V. Hermenegildo, Pedro López-García 0001, Alberto Pettorossi, Maurizio Proietti |
Fundam. Informaticae | 1 |
| 2019 | Computing Abstract Distances in Logic Programs
Ignacio Casso, José F. Morales 0001, Pedro López-García 0001, Roberto Giacobazzi, Manuel V. Hermenegildo |
LOPSTR | 5 |
| 2019 | An Integrated Approach to Assertion-Based Random Testing in Prolog
Ignacio Casso, José F. Morales 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
LOPSTR | 4 |
| 2019 | Incremental Analysis of Logic Programs with Assertions and Open Predicates
Isabel Garcia-Contreras, José F. Morales 0001, Manuel V. Hermenegildo |
LOPSTR | 3 |
| 2019 | A General Framework for Static Cost Analysis of Parallel Logic Programs
Maximiliano Klemen, Pedro López-García 0001, John P. Gallagher, José F. Morales 0001, Manuel V. Hermenegildo |
LOPSTR | 5 |
| 2018 | Multivariant Assertion-Based Guidance in Abstract Interpretation
Isabel Garcia-Contreras, José F. Morales 0001, Manuel V. Hermenegildo |
LOPSTR | 3 |
| 2018 | Exploiting Term Hiding to Reduce Run-Time Checking Overhead
Nataliia Stulova, José F. Morales 0001, Manuel V. Hermenegildo |
PADL | 3 |
| 2018 | Static Performance Guarantees for Programs with Runtime ChecksabstractInstrumenting programs for performing runtime checking of properties, such as regular shapes, is a common and useful technique that helps programmers detect incorrect program behaviors. This is specially true in dynamic languages such as Prolog. However, such runtime checks inevitably introduce runtime overhead (in execution time, memory, energy, etc.). Several approaches have been proposed for reducing this overhead, such as eliminating the checks that can statically be proved to always succeed, and/or optimizing the way in which the (remaining) checks are performed. However, there are cases in which it is not possible to remove all checks statically (e.g., open libraries which must check their interfaces, complex properties, unknown code, etc.) and in which, even after optimizations, these remaining checks may still introduce an unacceptable level of overhead. It is thus important for programmers to be able to determine the additional cost due to the runtime checks and compare it to some notion of admissible cost. The common practice used for estimating runtime checking overhead is profiling, which is not exhaustive by nature. Instead, we propose a method that uses static analysis to estimate such overhead, with the advantage that the estimations are functions parameterized by input data sizes. Unlike profiling, this approach can provide guarantees for all possible execution traces, and allows assessing how the overhead grows as the size of the input grows. Our method also extends an existing assertion verification framework to express "admissible" overheads, and statically and automatically checks whether the instrumented program conforms with such specifications. Finally, we present an experimental evaluation of our approach that suggests that our method is feasible and promising. Maximiliano Klemen, Nataliia Stulova, Pedro López-García 0001, José F. Morales 0001, Manuel V. Hermenegildo |
PPDP | 5 |
| 2018 | Some trade-offs in reducing the overhead of assertion run-time checks via static analysis
Nataliia Stulova, José F. Morales 0001, Manuel V. Hermenegildo |
Sci. Comput. Program. | 3 |
| 2018 | Interval-based resource usage verification by translation into Horn clauses and an application to energy consumptionabstractAbstract Many applications require conformance with specifications that constrain the use of resources, such as execution time, energy, bandwidth, etc. We present a configurable framework for static resource usage verification where specifications can include data size-dependent resource usage functions, expressing both lower and upper bounds. Ensuring conformance with respect to such specifications is an undecidable problem. Therefore, to statically check such specifications, our framework infers the same type of resource usage functions, which safely approximate the actual resource usage of the program, and compares them against the specification. We review how this framework supports several languages and compilation output formats by translating them to an intermediate representation based on Horn clauses and using the configurability of the framework to describe the resource semantics of the input language. We provide a detailed formalization and extend the framework so that both resource usage specification and analysis/verification output can include preconditions expressing intervals for the input data sizes for which assertions are intended to hold, proved, or disproved. Most importantly, we also extend the classes of functions that can be checked. We also report on and provide results from an implementation within the Ciao/CiaoPP framework, as well as on a practical tool built by instantiating this framework for the verification of energy consumption specifications for imperative/embedded programs. Finally, we show as an example how embedded software developers can use this tool, in particular, for determining values for program parameters that ensure meeting a given energy budget while minimizing the loss in quality of service. Pedro López-García 0001, Luthfi Darmawan, Maximiliano Klemen, Umer Liqat, Francisco Bueno, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 6 |
| 2017 | Inferring Energy Bounds via Static Program Analysis and Evolutionary Modeling of Basic Blocks
Umer Liqat, Zorana Bankovic, Pedro López-García 0001, Manuel V. Hermenegildo |
LOPSTR | 4 |
| 2016 | Reducing the overhead of assertion run-time checks via static analysisabstractIn order to aid in the process of detecting incorrect program behaviors, a number of approaches have been proposed which include a combination of language-level constructs (such as procedure-level assertions/contracts, program-point assertions, gradual types, etc.) and associated tools (such as 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. Verification frameworks that combine static and dynamic techniques offer the potential to bridge this gap. In this paper we explore the effectiveness of abstract interpretation in detecting parts of program specifications that can be statically simplified to true or false, as well as the impact of such analysis in reducing the cost of the run-time checks required for the remaining parts of these specifications. Starting with a semantics for programs with assertion checking, and for assertion simplification based on static analysis information, we propose and study a number of practical assertion checking modes, each of which represents a trade-off between code annotation depth, execution time slowdown, and program safety. We also propose techniques for taking advantage of the run-time checking semantics to improve the precision of the analysis. Finally, we study experimentally the performance of these techniques. Our experiments illustrate the benefits and costs of each of the assertion checking modes proposed as well as the benefit of analysis for these scenarios. Nataliia Stulova, José F. Morales 0001, Manuel V. Hermenegildo |
PPDP | 3 |
| 2016 | Semantic code browsingabstractAbstract Programmers currently enjoy access to a very high number of code repositories and libraries of ever increasing size. The ensuing potential for reuse is however hampered by the fact that searching within all this code becomes an increasingly difficult task. Most code search engines are based on syntactic techniques such as signature matching or keyword extraction. However, these techniques are inaccurate (because they basically rely on documentation) and at the same time do not offer very expressive code query languages. We propose a novel approach that focuses on querying for semantic characteristics of code obtained automatically from the code itself. Program units are pre-processed using static analysis techniques, based on abstract interpretation, obtaining safe semantic approximations. A novel, assertion-based code query language is used to express desired semantic characteristics of the code as partial specifications. Relevant code is found by comparing such partial specifications with the inferred semantics for program elements. Our approach is fully automatic and does not rely on user annotations or documentation. It is more powerful and flexible than signature matching because it is parametric on the abstract domain and properties, and does not require type definitions. Also, it reasons with relations between properties, such as implication and abstraction, rather than just equality. It is also more resilient to syntactic code differences. We describe the approach and report on a prototype implementation within the Ciao system. Isabel Garcia-Contreras, José F. Morales 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 3 |
| 2016 | A general framework for static profiling of parametric resource usageabstractAbstract For some applications, standard resource analyses do not provide the information required. Such analyses estimate the total resource usage of a program (without executing it) as functions on input data sizes. However, some applications require knowing how such total resource usage is distributed over selected parts of a program. We propose a novel, general, and flexible framework for setting up cost equations/relations which can be instantiated for performing a wide range of resource usage analyses, including both static profiling and the inference of the standard notion of cost. We extend and generalize standard resource analysis techniques, so that the relations generated include additional Boolean control variables for switching on or off different terms in the relations, as required by the desired resource usage profile. We also instantiate our framework to perform static profiling of accumulated cost (also parameterized by input data sizes). Such information is much more useful to the software developer than the standard notion of cost: it identifies the parts of the program that have the greatest impact on the total program cost, and which therefore should be optimized first. We also report on an implementation of our framework within the CiaoPP system, and its instantiation for accumulated cost, and provide some experimental results. In addition to generality, our new method brings important advantages over our previous approach based on a program transformation, including support for non-deterministic programs, better and easier integration in the compiler, and higher efficiency. Pedro López-García 0001, Maximiliano Klemen, Umer Liqat, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 4 |
| 2016 | Description and Optimization of Abstract Machines in a Dialect of PrologabstractAbstract In order to achieve competitive performance, abstract machines for Prolog and related languages end up being large and intricate, and incorporate sophisticated optimizations, both at the design and at the implementation levels. At the same time, efficiency considerations make it necessary to use low-level languages in their implementation. This makes them laborious to code, optimize, and, especially, maintain and extend. Writing the abstract machine (and ancillary code) in a higher-level language can help tame this inherent complexity. We show how the semantics of most basic components of an efficient virtual machine for Prolog can be described using (a variant of) Prolog. These descriptions are then compiled to C and assembled to build a complete bytecode emulator. Thanks to the high-level of the language used and its closeness to Prolog, the abstract machine description can be manipulated using standard Prolog compilation and optimization techniques with relative ease. We also show how, by applying program transformations selectively, we obtain abstract machine implementations whose performance can match and even exceed that of state-of-the-art, highly-tuned, hand-crafted emulators. José F. Morales 0001, Manuel Carro, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 3 |
| 2015 | Practical run-time checking via unobtrusive property cachingabstractAbstract The use of annotations, referred to as assertions or contracts, to describe program properties for which run-time tests are to be generated, has become frequent in dynamic programing languages. However, the frameworks proposed to support such run-time testing generally incur high time and/or space overheads over standard program execution. We present an approach for reducing this overhead that is based on the use of memoization to cache intermediate results of check evaluation, avoiding repeated checking of previously verified properties. Compared to approaches that reduce checking frequency, our proposal has the advantage of being exhaustive (i.e., all tests are checked at all points) while still being much more efficient than standard run-time checking. Compared to the limited previous work on memoization, it performs the task without requiring modifications to data structure representation or checking code. While the approach is general and system-independent, we present it for concreteness in the context of the Ciao run-time checking framework, which allows us to provide an operational semantics with checks and caching. We also report on a prototype implementation and provide some experimental results that support that using a relatively small cache leads to significant decreases in run-time checking overhead. Nataliia Stulova, José F. Morales 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 3 |
| 2014 | Pre-indexed Terms for Prolog
José F. Morales 0001, Manuel V. Hermenegildo |
LOPSTR | 2 |
| 2014 | Assertion-based Debugging of Higher-Order (C)LP ProgramsabstractHigher-order constructs extend the expressiveness of first-order (Constraint) Logic Programming ((C)LP) both syntactically and semantically. At the same time assertions have been in use for some time in (C)LP systems helping programmers detect errors and validate programs. However, these assertion-based extensions to (C)LP have not been integrated well with higher-order to date. This paper contributes to filling this gap by extending the assertion-based approach to error detection and program verification to the higher-order context within (C)LP. We propose an extension of properties and assertions as used in (C)LP in order to be able to fully describe arguments that are predicates. The extension makes the full power of the assertion language available when describing higher-order arguments. We provide syntax and semantics for (higher-order) properties and assertions, as well as for programs which contain such assertions, including the notions of error and partial correctness. We also discuss several alternatives for performing run-time checking of such programs. Nataliia Stulova, José F. Morales 0001, Manuel V. Hermenegildo |
PPDP | 3 |
| 2014 | Resource Usage Analysis of Logic Programs via Abstract Interpretation Using Sized TypesabstractAbstract We present a novel general resource analysis for logic programs based on sized types. Sized types are representations that incorporate structural (shape) information and allow expressing both lower and upper bounds on the size of a set of terms and their subterms at any position and depth. They also allow relating the sizes of terms and subterms occurring at different argument positions in logic predicates. Using these sized types, the resource analysis can infer both lower and upper bounds on the resources used by all the procedures in a program as functions on input term (and subterm) sizes, overcoming limitations of existing resource analyses and enhancing their precision. Our new resource analysis has been developed within the abstract interpretation framework, as an extension of the sized types abstract domain, and has been integrated into the Ciao preprocessor, CiaoPP. The abstract domain operations are integrated with the setting up and solving of recurrence equations for inferring both size and resource usage functions. We show that the analysis is an improvement over the previous resource analysis present in CiaoPP and compares well in power to state of the art systems. Alejandro Serrano 0001, Pedro López-García 0001, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 3 |
| 2013 | Energy Consumption Analysis of Programs Based on XMOS ISA-Level Models
Umer Liqat, Steve Kerrison, Alejandro Serrano 0001, Kyriakos Georgiou, Pedro López-García 0001, Neville Grech, Manuel V. Hermenegildo, Kerstin Eder |
LOPSTR | 7 |
| 2013 | Reversible Language Extensions and Their Application in Debugging
Zoé Drey, José F. Morales 0001, Manuel V. Hermenegildo, Manuel Carro |
PADL | 3 |
| 2013 | Supporting Pruning in Tabled LP
Pablo Chico de Guzmán, Manuel Carro, Manuel V. Hermenegildo |
PADL | 3 |
| 2013 | Sized Type Analysis for Logic Programs
Alejandro Serrano 0001, Pedro López-García 0001, Francisco Bueno, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 4 |
| 2012 | A Constraint-Based Approach to Quality Assurance in Service Choreographies
Dragan Ivanovic, Manuel Carro, Manuel V. Hermenegildo |
ICSOC | 3 |
| 2012 | A Segment-Swapping Approach for Executing Trapped Computations
Pablo Chico de Guzmán, Amadeo Casas, Manuel Carro, Manuel V. Hermenegildo |
PADL | 4 |
| 2012 | Certificate size reduction in abstraction-carrying codeabstractAbstract Abstraction-Carrying Code (ACC) has recently been proposed as a framework for mobile code safety in which the code supplier provides a program together with an abstraction (or abstract model of the program) whose validity entails compliance with a predefined safety policy. The abstraction plays thus the role of safety certificate and its generation is carried out automatically by a fixpoint analyzer. The advantage of providing a (fixpoint) abstraction to the code consumer is that its validity is checked in a single pass (i.e., one iteration) of an abstract interpretation-based checker. A main challenge to make ACC useful in practice is to reduce the size of certificates as much as possible while at the same time not increasing checking time. The intuitive idea is to only include in the certificate information that the checker is unable to reproduce without iterating. We introduce the notion of reduced certificate which characterizes the subset of the abstraction which a checker needs in order to validate (and re-construct) the full certificate in a single pass. Based on this notion, we instrument a generic analysis algorithm with the necessary extensions in order to identify the information relevant to the checker. Interestingly, the fact that the reduced certificate omits (parts of) the abstraction has implications in the design of the checker. We provide the sufficient conditions which allow us to ensure that (1) if the checker succeeds in validating the certificate, then the certificate is valid for the program (correctness) and (2) the checker will succeed for any reduced certificate which is valid (completeness). Our approach has been implemented and benchmarked within the CiaoPP system. The experimental results show that our proposal is able to greatly reduce the size of certificates in practice. Elvira Albert, Puri Arenas, Germán Puebla, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 4 |
| 2012 | An overview of Ciao and its design philosophyabstractAbstract We provide an overall description of the Ciao multiparadigm programming system emphasizing some of the novel aspects and motivations behind its design and implementation. An important aspect of Ciao is that, in addition to supporting logic programming (and, in particular, Prolog), it provides the programmer with a large number of useful features from different programming paradigms and styles and that the use of each of these features (including those of Prolog) can be turned on and off at will for each program module. Thus, a given module may be using, e.g., higher order functions and constraints, while another module may be using assignment, predicates, Prolog meta-programming, and concurrency. Furthermore, the language is designed to be extensible in a simple and modular way. Another important aspect of Ciao is its programming environment, which provides a powerful preprocessor (with an associated assertion language) capable of statically finding non-trivial bugs, verifying that programs comply with specifications, and performing many types of optimizations (including automatic parallelization). Such optimizations produce code that is highly competitive with other dynamic languages or, with the (experimental) optimizing compiler, even that of static languages, all while retaining the flexibility and interactive development of a dynamic language. This compilation architecture supports modularity and separate compilation throughout. The environment also includes a powerful autodocumenter and a unit testing framework, both closely integrated with the assertion system. The paper provides an informal overview of the language and program development environment. It aims at illustrating the design philosophy rather than at being exhaustive, which would be impossible in a single journal paper, pointing instead to previous Ciao literature. Manuel V. Hermenegildo, Francisco Bueno, Manuel Carro, Pedro López-García 0001, Edison Mera, José F. Morales 0001, Germán Puebla |
Theory Pract. Log. Program. | 1 |
| 2012 | Lightweight compilation of (C)LP to JavaScriptabstractAbstract We present and evaluate a compiler from Prolog (and extensions) to JavaScript which makes it possible to use (constraint) logic programming to develop the client side of web applications while being compliant with current industry standards. Targeting JavaScript makes (C)LP programs executable in virtually every modern computing device with no additional software requirements from the point of view of the user. In turn, the use of a very high-level language facilitates the development of high-quality, complex software. The compiler is a back end of the Ciao system and supports most of its features, including its module system and its rich language extension mechanism based onpackages. We present an overview of the compilation process and a detailed description of the run-time system, including the support for modular compilation into separate JavaScript code. We demonstrate the maturity of the compiler by testing it with complex code such as a CLP(FD) library written in Prolog with attributed variables. Finally, we validate our proposal by measuring the performance of some LP and CLP(FD) benchmarks running on top of major JavaScript engines. José F. Morales 0001, Rémy Haemmerlé, Manuel Carro, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 4 |
| 2011 | Constraint-Based Runtime Prediction of SLA Violations in Service Orchestrations
Dragan Ivanovic, Manuel Carro, Manuel V. Hermenegildo |
ICSOC | 3 |
| 2011 | Modular Extensions for Modular (Logic) Languages
José F. Morales 0001, Manuel V. Hermenegildo, Rémy Haemmerlé |
LOPSTR | 2 |
| 2011 | Profiling for Run-Time Checking of Computational Properties and Performance Debugging in Logic Programs
Edison Mera, Teresa Trigo, Pedro López-García 0001, Manuel V. Hermenegildo |
PADL | 4 |
| 2011 | CLP projection for constraint handling rulesabstractThis paper introduces and studies the notion of CLP projection for Constraint Handling Rules (CHR). The CLP projection consists of a naive translation of CHR programs into Constraint Logic Programs (CLP). We show that the CLP projection provides a safe operational and declarative approximation for CHR programs. We demonstrate moreover that a confluent CHR program has a least model, which is precisely equal to the least model of its CLP projection (closing hence a ten year-old conjecture by Abdennadher et al.). Finally, we illustrate how the notion of CLP projection can be used in practice to apply CLP analyzers to CHR. In particular, we show results from applying AProVE to prove termination, and CiaoPP to infer both complexity upper bounds and types for CHR programs. Rémy Haemmerlé, Pedro López-García 0001, Manuel V. Hermenegildo |
PPDP | 3 |
| 2011 | Parallel backtracking with answer memoing for independent and-parallelismabstractAbstract Goal-level Independent and-parallelism (IAP) is exploited by scheduling for simultaneous execution of two or more goals, which will not interfere with each other at run time. This can be done safely even if such goals can produce multiple answers. The most successful IAP implementations to date have used recomputation of answers and sequentially ordered backtracking. While in principle simplifying the implementation, recomputation can be very inefficient if the granularity of the parallel goals is large enough and they produce several answers, while sequentially ordered backtracking limits parallelism. And, despite the expected simplification, the implementation of the classic schemes has proved to involve complex engineering, with the consequent difficulty for system maintenance and extension, while still frequently running into the well-known trapped goal and garbage slot problems. This work presents an alternative parallel backtracking model for IAP and its implementation. The model features parallel out-of-order (i.e., nonchronological) backtracking and relies on answer memoization to reuse and combine answers. We show that this approach can bring significant performance advantages. Also, it can bring some simplification to the important engineering task involved in implementing the backtracking mechanism of previous approaches. Pablo Chico de Guzmán, Amadeo Casas, Manuel Carro, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 4 |
| 2011 | Efficient local unfolding with ancestor stacksabstractAbstract The most successful unfolding rules used nowadays in the partial evaluation of logic programs are based on well quasi orders (wqo) applied over (covering) ancestors, i.e., a subsequence of the atoms selected during a derivation. Ancestor (sub)sequences are used to increase the specialization power of unfolding while still guaranteeing termination and also to reduce the number of atoms for which the wqo has to be checked. Unfortunately, maintaining the structure of the ancestor relation during unfolding introduces significant overhead. We propose an efficient, practical local unfolding rule based on the notion of covering ancestors which can be used in combination with a wqo and allows a stack-based implementation without losing any opportunities for specialization. Using our technique, certain nonleftmost unfoldings are allowed as long as local unfolding is performed, i.e., we cover depth-first strategies. To deal with practical programs, we propose assertion-based techniques which allow our approach to treat programs that include (Prolog) built-ins and external predicates in a very extensible manner, for the case of leftmost unfolding. Finally, we report on our implementation of these techniques embedded in a practical partial evaluator, which shows that our techniques, in addition to dealing with practical programs, are also significantly more efficient in time and somewhat more efficient in memory than traditional tree-based implementations. Germán Puebla, Elvira Albert, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 3 |
| 2010 | Automatic Fragment Identification in Workflows Based on Sharing Analysis
Dragan Ivanovic, Manuel Carro, Manuel V. Hermenegildo |
ICSOC | 3 |
| 2010 | Towards Data-Aware QoS-driven Adaptation for Service OrchestrationsabstractSeveral activities in service oriented computing can benefit from knowing properties of a given service composition ahead of time. We will focus here on properties related to computational cost and resource usage, in a wide sense, as they can be linked to QoS characteristics. In order to attain more accuracy, we formulate computational cost / resource usage as functions on input data (or appropriate abstractions thereof) and show how these functions can be used to make more informed decisions when performing composition, proactive adaptation, and predictive monitoring. We present an approach to, on one hand, automatically synthesize these functions from orchestrations and, on the other hand, to effectively use them to increase the quality of non-trivial service-based systems with data-dependent behavior. We validate our approach by means of simulations with runtime selection of services and adaptation due to service failure. Dragan Ivanovic, Manuel Carro, Manuel V. Hermenegildo |
ICWS | 3 |
| 2010 | Lock-free parallel dynamic programming
Alex D. Stivala, Peter J. Stuckey, Maria Garcia de la Banda, Manuel V. Hermenegildo, Anthony Wirth |
J. Parallel Distributed Comput. | 4 |
| 2010 | Introduction to the 26th international conference on logic programming special issueabstractThe Logic Programming (LP) community, through the Association for Logic Programming (ALP) and its Executive Committee, decided to introduce for 2010 important changes in the way the main yearly results in LP and related areas are published. Whereas such results have appeared to date in standalone volumes of proceedings of the yearly International Conferences on Logic Programming (ICLP), and this method—fully in the tradition of Computer Science (CS)—has served the community well, it was felt that an effort needed to be made to achieve a higher level of compatibility with the publishing mechanisms of other fields outside CS. Manuel V. Hermenegildo, Torsten Schaub |
Theory Pract. Log. Program. | 1 |
| 2009 | A Tabling Implementation Based on Variables with Multiple Bindings
Pablo Chico de Guzmán, Manuel Carro, Manuel V. Hermenegildo |
ICLP | 3 |
| 2009 | Integrating Software Testing and Run-Time Checking in an Assertion Verification Framework
Edison Mera, Pedro López-García 0001, Manuel V. Hermenegildo |
ICLP | 3 |
| 2009 | Identification of logically related heap regionsabstractThis paper introduces a novel set of heuristics for identifying logically related sections of the heap such as recursive data structures, objects that are part of the same multi-component structure, and related groups of objects stored in the same collection/array. When combined with lifetime properties of these structures, this information can be used to drive a range of program optimizations including pool allocation, object co-location, static deallocation, and region-based garbage collection. The technique outlined in this paper also improves the efficiency of the static analysis by providing a compact normal form for the abstract models (speeding the convergence of the static analysis). Mark Marron, Deepak Kapur, Manuel V. Hermenegildo |
ISMM | 3 |
| 2009 | Program Parallelization Using Synchronized Pipelining
Leonardo Scandolo, César Kunz, Manuel V. Hermenegildo |
LOPSTR | 3 |
| 2009 | Towards a Complete Scheme for Tabled Execution Based on Program Transformation
Pablo Chico de Guzmán, Manuel Carro, Manuel V. Hermenegildo |
PADL | 3 |
| 2009 | Non-strict independence-based program parallelization using sharing and freeness information
Daniel Cabeza, Manuel V. Hermenegildo |
Theor. Comput. Sci. | 2 |
| 2008 | Efficient Context-Sensitive Shape Analysis with Graph Based Heap Models
Mark Marron, Manuel V. Hermenegildo, Deepak Kapur, Darko Stefanovic |
CC | 2 |
| 2008 | A High-Level Implementation of Non-deterministic, Unrestricted, Independent And-Parallelism
Amadeo Casas, Manuel Carro, Manuel V. Hermenegildo |
ICLP | 3 |
| 2008 | A Sketch of a Complete Scheme for Tabled Execution Based on Program Transformation
Pablo Chico de Guzmán, Manuel Carro, Manuel V. Hermenegildo |
ICLP | 3 |
| 2008 | Negative Ternary Set-Sharing
Eric D. Trias, Jorge A. Navas, Elena S. Ackley, Stephanie Forrest, Manuel V. Hermenegildo |
ICLP | 5 |
| 2008 | Towards a High-Level Implementation of Execution Primitives for Unrestricted, Independent And-Parallelism
Amadeo Casas, Manuel Carro, Manuel V. Hermenegildo |
PADL | 3 |
| 2008 | An Improved Continuation Call-Based Implementation of Tabling
Pablo Chico de Guzmán, Manuel Carro, Manuel V. Hermenegildo, Cláudio Silva 0001, Ricardo Rocha 0001 |
PADL | 3 |
| 2008 | Sharing analysis of arrays, collections, and recursive structuresabstractPrecise modeling of the program heap is fundamental for understanding the behavior of a program, and is thus of significant interest for many optimization applications. One of the fundamental properties of the heap that can be used in a range of optimization techniques is the sharing relationships between the elements in an array or collection. If an analysis can determine that the memory locations pointed to by different entries of an array (or collection) are disjoint, then in many cases loops that traverse the array can be vectorized or transformed into a thread-parallel version. This paper introduces several novel sharing properties over the concrete heap and corresponding abstractions to represent them. In conjunction with an existing shape analysis technique, these abstractions allow us to precisely resolve the sharing relations in a wide range of heap structures (arrays, collections, recursive data structures, composite heap structures) in a computationally efficient manner. The effectiveness of the approach is evaluated on a set of challenge problems from the JOlden and SPECjvm98 suites. Sharing information obtained from the analysis is used to achieve substantial thread-level parallel speedups. Mark Marron, Mario Méndez-Lojo, Manuel V. Hermenegildo, Darko Stefanovic, Deepak Kapur |
PASTE | 3 |
| 2008 | A practical type analysis for verification of modular prolog programsabstractRegular types are a powerful tool for computing very precise descriptive types for logic programs. However, in the context of real-life, modular Prolog programs, the accurate results obtained by regular types often come at the price of efficiency. In this paper we propose a combination of techniques aimed at improving analysis efficiency in this context. As a first technique we allow optionally reducing the accuracy of inferred types by using only the types defined by the user or present in the libraries. We claim that, for the purpose of verifying type signatures given in the form of assertions the precision obtained using this approach is sufficient, and show that analysis times can be reduced significantly. Our second technique is aimed at dealing with situations where we would like to limit the amount of reanalysis performed, especially for library modules. Borrowing some ideas from polymorphic type systems, we show how to solve the problem by admitting parameters in type specifications. This allows us to compose new call patterns with some precomputed analysis info without losing any information. We argue that together these two techniques contribute to the practical and scalable analysis and verification of types in Prolog programs. Pawel Pietrzak, Jesús Correas Fernández, Germán Puebla, Manuel V. Hermenegildo |
PEPM | 4 |
| 2008 | Towards execution time estimation in abstract machine-based languagesabstractAbstract machines provide a certain separation between platform-dependent and platform-independent concerns in compilation. Many of the differences between architectures are encapsulated in the specific abstract machine implementation and the bytecode is left largely architecture independent. Taking advantage of this fact, we present a framework for estimating upper and lower bounds on the execution times of logic programs running on a bytecode-based abstract machine. Our approach includes a one-time, program-independent profiling stage which calculates constants or functions bounding the execution time of each abstract machine instruction. Then, a compile-time cost estimation phase, using the instruction timing information, infers expressions giving platform-dependent upper and lower bounds on actual execution time as functions of input data sizes for each program. Working at the abstract machine level makes it possible to take into account low-level issues in new architectures and platforms by just reexecuting the calibration stage instead of having to tailor the analysis for each architecture and platform. Applications of such predicted execution times include debugging/verification of time properties, certification of time properties in mobile code, granularity control in parallel/distributed computing, and resource-oriented specialization Edison Mera, Pedro López-García 0001, Manuel Carro, Manuel V. Hermenegildo |
PPDP | 4 |
| 2008 | Comparing tag scheme variations using an abstract machine generatorabstractIn this paper we study, in the context of a WAM-based abstract machine for Prolog, how variations in the encoding of type information in tagged words and in their associated basic operations impact performance and memory usage.We use a high-level language to specify encodings and the associated operations. An automatic generator constructs both the abstract machine using this encoding and the associated Prolog-to-bytecode compiler. Annotations in this language make it possible to impose constraints on the final representation of tagged words, such as the effectively addressable space (fixing, for example, the word size of the target processor / architecture), the layout of the tag and value bits inside the tagged word, and how the basic operations are implemented. We evaluate a large number of combinations of the different parameters in two scenarios: a) trying to obtain an optimal general-purpose abstract machine and b) automatically generating a specially-tuned abstract machine for a particular program. We conclude that we are able to automatically generate code featuring all the optimizations present in a hand-written, highly-optimized abstract machine and we can also obtain emulators with larger addressable space and better performance José F. Morales 0001, Manuel Carro, Manuel V. Hermenegildo |
PPDP | 3 |
| 2008 | Precise Set Sharing Analysis for Java-Style Programs
Mario Méndez-Lojo, Manuel V. Hermenegildo |
VMCAI | 2 |
| 2007 | User-Definable Resource Bounds Analysis for Logic Programs
Jorge A. Navas, Edison Mera, Pedro López-García 0001, Manuel V. Hermenegildo |
ICLP | 4 |
| 2007 | Automatic Binding-Related Error Diagnosis in Logic Programs
Pawel Pietrzak, Manuel V. Hermenegildo |
ICLP | 2 |
| 2007 | Annotation Algorithms for Unrestricted Independent And-Parallelism in Logic Programs
Amadeo Casas, Manuel Carro, Manuel V. Hermenegildo |
LOPSTR | 3 |
| 2007 | A Flexible, (C)LP-Based Approach to the Analysis of Object-Oriented Programs
Mario Méndez-Lojo, Jorge A. Navas, Manuel V. Hermenegildo |
LOPSTR | 3 |
| 2007 | Combining Static Analysis and Profiling for Estimating Execution Times
Edison Mera, Pedro López-García 0001, Germán Puebla, Manuel Carro, Manuel V. Hermenegildo |
PADL | 5 |
| 2007 | Heap analysis in the presence of collection librariesabstractMemory analysis techniques have become sophisticated enough to model, with a high degree of accuracy, the manipulation of simple memory structures (finite structures, single/double linked lists and trees). However, modern programming languages provide extensive library support including a wide range of generic collection objects that make use of complex internal data structures. While these data structures ensure that the collections are efficient, often these representations cannot be effectively modeled by existing methods (either due to excessive analysis runtime or due to the inability to represent the required information). This paper presents a method to represent collections using an abstraction of their semantics. The construction of the abstract semantics for the collection objects is done in a manner that allows individual elements in the collections to be identified. Our construction also supports iterators over the collections and is able to model the position of the iterators with respect to the elements in the collection. By ordering the contents of the collection based on the iterator position, the model can represent a notion of progress when iteratively manipulating the contents of a collection. These features allow strong updates to the individual elements in the collection as well as strong updates over the collections themselves. Mark Marron, Darko Stefanovic, Manuel V. Hermenegildo, Deepak Kapur |
PASTE | 3 |
| 2006 | High-level languages for small devices: a case studyabstractIn this paper we study, through a concrete case, the feasibility of using a high-level, general-purpose logic language in the design and implementation of applications targeting wearable computers. The case study is a "sound spatializer" which, given real-time signals for monaural audio and heading, generates stereo sound which appears to come from a position in space. The use of advanced compile-time transformations and optimizations made it possible to execute code written in a clear style without efficiency or architectural concerns on the target device, while meeting strict existing time and memory constraints. The final executable compares favorably with a similar implementation written in C. We believe that this case is representative of a wider class of common pervasive computing applications, and that the techniques we show here can be put to good use in a range of scenarios. This points to the possibility of applying high-level languages, with their associated exibility, conciseness, ability to be automatically parallelized, sophisticated compile-time tools for analysis and verification, etc., to the embedded systems eld without paying an unnecessary performance penalty. Manuel Carro, José F. Morales 0001, Henk L. Muller, Germán Puebla, Manuel V. Hermenegildo |
CASES | 5 |
| 2006 | Reduced Certificates for Abstraction-Carrying Code
Elvira Albert, Puri Arenas, Germán Puebla, Manuel V. Hermenegildo |
ICLP | 4 |
| 2006 | Using Combined Static Analysis and Profiling for Logic Program Execution Time Estimation
Edison Mera, Pedro López-García 0001, Germán Puebla, Manuel Carro, Manuel V. Hermenegildo |
ICLP | 5 |
| 2006 | Towards Description and Optimization of Abstract Machines in an Extension of Prolog
José F. Morales 0001, Manuel Carro, Manuel V. Hermenegildo |
LOPSTR | 3 |
| 2006 | Context-Sensitive Multivariant Assertion Checking in Modular Programs
Pawel Pietrzak, Jesús Correas Fernández, Germán Puebla, Manuel V. Hermenegildo |
LPAR | 4 |
| 2006 | Efficient Top-Down Set-Sharing Analysis Using Cliques
Jorge A. Navas, Francisco Bueno, Manuel V. Hermenegildo |
PADL | 3 |
| 2006 | Abstract Interpretation with Specialized Definitions
Germán Puebla, Elvira Albert, Manuel V. Hermenegildo |
SAS | 3 |
| 2005 | A Generator of Efficient Abstract Machine Implementations and Its Application to Emulator Minimization
José F. Morales 0001, Manuel Carro, Germán Puebla, Manuel V. Hermenegildo |
ICLP | 4 |
| 2005 | A Generic Framework for the Analysis and Specialization of Logic Programs
Germán Puebla, Elvira Albert, Manuel V. Hermenegildo |
ICLP | 3 |
| 2005 | Experiments in Context-Sensitive Analysis of Modular Programs
Jesús Correas Fernández, Germán Puebla, Manuel V. Hermenegildo, Francisco Bueno |
LOPSTR | 3 |
| 2005 | Removing Superfluous Versions in Polyvariant Specialization of Prolog Programs
Claudio Ochoa, Germán Puebla, Manuel V. Hermenegildo |
LOPSTR | 3 |
| 2005 | Abstraction carrying code and resource-awarenessabstractProof-Carrying Code (PCC) is a general approach to mobile code safety in which the code supplier augments the program with a certificate (or proof). The intended benefit is that the program consumer can locally validate the certificate w.r.t. the "untrusted" program by means of a certificate checker---a process which should be much simpler, efficient, and automatic than generating the original proof. Abstraction Carrying Code (ACC) is an enabling technology for PCC in which an abstract model of the program plays the role of certificate. The generation of the certificate, i.e., the abstraction, is automatically carried out by an abstract interpretation-based analysis engine, which is parametric w.r.t. different abstract domains. While the analyzer on the producer side typically has to compute a semantic fixpoint in a complex, iterative process, on the receiver it is only necessary to check that the certificate is indeed a fixpoint of the abstract semantics equations representing the program. This is done in a single pass in a much more efficient process. ACC addresses the fundamental issues in PCC and opens the door to the applicability of the large body of frameworks and domains based on abstract interpretation as enabling technology for PCC. We present an overview of ACC and we describe in a tutorial fashion an application to the problem of resource-aware security in mobile code. Essentially the information computed by a cost analyzer is used to generate cost certificates which attest a safe and efficient use of a mobile code. A receiving side can then reject code which brings cost certificates (which it cannot validate or) which have too large cost requirements in terms of computing resources (in time and/or space) and accept mobile code which meets the established requirements. Manuel V. Hermenegildo, Elvira Albert, Pedro López-García 0001, Germán Puebla |
PPDP | 1 |
| 2005 | Integrated program debugging, verification, and optimization using abstract interpretation (and the Ciao system preprocessor)
Manuel V. Hermenegildo, Germán Puebla, Francisco Bueno, Pedro López-García 0001 |
Sci. Comput. Program. | 1 |
| 2004 | Some Techniques for Automated, Resource-Aware Distributed and Mobile Computing in a Multi-paradigm Programming System
Manuel V. Hermenegildo, Elvira Albert, Pedro López-García 0001, Germán Puebla |
Euro-Par | 1 |
| 2004 | Abstract Interpretation-Based Mobile Code Certification
Elvira Albert, Germán Puebla, Manuel V. Hermenegildo |
ICLP | 3 |
| 2004 | Determinacy Analysis for Logic Programs Using Mode and Type Information
Pedro López-García 0001, Francisco Bueno, Manuel V. Hermenegildo |
LOPSTR | 3 |
| 2004 | Efficient Local Unfolding with Ancestor Stacks for Full Prolog
Germán Puebla, Elvira Albert, Manuel V. Hermenegildo |
LOPSTR | 3 |
| 2004 | Abstraction-Carrying Code
Elvira Albert, Germán Puebla, Manuel V. Hermenegildo |
LPAR | 3 |
| 2004 | A Generic Persistence Model for (C)LP Systems (and Two Useful Implementations)
Jesús Correas Fernández, José M. Gómez, Manuel Carro, Daniel Cabeza, Manuel V. Hermenegildo |
PADL | 5 |
| 2004 | Improved Compilation of Prolog to C Using Moded Types and Determinism Information
José F. Morales 0001, Manuel Carro, Manuel V. Hermenegildo |
PADL | 3 |
| 2003 | A Generic Persistence Model for (C)LP Systems
Jesús Correas Fernández, José M. Gómez, Manuel Carro, Daniel Cabeza, Manuel V. Hermenegildo |
ICLP | 5 |
| 2003 | Abstract specialization and its applicationsabstractThe aim of program specialization is to optimize programs by exploiting certain knowledge about the context in which the program will execute. There exist many program manipulation techniques which allow specializing the program in different ways. Among them, one of the best known techniques is partial evaluation, often referred to simply as program specialization, which optimizes programs by specializing them for (partially) known input data. In this work we describe abstract specialization, a technique whose main features are: (1) specialization is performed with respect to "abstract" values rather than "concrete" ones, and (2) abstract interpretation rather than standard interpretation of the program is used in order to propagate information about execution states. The concept of abstract specialization is at the heart of the specialization system in CiaoPP, the Ciao system preprocessor. In this paper we present a unifying view of the different specialization techniques used in CiaoPP and discuss their potential applications by means of examples. The applications discussed include program parallelization, optimization of dynamic scheduling (concurrency), and integration of partial evaluation techniques. Germán Puebla, Manuel V. Hermenegildo |
PEPM | 2 |
| 2003 | Program Development Using Abstract Interpretation (And The Ciao System Preprocessor)
Manuel V. Hermenegildo, Germán Puebla, Francisco Bueno, Pedro López-García 0001 |
SAS | 1 |
| 2002 | Program Debugging and Validation Using Semantic Approximations and Partial Specifications
Manuel V. Hermenegildo, Germán Puebla, Francisco Bueno, Pedro López-García 0001 |
ICALP | 1 |
| 2001 | Efficient Negation Using Abstract Interpretation
Susana Muñoz-Hernández, Juan José Moreno-Navarro, Manuel V. Hermenegildo |
LPAR | 3 |
| 2001 | Parallel execution of prolog programs: a surveyabstractSince the early days of logic programming, researchers in the field realized the potential for exploitation of parallelism present in the execution of logic programs. Their high-level nature, the presence of nondeterminism, and their referential transparency, among other characteristics, make logic programs interesting candidates for obtaining speedups through parallel execution. At the same time, the fact that the typical applications of logic programming frequently involve irregular computations, make heavy use of dynamic data structures with logical variables, and involve search and speculation, makes the techniques used in the corresponding parallelizing compilers and run-time systems potentially interesting even outside the field. The objective of this article is to provide a comprehensive survey of the issues arising in parallel execution of logic programming languages along with the most relevant approaches explored to date in the field. Focus is mostly given to the challenges emerging from the parallel execution of Prolog programs. The article describes the major techniques used for shared memory implementation of Or-parallelism, And-parallelism, and combinations of the two. We also explore some related issues, such as memory management, compile-time analysis, and execution visualization. Gopal Gupta 0001, Enrico Pontelli, Khayri A. M. Ali, Mats Carlsson, Manuel V. Hermenegildo |
ACM Trans. Program. Lang. Syst. | 5 |
| 2001 | Distributed WWW Programming using (Ciao-)Prolog and the PiLLoW libraryabstractWe discuss from a practical point of view a number of issues involved in writing distributed Internet and WWW applications using LP/CLP systems. We describe PiLLoW, a public-domain Internet and WWW programming library for LP/CLP systems that we have designed to simplify the process of writing such applications. PiLLoW provides facilities for accessing documents and code on the WWW; parsing, manipulating and generating HTML and XML structured documents and data; producing HTML forms; writing form handlers and CGI-scripts; and processing HTML/XML templates. An important contribution of PiLLoW is to model HTML/XML code (and, thus, the content of WWW pages) as terms. The PiLLoW library has been developed in the context of the Ciao Prolog system, but it has been adapted to a number of popular LP/CLP systems, supporting most of its functionality. We also describe the use of concurrency and a high-level model of client-server interaction, Ciao Prolog's active modules, in the context of WWW programming. We propose a solution for client-side downloading and execution of Prolog code, using generic browsers. Finally, we also provide an overview of related work on the topic. Daniel Cabeza, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 2 |
| 2001 | Guest editor's introduction Special issue on Logic Programming and the InternetabstractComputational logic systems can offer an attractive environment for developing Internet applications. They share many of the important characteristics of popular network programming tools, including dynamic memory management, well-behaved structure and pointer manipulation, robustness, and compilation to architecture-independent bytecode. However, in addition, computational logic systems offer some unique features such as very powerful symbolic processing capabilities, constraint solving, dynamic databases, search facilities, grammars, sophisticated meta-programming, and well understood semantics. Such features can often make it very easy to code simple applications. This special issue concerned with applications is the third of its kind in a journal sponsored by the Association for Logic Programming. The first appeared in 1990, and showed the potential for logic programming to be extended. The second issue highlighted some papers from the Practical Applications of Prolog conference that had been held. This third time, the applications are concerned with the Internet and reflect the profound impact that the Internet has had on the computing landscape. Leon Sterling, Lee Naish, Manuel V. Hermenegildo |
Theory Pract. Log. Program. | 3 |
| 2000 | Parallelizing irregular and pointer-based computations automatically: Perspectives from logic and constraint programming
Manuel V. Hermenegildo |
Parallel Comput. | 1 |
| 2000 | Independence in CLP languagesabstractStudying independence of goals has proven very useful in the context of logic programming. In particular, it has provided a formal basis for powerful automatic parallelization tools, since independence ensures that two goals may be evaluated in parallel while preserving correctness and efficiency. We extend the concept of independence to constraint logic programs (CLP) and prove that it also ensures the correctness and efficiency of the parallel evaluation of independent goals. Independence for CLP languages is more complex than for logic programming as search space preservation is necessary but no longer sufficient for ensuring correctness and efficiency. Two additional issues arise. The first is that the cost of constraint solving may depend upon the order constraints are encountered. The second is the need to handle dynamic scheduling. We clarify these issues by proposing various types of search independence and constraint solver independence, and show how they can be combined to allow different optimizations, from parallelism to intelligent backtracking. Suficient conditions for independence which can be evaluated “a priori” at run-time are also proposed. Our study also yields new insights into independence in logic programming languages. In particular, we show that search space preservation is not only a sufficient but also a necessary condition for ensuring correctness and efficiency of parallel execution. Maria Garcia de la Banda, Manuel V. Hermenegildo, Kim Marriott |
ACM Trans. Program. Lang. Syst. | 2 |
| 2000 | Incremental analysis of constraint logic programsabstractGlobal analyzers traditionally read and analyze the entire program at once, in a nonincremental way. However, there are many situations which are not well suited to this simple model and which instead require reanalysis of certain parts of a program which has already been analyzed. In these cases, it appears inefficient to perform the analysis of the program again from scratch, as needs to be done with current systems. We describe how the fixed-point algorithms used in current generic analysis engines for (constraint) logic programming languages can be extended to support incremental analysis. The possible changes to a program are classified into three types: addition, deletion, and arbitrary change. For each one of these, we provide one or more algorithms for identifying the parts of the analysis that must be recomputed and for performing the actual recomputation. The potential benefits and drawbacks of these algorithms are discussed. Finally, we present some experimental results obtained with an implementation of the algorithms in the PLAI generic abstract interpretation framework. The results show significant benefits when using the proposed incremental analysis algorithms. Manuel V. Hermenegildo, Germán Puebla, Kim Marriott, Peter J. Stuckey |
ACM Trans. Program. Lang. Syst. | 1 |
| 1999 | Concurrency in Prolog Using Threads and a Shared Database
Manuel Carro, Manuel V. Hermenegildo |
ICLP | 2 |
| 1999 | Program Analysis, Debugging, and Optimization Using the Ciao System Preprocessor
Manuel V. Hermenegildo, Francisco Bueno, Germán Puebla, Pedro López-García 0001 |
ICLP | 1 |
| 1999 | An Integration of Partial Evaluation in a Generic Abstract Interpretation Framework
Germán Puebla, Manuel V. Hermenegildo, John P. Gallagher |
PEPM | 2 |
| 1999 | Effectivness of Abstract Interpretation in Automatic Parallelization: A Case Study in Logic ProgrammingabstractWe report on a detailed study of the application and effectiveness of program analysis based on abstract interpretation of automatic program parallelization. We study the case of parallelizing logic programs using the notion of strict independence. We first propose and prove correct a methodology for the application in the parallelization task of the information inferred by abstract interpretation, using a parametric domain. The methodology is generic in the sense of allowing the use of different analysis domains. A number of well-known approximation domains are then studied and the transformation into the parametric domain defined. The transformation directly illustrates the revelance and applicability of each abstract domain for the application. Both local and global analyzers are then built using these domains and embedded in a complete parallelizing compiler. Then, the performance of the domains in this context is assessed through a number of experiments. A comparatively wide range of aspects is studied, from the resources needed by the analyzers in terms of time and memory to the actual benefits obtained from the information inferred. Such benefits are evaluated both in terms of the characteristics of the parallelized code and of the actual speedups obtained from it. The results show that data flow analysis plays an important role in achieving efficient parallelizations, and that the cost of such analysis con be reasonable even for quite sophisticated abstract domains. Furthermore, the results also offer significant insight into the characteristics of the domains, the demands of the application, and the trade-offs involved. Francisco Bueno, Maria Garcia de la Banda, Manuel V. Hermenegildo |
ACM Trans. Program. Lang. Syst. | 3 |
| 1998 | A Framework for Assertion-Based Debugging in Constraint Logic Programming
Germán Puebla, Francisco Bueno, Manuel V. Hermenegildo |
CP | 3 |
| 1998 | Partial Order and Contextual Net Semantics for Atomic and Locally Atomic CC Programs
Francisco Bueno, Manuel V. Hermenegildo, Ugo Montanari, Francesca Rossi 0001 |
Sci. Comput. Program. | 2 |
| 1997 | Automatic Parallelization of Irregular and Pointer-Based Computations: Perspectives from Logic and Constraint Programming
Manuel V. Hermenegildo |
Euro-Par | 1 |
| 1997 | Non-Failure Analysis for Logic Programs
Saumya K. Debray, Pedro López-García 0001, Manuel V. Hermenegildo |
ICLP | 3 |
| 1996 | Global Analysis of Standard Prolog Programs
Francisco Bueno, Daniel Cabeza, Manuel V. Hermenegildo, Germán Puebla |
ESOP | 3 |
| 1996 | Optimized Algorithms for Incremental Analysis of Logic Programs
Germán Puebla, Manuel V. Hermenegildo |
SAS | 2 |
| 1996 | Relating Data-Parallelism and (and-) Parallelism in Logic Programs
Manuel V. Hermenegildo, Manuel Carro |
Comput. Lang. | 1 |
| 1996 | Improving the Efficiency of Nondeterministic Independent and-Parallel Systems
Enrico Pontelli, Gopal Gupta 0001, Dongxing Tang, Manuel Carro, Manuel V. Hermenegildo |
Comput. Lang. | 5 |
| 1996 | A Methodology for Granularity-Based Control of Parallelism in Logic Programs
Pedro López-García 0001, Manuel V. Hermenegildo, Saumya K. Debray |
J. Symb. Comput. | 2 |
| 1996 | Global Analysis of Constraint Logic ProgramsabstractThis article presents and illustrates a practical approach to the dataflow analysis of constraint logic programming languages using abstract interpretation. It is first argued that, from the framework point of view, it suffices to propose relatively simple extensions of traditional analysis methods which have already been proved useful and practical and for which efficient fixpoint algorithms exist. This is shown by proposing a simple extension of Bruynooghe's traditional framework which allows it to analyze constraint logic programs. Then, and using this generalized framework, two abstract domains and their required abstract functions are presented: the first abstract domain approximates definiteness information and the second one freeness. Finally, an approach for combining those domains is proposed. The two domains and their combination have been implemented and used in the analysis of CLP( R ) and Prolog-III applications. Results form this implementation showing its performance and accuracy are also presented. Maria Garcia de la Banda, Manuel V. Hermenegildo, Maurice Bruynooghe, Veroniek Dumortier, Gerda Janssens, Wim Simoens |
ACM Trans. Program. Lang. Syst. | 2 |
| 1995 | Relating Data-Parallelism and (And-) Parallelism in Logic Programs
Manuel V. Hermenegildo, Manuel Carro |
Euro-Par | 1 |
| 1995 | Using Attributed Variables in the Implementation of Concurrent and Parallel Logic Programming Systems
Manuel V. Hermenegildo, Daniel Cabeza, Manuel Carro |
ICLP | 1 |
| 1995 | Efficient Term Size Computation for Granularity Control
Manuel V. Hermenegildo, Pedro López-García 0001 |
ICLP | 1 |
| 1995 | Incremental Analysis of Logic Programs
Manuel V. Hermenegildo, Germán Puebla, Kim Marriott, Peter J. Stuckey |
ICLP | 1 |
| 1995 | Implementation of Multiple Specialization in Logic ProgramsabstractWe study the multiple specialization of logic programs based on abstract interpretation.This involves in general generating several versions of a program predicate for different uses of such predicate, making use of information obtained from global analysis performed by an abstract interpreter, and finally producing a new, '~multiply specialized" program.While the topic of multiple specialization of logic programs has received considerable theoretical attention, it has never been actually incorporated in a compiler and its effects quantified.We perform such a study in the context of a parallelizing compiler and show that it is indeed a relevant technique in practice.Also, we propose an implementation technique which has the same power as the strongest of the previously proposed techniques but requires little or no modification of an existing abstract interpreter. Germán Puebla, Manuel V. Hermenegildo |
PEPM | 2 |
| 1995 | Improving Abstract Interpretations by Combining DomainsabstractThis article considers static analysis based on abstract interpretation of logic programs over combined domains. It is known that analyses over combined domains provide more information potentially than obtained by the independent analyses. However, the construction of a combined analysis often requires redefining the basic operations for the combined domain. A practical approach to maintain precision in combined analyses of logic programs which reuses the individual analyses and does not redefine the basic operations is illustrated. The advantages of the approach are that (1) proofs of correctness for the new domains are not required and (2) implementations can be reused. The approach is demonstrated by showing that a combined sharing analysis—constructed from “old” proposals—compares well with other “new” proposals suggested in recent literature both from the point of view of efficiency and accuracy. Michael Codish, Anne Mulkers, Maurice Bruynooghe, Maria Garcia de la Banda, Manuel V. Hermenegildo |
ACM Trans. Program. Lang. Syst. | 5 |
| 1994 | ACE: And/Or-parallel Copying-based Execution of Logic Programs
Gopal Gupta 0001, Manuel V. Hermenegildo, Enrico Pontelli, Vítor Santos Costa |
ICLP | 2 |
| 1994 | Goal Dependent versus Goal Independent Analysis of Logic Programs
Michael Codish, Maria Garcia de la Banda, Maurice Bruynooghe, Manuel V. Hermenegildo |
LPAR | 4 |
| 1994 | Analyzing Logic Programs with Dynamic SchedulingabstractTraditional logic programming languages, such as Prolog, use a fixed left-to-right atom scheduling rule. Recent logic programming languages, however, usually provide more flexible scheduling in which computation generally proceed left-to-right but in which some calls are dynamically “delayed” until their arguments are sufficiently instantiated to allow the call to run efficiently. Such dynamic scheduling has a significant cost. We give a framework for the global analysis of logic programming languages with dynamic scheduling and show that program analysis based on this framework supports optimizations which remove much of the overhead of dynamic scheduling. Kim Marriott, Maria Garcia de la Banda, Manuel V. Hermenegildo |
POPL | 3 |
| 1994 | Estimating the Computational Cost of Logic Programs
Saumya K. Debray, Pedro López-García 0001, Manuel V. Hermenegildo, Nai-Wei Lin |
SAS | 3 |
| 1994 | Extracting Non-Strict Independent And-Parallelism Using Sharing and Freeness Information
Daniel Cabeza, Manuel V. Hermenegildo |
SAS | 2 |
| 1993 | Some Paradigms for Visualizing Parallel Execution of Logic Programs
Manuel Carro, Luis Manuel Gómez Henríquez, Manuel V. Hermenegildo |
ICLP | 3 |
| 1993 | Improving Abstract Interpretations by Combining DomainsabstractIn this paper we consider static analyses based on abstract interpretation of logic programs over combined domains. It is known that analyses over combined domains potentially provide more information than obtainable by performing the independent abstract interpretations. However, the construction of a combined analysis often requires redefining the basic operations for the combined domain. We demonstrate for logic programs that in practice it is possible to obtain precision in a combined analysis without redefining the basic operations. We also propose a way of performing the combination which can be more precise than the straightforward application of the classical “reduced product” approach, while keeping the original components of the basic operations. The advantage of the approach is that proofs of correctness for the new domains are not required and implementations can be reused. We illustrate our results by showing that a combined sharing analysis—constructed from “old” proposals—compares well with other “new” proposals suggested in recent literature both from the point of view of efficiency and accuracy. Michael Codish, Anne Mulkers, Maurice Bruynooghe, Maria Garcia de la Banda, Manuel V. Hermenegildo |
PEPM | 5 |
| 1991 | Combined Determination of Sharing and Freeness of Program Variables through Abstract Interpretation
Kalyan Muthukumar, Manuel V. Hermenegildo |
ICLP | 2 |
| 1990 | &-Prolog and its Performance: Exploiting Independent And-Parallelism
Manuel V. Hermenegildo, K. J. Greene |
ICLP | 1 |
| 1990 | Non-Strict Independent And-Parallelism
Manuel V. Hermenegildo, Francesca Rossi 0001 |
ICLP | 1 |
| 1990 | The DCG, UDG, and MEL Methods for Automatic Compile-time Parallelization of Logic Programs for Independent And-parallelism
Kalyan Muthukumar, Manuel V. Hermenegildo |
ICLP | 2 |
| 1990 | Task Granularity Analysis in Logic ProgramsabstractWhile logic programming languages offer a great deal of scope for parallelism, there is usually some overhead associated with the execution of goals in parallel because of the work involved in task creation and scheduling. In practice, therefore, the “granularity” of a goal, i.e. an estimate of the work available under it, should be taken into account when deciding whether or not to execute a goal concurrently as a separate task. This paper describes a method for estimating the granularity of a goal at compile time. The runtime overhead associated with our approach is usually quite small, and the performance improvements resulting from the incorporation of grainsize control can be quite good. This is shown by means of experimental results. Saumya K. Debray, Nai-Wei Lin, Manuel V. Hermenegildo |
PLDI | 3 |
| 1989 | Complete and Efficient Methods for Supporting Side-effects in Independent/Restricted AND-Parallelism
Kalyan Muthukumar, Manuel V. Hermenegildo |
ICLP | 2 |
| 1988 | Memory Performance of AND-parallel Prolog on Shared-Memory Architectures
Manuel V. Hermenegildo, Evan Tick |
ICPP (2) | 1 |
| 1987 | Relating Goal-Scheduling, Precedence, and Memory Management in AND-Parallel Execution of Logic Programs
Manuel V. Hermenegildo |
ICLP | 1 |
| 1986 | An Abstract Machine for Restricted AND-Parallel Execution of Logic Programs
Manuel V. Hermenegildo |
ICLP | 1 |
| 1986 | Efficient Management of Backtracking in AND-Parallelism
Manuel V. Hermenegildo, R. I. Nasr |
ICLP | 1 |
| 1985 | B-Log: A Branch and Bound Methodology for the Parallel Execution of Logic Programs
G. Jack Lipovski, Manuel V. Hermenegildo |
ICPP | 2 |