0

In a bounded context (i.e. all basic sorts are bitvectors) we model (2-dim) sets as arrays. In some axioms we need to quantifier over this arrays. Once we include such axioms, the solver returns unknown. From a syntactic view this kind of quantifiers goes beyond the scope of FOL, but we have expected that the solver can recognize/use the bounded context information.

  1. Why the solver do not use the bounded context information?
  2. Is there any possibility, without hand quantifier blasting, to teach this to the solver?

Here is a minimal example:

(define-sort Any () (_ BitVec 6))
(define-sort Object () (_ BitVec 3))
(define-sort Field () (_ BitVec 2))

(define-sort Heap () (Array Object Field Any))
(define-sort LocSet () (Array Object Field Bool))

(declare-fun foo (Heap LocSet Heap) Heap)
(assert
 (forall 
  ((?h Heap) (?s LocSet) (?h2 Heap) (?o Object) (?f Field))
  (= (select (foo ?h ?s ?h2) ?o ?f)
     (select (ite (select ?s ?o ?f) ?h ?h2) ?o ?f))))

(check-sat)

0 Answers0