Theory and art of semantics-directed program execution monitoring
Theory and art of semantics-directed program execution monitoring
Tracing piece by piece: affordable debugging for lazy functional languages
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
Conversion of control dependence to data dependence
POPL '83 Proceedings of the 10th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Why and Where: A Characterization of Data Provenance
ICDT '01 Proceedings of the 8th International Conference on Database Theory
VM lambda: A Functional Calculusfor Scientific Discovery
FLOPS '02 Proceedings of the 6th International Symposium on Functional and Logic Programming
Slicing Programs with Arbitrary Control-flow
AADEBUG '93 Proceedings of the First International Workshop on Automated and Algorithmic Debugging
Program Specialization via Program Slicing
Selected Papers from the Internaltional Seminar on Partial Evaluation
Complete and Partial Redex Trails of Functional Computations
IFL '97 Selected Papers from the 9th International Workshop on Implementation of Functional Languages
ICSE '81 Proceedings of the 5th international conference on Software engineering
Implementation Techniques for Efficient Data-Flow Analysis of Large Programs
ICSM '01 Proceedings of the IEEE International Conference on Software Maintenance (ICSM'01)
Dynamic slicing in higher-order programming languages
Dynamic slicing in higher-order programming languages
A brief survey of program slicing
ACM SIGSOFT Software Engineering Notes
Lineage retrieval for scientific data processing: a survey
ACM Computing Surveys (CSUR)
A survey of data provenance in e-science
ACM SIGMOD Record
Self-adjusting computation
Proceedings of the twenty-sixth ACM SIGMOD-SIGACT-SIGART symposium on Principles of database systems
Provenance and scientific workflows: challenges and opportunities
Proceedings of the 2008 ACM SIGMOD international conference on Management of data
Annotated XML: queries and provenance
Proceedings of the twenty-seventh ACM SIGMOD-SIGACT-SIGART symposium on Principles of database systems
Dynamic slicing of lazy functional programs based on redex trails
Higher-Order and Symbolic Computation
Fable: A Language for Enforcing User-defined Security Policies
SP '08 Proceedings of the 2008 IEEE Symposium on Security and Privacy
On the expressiveness of implicit provenance in query and update languages
ACM Transactions on Database Systems (TODS)
A formal model of dataflow repositories
DILS'07 Proceedings of the 4th international conference on Data integration in the life sciences
TAPIDO: trust and authorization via provenance and integrity in distributed objects
ESOP'08/ETAPS'08 Proceedings of the Theory and practice of software, 17th European conference on Programming languages and systems
Differential Slicing: Identifying Causal Execution Differences for Security Applications
SP '11 Proceedings of the 2011 IEEE Symposium on Security and Privacy
A core calculus for provenance
POST'12 Proceedings of the First international conference on Principles of Security and Trust
TaPP'13 Proceedings of the 5th USENIX conference on Theory and Practice of Provenance
Proceedings of the 5th USENIX Workshop on the Theory and Practice of Provenance
The need for capability policies
Proceedings of the 15th Workshop on Formal Techniques for Java-like Programs
Causality of optimized Haskell: what is burning our cycles?
Proceedings of the 2013 ACM SIGPLAN symposium on Haskell
Proceedings of the 2013 ACM international symposium on New ideas, new paradigms, and reflections on programming & software
A core calculus for provenance
Journal of Computer Security - Security and Trust Principles
Hi-index | 0.00 |
We present techniques that enable higher-order functional computations to "explain" their work by answering questions about how parts of their output were calculated. As explanations, we consider the traditional notion of program slices, which we show can be inadequate, and propose a new notion: trace slices. We present techniques for specifying flexible and rich slicing criteria based on partial expressions, parts of which have been replaced by holes. We characterise program slices in an algorithm-independent fashion and show that a least slice for a given criterion exists. We then present an algorithm, called unevaluation, for computing least program slices from computations reified as traces. Observing a limitation of program slices, we develop a notion of trace slice as another form of explanation and present an algorithm for computing them. The unevaluation algorithm can be applied to any subtrace of a trace slice to compute a program slice whose evaluation generates that subtrace. This close correspondence between programs, traces, and their slices can enable the programmer to understand a computation interactively, in terms of the programming language in which the computation is expressed. We present an implementation in the form of a tool, discuss some important practical implementation concerns and present some techniques for addressing them.