2012-10-16 19 views
1

如何访问参数化排序的值?参数化排序

举例来说,如果我有以下声明:

(declare-sort Pair 2) 
(declare-const x (Pair Int Int)) 

如何访问的第一个元素的一对x代表?

+1

你应该发布一些你已经尝试过的代码。 – ForceMagic

回答

1

您可以使用两个选择器firstsecond创建参数记录以访问其字段。

这里是an example

(declare-datatypes (T1 T2) ((Pair (mk-pair (first T1) (second T2))))) 
(declare-const p1 (Pair Bool Int)) 
(declare-const p2 (Pair Int Int)) 
(assert (first p1)) 
(assert (> (first p2) 2)) 
(assert (= (second p1) (second p2))) 
(check-sat) 
(get-model) 

也有在Z3 SMT指南algebraic datatypes了全面的介绍。

+0

谢谢!这些字段是否有任何限制?我想让其中一个字段为Array。在Z3指南中,我无法找到有关此信息的详细信息,但它很有帮助。 – user1751402

+0

我不认为有任何限制。你应该尝试一下,看看你得到了什么。 – pad