(proof-new) Add new arithmetic kind INDEXED_ROOT_PREDICATE. (#5949)
authorGereon Kremer <gereon.kremer@cs.rwth-aachen.de>
Mon, 22 Feb 2021 16:58:47 +0000 (17:58 +0100)
committerGitHub <noreply@github.com>
Mon, 22 Feb 2021 16:58:47 +0000 (17:58 +0100)
commit20b0feaf3f9858a1414f5d1eef9819913aae3ded
treeb58776ba124212c332f73233a6586e115afcd753
parentce710ed0e88bc62a470ff7043ba3ebcc1d7ebc6e
(proof-new) Add new arithmetic kind INDEXED_ROOT_PREDICATE. (#5949)

This PR introduces a new arithmetic kind for indexed root predicates.
An indexed root predicate compares a real variable to the k'th root of a given polynomial as follows:
Let IRP_k(x ~ 0, p) an indexed root predicate with k a non-negative number, x some real variable, ~ an arithmetic relation (e.g. =, <, ...), and p a polynomial over x (and possibly other variables).
If p contains variables apart from x, we can only evaluate the expression over a suitable assignment for at least these variables.
The evaluation of this expression is equivalent to computing the k'th real root of p in x (with all other variables evaluated over a given assignment) and comparing this real root to zero (according to the relation symbol ~).

Note that we currently do not intend to use this structure for solving, but require it for representing and printing CAD proofs.
src/printer/smt2/smt2_printer.cpp
src/theory/arith/kinds
src/theory/arith/theory_arith_type_rules.h
src/util/indexed_root_predicate.h [new file with mode: 0644]