Z3 是否有不可解释函数的理论(同余分析)?

Z3 是否有不可解释函数的理论(同余分析)?,z3,verification,smt,stp,alt-ergo,Z3,Verification,Smt,Stp,Alt Ergo,我有一组符号变量: int a, b, c, d, e; 受许多公理约束的一组未知函数: f1(a, b) = f2(c, b) f1(d, e) = f1(e, d) f3(b, c, e) = f1(b, e) c = f1(a, b) b = d 此处函数f1、f2、f3未知,但已修复。因此,它不是一个关于未解释函数的理论 我想证明以下断言的有效性: c = f2(f1(a, b), b) f3(d, f2(c, b), e) = f1(e, b) 使用基于上述公理等式的替换 对于这

我有一组符号变量:

int a, b, c, d, e;
受许多公理约束的一组未知函数:

f1(a, b) = f2(c, b)
f1(d, e) = f1(e, d)
f3(b, c, e) = f1(b, e)
c = f1(a, b)
b = d
此处函数
f1
f2
f3
未知,但已修复。因此,它不是一个关于
未解释函数的理论

我想证明以下断言的有效性:

c = f2(f1(a, b), b)
f3(d, f2(c, b), e) = f1(e, b)
使用基于上述公理等式的替换

对于这样的定理,是否有一种理论只使用提供的等式来尝试组合答案,而不是对函数进行解释

如果是,该理论的名称是什么?SMT solver支持该理论的是什么


它能与其他理论混合吗,比如线性算术?

这仍然是未解释的函数,因为如果存在满足你的公理的函数,那么这将被放在未解释的函数理论中。类似地,如果这样的函数不存在,那么这在未解释的函数中是不安全的。所以你所描绘的是可满足的,当且仅当未解释函数中的问题是可满足的,所以这两个理论是同构的,即相同的

假设您试图根据您的公理证明某些定理是有效的,那么解算器如何表示可满足的结果并不重要,因为sat结果对应于无效的模型。要使用SMT解算器证明定理,您应该断言您的公理,断言定理的否定性,然后寻找不可满足的结果。有关满意度和有效性之间关系的更详细解释,请参见

要使用Z3证明第一个定理,SMT-LIB 2中的以下内容就足够了:

(declare-fun a () Int)
(declare-fun b () Int)
(declare-fun c () Int)

(declare-fun f1 (Int Int) Int)
(declare-fun f2 (Int Int) Int)

(assert (= (f1 a b) (f2 c b)))
(assert (= c (f1 a b)))
(assert (not (= c (f2 (f1 a b) b))))

(check-sat)