В z3 можно объявить полностью неинтерпретируемый const
следующим образом:
(declare-const x Int)
Точно так же можно определить полностью интерпретируемый следующим образом:
(define-fun y () Int 3)
; y == 3
Учитывая алгебраический тип данных, можно получить полностью интерпретируемый кортеж, подобный следующему:
(declare-datatypes () ((Item (mk-item (size Int) (weight Int)))))
(define-fun z () Item (mk-item 3 4))
; z == Item(size=3, weight=4)
... Или неинтерпретируемый, как показано ниже:
(declare-const i1 (Item Int Int))
Теперь возможно иметь частично интерпретируемый тип данных, чтобы, основываясь на предыдущем примере, weight
было бы фиксированным для каждого элемента, а size
могло бы различаться?
; (bad syntax, but I hope you get the idea)
; in this case the size is varying, but weight is fixed to 5
(declare-const i2 (Item Int 5))