Core Chase Node #
Similar to a ChaseNode, we define another elements of the core chase in a similar fashion.
Besides fact set and origin, these also store the core that the fact set is being condensed to. In principle any such core is allowed and we do not enforce a specific computation procedure.
Homomorphism Repetition in homSubsets #
As a very general insight we prove that we can repeat a homomorphism from a homSubset relation
such that the repeated mapping is still a homomorphism but at the same time the id on all terms that occur in the subset.
This works if the subset is finite.
If core is a finite weak core and a homSubset of fs, then there is a homomorphism from fs to core that is the identity on all of core's terms.
Trigger Satisfaction along finite homSubsets. #
Given a few extra conditions, trigger satisfaction is preserved along the homSubset relation.
This is helpful for the CoreChaseNode later on as each node features a homSubset internally.
If a trigger is satisfied for fs and all of its frontier terms still occur in a finite core homSubset of fs, then the trigger is also satisfied in this homSubset.
If a trigger is satisfied for fs, for every core homSubset of fs, every equivalent trigger is satisfied given that is is loaded. This is a direct consequence of trg_remains_obsolete_of_isWeakCore_of_homSubset_of_finite.
CoreChaseNode Definition and Theorems #
Here we present the actual CoreChaseNode definition and prove
some basic properties also relying on the results above.
The CoreChaseNode add a couple of fields on top of the RegularChaseNode but the facts field has a different meaning. This is why we duplicate the structure and not jsut extend it. We want to prevent that the CoreChaseNode is accidentally treated as a RegularChaseNode.
- facts : FactSet sig
- core : FactSet sig
- isWeakCore : self.core.isWeakCore
Instances For
The CoreChaseNode is a ChaseNode where the outgoingFacts are a core of the ingoingFacts.
Equations
- CoreChaseNode.coreChaseNodeInstance = { ingoingFacts := CoreChaseNode.facts, outgoingFacts := CoreChaseNode.core, origin := CoreChaseNode.origin, facts_contain_origin_result := ⋯ }
The CoreChaseNode has the ChaseNode.out_sub_in property.
Every trigger equivalent to the origin trigger of a CoreChaseNode is inactive for each homSubset of the node's facts, given that this subset is finite.
The origin trigger of a CoreChaseNode is inactive for each homSubset of the node's facts, given that this subset is finite.
Every trigger equivalent to the origin trigger of a CoreChaseNode is inactive on the node's core.
The origin trigger of a CoreChaseNode is inactive on the node's core.