簡體   English   中英

Agda - 以交互方式構建證明 - 如何使用孔語法?

[英]Agda - Building proofs interactively - How to use the hole syntax?

對不起,奇怪的標題,我不知道這些概念實際上是如何命名的。

我正在關注Agda教程,其中有一節解釋了如何以歸納方式構建證明:https://plfa.github.io/Induction/#building-proofs-interactively

您可以逐步擴展您的證明並讓孔(此{ }0 )更新其內容以告訴您發生了什么,這非常酷。 但是,僅說明了在使用rewrite語法時如何執行此操作。

當我想“手動”在begin塊中進行證明時,這是如何工作的,例如:

+-assoc : ∀ (m n p : ℕ) → (m + n) + p ≡ m + (n + p)
+-assoc zero n p =
  begin
    (zero + n) + p
    ≡⟨⟩ n + p
    ≡⟨⟩ zero + (n + p)
  ∎
+-assoc (suc m) n p =
  begin
    (suc m + n) + p
    ≡⟨⟩ suc (m + n) + p
    ≡⟨⟩ suc ((m + n) + p)
    ≡⟨ cong suc (+-assoc m n p) ⟩
      suc (m + (n + p))
    ≡⟨⟩ suc m + (n + p)
  ∎

問題如下。 讓我們從命題和證據開始:

+-assoc : ∀ (m n p : ℕ) → (m + n) + p ≡ m + (n + p)
+-assoc m n p = ?

這評估為:

+-assoc : ∀ (m n p : ℕ) → (m + n) + p ≡ m + (n + p)
+-assoc m n p = { }0

在這種情況下,我想通過歸納來證明,所以我使用Cc Cc使用變量m拆分這些:

+-assoc : ∀ (m n p : ℕ) → (m + n) + p ≡ m + (n + p)
+-assoc zero n p = { }0
+-assoc (suc m) n p = { }1

基本情況是微不足道的,在使用Cc Cr解決后被refl替換。 但是,感應案例(孔 1)需要一些工作。 我怎樣才能把這個{ }1洞變成下面的結構來做證明:

begin
  -- my proof
  ∎

我的編輯器(spacemacs)說{ }1是只讀的。 我不能刪除它,只能在大括號之間插入東西。 我可以強制刪除它,但這顯然不是故意的。

你應該怎么做才能把洞擴大成一個begin塊? 像這樣的東西

{ begin }1

不起作用並導致錯誤消息

謝謝!

編輯:

好的,所以以下似乎有效:

{ begin ? }1

這變成了這樣:

+-assoc : ∀ (m n p : ℕ) → (m + n) + p ≡ m + (n + p)
+-assoc zero n p = refl
+-assoc (suc m) n p = begin { }0

這是一個進步:D。 但現在我不知道在哪里放置證明的實際步驟:

...
+-assoc (suc m) n p = begin (suc m + n) + p { }0
-- or
+-assoc (suc m) n p = begin { (suc m + n) + p }0

似乎都沒有工作

{ }1是只讀的

此消息在兩種情況下顯示:

  • 你試圖用退格鍵刪除一個洞,這是行不通的。 但是,如果孔為空,您可以使用 C-backspace
  • 您正在嘗試在插入/覆蓋模式下編輯一個空洞,這也不起作用

一條經驗法則是,您始終使用Cc C-SPC用等於目標類型的表達式來細化一個洞。 在您的情況下,這意味着從begin? ,然后給出(suc m + n) + p ≡⟨⟩? 等等。

有兩種方法可以細化孔:

  • Cc Cr :當給定 function 時為您創建新孔。 例如,使用此設置:

     test: Bool test = {!!}

    如果你not洞里打字

    test: Bool test = {!not!}

    並精煉,你會得到

    test: Bool test = not {!!}

    即為參數自動創建新孔。

    通過這種方式或改進一個洞,Agda 也會按照它喜歡的方式重新格式化你的代碼,我不喜歡這種方式,所以我通常不使用它。

  • Cc C-SPC :不會為 arguments 創建新的孔,也不會重新格式化您的代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM