You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
(set-logic ALL)
(declare-datatype t ((A) (B (i Int))))
(declare-conste t)
(assert ((_ is B) e))
(assert (forall ((n Int)) (distinct e (B n))))
(check-sat)
and
(set-logic ALL)
(declare-datatype t ((B (i Int))))
(declare-conste t)
(assert ((_ is B) e))
(assert (forall ((n Int)) (distinct e (B n))))
(check-sat)
After merging #1095, both are solved with the SAT-solver Tableaux but only the first test is solved with CDCL-Tableaux.
In SatML, before deciding a new atom A, we check whether the atom (or its negation) is already entailed by the theory tenv. If it is, we set the field timp to 1 in the function th_entailed.
During theory propagation (in the function theory_propagation), we do not assume facts with timp = 1 in the environment tenv, as it would be redundant to assume something that is already entailed by tenv.
If timp <> 1, terms are initialized in Th.assume. More precisely, when we call Th.assume on ((_ is B) (B .k)), we have the backtrace:
For the first input file, we never call Th.assume with ((_ is B) (B .k)) because this atom is entailed by the record theory. Thus, we never send .k to the matching environment. In Tableaux, new terms are directly sent to the matching environment, which explains why we can prove this problem after merging #1095. Sending fresh terms in SatML helps to solve this problem but we got regressions, see #1262.
For the second input, ((_ is B) (B .k)) is not entailed by the theory and we assume it. As a result, .k is sent to the matching module.
The text was updated successfully, but these errors were encountered:
Consider these two files (from issue #1008):
and
After merging #1095, both are solved with the SAT-solver Tableaux but only the first test is solved with CDCL-Tableaux.
A
, we check whether the atom (or its negation) is already entailed by the theorytenv
. If it is, we set the fieldtimp
to 1 in the functionth_entailed
.theory_propagation
), we do not assume facts withtimp = 1
in the environmenttenv
, as it would be redundant to assume something that is already entailed bytenv
.timp <> 1
, terms are initialized inTh.assume
. More precisely, when we callTh.assume
on((_ is B) (B .k))
, we have the backtrace:For the first input file, we never call
Th.assume
with((_ is B) (B .k))
because this atom is entailed by the record theory. Thus, we never send.k
to the matching environment. In Tableaux, new terms are directly sent to the matching environment, which explains why we can prove this problem after merging #1095. Sending fresh terms in SatML helps to solve this problem but we got regressions, see #1262.For the second input,
((_ is B) (B .k))
is not entailed by the theory and we assume it. As a result,.k
is sent to the matching module.The text was updated successfully, but these errors were encountered: