在 agda 模式下与 agda 交互?
Interacting in agda-mode with agda?
和agda交互感觉超级尴尬
考虑证明状态:
_ = begin
5 ∸ 3
≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ { 2 <cursor-goes-here> }0
当我输入 C-c C-l
(type-check
) 时,它显示
?0 : 2 ∸ 0 ≡ _y_131
_y_131 : ℕ [ at /home/bollu/work/plfa/src/plfa/part1/Naturals.lagda.md:586,5-10 ]
哪个看起来不是很大的错误? refine
(C-c C-r
) 也没有给我一个很好的错误信息:它只告诉我:
cannot refine
- 如何让 adga 告诉我:
You've finished the proof, except for a missing \qed
- 一般来说,构建证明时“首选交互模式”是什么?
整体问题
您的 post 由以下假设开始:
It feels super awkward to interact with agda.
可以解释你的感觉的原因是你似乎假设 Agda 可以推断出一个术语 和 它的类型,换句话说, 属性你想证明并证明它。 Agda 通常可以做到其中之一,但要求两者都没有多大意义。作为比较,想象一下在公园的长椅上,一个完全陌生的人走过来坐在你旁边,一言不发。你可以看出他很乐意问你一些事情,但是,尽管你努力让他说话,他仍然保持沉默。几分钟后,陌生人对你大喊大叫,尽管他口渴,但你没有给他带来他期望的饮料。在这个比喻中,陌生人就是你,而你就是 Agda。你不可能知道他口渴,更不会给他送水。
具体
您提供了以下代码:
_ = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ { 2 <cursor-goes-here> }0
这段代码缺少类型签名,这将允许 Agda 为您提供更多帮助。当你输入 check 时,Agda 通过为你提供目标的推断类型来告诉你:
?0 : 2 ∸ 0 ≡ _y_131
_y_131 : ℕ [ at /home/bollu/work/plfa/src/plfa/part1/Naturals.lagda.md:586,5-10 ]
这里 Agda 说你的证明目标是 2 ∸ 0
等于某个未知的自然数 y
。这个数字是未知的,Agda 几乎不可能帮助你在证明工作中走得更远,因为它甚至不知道你想证明什么。据它所知,你的目标可能是 5 ∸ 3 ≡ 3
因为希望不存在证明项。
回到我们的比喻,你缺少“我渴了”这句话。如果陌生人提供了这条信息,你可能 - 可能 - 做出反应,这意味着 Agda 可以尝试提供帮助。
解决方案
我假设你想证明减法的结果是二,在这种情况下代码如下:
test : 5 ∸ 3 ≡ 2
test = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ {!!}
在这种情况下,您可以通过多种方式与 Agda 进行交互,这都会导致 Agda 为您提供一个可靠的术语:
您可以致电Agsy为您解决问题(CTRL-cCTRL-a),结果为:
test : 5 ∸ 3 ≡ 2
test = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ refl
你可以尝试直接细化目标(CTRL-c CTRL-r),询问 Agda 是否存在任何具有正确类型的唯一构造函数,这导致相同的:
test : 5 ∸ 3 ≡ 2
test = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ refl
如果你想用 \qed 结束你的证明,你可以尝试输入 _∎
到洞中,然后精炼 (CTRL-c CTRL-r) 给出:
test : 5 ∸ 3 ≡ 2
test = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ {!!} ∎
在最终目标中调用 Agsy 自然会得到:
test : 5 ∸ 3 ≡ 2
test = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ 2 ∎
和agda交互感觉超级尴尬
考虑证明状态:
_ = begin
5 ∸ 3
≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ { 2 <cursor-goes-here> }0
当我输入 C-c C-l
(type-check
) 时,它显示
?0 : 2 ∸ 0 ≡ _y_131
_y_131 : ℕ [ at /home/bollu/work/plfa/src/plfa/part1/Naturals.lagda.md:586,5-10 ]
哪个看起来不是很大的错误? refine
(C-c C-r
) 也没有给我一个很好的错误信息:它只告诉我:
cannot refine
- 如何让 adga 告诉我:
You've finished the proof, except for a missing
\qed
- 一般来说,构建证明时“首选交互模式”是什么?
整体问题
您的 post 由以下假设开始:
It feels super awkward to interact with agda.
可以解释你的感觉的原因是你似乎假设 Agda 可以推断出一个术语 和 它的类型,换句话说, 属性你想证明并证明它。 Agda 通常可以做到其中之一,但要求两者都没有多大意义。作为比较,想象一下在公园的长椅上,一个完全陌生的人走过来坐在你旁边,一言不发。你可以看出他很乐意问你一些事情,但是,尽管你努力让他说话,他仍然保持沉默。几分钟后,陌生人对你大喊大叫,尽管他口渴,但你没有给他带来他期望的饮料。在这个比喻中,陌生人就是你,而你就是 Agda。你不可能知道他口渴,更不会给他送水。
具体
您提供了以下代码:
_ = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ { 2 <cursor-goes-here> }0
这段代码缺少类型签名,这将允许 Agda 为您提供更多帮助。当你输入 check 时,Agda 通过为你提供目标的推断类型来告诉你:
?0 : 2 ∸ 0 ≡ _y_131
_y_131 : ℕ [ at /home/bollu/work/plfa/src/plfa/part1/Naturals.lagda.md:586,5-10 ]
这里 Agda 说你的证明目标是 2 ∸ 0
等于某个未知的自然数 y
。这个数字是未知的,Agda 几乎不可能帮助你在证明工作中走得更远,因为它甚至不知道你想证明什么。据它所知,你的目标可能是 5 ∸ 3 ≡ 3
因为希望不存在证明项。
回到我们的比喻,你缺少“我渴了”这句话。如果陌生人提供了这条信息,你可能 - 可能 - 做出反应,这意味着 Agda 可以尝试提供帮助。
解决方案
我假设你想证明减法的结果是二,在这种情况下代码如下:
test : 5 ∸ 3 ≡ 2
test = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ {!!}
在这种情况下,您可以通过多种方式与 Agda 进行交互,这都会导致 Agda 为您提供一个可靠的术语:
您可以致电Agsy为您解决问题(CTRL-cCTRL-a),结果为:
test : 5 ∸ 3 ≡ 2
test = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ refl
你可以尝试直接细化目标(CTRL-c CTRL-r),询问 Agda 是否存在任何具有正确类型的唯一构造函数,这导致相同的:
test : 5 ∸ 3 ≡ 2
test = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ refl
如果你想用 \qed 结束你的证明,你可以尝试输入 _∎
到洞中,然后精炼 (CTRL-c CTRL-r) 给出:
test : 5 ∸ 3 ≡ 2
test = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ {!!} ∎
在最终目标中调用 Agsy 自然会得到:
test : 5 ∸ 3 ≡ 2
test = begin
5 ∸ 3 ≡⟨⟩
4 ∸ 2 ≡⟨⟩
3 ∸ 1 ≡⟨⟩
2 ∸ 0 ≡⟨⟩ 2 ∎