The Chase on Deterministic Rules #
In our most general setting, we consider existential rules with disjunctions.
Here, we consider the special case of deterministic rules, i.e. rules with exactly one head disjunct (so essentially no disjunction at all).
Here, ChaseTree and ChaseBranch consequently coincide. At least intuitively. Formally, we still need to implement the corresponding transitions.
Arguably the most interesting result of this file is deterministicChaseBranchResultUniversallyModelsKb.
It states that in the deterministic setting, the result of a ChaseBranch is itself a universal model.
That is, a model that can be homomorphically embedded into every other model [DNR08].
On disjunctive rules this is more complicated as can be seen in chaseTreeResultIsUniversal.
The firstBranch_from_start of a TreeDerivation is generated by always picking the first child node by starting from a particular node in the tree.
Equations
- td.firstBranch_from_start start = td.generate_subderivation start (fun (node : td.NodeWithAddress) => node.childNodes[0]?) id ⋯ ⋯
Instances For
In the deterministic setting, each derivation in a branches of a tree derivation node directly corresponds to the firstBranch_from_start.
The firstBranch of a TreeDerivation is generated by always picking the first child node starting from the root.
Equations
Instances For
The firstResult is the result of the firstBranch.
Equations
- td.firstResult = td.firstBranch.result
Instances For
The firstResult is a member of the TreeDerivation.result.
In the deterministic setting, the branches of a TreeDerivation only contain the firstBranch.
In the deterministic setting, the firstResult of a ChaseTree is by itself a universal model.
We can straightforwardly convert a ChaseDerivation into a TreeDerivation that has the original ChaseDerivation as its only branch.
Equations
Instances For
The root of intoTree is the original head.
The first child node of intoTree is the original next node.
In the context of any TreeDerivation, for a given start node and a ChaseDerivation cd, firstBranch_from_start for the start node returns exactly cd as long as the tree at the start node coincides the tree transformed cd. This is an auxiliary result for firstBranch_intoTree_eq_self below.
The firstBranch of intoTree is the original ChaseDerivation.
The firstResult of intoTree is the original ChaseDerivationSkeleton.result.
We can not only convert a ChaseDerivation into a TreeDerivation but also a ChaseBranch into a ChaseTree.
Equations
Instances For
In the deterministic setting, a ChaseDerivationSkeleton.result for a ChaseBranch is a universal model.