RPC-like Non-Termination #
We are going to formalize sufficient conditions for chase non-termination. Mainly, we will introduce the necessary machinery from Restricted Prefix Cyclicity (RPC) [GC23a] but we also aim to generalize this to capture (Disjunctive) Model-Faithful Cyclicity ((D)MFC) [GC23b] [CDK17] at the same time.
SO FAR, WE ONLY HAVE A FEW VERY BASIC DEFINITIONS. THERE IS A LONG WAY TO GO.
A KnowledgeBase never-terminates if none of its ChaseTrees terminates.
Equations
- kb.neverTerminates obs = ∀ (ct : ChaseTree obs kb), ¬ct.terminates
Instances For
Maybe this seems counterintuitive but a RuleSet never-terminates if for at least one Database the corresponding KnowledgeBase.neverTerminates. Asking this question for all Databases would be trivial, at least for the restricted chase, since for every rule set there is a database that satisfies all the rules directly and therefore only has terminating restricted chase trees.
Equations
Instances For
A trigger is unblockable if its result necessarily occurs in every derivation where the trigger is loaded. In the introducing paper this is called g-unblockable.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A CyclicityDerivation is an infinite list of ChaseNodes. We demand only that triggers are loaded, new terms keep being added (growing) and that triggers are unblockable. This is much different from a ChaseDerivation but intuitively, we can view a CyclicityDerivation as a very special non-continuous subderivation of a suitable ChaseDerivation.
- branch : PossiblyInfiniteList (ChaseNode obs rules)
- triggers_loaded (n : Nat) (before : ChaseNode obs rules) : before ∈ (self.branch.drop n).head → ∀ (after : ChaseNode obs rules), after ∈ (self.branch.drop n).tail.head → ∃ (orig : (trg : RTrigger { cond := obs.cond, monotone := ⋯ } rules) × Fin trg.val.mapped_head.length), orig ∈ after.origin ∧ orig.fst.val.loaded before.facts
Instances For
Equations
- CyclicityDerivation.instMembershipChaseNode = { mem := fun (cd : CyclicityDerivation obs rules) (node : ChaseNode obs rules) => node ∈ cd.toChaseDerivationSkeleton }
We restate the growing property using vocabulary available for ChaseDerivationSkeletons.
The result of a CyclicityDerivation is infinite due to the growing property.
Each CyclicityDerivation is infinite because it is growing. It might surprise that this is independant from the above result. However, note that we can only relate finiteness of the result and termination for proper ChaseBranches so corresponding results are not applicable here.
This is the CyclicitySequence from the RPC paper. For us, it is a CyclicityDerivation that starts on a database.
- branch : PossiblyInfiniteList (ChaseNode obs kb.rules)
- triggers_loaded (n : Nat) (before : ChaseNode obs kb.rules) : before ∈ (self.branch.drop n).head → ∀ (after : ChaseNode obs kb.rules), after ∈ (self.branch.drop n).tail.head → ∃ (orig : (trg : RTrigger { cond := obs.cond, monotone := ⋯ } kb.rules) × Fin trg.val.mapped_head.length), orig ∈ after.origin ∧ orig.fst.val.loaded before.facts