- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
[我不确定这是否适合堆栈溢出,但这里还有许多其他 Coq 问题,所以也许有人可以提供帮助。]
我正在处理来自 http://www.cis.upenn.edu/~bcpierce/sf/Basics.html#lab28 的以下内容(就在 Case 介绍的下方)。请注意,我在这方面是一个完整的初学者,并且正在家里工作 - 我不是学生。
Theorem andb_true_elim1 : forall b c : bool,
andb b c = true -> b = true.
Proof.
intros b c H.
destruct b.
Case "b = true".
reflexivity.
Case "b = false".
rewrite <- H. reflexivity.
Qed.
Case := "b = false" : String.string
c : bool
H : andb false c = true
============================
false = true
rewrite <- H.
被申请;被应用:
Case := "b = false" : String.string
c : bool
H : andb false c = true
============================
false = andb false c
false = true
在证明中间?
最佳答案
通常,当您在定理证明器中进行案例分析时,很多案例归结为“不可能发生”。例如,如果您要证明有关整数的一些事实,则可能需要对整数 i
是否进行案例分析。为正、零或负。但是,在您的上下文中,或者您的目标的某些部分,可能还有其他假设与其中一种情况相矛盾。例如,您可能从之前的断言中知道 i
永远不能是消极的。
然而,Coq 并不那么聪明。因此,您仍然必须通过实际证明这两个相互矛盾的假设可以粘合在一起成为荒谬证明,从而证明您的定理的机制。
把它想象成一个计算机程序:
switch (k) {
case X:
/* do stuff */
break;
case Y:
/* do other stuff */
break;
default:
assert(false, "can't ever happen");
}
false = true
目标是“永远不可能发生”。但是你不能只是在 Coq 中断言你的出路。你实际上必须写下一个证明术语。
false = true
.您唯一需要处理的就是假设
H: andb false c = true
.稍等片刻,您就会发现这实际上是一个荒谬的假设(因为
andb false y
对于任何
y
都会减少为假,因此不可能为真)。所以你用唯一可以使用的东西(即
H
)击中目标,你的新目标是
false = andb false c
.
False
命题(与
false
类型的术语
bool
相反):
Check eq_ind.
eq_ind
: forall (A : Type) (x : A) (P : A -> Prop),
P x -> forall y : A, x = y -> P y
Check False_ind.
False_ind
: forall P : Prop, False -> P
False
说如果你给我证明
False
,我可以给你任何命题的证明
P
.
eq
的归纳原理更复杂。让我们认为它仅限于
bool
.尤其是
false
.它说:
Check eq_ind false.
eq_ind false
: forall P : bool -> Prop, P false -> forall y : bool, false = y -> P y
P(b)
这取决于 bool 值
b
,并且您有
P(false)
的证明,然后对于任何其他 bool 值
y
等于
false
,你有
P(y)
的证明.
P
我们想要的。我们想要一个特别讨厌的。
Check eq_ind false (fun b : bool => if b then False else True).
eq_ind false (fun b : bool => if b then False else True)
: (fun b : bool => if b then False else True) false ->
forall y : bool,
false = y -> (fun b : bool => if b then False else True) y
True -> forall y : bool, false = y -> (if y then False else True)
.
True
的证明然后是一些 bool 值
y
我们可以选择。所以让我们这样做。
Check eq_ind false (fun b : bool => if b then False else True) I true.
eq_ind false (fun b : bool => if b then False else True) I true
: false = true -> (fun b : bool => if b then False else True) true
false = true -> False
.
False
的归纳原理的了解,我们有:如果你给我证明
false = true
,我可以证明任何命题。
andb_true_elim1
.我们有一个假设
H
即
false = true
.我们想证明某种目标。正如我在上面所展示的,存在一个证明项可以转换
false = true
的证明。变成你想要的任何证据。所以特别是
H
是
false = true
的证明,因此您现在可以证明您想要的任何目标。
关于logic - `true = false` 在 Coq 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7966193/
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 上个月关闭。
我正在 VHDL 中实现正交解码器,并提出了两种解决方案。 在方法 1 中,所有逻辑都放在一个对时钟和复位敏感的进程中。 在 Spartan-3A 上,这使用四个切片、七个 FF 和四个输入 LUT。
我现在在我的项目中使用 Logic-Apps。我认为这很好而且很容易!但是,在逻辑编码过程中很难调试。因为我无法在代码的中间点确认变量或状态。通常,开发人员可以在 Visual Studio 上执行程
我试图让一个方法仅在 unicode 字符的 char 值是数字、大写字母或小写字母时才采取操作。 if ((48=57)||(65=90)||(97=122) // only if numeral
所以我得到了我编写的代码示例。我的目标是打印存储在 ptr char 变量中的句子中的数字。所以代码的第一部分完成了这项工作。 #include #include void preg(char *
我有很多 JavaScript 遗留代码,我想重写所有松散的等式以使用严格的等式,即。 == 与 ===。但我常常不知道比较变量存储的是什么值。 在不知道这些值是什么的情况下,有没有办法重写这样的东西
我在尝试附加包 tidyselect 和尝试调用 tidyselect::any_function 时遇到此错误。 错误发生在 Rstudio 或类似的命令行中,在 RStudio 中它会在我输入时立
有什么方法可以在调用子逻辑应用时动态更新工作流: 正常工作流程配置如下: 我想要实现的目标如下,使用属性、变量任何更新运行时的工作流程,我尝试使用如下: 当我尝试按上述方式保存时,结果为错误:保存失败
有什么方法可以在调用子逻辑应用时动态更新工作流: 正常工作流程配置如下: 我想要实现的目标如下,使用属性、变量任何更新运行时的工作流程,我尝试使用如下: 当我尝试按上述方式保存时,结果为错误:保存失败
例如,考虑逻辑“用户只能编辑或删除该用户发表的评论”。 My Controller Actions会重复检查当前登录用户是否可以影响评论的逻辑。示例 [Authorize] public Action
在基于规则的专家系统中,知识库包含大量“if (template) then (action)”形式的规则。推理引擎选择与输入事实相匹配的规则。即那些条件部分与输入数据相匹配的规则被列入候选名单,并选
谁能解释一下这个分离逻辑的例子? 第一行和第二行有什么区别? 最佳答案 第一行说堆只包含一个小堆,因此存储中的引用 x 指向它,并且它包含值 4,4。 在 A 中为假,因为它忘记了 y 指向的小堆(它
我尝试了几天编写 NLTK 语法来将简单的法语句子转换为逻辑公式。我的问题可能与英语句子相似。我的目标是这个语法接受多个订单(家庭自动化)并将它们转换为逻辑公式。一些订单示例: 开灯: exists
我正在大学/学院学习自然演绎,作为我正式规范和验证计算机科学类(class)的一部分。 我觉得这很有趣,但是当我找到实际用途时,我会学得更好。 谁能向我解释除了用于正式验证代码位之外是否以及如何使用自
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
物理量子位和逻辑量子位有什么区别? 我希望有人能帮助我解决这个问题,我无法弄清楚到底有什么区别。 最好的,迪尔玛 最佳答案 逻辑量子位是可以用于编程的,它保存了 |0> 和 |1> 状态的叠加。它可以
我正在尝试学习如何使用 C++ 修改内存位置,并且在使用 MineSweeper 时,我注意到当内存中的时钟值为 1101004800 时,游戏进入了 20 秒。数字 1101529088 对应于游戏
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
首先介绍一些术语(取自here,第14页): 正程序是有错误的程序。 否定程序是没有错误的程序。 因此,程序有四种类型: 积极计划,分析为积极->真正积极(TP)。 积极计划,分析为否定->假否定(F
任何人都可以推荐可用于评估逻辑表达式的软件(最好是mac)或基于网络的工具吗? 例如,我希望能够快速测试两个表达式是否如下: $a = 'foo'; $b = 'bar'; $c = 'foo'; (
我是一名优秀的程序员,十分优秀!