I’m having some trouble using sorts in the SMTlib2 format. For example, I define an Interval as:
(declare-sort Pair 2)
(define-sort Interval () (Pair Int Int))
Now how can I return a new Interval from a function? e.g.:
(define-fun getInterval ((a Int) (b Int)) Interval
(Interval a b))
This doesn’t work.
My question is: how can I construct and instantiate objects of a given sort, and how can I access their fields?
Right now I’m using 2 UFs that I created as field getters, but I still don’t know how to have a constructor:
(declare-fun L (Interval) Int)
(declare-fun H (Interval) Int)
Thanks,
Nuno
You should look into Record subsection, Datatypes section in Z3 SMT guide. Basically, you can create a record type with a constructor
mk-pairand two selectorsfirstandsecondfor accessing its fields.Here is an examplerise4fun link: