Open BritikovKI opened 2 years ago
It seems I can't reproduce this problem. On current master, this example works fine for me and OpenSMT computes interpolant true
.
Here is the minimized example capturing the core problem:
(set-option :produce-interpolants true)
(set-logic QF_UF)
(set-option :interpolation-bool-algorithm 1)
(declare-sort U 0)
(declare-fun x () U)
(declare-fun y () U)
(declare-fun f (U) U)
(assert (!(and (= (f y) x) (= (f x) x)):named A))
(assert (!(and (not (= (f y) (f x))) (= (f x) x)):named B))
(check-sat)
(get-interpolants A B)
It looks like the UF interpolation algorithm does not expect literals to be colored AB
, but this can easily happen with Pudlak's boolean interpolation algorithm, which is chosen by the option (set-option :interpolation-bool-algorithm 1)
.
We need to find out if this condition in UF interpolator is necessary for its correctness, and if so, how to deal with shared literals (colored AB
).
During the run of the tests with interpolation some of the interpolation builds were failed, even though the case itself was resolved. Current state: Running
opensmt ./gensys_icl006_itptest_eufexps.smt2
results in an error:libc++abi: terminating with uncaught exception of type OsmtInternalException: Error in coloring information
Expected behavior: opensmt successfully builds an interpolant.
File can be found here