Use function array constants in HO solver (#8818)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Thu, 26 May 2022 20:16:15 +0000 (15:16 -0500)
committerGitHub <noreply@github.com>
Thu, 26 May 2022 20:16:15 +0000 (20:16 +0000)
commita318303646773b10d0f7ef1387d78e0aa29b6ade
tree9e77ce6e3e933390fdc34999b2353fcd3445ca21
parenta4b9a04373f463607a09c71c26f7dbcad37d219c
Use function array constants in HO solver (#8818)

This makes lambdas rewrite to function array constants when possible. This extends our HO solver and utilities to be robust to check whether a node represents a lambda (uf::FunctionConst::toLambda).

This furthermore removes the isConst rule for LAMBDA; lambdas are never constant.

The PR also improves our check-model so that warnings are not thrown if rewriting can show that the model value of a term is equivalent modulo rewriting to its representative in the model equality engine.

This eliminates the last remaining static calls to rewrite. This is work towards eliminating SmtEngineScope.
19 files changed:
src/expr/array_store_all.h
src/preprocessing/passes/ho_elim.cpp
src/printer/smt2/smt2_printer.cpp
src/proof/lfsc/lfsc_node_converter.cpp
src/theory/evaluator.cpp
src/theory/quantifiers/oracle_checker.cpp
src/theory/strings/term_registry.cpp
src/theory/theory_model.cpp
src/theory/theory_model_builder.cpp
src/theory/uf/function_const.cpp
src/theory/uf/function_const.h
src/theory/uf/ho_extension.cpp
src/theory/uf/kinds
src/theory/uf/lambda_lift.cpp
src/theory/uf/theory_uf_rewriter.cpp
src/theory/uf/theory_uf_type_rules.cpp
src/theory/uf/theory_uf_type_rules.h
src/theory/uf/type_enumerator.cpp
src/theory/uf/type_enumerator.h