Documentation

ExistentialRules.ChaseSequence.Termination.ConstantMappings.InterplayWithBacktracking.BacktrackingUnderConstantMappingSubsetOfComposingWithSubs.GroundTerm

Interaction of Backtrackings and Strict Constant Mappings on GroundTerm #

We merely lift PreGroundTerm.backtrackFacts_under_constant_mapping_subset_of_composing_with_subs to GroundTerm here.

theorem GroundTerm.backtrackFacts_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) (term : GroundTerm sig) (term_ruleIds_valid : skolem_ruleIds_valid rl term) (term_disjIdx_valid : skolem_disjIdx_valid rl term term_ruleIds_valid) (term_rule_arity_valid : skolem_rule_arity_valid rl term term_ruleIds_valid) (forbidden_constants : List sig.C) (forbidden_constants_subsumes_term : term.constants forbidden_constants) (forbidden_constants_subsumes_rules : List.flatMap Rule.constants rl.rules forbidden_constants) :
have backtracking := backtrackFacts rl term term_ruleIds_valid term_disjIdx_valid term_rule_arity_valid forbidden_constants; ∀ (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 (g.toConstantMapping.apply_ground_term term) (List.map g forbidden_constants)).fst.toSet List.map fresh_constant_remapping backtracking.snd = (backtrackFacts rl (g.toConstantMapping.apply_ground_term term) (List.map g forbidden_constants)).snd
theorem GroundTerm.backtrackFacts_list_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) (terms : List (GroundTerm sig)) (terms_ruleIds_valid : ∀ (t : GroundTerm sig), t termsskolem_ruleIds_valid rl t) (terms_disjIdx_valid : ∀ (t : GroundTerm sig) (mem : t terms), skolem_disjIdx_valid rl t ) (terms_rule_arity_valid : ∀ (t : GroundTerm sig) (mem : t terms), skolem_rule_arity_valid rl t ) (forbidden_constants : List sig.C) (forbidden_constants_subsumes_terms : List.flatMap constants terms forbidden_constants) (forbidden_constants_subsumes_rules : List.flatMap Rule.constants rl.rules forbidden_constants) :
have backtracking := backtrackFacts_list rl terms terms_ruleIds_valid terms_disjIdx_valid terms_rule_arity_valid forbidden_constants; ∀ (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_list rl (List.map g.toConstantMapping.apply_ground_term terms) (List.map g forbidden_constants)).fst.toSet List.map fresh_constant_remapping backtracking.snd = (backtrackFacts_list rl (List.map g.toConstantMapping.apply_ground_term terms) (List.map g forbidden_constants)).snd