Extending arbitrary Homomorphisms along a Chase Branch #
For some results about alternative matches, we need the ability to extend a homomorphisms from the chase node to the chase result into an endomorphism on the chase result (ChaseBranch.hom_for_node_extendable_to_result). We can do this in a step by step fashion along the chase. Although the result is sufficiently different, the construction, in spirit, is similar to the one used in the universality result (chaseTreeResultIsUniversal).
To eventually create the extended homomorphism, we step-wise construct pairs of suffixes of the chase branch in question and GroundTermMappings such that mapping agrees with the initial one on the initial set of facts and the mapping is a homomorphism from the head of the current suffix into the chase result.
Equations
- One or more equations did not get rendered due to their size.
Instances For
This function creates a new InductiveHomomorphismExtensionResult from an (unfolded) previous one given the fact that ChaseDerivation.next exists.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The ChaseDerivation returned by extend_hom_to_next_step_of_next_eq_some is the ChaseDerivation.tail of the previous derivation.
The homomorphism returned by extend_hom_to_next_step_of_next_eq_some agrees with the previous one on all terms in the previous derivation head.
We extend a given InductiveHomomorphismExtensionResult into the next one, mainly by calling extend_hom_to_next_step_of_next_eq_some. If ChaseDerivation.next is none, we also simply return none.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The ChaseDerivation returned by extend_hom_to_next_step is the ChaseDerivation.tail of the previous derivation.
The homomorphism returned by extend_hom_to_next_step agrees with the previous one on all terms in the previous derivation head.
Using extend_hom_to_next_step as a generator in PossiblyInfiniteList.generate we can create a possiblibly infinite list of homomorphisms that extend each other and all map to the result. We can combine them into a single function to have an endomorphism on the result. The idea is similar to the construction used in chaseTreeResultIsUniversal.