Weekend work. The main points:
authorMorgan Deters <mdeters@gmail.com>
Mon, 25 Apr 2011 06:56:14 +0000 (06:56 +0000)
committerMorgan Deters <mdeters@gmail.com>
Mon, 25 Apr 2011 06:56:14 +0000 (06:56 +0000)
commitcb7363eef352200615e1a0d3729cea8b2c74d265
treed57f6a9cfab879c1027e7282f63d0fae14fc0153
parente39882bd8a308711135a1ff644293fd9c46e6433
Weekend work.  The main points:

* Type::getCardinality() returns the cardinality for for all types.
  Theories give a cardinality in the their kinds file.  For
  cardinalities that depend on a type argument, a "cardinality
  computer" function is named in the kinds file, which takes a
  TypeNode and returns its cardinality.

* There's a bitmap for the set of "active theories" in the
  TheoryEngine.  Theories become "active" when a term that is owned by
  them, or whose type is owned by them, is pre-registered (run CVC4
  with --verbose to see theory activation).  Non-active theories don't
  get any calls for check() or propagate() or anything, and if we're
  running in single-theory mode, the shared term manager doesn't have
  to get involved.  This is really important for get() performance
  (which can only skimp on walking the entire sub-DAG only if the
  theory doesn't require it AND the shared term manager doesn't
  require it).

* TheoryEngine now does not call presolve(), registerTerm(),
  notifyRestart(), etc., on a Theory if that theory doesn't declare
  that property in its kinds file.  To avoid coding errors,
  mktheorytraits greps the theory header and gives warnings if:
  + the theory appears to declare one of the functions (check,
    propagate, etc.) that isn't listed among its kinds file properties
    (but probably should be)
  + the theory appears NOT to declare one of the functions listed in
    its kinds file properties

* some bounded token stream work
53 files changed:
Makefile.builds.in
src/expr/Makefile.am
src/expr/expr_manager_template.h
src/expr/expr_template.h
src/expr/kind_template.h
src/expr/mkexpr
src/expr/mkkind
src/expr/mkmetakind
src/expr/type.cpp
src/expr/type.h
src/expr/type_node.cpp
src/expr/type_node.h
src/expr/type_properties_template.h [new file with mode: 0644]
src/lib/replacements.h
src/parser/cvc/Cvc.g
src/theory/Makefile.am
src/theory/arith/kinds
src/theory/arrays/kinds
src/theory/arrays/theory_arrays.h
src/theory/arrays/theory_arrays_type_rules.h
src/theory/booleans/kinds
src/theory/booleans/theory_bool.h
src/theory/builtin/kinds
src/theory/builtin/theory_builtin_type_rules.h
src/theory/bv/kinds
src/theory/bv/theory_bv.h
src/theory/bv/theory_bv_type_rules.h
src/theory/datatypes/theory_datatypes.cpp
src/theory/datatypes/theory_datatypes.h
src/theory/mkrewriter
src/theory/mktheorytraits
src/theory/theory_engine.cpp
src/theory/theory_engine.h
src/theory/theory_test_utils.h
src/theory/theory_traits_template.h
src/theory/uf/kinds
src/theory/uf/theory_uf.h
src/util/Assert.h
src/util/Makefile.am
src/util/cardinality.cpp [new file with mode: 0644]
src/util/cardinality.h [new file with mode: 0644]
src/util/datatype.h
src/util/debug.h
src/util/integer_cln_imp.h
src/util/integer_gmp_imp.h
src/util/language.cpp [new file with mode: 0644]
src/util/language.h
src/util/subrange_bound.h
test/unit/Makefile.am
test/unit/expr/type_cardinality_public.h [new file with mode: 0644]
test/unit/util/cardinality_public.h [new file with mode: 0644]
test/unit/util/integer_black.h
test/unit/util/subrange_bound_white.h