Joxan Jaffar

dblp:j/JoxanJaffar · DBLP profile ↗
← Back
62ranked-venue papers
35as first author
2since 2021 · last 2024
0000-0001-9988-6144ORCID · verified

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

Software engineering, systems software and programming languages · 41 · 24 first-author · 2 since 2021Theory of computation · 16 · 10 first-authorArtificial intelligence and machine learning · 10 · 8 first-authorApplied, interdisciplinary, general and emerging computing · 5 · 2 first-authorDatabases, data management, data science and information retrieval · 3 · 2 first-authorGraphics, computer vision, multimedia, augmented reality and games · 3 · 3 first-authorSystems, architecture and hardware · 2Security and privacy · 1
YearPublicationVenuePosition
2024 TracerX: Pruning Dynamic Symbolic Execution with Deletion and Weakest Precondition Interpolation (Competition Contribution)
abstract
Abstract Dynamic Symbolic Execution (DSE) is an important method for the testing of programs. The major advantage of DSE is its path-by-path exploration of the program execution space. However, this often leads to the path explosion problem. To address this issue, a method of abstraction learning has been used. The key step here is the computation of an interpolant to represent the learned abstraction. In Test-Comp 2024, we use two different approaches of interpolant generation viz., Deletion Interpolation and Weakest Precondition Interpolation. The former is our more stable and mature system and briefly discussed in [8]. In this paper, we present the latter approach which is the heart of TracerX. In general, the Weakest Precondition (WP) is the ideal (most general) interpolant. However, WP is intractable to compute and is exponentially disjunctive. A major challenge is to obtain a conjunctive approximation of the WP. Therefore, we generate an approximation of the WP.
Arpita Dutta, Rasool Maghareh, Joxan Jaffar, Sangharatna Godboley, Xiao Liang Yu
FASE3
2021 Toward optimal mc/dc test case generation
abstract
MC/DC coverage prescribes a set of MC/DC sequences. Such a sequence is defined by a specification of the truth values of certain atomic boolean expressions which appear in predicates (i.e. boolean combinations of atomic boolean expressions) in the program. An execution trace satisfies the sequence if it realizes the atomic boolean conditions in accordance with the truth value specification of the sequence. An MC/DC sequence is feasible if there is one such execution trace. The overall goal for an MC/DC test generator is, for each sequence: if feasible, to generate a test input realizing the sequence; otherwise, to prove that the sequence is infeasible.
Sangharatna Godboley, Joxan Jaffar, Rasool Maghareh, Arpita Dutta
ISSTA2
2020 TracerX: Dynamic Symbolic Execution with Interpolation (Competition Contribution)
abstract
Dynamic Symbolic Execution (DSE) is an important method for testing of programs. An important system on DSE is KLEE [ 1 ] which inputs a C/C++ program annotated with symbolic variables, compiles it into LLVM, and then emulates the execution paths of LLVM using a specified backtracking strategy. The major challenge in symbolic execution is path explosion . The method of abstraction learning [ 7 ] has been used to address this. The key step here is the computation of an interpolant to represent the learned abstraction. TracerX, our tool, is built on top of KLEE and it implements and utilizes abstraction learning . The core feature in abstraction learning is subsumption of paths whose traversals are deemed to no longer be necessary due to similarity with already-traversed paths. Despite the overhead of computing interpolants, the pruning of the symbolic execution tree that interpolants provide often brings significant overall benefits. In particular, TracerX can fully explore many programs that would be impossible for any non-pruning system like KLEE to do so.
Joxan Jaffar, Rasool Maghareh, Sangharatna Godboley, Xuan-Linh Ha
FASE1
2020 Inter-theory dependency analysis for SMT string solvers
abstract
Solvers in the framework of Satisfiability Modulo Theories (SMT) have been widely successful in practice. Recently there has been an increasing interest in solvers for string constraints to address security issues in web programming, for example. To be practically useful, the solvers need to support an expressive constraint language over unbounded strings, and in particular, over string lengths. Satisfiability checking for these formulas, especially in the SMT context, is very hard; it is generally undecidable for a rich fragment. In this paper, we propose a form of dependency analysis for a rich fragment of string constraints including high-level operations such as length, contains to deal with their inter-theory interaction so as to solve them more efficiently. We implement our dependency analysis in the string theory of the Z3 solver to obtain a new one, called S3N. Finally, we demonstrate the superior performance of S3N over state-of-the-art string solvers such as Z3str3, CVC4, S3P, and Z3 on several large industrial-strength benchmarks.
Minh-Thai Trinh, Duc-Hiep Chu, Joxan Jaffar
Proc. ACM Program. Lang.3
2018 Shape Neutral Analysis of Graph-based Data-structures
abstract
Abstract Malformed data-structures can lead to runtime errors such as arbitrary memory access or corruption. Despite this, reasoning over data-structure properties for low-level heap manipulating programs remains challenging. In this paper we present a constraint-based program analysis that checks data-structure integrity, w.r.t. given target data-structure properties, as the heap is manipulated by the program. Our approach is to automatically generate a solver for properties using the type definitions from the target program. The generated solver is implemented using a Constraint Handling Rules (CHR) extension of built-in heap, integer and equality solvers. A key property of our program analysis is that the target data-structure properties areshape neutral, i.e., the analysis does not check for properties relating to a given data-structure graphshape, such as doubly-linked-lists versus trees. Nevertheless, the analysis can detect errors in a wide range of data-structure manipulating programs, including those that use lists, trees, DAGs, graphs, etc. We present an implementation that uses the Satisfiability Modulo Constraint Handling Rules (SMCHR) system. Experimental results show that our approach works well for real-world C programs.
Gregory J. Duck, Joxan Jaffar, Roland H. C. Yap
Theory Pract. Log. Program.2
2017 Model Counting for Recursively-Defined Strings
Minh-Thai Trinh, Duc-Hiep Chu, Joxan Jaffar
CAV (2)3
2016 Progressive Reasoning over Recursively-Defined Strings
Minh-Thai Trinh, Duc-Hiep Chu, Joxan Jaffar
CAV (1)3
2016 Symbolic execution for memory consumption analysis
abstract
With the advances in both hardware and software of embedded systems in the past few years, dynamic memory allocation can now be safely used in embedded software. As a result, the need to develop methods to avoid heap overflow errors in safety-critical embedded systems has increased. Resource analysis of imperative programs with non-regular loop patterns and signed integers, to support both memory allocation and deallocation, has long been an open problem. Existing methods can generate symbolic bounds that are parametric w.r.t. the program inputs; such bounds, however, are imprecise in the presence of non-regular loop patterns. In this paper, we present a worst-case memory consumption analysis, based upon the framework of symbolic execution. Our assumption is that loops (and recursions) of to-be-analyzed programs are indeed bounded. We then can exhaustively unroll loops and the memory consumption of each iteration can be precisely computed and summarized for aggregation. Because of path-sensitivity, our algorithm generates more precise bounds. Importantly, we demonstrate that by introducing a new concept of reuse, symbolic execution scales to a set of realistic benchmark programs.
Duc-Hiep Chu, Joxan Jaffar, Rasool Maghareh
LCTES2
2016 Precise Cache Timing Analysis via Symbolic Execution
abstract
We present a framework for WCET analysis of programs with emphasis on cache micro-architecture. Such an analysis is challenging primarily because of the timing model of a dynamic nature, that is, the timing of a basic block is heavily dependent on the context in which it is executed. At its core, our algorithm is based on symbolic execution, and an analysis is obtained by locating the "longest" symbolic execution path. Clearly a challenge is the intractable number of paths in the symbolic execution tree. Traditionally this challenge is met by performing some form of abstraction in the path generation process but this leads to a loss of path-sensitivity and thus precision in the analysis. The key feature of our algorithm is the ability for reuse. This is critical for maintaining a high-level of path-sensitivity, which in turn produces significantly increased accuracy. In other words, reuse allows scalability in path-sensitive exploration. Finally, we present an experimental evaluation on well known benchmarks in order to show two things: that systematic path-sensitivity in fact brings significant accuracy gains, and that the algorithm still scales well.
Duc-Hiep Chu, Joxan Jaffar, Rasool Maghareh
RTAS2
2015 Automatic induction proofs of data-structures in imperative programs
abstract
We consider the problem of automated reasoning about dynamically manipulated data structures. Essential properties are encoded as predicates whose definitions are formalized via user-defined recursive rules. Traditionally, proving relationships between such properties is limited to the unfold-and-match (U+M) paradigm which employs systematic transformation steps of folding/unfolding the rules. A proof, using U+M, succeeds when we find a sequence of transformations that produces a final formula which is obviously provable by simply matching terms. Our contribution here is the addition of the fundamental principle of induction to this automated process. We first show that some proof obligations that are dynamically generated in the process can be used as induction hypotheses in the future, and then we show how to use these hypotheses in an induction step which generates a new proof obligation aside from those obtained by using the fold/unfold operations. While the adding of induction is an obvious need in general, no automated method has managed to include this in a systematic and general way. The main reason for this is the problem of avoiding circular reasoning. We overcome this with a novel checking condition. In summary, our contribution is a proof method which – beyond U+M – performs automatic formula re-writing by treating previously encountered obligations in each proof path as possible induction hypotheses. In the practical evaluation part of this paper, we show how the commonly used technique of using unproven lemmas can be avoided, using realistic benchmarks. This not only removes the current burden of coming up with the appropriate lemmas, but also significantly boosts up the verification process, since lemma applications, coupled with unfolding, often induce a large search space. In the end, our method can automatically reason about a new class of formulas arising from practical program verification.
Duc-Hiep Chu, Joxan Jaffar, Minh-Thai Trinh
PLDI2
2014 S3: A Symbolic String Solver for Vulnerability Detection in Web Applications
abstract
Motivated by the vulnerability analysis of web programs which work on string inputs, we present S3, a new symbolic string solver. Our solver employs a new algorithm for a constraint language that is expressive enough for widespread applicability. Specifically, our language covers all the main string operations, such as those in JavaScript. The algorithm first makes use of a symbolic representation so that membership in a set defined by a regular expression can be encoded as string equations. Secondly, there is a constraint-based generation of instances from these symbolic expressions so that the total number of instances can be limited. We evaluate S3 on a well-known set of practical benchmarks, demonstrating both its robustness (more definitive answers) and its efficiency (about 20 times faster) against the state-of-the-art.
Minh-Thai Trinh, Duc-Hiep Chu, Joxan Jaffar
CCS3
2014 Lazy Symbolic Execution for Enhanced Learning
Duc-Hiep Chu, Joxan Jaffar, Vijayaraghavan Murali
RV2
2014 A path-sensitively sliced control flow graph
abstract
We present a new graph representation of programs with specified target variables. These programs are intended to be processed by third-party applications querying target variables such as testers and verifiers. The representation embodies two concepts. First, it is path-sensitive in the sense that multiple nodes representing one program point may exist so that infeasible paths can be excluded. Second, and more importantly, it is sliced with respect to the target variables. This key step is founded on a novel idea introduced in this paper, called ``Tree Slicing'', and on the fact that slicing is more effective when there is path sensitivity. Compared to the traditional Control Flow Graph (CFG), the new graph may be bigger (due to path-sensitivity) or smaller (due to slicing). We show that it is not much bigger in practice, if at all. The main result however concerns its quality: third-party testers and verifiers perform substantially better on the new graph compared to the original CFG.
Joxan Jaffar, Vijayaraghavan Murali
SIGSOFT FSE1
2013 Constraint-Based Program Reasoning with Heaps and Separation
Gregory J. Duck, Joxan Jaffar, Nicolas C. H. Koh
CP2
2013 Path-sensitive resource analysis compliant with assertions
abstract
We consider the problem of bounding the worst-case resource usage of programs, where assertions about valid program executions may be enforced at selected program points. It is folklore that to be precise, path-sensitivity (up to loops) is needed. This entails unrolling loops in the manner of symbolic simulation. To be tractable, however, the treatment of the individual loop iterations must be greedy in the sense once analysis is finished on one iteration, we cannot backtrack to change it. We show that under these conditions, enforcing assertions produces unsound results. The fundamental reason is that complying with assertions requires the analysis to be fully sensitive (also with loops) wrt. the assertion variables. We then present an algorithm where the treatment of each loop is separated in two phases. The first phase uses a greedy strategy in unrolling the loop. This phase explores what is conceptually a symbolic execution tree, which is of enormous size, while eliminates infeasible paths and dominated paths that guaranteed not to contribute to the worst case bound. A compact representation is produced at the end of this phase. Finally, the second phase attacks the remaining problem, to determine the worst-case path in the simplified tree, excluding all paths that violate the assertions from bound calculation. Scalability, in both phases, is achieved via an adaptation of a dynamic programming algorithm.
Duc-Hiep Chu, Joxan Jaffar
EMSOFT2
2013 Boosting concolic testing via interpolation
abstract
Concolic testing has been very successful in automatically generating test inputs for programs. However one of its major limitations is path-explosion that limits the generation of high coverage inputs. Since its inception several ideas have been proposed to attack this problem from various angles: defining search heuristics that increase coverage, caching of function summaries, pruning of paths using static/dynamic information etc.
Joxan Jaffar, Vijayaraghavan Murali, Jorge A. Navas
ESEC/SIGSOFT FSE1
2012 A Complete Method for Symmetry Reduction in Safety Verification
Duc-Hiep Chu, Joxan Jaffar
CAV2
2012 TRACER: A Symbolic Execution Tool for Verification
Joxan Jaffar, Vijayaraghavan Murali, Jorge A. Navas, Andrew E. Santosa
CAV1
2012 Path-Sensitive Backward Slicing
Joxan Jaffar, Vijayaraghavan Murali, Jorge A. Navas, Andrew E. Santosa
SAS1
2011 Symbolic simulation on complicated loops for WCET path analysis
abstract
We address the Worst-Case Execution Time (WCET) Path Analysis problem for bounded programs, formalized as discovering a tight upper bound of a resource variable. A key challenge is posed by complicated loops whose iterations exhibit non-uniform behavior. We adopt a brute-force strategy by simply unrolling them, and show how to make this scalable while preserving accuracy.
Duc-Hiep Chu, Joxan Jaffar
EMSOFT2
2011 Unbounded Symbolic Execution for Program Verification
Joxan Jaffar, Jorge A. Navas, Andrew E. Santosa
RV1
2010 Abstraction Learning
Joxan Jaffar, Jorge A. Navas, Andrew E. Santosa
ATVA1
2009 An Interpolation Method for CLP Traversal
Joxan Jaffar, Andrew E. Santosa, Razvan Voicu
CP1
2009 Recursive Abstractions for Parameterized Systems
Joxan Jaffar, Andrew E. Santosa
FM1
2008 Efficient Memoization for Dynamic Programming with Ad-Hoc Constraints
Joxan Jaffar, Andrew E. Santosa, Razvan Voicu
AAAI1
2008 A Coinduction Rule for Entailment of Recursively Defined Properties
Joxan Jaffar, Andrew E. Santosa, Razvan Voicu
CP1
2007 Generalized Committed Choice
Joxan Jaffar, Roland H. C. Yap, Kenny Q. Zhu
COORDINATION1
2006 Indexing for Dynamic Abstract Regions
abstract
We propose a new main memory index structure for abstract regions (objects) which may heavily overlap, the RCtree. These objects are "dynamic" and may have short life spans. The novelty is that rather than representing an object by its minimum bounding rectangle (MBR), possibly with pre-processed segmentation into many small MBRs, we use the actual shape of the object to maintain the index. This saves significant space for objects with large spatial extents since pre-segmentation is not needed. We show that the query performance of RC-tree is much better than many indexing schemes on synthetic overlapping data sets. The performance is also competitive on real-life GIS nonoverlapping data sets.
Joxan Jaffar, Roland H. C. Yap, Kenny Q. Zhu
ICDE1
2006 Instruction Scheduling with Release Times and Deadlines on ILP Processors
abstract
ILP (instruction level parallelism) processors are being increasingly used in embedded systems. In embedded systems, instructions may be subject to timing constraints. An optimising compiler for ILP processors needs to find a feasible schedule for a set of time-constrained instructions. In this paper, we present a fast algorithm for scheduling instructions with precedence-latency constraints, individual integer release times and deadlines on an ILP processor with multiple functional units. The time complexity of our algorithm is O(n2logd)+min{O(de), O(ne)}+min{O(ne), O(n2.376)}, where n is the number of instructions, e is the number of edges in the precedence graph and d is the maximum latency. Our algorithm is guaranteed to find a feasible schedule whenever one exists in the following special cases: 1) one functional unit, arbitrary precedence constraints, latencies in {0,1}, integer release times and deadlines; 2) two identical functional units, arbitrary precedence constraints, latencies of 0, integer release times and deadlines; 3) multiple identical functional units or multiple functional units of different types, monotone interval-ordered graph, integer release times and deadlines; 4) multiple identical functional units, in-forest, equal latencies, integer release times and deadlines. In case 1) our algorithm improves the existing fastest algorithm from O(n2logn)+min{O(ne), O(n2.376)} to min{O(ne), O(n2.376)}. In case 2) our algorithm improves the existing fastest algorithm from O(ne+n2logn) to min{O(ne), O(n2.376)}. In case 3) no polynomial time algorithm for multiple functional units of different types was known before
Hui Wu 0001, Joxan Jaffar, Jingling Xue
RTCSA2
2006 A CLP Method for Compositional and Intermittent Predicate Abstraction
Joxan Jaffar, Andrew E. Santosa, Razvan Voicu
VMCAI1
2006 Relative Safety
Joxan Jaffar, Andrew E. Santosa, Razvan Voicu
VMCAI1
2005 Modeling Systems in CLP
Joxan Jaffar, Andrew E. Santosa, Razvan Voicu
ICLP1
2005 Coordination of Many Agents
Joxan Jaffar, Roland H. C. Yap, Kenny Q. Zhu
ICLP1
2004 A CLP Approach to Modelling Systems
Joxan Jaffar
APLAS1
2004 A CLP Approach to Modelling Systems
Joxan Jaffar
ICFEM1
2004 Scalable Distributed Depth-First Search with Greedy Work Stealing
abstract
We present a framework for the parallelization of depth-first combinatorial search algorithms on a network of computers. Our architecture is intended for a distributed setting and uses a work stealing strategy coupled with a small number of primitives for the processors (which we call workers) to obtain new work and to communicate to other workers. These primitives are a minimal imposition and integrate easily with constraint programming systems. The main contribution is an adaptive architecture, which allows workers to incrementally join and leave and has good scaling properties as the number of workers increases. Our empirical results illustrate that near-linear speedup for backtrack search is achieved for up to 61 workers. It suggests that near-linear speedup is possible with even more workers. The experiments also demonstrate where departures from linearity can occur for small problems, and also for problems where the parallelism can itself affect the search as in branch and bound.
Joxan Jaffar, Andrew E. Santosa, Roland H. C. Yap, Kenny Q. Zhu
ICTAI1
2004 A CLP Proof Method for Timed Automata
abstract
Constraint logic programming (CLP) has been used to model programs and transition systems for the purpose of verification problems. In particular, it has been used to model timed safety automata (TSA). In this paper, we start with a systematic translation of TSA into CLP. The main contribution is an expressive assertion language and a CLP inference method for proving assertions. A distinction of the assertion language is that it can specify important properties beyond traditional safety properties. We highlight one important property: that a system of processes is symmetric. The inference mechanism is based upon the well-known method of tabling in logic programming. It is distinguished by its ability to use assertions that are not yet proven, using a principle of coinduction. Apart from given assertions, the proof mechanism can also prove implicit assertions such as discovering a lower or upper bound of a variable. Finally, we demonstrate significant improvements over state-of-the-art systems using standard TSA benchmark examples.
Joxan Jaffar, Andrew E. Santosa, Razvan Voicu
RTSS1
2002 Two processor scheduling with real release times and deadlines
abstract
In a hard real-time system, critical tasks are subject to timing constraints such as release times and deadlines. All timing constraints must be satisfied when tasks are executed. Nevertheless, given a set of tasks, finding a feasible schedule which satisfies all timing constraints is NP-complete even on one processor.In this paper, we study the following special non-pre-emptive two processor scheduling problem: Given a set of UET (Unit Execution Time) tasks with arbitrary precedence constraints, individual real release times and deadlines, find a feasible schedule on two identical processors whenever one exists. The complexity status of this problem has been open for a long time. we propose the first polynomial algorithm for this problem. Our algorithm is underpinned by the key consistency notion: successor-tree-consistency. The time complexity of our algorithm is O(n4), where n is the number of tasks.
Hui Wu 0001, Joxan Jaffar
SPAA2
2002 An Efficient Distributed Deadlock Avoidance Algorithm for the AND Model
abstract
A new rank-based distributed deadlock avoidance algorithm for the AND resource request model is presented. Deadlocks are avoided by dynamically maintaining an invariant Con(WFG): For each pair of processes p/sub i/ and p/sub j/, p/sub i/ is allowed to wait for process p/sub j/ iff the rank of p/sub j/ is greater than that of p/sub i/ for the WFG (Wait-For Graph). Our algorithm neither restricts the order of resource requests nor needs a priori information about resource requests nor causes unnecessary abortion of processes. Multidimensional ranks, which are partially ordered and dynamically modified are used to drastically reduce the cost of maintaining Con(WFG). Our simulation results show that the performance of our algorithm is better than that of existing algorithms.
Hui Wu 0001, Wei-Ngan Chin, Joxan Jaffar
IEEE Trans. Software Eng.3
2001 An Efficient Algorithm for Scheduling Instructions with Deadline Constraints on ILP Processors
abstract
We propose an efficient algorithm for scheduling UET (unit execution time) instructions with deadline constraints on ILP (instruction level parallelism) processors with multiple functional units of different types. The time complexity of our algorithm is O(ne + nd), where n is the number of instructions, e is the number of edges in the precedence graph and d is the maximum latency. Our algorithm is guaranteed to compute a feasible schedule whenever one exists in the following special cases: 1) arbitrary precedence constraints, latencies in {-1, 0} and two functional units; 2) in-forest, equal latencies and multiple functional units; 3) monotone interval graph and multiple functional units. For all above special cases, if no feasible schedule exists, our algorithm will compute a schedule with minimum lateness. In each of the above special cases, no polynomial time algorithm existed before. Moreover by setting all deadlines to a sufficiently large integer, our algorithm will compute a schedule with minimum length in all the above special cases.
Hui Wu 0001, Joxan Jaffar
RTSS2
2000 Instruction Scheduling with Timing Constraints on a Single RISC Processor with 0/1 Latencies
Hui Wu 0001, Joxan Jaffar, Roland H. C. Yap
CP2
2000 A Framework for Combining Analysis and Verification
abstract
We present a general framework for combining program verification and program analysis. This framework enhances program analysis because it takes advantage of user assertions, and it enhances program verification because assertions can be refined using automatic program analysis. Both enhancements in general produce a better way of reasoning about programs than using verification techniques alone or analysis techniques alone. More importantly, the combination is better than simply running the verification and analysis in isolation and then combining the results at the last step. In other words, our framework explores synergistic interaction between verification and analysis.
Nevin Heintze, Joxan Jaffar, Razvan Voicu
POPL2
1998 Open Constraint Programming
Joxan Jaffar, Roland H. C. Yap
CP1
1997 Forward and Backward Chaining in Constraint Programming (Abstract)
Joxan Jaffar, Bing Liu 0001, Roland H. C. Yap
LPNMR1
1995 A Generic Algorithm for CLP Analysis
Nevin Heintze, Joxan Jaffar
ICLP2
1993 Toward Practical Constraint Databases
Alexander Brodsky 0001, Joxan Jaffar, Michael J. Maher
VLDB2
1992 An Engine for Logic Program Analysis
abstract
An engine that is based on unfolding of semantic equations is presented. A main advantage of the unfolding engine is a uniform treatment of structural information in a program. In particular, reasoning about partially instantiated structures, an area where traditional algorithms have been weak, is greatly enhanced. It is shown that the engine is uniformly more accurate than the standard engine in the sense that, given an abstract domain, its output, for any program is more accurate than that of the standard engine.>
Nevin Heintze, Joxan Jaffar
LICS2
1992 An Abstract Machine for CLP(R)
abstract
An abstract machine is described for the CLP(ℜ) programming language. It is intended as a first step toward enabling CLP(ℜ) programs to be executed with efficiency approaching that of conventional languages. The core Constraint Logic Arithmetic Machine (CLAM) extends the Warren Abstract Machine (WAM) for compiling Prolog with facilities for handling real arithmetic constraints. The full CLAM includes facilities for taking advantage of information obtained from global program analysis.
Joxan Jaffar, Spiro Michaylov, Peter J. Stuckey, Roland H. C. Yap
PLDI1
1992 The CLP(R) Language and System
Joxan Jaffar, Spiro Michaylov, Peter J. Stuckey, Roland H. C. Yap
ACM Trans. Program. Lang. Syst.1
1991 A Methodology for Managing Hard Constraints in CLP Systems
abstract
In constraint logic programming (CLP) systems, the standard technique for dealing with hard constraints is to delay solving them until additional constraints reduce them to a simpler form.For example, the CLP (7?) system delays the solving of nonlinear equations until they become linear, when certain variables become ground.In a naive implement ation, the overhead of delaying and awakening constraints could render a CLP system impractical.
Joxan Jaffar, Spiro Michaylov, Roland H. C. Yap
PLDI1
1990 A Decision Procedure for a Class of Set Constraints (Extended Abstract)
abstract
A set constraint is of the form exp/sub 1/ contains exp/sub 2/ where exp/sub 1/ and exp/sub 2/ are set expressions constructed using variables, function symbols, projection symbols, and the set union, intersection, and complement symbols. While the satisfiability problem for such constraints is open, restricted classes have been useful in program analysis. The main result is a decision procedure for definite set constraints which are of the restricted form a contains exp, where a contains only constants, variables, and function symbols, and exp is a positive set expression (that is, it does not contain the complement symbol). A conjunction of such constraints, whenever satisfiable, has a least model and the algorithm will output an explicit representation of this model. An additional feature of the algorithm is that it deals with another important class of set constraints. These are the solved form set constraints which have the form X/sub 1/=exp/sub 1/, . . ., X/sub n/=exp/sub n/, where the X/sub i/ are distinct variables and the exp/sub i/ are positive set expressions. A solved form constraint is always satisfiable and possesses a least and a greatest model. The algorithm can output explicit representations of both.>
Nevin Heintze, Joxan Jaffar
LICS2
1990 A Finite Presentation Theorem for Approximating Logic Programs
abstract
The notion of Cartesian closure on a set of unifiers has been used to define approximations of the least models of logic programs. Such approximations, often called types, are not known to be recursive. In this paper, we use Cartesian closure to define a similar, but more accurate, approximation. The main result proves that our approximation is not only recursive, but that it can be finitely represented in the form of a cyclic term graph. This explicit representation can be used as a starting point for logic program analyzers.
Nevin Heintze, Joxan Jaffar
POPL2
1990 Minimal and Complete Word Unification
abstract
The fundamental satisfiability problem for word equations has been solved recently by Makanin. However, this algorithm is purely a decision algorithm. The main result of this paper solves the complementary problem of generating the set of all solutions. Specifically, the algorithm in this paper generates, given a word equation, a minimal and complete set of unifiers. It stops if this set is finite.
Joxan Jaffar
J. ACM1
1987 Methodology and Implementation of a CLP System
Joxan Jaffar, Spiro Michaylov
ICLP1
1987 Constraint Logic Programming
abstract
We address the problem of designing programming systems to reason with and about constraints. Taking a logic programming approach, we define a class of programming languages, the CLP languages, all of which share the same essential semantic properties. From a conceptual point of view, CLP programs are highly declarative and are soundly based within a unified framework of formal semantics. This framework not only subsumes that of logic programming, but satisfies the core properties of logic programs more naturally. From a user's point of view, CLP programs have great expressive power due to the constraints which they naturally manipulate. Intuition in the reasoning about programs is enhanced as a result of working directly in the intended domain of discourse. This contrasts with working in the Herbrand Universe wherein every semantic object has to be explicitly coded into a Herbrand term; this enforces reasoning at a primitive level. Finally, from an implementor's point of view, CLP systems can be efficient because of the exploitation of constraint solving techniques over specific domains.
Joxan Jaffar, Jean-Louis Lassez
POPL1
1986 Invited Talk: Some Issues and Trends in the Semantics of Logic Programming
Joxan Jaffar, Jean-Louis Lassez, Michael J. Maher
ICLP1
1986 Logic Program Semantics for Programming with Equations
Joxan Jaffar, Peter J. Stuckey
ICLP1
1986 Semantics of Infinite Tree Logic Programming
Joxan Jaffar, Peter J. Stuckey
Theor. Comput. Sci.1
1983 Completeness of the Negation as Failure Rule
Joxan Jaffar, Jean-Louis Lassez, John W. Lloyd
IJCAI1
1983 A Correctness Proof of an Indenting Program
abstract
Abstract The correctness of an indenting program for Pascal is proved at an intermediate level of rigour. The specifications of the program are given in the companion paper.1 The program is approximately 330 lines long and consists of four modules: io, lex, stack and indent. We prove first that the individual procedures contained in these modules meet their specifications as given by the entry and exit assertions. A global proof of the main routine then establishes that the interaction between modules is such that the main routine meets the specification of the entire program. We argue that correctness proofs at the level of rigour used here serve very well to transfer one's understanding of a program to others. We believe proofs at this level should become commonplace before more formal proofs can take over to reduce traditional testing to an inconsequential place.
Prabhaker Mateti, Joxan Jaffar
Softw. Pract. Exp.2
1982 Reasoning about Array Segments
Joxan Jaffar, Jean-Louis Lassez
ECAI1
1981 Presburger Arithmetic With Array Segments
Joxan Jaffar
Inf. Process. Lett.1