Added ability to set a "cvc4-specific logic" in standards-compliant
authorMorgan Deters <mdeters@gmail.com>
Thu, 23 Feb 2012 23:08:03 +0000 (23:08 +0000)
committerMorgan Deters <mdeters@gmail.com>
Thu, 23 Feb 2012 23:08:03 +0000 (23:08 +0000)
commit5a20a19a30929ad58a9e64a9d8d1f877f3a07ae6
tree2a800e6b1d6773e1c844767f5daed51148b5660b
parent1f2590541aa60f4b62b7c96659362ee4431d2d63
Added ability to set a "cvc4-specific logic" in standards-compliant
SMT-LIBv1 and SMT-LIBv2 input:

    In SMT-LIBv1, you specify the "cvc4_logic" benchmark attribute; for instance:

    (benchmark actually_a_sat_benchmark_but_looks_like_uf
      :logic QF_UF
      :cvc4_logic { QF_SAT }
      [...]

    In SMT-LIBv2, you use a set-info; for instance:

    (set-logic QF_UF)
    (set-info :cvc4-logic "QF_SAT")
    [...]

    Right now, the only thing this does is disable the symmetry breaker for
    benchmarks like the above ones.

As part of this work, TheoryEngine::setLogic() was removed (the logic field there
wasn't actually used anywhere, its need disappeared when
Theory::setUninterpretedSortOwner() was provided).

Also, Theory::d_uninterpretedSortOwner got a name change to
Theory::s_uninterpretedSortOwner, to highlight that it is static to the Theory
class.  This represents a breakage of our separation goals for CVC4, since it
means that two SmtEngines cannot be created separately to solve a QF_AX and
QF_UF problem.  A bug report is pending.
src/expr/node_manager.cpp
src/expr/node_manager.h
src/main/driver.cpp
src/main/driver_portfolio.cpp
src/smt/smt_engine.cpp
src/smt/smt_engine.h
src/theory/theory.cpp
src/theory/theory.h
src/theory/theory_engine.cpp
src/theory/theory_engine.h