- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Z3 的新手,但有一些使用 Prolog 的经验。
我已经设法解决了以下“难题”,即使用 Prolog 证明女孩是女巫,但不知如何在 Z3 中(在 C++ 或 Python 中)实现它:
https://www.netfunny.com/rhf/jokes/90q4/burnher.html
我是否需要为诸如此类的断言声明 Function()BURNS(x) /\ WOMAN(x)
和 WOMAN(GIRL)
那么 \forall x, ISMADEOFWOOD(x) => BURNS(x)
排序的含义呢? ?
任何提示表示赞赏
最佳答案
应该指出的是,SMT 求解器(即 Z3)通常不擅长使用量词进行推理,但这种特殊情况很容易处理,可以毫不费力地处理。 (这很容易,因为您所拥有的只是未解释的排序和 bool 值;没有整数、实数、数据类型等使逻辑复杂化。)此外,与 Prolog 的推导策略相比,使用 SMT 求解器时存在一些建模差异,所以建模会有点不同。
关键是Prolog使用了所谓的封闭世界假设观点。也就是说,如果它不能显示隐含,它将决定它不是隐含的。 SMT 求解器不会这样做:它将证明含义;但是,如果您查询的变量没有受到适当的约束(即,根据断言,如果它可以是 True
或 False
),则可以自由选择任何解释。因此,建模必须考虑到这一点。
这对当前的问题意味着什么?我们必须证明这些陈述暗示女孩是女巫。如果他们不这样做,我们不知道她是不是。为此,我们断言我们想要的结论的否定,并检查结果系统是否不可满足。如果是这样,那么我们可以得出结论,我们的结论一定是有效的。如果结果令人满意,那么我们就有了一个反例模型,可以进一步研究。在这种情况下,这意味着没有足够的证据证明这个女孩是女巫。 (请注意,添加我们要证明的结论的否定是非常典型的解决证明,我们在这里遵循相同的策略。)
鉴于这一切,这就是我将如何使用 Python API 对其进行建模,您应该能够相对轻松地将其转换为 C++(或任何其他具有适当绑定(bind)的语言)。这些条款几乎按字面翻译:
from z3 import *
Thing = DeclareSort('Thing')
GIRL = Const('GIRL', Thing)
DUCK = Const('DUCK', Thing)
BURNS = Function('BURNS', Thing, BoolSort())
FLOATS = Function('FLOATS', Thing, BoolSort())
WOMAN = Function('WOMAN', Thing, BoolSort())
WITCH = Function('WITCH', Thing, BoolSort())
SAMEWEIGHT = Function('SAMEWEIGHT', Thing, Thing, BoolSort())
ISMADEOFWOOD = Function('ISMADEOFWOOD', Thing, BoolSort())
s = Solver()
x = Const('x', Thing)
y = Const('y', Thing)
s.add(ForAll([x], Implies(And(BURNS(x), WOMAN(x)), WITCH(x))))
s.add(WOMAN(GIRL))
s.add(ForAll([x], Implies(ISMADEOFWOOD(x), BURNS(x))))
s.add(ForAll([x], Implies(FLOATS(x), ISMADEOFWOOD(x))))
s.add(FLOATS(DUCK))
s.add(ForAll([x, y], Implies(And(FLOATS(x), SAMEWEIGHT(x, y)), FLOATS(y))))
s.add(SAMEWEIGHT(DUCK, GIRL))
# To prove the girl is a witch, we assert the negation,
# and check if it is unsatisfiable.
s.add(Not(WITCH(GIRL)))
res = s.check()
if res == sat:
print("Nope, it doesn't follow that she's a witch!")
elif res == unsat:
print("Yes, she is a witch!")
else:
print("Hmm, solver said: ", res)
当我运行它时,我得到:
Yes, she is a witch!
对她来说太糟糕了!
sat
,即不能断定女孩是女巫。然后,您可以详细查看模型本身以找出分配的内容。
关于c++ - 使用 Z3 证明分辨率定理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62720552/
所以,我看过一个关于 TDD 的视频,其中演示者说,你应该只对类的一部分进行单元测试,即为外部世界提供一些东西。他提到这很好,因为这种方法可以确保类遵守“契约(Contract)”,因此它履行了其职责
在CAP定理中,Redis被指定为缺乏可用性(具有分区容错性和一致性)的数据库。 但是在很多地方,Redis 被认为是一种高可用的键值存储。 什么是对的?如果您能提供深入的答案,我将不胜感激。 最佳答
我正在尝试证明以下内容: 1-pow : ∀ {n : ℕ} → 1 pow n ≡ 1 1-pow {zero} = refl 1-pow {suc x} = {!!} 我是 Adga 的新手,甚
我正在努力解决这个问题 - 我实际上已经找了一整天了! 我想我理解它背后的主要概念,但我正在努力弄清楚创建将形状投影到其上的 Axis 所需的数学? 因此,如果我有一个矩形,我会找出每个点,然后使用它
我试图证明以下内容: 1-pow : ∀ {n : ℕ} → 1 pow n ≡ 1 1-pow {zero} = refl 1-pow {suc x} = {!!} 我是 Adga 的新手,甚至不
所以我想计算任何给定三角形内的点数。我知道我必须使用 Pick 定理,但我的代码最终变得非常长,其中包含用于测试每种情况的 if-else if 语句的数量。我一直以此为指导 How many int
当说系统是 CP(一致性和分区)时,这是否意味着我们不能在复制的数据节点之间使用异步同步,并且每次写入都必须同步(甚至是事务性)复制? 据我了解,一致性意味着对于每次写入,后续读取(来自任何节点)都将
虽然我试图理解CAP中的“可用性”(A)和“分区容忍度”(P),但我发现很难理解各种文章的解释。 我感觉 A 和 P 可以走到一起(我知道事实并非如此,这就是我无法理解的原因!)。 深入浅出,A和P是
foundationdb 声明在 consistency 上吗?有效的? FoundationDB provides the strongest possible consistency model,
Azure 本身是 PaaS,而不是 IaaS。你同意? MS保证99%的可用性和强一致性。您可以在此处找到 MS SLA:http://www.microsoft.com/windowsazure/
我正试图掌握 Python 的 fft 功能,我偶然发现的一件奇怪的事情是 Parseval's theorem似乎不适用,因为它现在给出了大约 50 的差异,而它应该是 0。 import nump
我正在尝试在 Coq 中进行证明,并且我想使用我已经定义和证明的引理。以下代码可以吗? Lemma conj_comm: forall A B : Prop, A /\ B -> B /\ A. Pr
我试图通过 Isabelle(定理证明者)的 Isar 章节,第一个陈述是: lemma "¬ surj(f :: 'a ⇒ 'a set)" 我想了解什么是常数surj曾是。我知道查找定理很容易:
我想在分布式系统中使用 aerospike。 Aerospike 官方文档说: Aerospike 系统被归类为 AP 任何人都可以照亮它吗? Aerospike如何保证分布式环境下的AP模式。 最佳
这code example to generate a list of definitions对我有用,但只适用于一个索引列表。每当我尝试添加另一个列表(例如,对于定理)时,只有在设置垃圾中最后定义的
我打算使用 memcached 数据库。根据我的要求,高性能(速度)和可用性是最高优先级的。(一致性可以在某种程度上进行交易)请建议使用合适的数据库。 我正在关注 CAP Theorem . 按类别我
根据 CAP Consistency - All nodes gave the same data Availability means the ability to access the clust
如果我正确理解了 CAP 定理,可用性意味着即使节点出现故障,集群也会继续运行。 我见过很多人(http://blog.nahurst.com/tag/guide)将RDBMS列为CA,但我不明白RB
根据我目前所读到的有关 CAP 定理的所有内容,没有分布式系统可以同时提供这三者:可用性、一致性和分区容错性。 现在,Hadoop 2.x 引入了一项新功能,可以对其进行配置以消除 hadoop 集群
目前,我正在考虑拍摄图像及其光谱。现在 Parceval 的定理说两者应该具有相等的能量。然而,当我尝试在某些图像上对此进行测试时,numpy 真实 FFT 函数似乎并非如此。 这是我用于测试的代码:
我是一名优秀的程序员,十分优秀!