fix(ltl): eliminate implies and bounded-always false-negatives

Rewrite a -> b to (not a) or b in NNF so a pending temporal antecedent
can no longer defer the whole implication and drop a consequent that was
false at the current step. Carry a pending inner past a bounded-Always
window close instead of dropping it to holds, so a deferred obligation is
resolved by a later step or Finalize.
This commit is contained in:
pj committed 2026-06-01 14:11:26 +05:30
1 parent 283bf44920
commit 1834019419
2 files changed
+27 -19

No files matched your search

+7 -3
View File
@@ -26,9 +26,13 @@ func nnf(formula Formula) Formula {
case OrFormula:
return OrFormula{Left: nnf(concrete.Left), Right: nnf(concrete.Right)}
case ImpliesFormula:
return ImpliesFormula{
Antecedent: nnf(concrete.Antecedent),
Consequent: nnf(concrete.Consequent),
// a -> b is rewritten to (not a) or b so the consequent is always
// reduced live each step. Keeping it as ImpliesFormula let a pending
// (temporal) antecedent defer the whole implication and silently drop a
// consequent that was false at the current step.
return OrFormula{
Left: pushNot(concrete.Antecedent),
Right: nnf(concrete.Consequent),
}
default:
return formula