[英]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 ]
這似乎不是一個很大的錯誤? refine
( Cc Cr
)也沒有給我一個很好的錯誤信息:它只告訴我:
cannot refine
你已經完成了證明,除了缺少
\\qed
您的帖子以以下假設開始:
和 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.