繁体   English   中英

在 agda 模式下与 agda 交互?

[英]Interacting in agda-mode with agda?

和 agda 交互感觉超级别扭

考虑证明状态:

_ = begin
  5 ∸ 3
  ≡⟨⟩
   4 ∸ 2 ≡⟨⟩
   3 ∸ 1 ≡⟨⟩
   2 ∸ 0 ≡⟨⟩  { 2 <cursor-goes-here> }0

当我输入Cc Cl ( type-check ) 时,它说

?0 : 2 ∸ 0 ≡ _y_131
_y_131 : ℕ  [ at /home/bollu/work/plfa/src/plfa/part1/Naturals.lagda.md:586,5-10 ]

这似乎不是一个很大的错误? refineCc Cr )也没有给我一个很好的错误信息:它只告诉我:

cannot refine
  1. 我如何让 adga 告诉我:

你已经完成了证明,除了缺少\\qed

  1. 一般来说,构建证明时的“首选交互模式”是什么?

总体问题

您的帖子以以下假设开始:

和 agda 交互感觉超级别扭。

可以解释你的感觉的原因是你似乎假设 Agda 可以推断出一个术语它的类型,换句话说,你想要证明的属性和它的证明。 Agda 通常可以做到其中之一,但要求两者都没有多大意义。 作为比较,想象一下在公园的长凳上,当一个完全陌生的人走过来坐在你旁边,一言不发。 你可以看到他很乐意问你一些事情,但是,尽管你努力让他说话,他仍然保持沉默。 几分钟后,陌生人对你大喊大叫,尽管他口渴了,但你没有给他带来预期的饮料。 在这个比喻中,陌生人就是你,而你就是阿格达。 你不可能知道他渴了,更别提给他端酒了。

具体地

您提供了以下代码:

_ = begin
  5 ∸ 3 ≡⟨⟩
  4 ∸ 2 ≡⟨⟩
  3 ∸ 1 ≡⟨⟩
  2 ∸ 0 ≡⟨⟩  { 2 <cursor-goes-here> }0

这段代码缺少类型签名,可以让 Agda 为您提供更多帮助。 Agda 通过为您提供目标的推断类型来告诉您,当您键入 check 时:

?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 可以尝试提供帮助。

解决方案

我假设您希望证明减法的结果是 2,在这种情况下,代码如下:

test : 5 ∸ 3 ≡ 2
test = begin
  5 ∸ 3 ≡⟨⟩
  4 ∸ 2 ≡⟨⟩
  3 ∸ 1 ≡⟨⟩
  2 ∸ 0 ≡⟨⟩ {!!}

在这种情况下,您可以通过多种方式与 Agda 进行交互,所有这些都导致 Agda 为您提供了一个隔音术语:

您可以调用 Agsy 为您解决问题(CTRL-c CTRL-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 ∎

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM