- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们知道,我们可以通过说来证明定理的有效性:
let Demorgan(x, y) = formula1(x,y) iff formula2(x,y)
assert ( forall (x,y) . Demorgan(x,y) )
let Demorgan(x, y) = formula1(x,y) iff formula2(x,y)
( assert (not Demorgan(x,y) ) )
assert ( exists x1,x2,x3 st .( forall y . formula1(x1,y) iff
formula2(x2,y) iff
formula3(x3,y) ) )
assert (exists x1,x2,x3 st. ( and ((not ( formula1(x1,y) iff formula2(x2,y) )) == unsat)
((not ( formula2(x2,y) iff formula3(x3,y) )) == unsat)))
最佳答案
是的,当我们可以通过证明其否定不可满足来证明公式的有效性时。
例如,要显示 Forall X. F(X)
是有效的,我们只需要证明 not (Forall X. F(X))
无法满足。公式not (Forall X. F(X))
相当于(Exists X. not F(X))
.公式(Exists X. not F(X))
可满足公式 not F(X)
其中绑定(bind)变量X
被一个新的常数 X
替换. Equisatisfiable,我的意思是第一个是可满足的,如果第二个是可满足的。这个删除存在量词的步骤通常称为 skolemization .
请注意,最后两个公式是 不是 相等的。
例如,考虑解释 { X -> 2 }
分配 X
至2
.公式Exists X. not (X = 2)
在这个解释中仍然评估为真,因为我们可以选择 X
成为 3
.另一方面,公式 not (X = 2)
在这种解释中计算为假。
我们通常使用术语量词消除过程来表示给定公式 F
的过程。产生一个等价的无量词公式F'
.因此,skolemization 不被视为量词消除过程,因为结果不是等效公式。
话虽如此,我们不必手动应用 skolemization。 Z3可以为我们做到。这是一个示例(也可在线获得 here )。
(declare-sort S)
(declare-fun F (S) Bool)
(declare-fun G (S) Bool)
(define-fun Conjecture () Bool
(forall ((x S)) (= (and (F x) (G x)) (not (or (not (F x)) (not (G x)))))))
(assert (not Conjecture))
(check-sat)
Exists X. Forall Y. F(X, Y)
形式的公式。 .为了证明这个公式的有效性,我们可以证明否定
not Exists X. Forall Y. F(X, Y)
无法满足。否定等价于
Forall X. Exists Y. not F(X, Y)
.现在,如果对这个公式应用 skolemization,我们得到
Forall X. not F(X, Y(X))
.在这种情况下,绑定(bind)变量
Y
已替换为
Y(X)
, 其中
Y
是结果公式中的新函数符号。直觉是函数
Y
是“选择函数”。对于每个
X
,我们可以选择不同的值来满足公式
F
. Z3 会自动为我们执行所有这些步骤。我们不需要手动应用 skolemization。但是,在这种情况下,生成的公式通常更难求解,因为它在 skolemization 步骤之后包含一个全称量词。
关于z3 - 使用 unsat 消除 forall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16762337/
标题和标签应充分解释问题。 最佳答案 Title and tags should explain the question adequately. 呃,不是真的。您使用了标签 existential-
以 Haskell 中简单的恒等函数为例, id :: forall a. a -> a 鉴于 Haskell 据称支持谓语多态性,我应该能够将 id“限制”为类型 (forall a.a -> a)
Ltac checkForall H := let T := type of H in match T with | forall x, ?P x => idtac | _ =
如何在 Coq 中证明 (forall x, P x/\Q x) -> (forall x, P x)?已经尝试了几个小时,但不知道如何分解 Coq 可以消化的东西的前因。 (我是新手,显然:) 最佳
是否可以编写类型的单射函数 hard :: (forall n . Maybe (f n)) -> Maybe (forall n . (f n)) 作为total functional progra
我试图理解使用 forall 量化两个类型变量和使用 forall 量化元组类型的单个类型变量之间的区别。 例如,给定以下类型系列: {-# LANGUAGE RankNTypes #-} {-# L
在证明中,我需要证明“如果 n 不是三的倍数,那么 n+n 也不是三的倍数”。我认为我的证明太长而且不是很优雅。有没有更漂亮的写法?有没有ssreflect? (我确定 ssreflect 中有一个
从我收集到的有关 agda 的零碎信息中,我(显然是错误地)得出的结论是 ∀ {A}相当于 {A : Set} .现在我注意到 flip : ∀ {A B C} -> (A -> B -> C) ->
如果我不想查看列表中的每个元素是否与另一个列表中相同索引的元素正确对应,我可以使用 forall 来执行此操作吗?例如类似的东西 val p=List(2,4,6) val q=List(1,2,3)
我尝试使用 Function 来使用度量来定义递归定义,但收到错误: Error: find_call_occs : Prod 我在底部发布了整个源代码,但我的功能是 Function kripke_
我一直在阅读existential section维基教科书中的内容如下: Firstly, forall really does mean 'for all'. One way of thinkin
从 ghc-8.0 开始,我们有一个非常好的扩展,称为 TypeApplications。这允许我们代替: λ> show (5 :: Int) "5" 这样做: λ> :set -XTypeAppl
我阅读了HaskellWiki关于数据构造函数并考虑以下内容: 2.1 Data constructors as first class values Data constructors are fi
我想证明以下定理: Theorem Frobenius (A: Set) (q: Prop) (p: A -> Prop) : (q \/ forall x : A, p x) -> (foral
我遇到了一个函数无法进行类型检查的情况,除非我在其类型签名的开头显式添加一个 forall。 有问题的功能是: test :: (Typeable a) => a -> a test x |
看来需要明确说forall在数据定义中有参数类型。例如,这 data A = A (forall s. ST s (STUArray s Int Int)) 将工作,而这 data A = A (ST
我对哈姆雷特有一个奇怪的问题。我正在尝试使用 $forall 遍历列表,但我不断收到“不在范围内”错误。我在 Win7 上运行 yesod 0.9.2.2。 除了糟糕的设计,有人知道我哪里出错了吗?删
考虑以下表: object MyTestsFactory { val testCases = Table( ("testName", "input", "output"), ("t
我正在通过阅读“Certified Programming with Dependent Types”一书来学习 Coq,但我在理解问题时遇到了问题 forall句法。 举个例子,让我们考虑一下这种相
可以使用 GADT 来表达 Existentially quantified 类型。 我看到 GADT 更通用 - data-type-extensions ,第 7.4.7 节 什么时候使用存在量化
我是一名优秀的程序员,十分优秀!