簡體   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