學習軌道
/
Lean
Lean
/
練習
/
反轉陣列
反轉陣列

反轉陣列

簡單

說明

你的任務是證明自訂的陣列反轉函式與內建的List.reverse相等。

由於這個練習的性質,證明並非透過傳統的執行階段測試來檢查,而是由定理check檢查。 如果這個定理通過型別檢查,你就可以視為測試通過。

如果你在本機工作,或在 Lean 的線上遊樂場中工作,你可以透過 Lean InfoView 即時獲得回饋,了解任何定理是否成功或失敗,以及失敗的原因。 這是個非常寶貴的工具,能顯示你的證明所使用的所有區域值,以及你目前的目標。

Caution

sorry策略會讓任何證明看起來是正確的。 因此,在實際撰寫任何證明之前,check定理可能看起來會自動通過型別檢查。 一旦你從證明中移除sorry,Lean InfoView 就會顯示正確的回饋。

在 Lean 中證明定理

定理證明是 Lean 不可或缺的一部分。 它讓程式設計師能夠證明程式的性質、推理程式的行為,並在型別層級編碼限制與規格。

這一章對 Lean 的定理證明了良好的入門介紹。 如果想更深入,這本書 被列為 Lean 官網上的官方資源。

Lean 提供許多策略,能自動完成證明,或證明其中的一部分。 你或許會想參考語言參考文件。

Advanced

我們可以在證明兩個定義相等的定理上使用編譯器屬性csimp。 這個屬性會指示編譯器以第二個定義取代第一個定義:

@[csimp]
theorem custom_reverse_eq_spec_reverse : @Extra.custom_reverse = @List.reverse := by
    ... -- proof here

-- now any occurrence of `Extra.custom_reverse` may now compile to `List.reverse`.

在實作效率較高但較不清晰的情況下,它特別有用。 我們可以撰寫簡單的規格,並讓編譯後的程式碼改用效率更高的實作。 許多 List 和 Array 函式都採用這個模式。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Lean Exercism

準備好開始 反轉陣列 了嗎?

註冊 Exercism,透過 100 個練習 和真人引導來學習並精通 Lean,全部免費。