- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图证明一个引理在某个部分有一个错误的假设。在 Coq 中,我曾经写过“一致”,它会摆脱目标。但是,我不确定如何在 Isabelle Isar 中进行。我试图证明关于我的 le
的引理功能:
primrec le::"nat ⇒ nat ⇒ bool" where
"le 0 n = True" |
"le (Suc k) n = (case n of 0 ⇒ False | Suc j ⇒ le k j)"
lemma def_le: "le a b = True ⟷ (∃k. a + k = b)"
proof
assume H:"le a b = True"
show "∃k. a + k = b"
proof (induct a)
case 0
show "∃k. 0 + k = b"
proof -
have "0 + b = b" by simp
thus ?thesis by (rule exI)
qed
case Suc
fix n::nat
assume HI:"∃k. n + k = b"
show "∃k. (Suc n) + k = b"
proof (induct b)
case 0
show "∃k. (Suc n) + k = 0"
proof -
have "le (Suc n) 0 = False" by simp
oops
le
功能是“小于或等于”。在证明的这一点上,我发现我有假设
H
其中指出
le a b = True
,或者在这种情况下是
le (Suc n) 0 = True
这是错误的。我该如何解决这个引理?
have "le (Suc n) 0 = False" by (simp only:le.simps)
但这不起作用。看来我需要添加一些规则来减少 case 表达式。我错过了什么?
最佳答案
问题不在于很难摆脱 False
伊莎贝尔的假设。事实上,如果存在 False
,几乎所有 Isabelle 的证明方法都会立即证明任何事情。在假设中。不,这里的问题是,在证明的那个点上,您不再有您需要的假设,因为您没有将它们链接到归纳中。但首先,请允许我说几句小话,然后给出具体的建议来修正你的证明。
几点说明
le a b = True
有点单调或 le a b = False
在伊莎贝尔。只需写信 le a b
或 ¬le a b
. fun le :: "nat ⇒ nat ⇒ bool" where
"le 0 n = True"
| "le (Suc k) 0 = False"
| "le (Suc k) (Suc n) = le k n"
lemma def_le': "le a b ⟷ a + (b - a) = b"
by (induction a arbitrary: b) (simp_all split: nat.split)
lemma def_le': "le a b ⟷ (a + (b - a) = b)"
by (induction a b rule: le.induct) simp_all
lemma def_le: "le a b ⟷ (∃k. a + k = b)"
using def_le' by auto
induct a arbitrary: b
, 自
b
在你的归纳过程中会发生变化(对于
le (Suc a) b
,你必须对
b
进行案例分析,然后在案例
b = Suc b'
中,你将从
le (Suc a) (Suc b')
到
le a b'
)。
assume "le a b = True"
,但你没有将这个事实链接到归纳中。如果在 Isabelle 中进行归纳,则必须将包含归纳变量的所有必需假设链接到归纳命令中,否则它们在归纳证明中将不可用。所讨论的假设涉及
a
和
b
,但如果你对
a
进行归纳,你将不得不推理一些任意变量
a'
与
a
无关.这样做,例如:
assume H:"le a b = True"
thus "∃k. a + k = b"
b
上的第二次归纳也是如此)
next
将它们分开。如果他们有不同的假设。
next
本质上抛弃了所有固定变量和局部假设。通过我之前提到的更改,您将需要一个
next
之前
case Suc
,否则伊莎贝尔会提示。
case
Isar 中的命令可以修复变量。在您的
Suc
情况下,归纳变量
a
是固定的;更改为
arbitrary: b
,
a
和一个
b
是固定的。您应该为这些变量指定明确的名称;否则,Isabelle 会发明它们,您将不得不希望它提出的那些与您使用的相同。那不是很好的作风。所以写例如
case (Suc a b)
.请注意,在使用
case
时,您不必修复变量或假设某些事情。 .
case
命令会为您处理这些并将本地假设存储在与案例同名的定理集合中,例如
Suc
这里。它们被归类为
Suc.prems
,
Suc.IH
,
Suc.hyps
.此外,当前案件的证明义务存储在
?case
中。 (不是
?thesis
!)。
lemma def_le: "le a b ⟷ (∃k. a + k = b)"
proof
assume "le a b"
thus "∃k. a + k = b"
proof (induct a arbitrary: b)
case 0
show "∃k. 0 + k = b" by simp
next
case (Suc a b)
thus ?case
proof (induct b)
case 0
thus ?case by simp
next
case (Suc b)
thus ?case by simp
qed
qed
next
lemma def_le: "le a b ⟷ (∃k. a + k = b)"
proof
assume "le a b"
thus "∃k. a + k = b"
proof (induct a arbitrary: b)
case (Suc a b)
thus ?case by (induct b) simp_all
qed simp
next
le a b ⟷ a + (b - a) = b
首先,然后使用它证明存在陈述。
关于coq - Isabelle/HOL Isar 中错误假设的证明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34501304/
我需要在一篇论文中做一个演示,该论文在某些时候使用了 Isabelle/Isar 和 Isabelle/HOL。 我尝试在线研究 Isabelle/HOL 和 Isabelle/Isar,以便能够在一
我想在一个名为 List 的理论中定义我自己的列表类型,但已经有一个同名的理论。 有没有比Main更轻量级的理论? ? 最佳答案 请注意 $ISABELLE_HOME/src/HOL/ex/Seq.t
Isabelle 中的“商型模式”是什么? 我在互联网上找不到任何解释。 最佳答案 如果你能从你看到这句话的地方引用一点会更好。我知道“模式匹配”,我知道“商类型”,但我不知道“商类型模式”。 我宁愿
有时我发现很难使用 Isabelle,因为我无法像在正常编程中那样使用“打印命令”。 比如我想看什么?thesis .具体语义书说: The unknown ?thesis is implicitly
我是 isabelle 的新手,并试图证明以下简单的不等式: lemma ineq: "(a::real) > 0 ⟹ a 0 ⟹ b 0" proof have "1/a + 1/b >
输入以下定义时 datatype env = "nat => 'a option" Isabelle/jedit 显示一个感叹号并说 Legacy feature! Bad name binding:
在 Isabelle 中,有时会遇到存在重复子目标的场景。例如,想象以下证明脚本: lemma "a ∧ a" apply (rule conjI) 目标: proof (prove): step
Isabelle/jEdit 中的颜色代码是什么意思?我在 Isabelle/jEdit manual 中找不到他们的描述.它唯一写的是 Prover feedback works via color
如何在 Isabelle 中定义常量集?例如像 {1,2,3}(给它一个更有趣的转折,1,2,3 是实数),或 {x\in N: x < m},其中 m 是某个固定数字 - 或者,也许更难,集合 {N
假设我在 Isabelle 中写了一个引理“(∀a. P a ⟹ Q a) ⟹ R b”。 ∀a只会量化 P a .如果我想量化超过 P a ⟹ Q a但是,在 ∀a 后面加上括号(即“(∀a. (P
使用 Isar 时,我发现了一个令人惊讶的行为(对我而言)。 我尝试使用假设,有时 Isar 提示它无法解决未决目标,例如我最典型的例子是有一个假设但无法假设它: lemma assumes "A
在伊莎贝尔中,人们通常可以达到证明目标,其中中间类型的术语对于证明的正确性至关重要。例如,考虑以下引理,将 nat 42 转换为 'a word,然后再返回: theory Test imports
已关注 how-to-use-persistent-heap-images-to-make-loading-of-theories-faster-in-isabelle另一个建议是我为 Nominal
我尝试使用 partial_function 关键字定义部分函数。它不起作用。这是最能表达直觉的: partial_function (tailrec) oddity :: "nat => nat"
我知道如何在 Isabelle 中制作“术语缩写”,但我可以制作行为相同的“类型缩写”吗? 我可以定义一个“术语缩写”使用 abbreviation "foo == True" 从此以后,输出中出现的
如何在 Isabelle 中将集合转换为列表? 我对带有签名的函数定义感兴趣: "'a set => 'a list" 我该如何定义? 最佳答案 通过搜索 "'a set" "'a list"在我偶然
我想用简化词来替换不等式的子项。我将通过一个示例来说明这一点,而不是对我的问题进行通用定义: 假设我有一个简单的编程语言和一个基于它的 Hoare 逻辑。假设我们有 if、while 和序列操作。此外
我是一名刚开始习惯 Isabelle 的数学家,而本应非常简单的事情却令人沮丧。如何定义两个常量之间的函数?比如说,函数 f: {1,2,3}\to {1,2,4} 映射 1 到 1、2 到 4 和
我想找到定理。我已阅读 find_theorems 上的部分在 Isabelle/Isar reference manual : find_theorems criteria Retrieves fa
我试图在 Isabelle/HOL 中证明这个引理。 引理“(0::nat) ≠ undefined” 但是挑剔的人找到了这个和它的否定的反例 引理“(0::nat) = undefined” 这怎么
我是一名优秀的程序员,十分优秀!