我需要使用一些等式推理,但我对重新定义所有基础理论不感兴趣。我的目标是使用大锤完成的现有SMT求解器。例如,假设这种平等理论与一些简单的算术,
datatype expr = Var string
| Const nat
datatype constraint = Eq "expr * expr" (* E1 = E2 *)
fun SAT :: "constraint list ⇒ bool" where
"SAT L = undefined (* calling an SMT-solver here *)"
类型constraint list
包含嵌入逻辑约束的约束,我希望将这些约束发送给SMT求解器以返回true(如果可能)。因此断言以下内容应该返回false
value "SAT [Eq(Var ''X1'', Var ''X2''), (* X1 = X2*)
Eq(Var ''X1'', Const 0), (* X1 = 0 *)
Eq(Var ''X2'', Const (Suc 0))]" (* X2 = 1 *)
我该如何处理?