簡體   English   中英

在 Coq 中顯示定理定義

[英]Show theorem definition in Coq

我想查看通過Search找到的標准庫定理的定義。 我認為看到這個定義將幫助我完成一個類似的定理。

Print Rdiv_lt_0_compat. 產量:

Rdiv_lt_0_compat = 
fun (a b : R) (H : (0 < a)%R) (H0 : (0 < b)%R) =>
Rmult_lt_0_compat a (/ b) H (Rinv_0_lt_compat b H0)
     : forall a b : R, (0 < a)%R -> (0 < b)%R -> (0 < a / b)%R

Argument scopes are [R_scope R_scope _ _]

設置Set Printing All. 沒有幫助。 文檔頁面中沒有其他可用的內容。

整個 Coq 系統基於Proofs 是程序,邏輯公式是類型的思想。 當你考慮一個定理時,它是一個證明(程序),它的陳述是一個邏輯公式(程序的類型)。 在 Coq 的最初幾年,沒有策略語言,每個證明都使用與定義程序時相同的關鍵字來定義。

幾年后,人們認識到完全手工編寫程序既漫長又令人厭煩,因此發明了一種策略語言來解釋如何以更短且更簡單的方式構建證明程序 但是記錄並最終檢查的仍然是您使用Print看到的程序。

When building a proof-program, the tactic intros constructs anonymous function expressions (also known as lambdas, usually written with the keyword fun , and apply constructs an application of a function to a certain number arguments, which apply infers or leaves to the user as目標。策略inductionrewrite是相似的,但它們應用了用戶未給出的定理。策略destruct本質上產生了一個程序,它是一個模式匹配結構。

使用Rdiv_lt_0_compat ,您很幸運,該策略構建的證明非常短。 通常,使用策略編寫的證明會產生更長的程序。

如果您想查看生成它的策略序列而不是程序,則需要在系統的源中找到它,因為它沒有保存在證明助手的 memory 中。 這是線索。

Require Import Reals.

Locate Rdiv_lt_0_compat.

答案是Constant Coq.Reals.RIneq.Rdiv_lt_0_compat

該名稱序列表示保留該定理的模塊的層次結構。 第一個名稱Coq表示該定理位於 Coq 源代碼中,本質上位於目錄...theories/中,第二個名稱Reals表示您應該查看 tge 子目錄...theories/Reals 第四個名稱不應用作目錄名,而應用作文件名。 所以你應該查看文件RIneq.v

所以 go 看看https://github.com/coq/coq/tree/v8.12/theories/Reals/RIneq.v你可能會找到用於生成定理的腳本片段(對於 8.12 版本Coq)。 我剛剛檢查過,該定理出現在https://github.com/coq/coq/blob/c95bd4cf015a3084a8bddf6d3640458c9c25b455/theories/Reals/RIneq.v#L2106

Locate提供的名稱序列不是找到存儲定理腳本的文件的可靠方法。 當使用模塊和仿函數實例化定義定理時,長名稱和文件路徑之間的對應關系被破壞。 在這種情況下,您必須依賴對 Coq 系統如何工作的更深入的了解。

暫無
暫無

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

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