- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Idris 中编写了以下证明:
n : Nat
n = S (k + k)
lemma: n * n = ((k * n) + k) + (1 + (((k * n) + k) + 0))
lemma = sym $
rewrite plusZeroRightNeutral ((k * n) + k) in
rewrite plusAssociative ((k * n) + k) 1 ((k * n) + k) in
rewrite plusCommutative ((k * n) + k) 1 in
rewrite mult2 ((k * n) + k) in
rewrite multDistributesOverPlusRight 2 (k * n) k in
rewrite multAssociative 2 k n in
rewrite sym (mult2 k) in
rewrite plusCommutative ((k + k) * n) (k + k) in
Refl
当然那不是我写的。我写的是这样的:
lemma: n * n = ((k * n) + k) + (1 + (((k * n) + k) + 0))
lemma = sym $
-- ((k * n) + k) + (1 + ((k * n) + k) + 0) =
rewrite plusZeroRightNeutral ((k * n) + k) in
-- ((k * n) + k) + (1 + (k * n) + k) =
rewrite plusAssociative ((k * n) + k) 1 ((k * n) + k) in
-- (((k * n) + k) + 1) + (k * n) + k) =
rewrite plusCommutative ((k * n) + k) 1 in
-- 1 + ((k * n) + k)) + ((k * n) + k) =
rewrite mult2 ((k * n) + k) in
-- 1 + 2 * ((k * n) + k) =
rewrite multDistributesOverPlusRight 2 (k * n) k in
-- 1 + 2 * (k * n) + 2 * k
rewrite multAssociative 2 k n in
-- 1 + (2 * k) * n + 2 * k =
rewrite sym (mult2 k) in
-- 1 + (k + k) * n + (k + k) =
rewrite plusCommutative ((k + k) * n) (k + k) in
-- (k + k) * n + (1 + k + k) =
-- (k + k) * n + n =
-- (1 + k + k) * n =
-- n * n
Refl
如果我在 Agda 中编写此代码,我可以使用 ≡-Reasoning
模块来跟踪我的位置;例如,上面可以这样完成(省略实际的证明步骤,因为它们完全相同):
lemma : ((k * n) + k) + (1 + (((k * n) + k) + 0)) ≡ n * n
lemma =
begin
((k * n) + k) + (1 + (((k * n) + k) + 0)) ≡⟨ {!!} ⟩
((k * n) + k) + (1 + (((k * n) + k))) ≡⟨ {!!} ⟩
((k * n) + k) + 1 + ((k * n) + k) ≡⟨ {!!} ⟩
1 + ((k * n) + k) + ((k * n) + k) ≡⟨ {!!} ⟩
1 + 2 * ((k * n) + k) ≡⟨ {!!} ⟩
1 + 2 * (k * n) + 2 * k ≡⟨ {!!} ⟩
1 + (2 * k) * n + 2 * k ≡⟨ {!!} ⟩
1 + (k + k) * n + (k + k) ≡⟨ {!!} ⟩
(k + k) * n + (1 + k + k) ≡⟨⟩
(k + k) * n + n ≡⟨ {!!} ⟩
n + (k + k) * n ≡⟨⟩
(1 + k + k) * n ≡⟨⟩
n * n
∎
where
open ≡-Reasoning
有没有办法在 Idris 中做类似的事情?
(注意:当然,在 Agda 中我不会手动证明这一点:我只会使用半环求解器并完成它;但是 https://github.com/FranckS/RingIdris 的 Idris 半环求解器似乎是针对 Idris 0.11 和我正在使用 1.1.1...)
最佳答案
the
是您的 friend ,无需任何评论。还可以使用 let
以便证明可以向前进行。
我无法轻易重写你的例子(因为我没有所有可用的引理),所以这是我自己的代码示例,它成功编译(有两个漏洞,因为我遗漏了 plus_assoc
和 plus_comm
):
%default total
plus_assoc : (x : Nat) -> (y : Nat) -> (z : Nat) -> (x + y) + z = x + (y + z)
plus_comm : (x : Nat) -> (y : Nat) -> x + y = y + x
abcd_to_acbd_lemma : (a : Nat) -> (b : Nat) -> (c : Nat) -> (d : Nat) ->
(a + b) + (c + d) = (a + c) + (b + d)
abcd_to_acbd_lemma a b c d =
let e1 = the ((a + b) + (c + d) = ((a + b) + c) + d) $ sym (plus_assoc (a + b) c d)
e2 = the (((a + b) + c) + d = (a + (b + c)) + d) $ rewrite (plus_assoc a b c) in Refl
e3 = the ((a + (b + c)) + d = (a + (c + b)) + d) $ rewrite (plus_comm b c) in Refl
e4 = the ((a + (c + b)) + d = ((a + c) + b) + d) $ rewrite (plus_assoc a c b) in Refl
e5 = the ((((a + c) + b) + d) = (a + c) + (b + d)) $ plus_assoc (a + c) b d
in trans e1 $ trans e2 $ trans e3 $ trans e4 e5
关于proof - 在编写作为传递链接步骤的长链的相等性证明时跟踪 "state",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46551671/
我正在尝试使用 http://fsprojects.github.io/ExcelProvider/ 中的 ExcelProvider .我不确定我是否遗漏了什么,但有什么方法可以实际编写 Excel
我正在用 C 编写程序,我想我在内存方面遇到了一些麻烦。 所以我的问题是:我有 2 个返回结构的函数。当我一次只运行一个函数时,我没有任何问题。但是当我一个接一个地运行时,我在写入第二个结构时总是会出
我正在使用以下代码通过 scrapey 抓取数据: from scrapy.selector import Selector from scrapy.spider import Spider clas
我偶然发现了文件处理问题, 第二行无缘无故为您提供9的值, 第三行给出错误io.UnsupportedOperation:不可读 c = open("Test.txt", "w+") c.write(
我正在向 CSV 文件写入一个函数(正在运行),但是它在最后一行中被中途切断。我知道这可能与文件的关闭有关,但我认为我做得正确。 有什么可能出错的地方吗? from itertools import
作为新用户,我设法制作了一个蜘蛛可以爬行的电子商务网站并提取每个产品的标题和变体以及输出的 CSV 文件和产品线,但我希望的是这是逐行的变化,请有人帮助我推进我的项目。 我很期待这个问题,但不幸的是我
我只是一个在业余时间编写 iOS 和 Andorid 应用程序的人。我有一些 Android 应用程序,我认为它们很适合进行更新,使它们能够在 Honeycomb 上本地运行。 但是,由于我没有 Ho
嘿,所以我并没有真正弄乱它太多,但我想知道是否真的有一种方法(在我陷入无休止的兔子洞之前)在 Dart/Flutter 中读取和写入 CSV 文件?我需要写入文件,不一定要读取它们,而且我愿意为此付出
当谈到 OCaml 时,我是一个完整的新手。我最近才开始使用该语言(大约 2 周前),但不幸的是,我的任务是为一种组合语言制作一个语法分析器(解析器 + 词法分析器,其功能是接受或不接受句子)使用门希
你能给我一些很好的引用资料吗,我可以如何通过 .net 资源读写注册表? 我查看了网站,找不到任何有用的信息。 最佳答案 检查 BCL 中的 Registry 类 http://msdn.micros
我正在开发一个可以生成大量数据并将其存储到磁盘的系统。该公司之前开发的一个系统使用普通文件来存储其数据,但由于多种原因,它变得非常难以管理。 我相信 NoSQL 数据库对我们来说是很好的解决方案。我们
如主题标题。当我写:void fun(int *tab){} 和写 void fun(int tab[]){} 一样吗? 最佳答案 是的。 void fun(int *tab){} void fun(
想不通此函数(用于将互联网站点抓取为 pdf 的类的一部分)应该合并使用 pypdf 从网页生成的 pdf 文件。 这是方法代码: def mergePdf(self,mainname,inputli
我是一名优秀的程序员,十分优秀!