{'fraction_non_alphanumeric': 0.023616734143049933, 'fraction_numerical': 0.0, 'mean_word_length': 5.392241379310345, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Temporal Data Model for Program Debugging

We present a novel approach to program debugging and dynamic program analysis based on a temporal data model and query language. The data model exposes a point-based view of executions, while the underlying data is represented using intervals, for efficiency reasons. The point-based query language supports selection, projection, joins, grouping/aggregation, and recursion on both data and temporal attributes. We present examples of debug and dynamic analysis queries to illustrate our approach. The main technical contribution of the paper lies in showing how to evaluate pointbased recursive queries against the interval-based data. In order to evaluate a non-recursive point-based query, it is first compiled into an interval-based query. The compilation relies on a normalization operation to preserve point-based semantics when evaluating compiled queries against interval-based data. It turns out that a straightforward extension of the compilation to handle recursion yields non-linear recursive queries with non-stratified negation. We circumvent this problem by employing a simpler compilation and introducing a normalizing immediate-consequence operator for bottom-up evaluation. We also present correctness and termination theorems for our temporal recursive query evaluation strategy. This work forms part of a larger research project in developing JIVE, a state-of-the-art dynamic analysis and visualization system for Java.