Add cardinality class definition (#6302)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Wed, 7 Apr 2021 22:23:40 +0000 (17:23 -0500)
committerGitHub <noreply@github.com>
Wed, 7 Apr 2021 22:23:40 +0000 (22:23 +0000)
commitaa7ae00193e0f0b81cddcd04fdd5a4b8a1da309d
tree3002be04ac6fc7441bac604bfc29b889b541289c
parent4c2347c1cded72e3a7c71f3ed349148e5ef9bfd3
Add cardinality class definition (#6302)

This is work towards correcting our computation of whether a type is finite. Currently, arrays/functions with uninterpreted sorts as element/range types are always considered infinite. This is incorrect if finite model finding is enabled, since the interpretation of the uninterpreted sort can be one. This leads to errors during model building due to exhausted values (#4260, #6100).

This PR adds a new concept of a cardinality class, which is required for properly categorizing types with/without finite model finding.

A followup PR will replace TypeNode::isFinite with TypeNode::getCardinalityClass. Calls to TypeNode::isFinite will be replaced by calls to TheoryState::isTypeFinite, which will properly take cardinality classes into account.
src/util/cardinality_class.cpp [new file with mode: 0644]
src/util/cardinality_class.h [new file with mode: 0644]