【发布时间】:2013-02-13 04:15:37
【问题描述】:
为什么?
我的问题发生的用例上下文
我定义了一个三角形的 3 个随机项。 Microsoft Z3 应输出:
- 是否满足约束或是否存在无效输入值?
- 所有其他三角形项目的模型,其中所有变量都分配给具体值。
为了限制我需要assert三角形等式的项目 - 我想从勾股定理开始((h_c² + p² = b²) ^ (h_c² + q² = a²))。
问题
我知道 Microsoft Z3 解决非线性算术问题的能力有限。但即使是一些手动计算器也能够像这样解决一个非常简化的版本:
(set-option :print-success true)
(set-option :produce-proofs true)
(declare-const a Real)
(declare-const b Real)
(assert (= a 1.0))
(assert (= b 1.0))
(assert
(exists
((c Real))
(=
(+
(* a a)
(* b b)
)
(* c c)
)
)
)
(check-sat)
(get-model)
问题
- 如果给定两个值,有没有办法让 Microsoft Z3 解决勾股定理?
- 或者:是否有另一个定理证明器能够处理这些非线性算术情况?
感谢您对此提供的帮助 - 如果有任何不清楚的地方,请发表评论。
【问题讨论】:
-
duplicate 的创建是因为版主将该问题迁移到 StackOverflow,即使我已经在 StackOverflow 上重新创建了它 - 我从不希望这种情况发生。
标签: logic z3 smt constraint-programming theorem-proving