Documentation

ExistentialRules.ChaseSequence.Termination.ConstantMappings.InterplayWithBacktracking.BacktrackingUnderConstantMappingSubsetOfComposingWithSubs.PreTrigger

Interaction of Backtrackings and Strict Constant Mappings on PreTrigger #

We merely lift GroundTerm.backtrackFacts_under_constant_mapping_subset_of_composing_with_subs to PreTrigger here.

theorem PreTrigger.backtracking_under_constant_mapping_subset_of_composing_with_subs {sig : Signature} [DecidableEq sig.C] [DecidableEq sig.V] [DecidableEq sig.P] [GetFreshInhabitant sig.C] [Inhabited sig.C] (rl : RuleList sig) (trg : PreTrigger sig) (trg_ruleIds_valid : skolem_ruleIds_valid rl trg) (trg_disjIdx_valid : skolem_disjIdx_valid rl trg trg_ruleIds_valid) (trg_rule_arity_valid : skolem_rule_arity_valid rl trg trg_ruleIds_valid) (trg_rule_in_rl : trg.rule rl.rules) :
have backtracking := backtrackFacts rl trg trg_ruleIds_valid trg_disjIdx_valid trg_rule_arity_valid; ∀ (g : StrictConstantMapping sig), (∀ (d : sig.C), d List.flatMap Rule.constants rl.rulesg d = d) (fresh_constant_remapping : StrictConstantMapping sig), (∀ (d : sig.C), ¬d backtracking.sndfresh_constant_remapping d = d) (StrictConstantMapping.toConstantMapping fun (c : sig.C) => if c backtracking.snd then fresh_constant_remapping c else g c).apply_fact_set backtracking.fst.toSet (backtrackFacts rl { rule := trg.rule, subs := g.toConstantMapping.apply_ground_term trg.subs } ).fst.toSet List.map fresh_constant_remapping backtracking.snd = (backtrackFacts rl { rule := trg.rule, subs := g.toConstantMapping.apply_ground_term trg.subs } ).snd