[英]Coq: How are the equality tacticts symmetry and transitivity defined?
我對 Coq 策略symmetry和transitivity的實際工作方式很感興趣。 我已經閱讀了 Coq 手冊,但這只描述了它們的作用,而不是它們如何對證明進行操作並更改證明狀態。 作為我正在尋找的示例,在Interactive Theorem Proving and Program Devel ...
[英]Coq: How are the equality tacticts symmetry and transitivity defined?
我對 Coq 策略symmetry和transitivity的實際工作方式很感興趣。 我已經閱讀了 Coq 手冊,但這只描述了它們的作用,而不是它們如何對證明進行操作並更改證明狀態。 作為我正在尋找的示例,在Interactive Theorem Proving and Program Devel ...
[英]Destruct hypothesis: general case
如果H包含合取或析取,那么destruct H的作用就很清楚了。 但我無法弄清楚它在一般情況下的作用。 它做了一些奇怪的事情,特別是如果H: a -> b 。 一些例子: 假設剛剛被破壞: 另一個: 現在我有兩個分支: 第三個例子。 這無法證明,但對我來說仍然沒有意義: 現在我必須在第二個分支 ...
[英]apply ltac to subexpression of a goal
這是我正在嘗試做的一個簡短示例。 假設我有關系 我還有以下 ltac Ltac simplify := autorewrite with blah 我想定義一個 ltac,它確實簡化為“可分”目標中的第一項。 就像是 當我在下面嘗試上述內容時, 我得到一個 是否可以將 ltacs ...
[英]Coq: Ltac for transitivity of implication (a.k.a. hypothetical syllogism)
這個問題是關於我正在做的一個項目,即在 Coq 中編碼Principia Mathematica 。 Principia推導出了推理規則,其中之一是 Syll: ∀ PQR : Prop, P→Q, Q→R : P→R 我正在嘗試創建一個 Ltac 腳本來編寫 Syll 推理形式。 以下來自 ...
[英]Is it possible to turn a context pattern into a Gallina function?
在 Ltac 中,上下文模式可用於構建Ltac 級函數,該函數接受一個 Gallina 項並通過填充一個洞來構造一個 Gallina 項。 我想具體化這個功能並在 Gallina 級別使用它,而不是 Ltac。 例如,以下代碼使用元變量而不是上下文模式工作。 但是以下代碼不起作用,因為在填充模 ...
[英]Does Isabelle/HOL have its tactic language?
Coq 有戰術語言 Ltac 和匹配設施等。 Isabelle/HOL 是否有一些用於策略的編程語言以及用於解析、模式匹配等的服務? 我瀏覽了 Isabelle 的 Isar 參考手冊和舊的 Pawlson 教程,但我找到了線索。 ...
[英]Is it possible to bind necessarily different terms in Ltac-match?
在用戶定義的策略中進行模式匹配( match goal with )時,我們可以使用?x綁定Gallina術語,以便以后可以引用它。 我們可以在一個子句中使用多個這樣的標識符( ... ?x ... ?y ... ),或者甚至可以使用相同的標識符( ... ?x ... ?x ... )來表示 ...
[英]apply rewrite tactic to sub-expression
如何應用rewrite ->僅定位子表達式? 例如,考慮以下定理: 直觀地講,它只需要轉換一個(add ab)子表達式,但是如果我rewrite -> (comm ab) ,它將重寫所有出現的情況。 如何定位特定的子表達式? ...
[英]Coq tactic for applying a concrete hypothesis to an existential goal
考慮以下示例: apply H失敗, 因此,我知道我可以使用exists 1+2+3的策略來申請在這里工作,或者,基於這個其他stackoverflow問題,還有一種更復雜的方法可以在H上使用正向推理以使其成為存在形式。 但是我希望有一些聰明的策略可以在統一時實例化存在變量 ...
[英]Coq forward reasoning: apply with multiple hypotheses
我有兩個假設,我想使用正向推理來應用同時使用它們的定理。 我的具體我有假設 我想應用標准庫中的定理: 現在我知道我可以手動給出 x1, y1, x2, y2 的值,但是我希望 Coq 在與H0和H1統一時自動確定這些值。 我發現我可以讓它像這樣工作: 但這感覺就像一個黑客,破壞了對 ...
[英]Remove All Double Negations in Coq
我想系統地刪除所有可能出現在我的假設和目標中的雙重否定。 我知道~~A -> A不是直覺主義邏輯的一部分,但我所采取的課程是經典的,所以我不介意。 我知道所提到的公理可以通過Coq.Logic.Classical_Prop.NNPP訪問,但是這個公理無助於從更復雜的句子中刪除雙重否 ...
[英]Is “printf-debugging” possible in Ltac?
有沒有辦法在Ltac程序的中間打印變量的值(假設,策略,術語)? ...
[英]Disjunction Commutavity in Coq
我想有一個Ltac策略來執行Disjunction Commutavity的工作。 主要是,如果我在假設H某處有一個子項P \\/ Q , Ltac Com H會將Q \\/ P作為另一個假設添加到上下文中。 我嘗試通過公理提供可交換性規則並apply它; 但是它僅適用於簡單的假設,例 ...
[英]Splitting a premise with conjunction conclusion in Coq
我經常需要做“歸納加載”來證明Coq中的目標,在Coq中我可以通過歸納法同時證明多件事。 問題是,我經常遇到以下形式的歸納假設: 很好,但是像eauto這樣的策略確實不知道如何處理這樣的事情,因此它在大多數情況下會扼殺自動化。 我想知道的是,有沒有一種方法可以自動將這樣的前提 ...
[英]Modus Ponens and Modus Tollens in Coq
我想對這些簡單的推理規則采用Ltac策略。 在Modus Ponens中,如果我有H:P->Q和H1:P ,則Ltac mp H H1將Q作為H2 : Q添加到上下文中。 在Modus Tollens中,如果我有H:P->Q和H1:~Q ,那么Ltac mt H H1會將 ...
[英]Conditional Proof Tactic in Coq
我相信標題是很容易解釋的: https : //en.wikipedia.org/wiki/Conditional_proof 我想采取一種策略,假設一個命題,然后繼續尋找另一個命題,如果成功的話,我發現第一個命題隱含着第二個命題,並將其作為上下文中的假設。 因此,例如Ltac cp ...
[英]Pattern-matching a hypothesis obtained from a pattern-match on goal
考慮以下發展: 這將輸出H != n 。 我發現這非常令人驚訝,因為范圍內的唯一假設是n並且done n並且done n已經由頂級匹配的第一個分支調度。 我如何能匹配done n沒有明確提到n ,在第二場比賽的第一個分支? ...
[英]Can the injection tactic modify the end goal, or add extraneous assumptions?
考慮以下開發,這是Adam Chlipala的simplHyp的孤立部分: 請參閱內聯注釋G在開始時就已匹配,並最終用於驗證最終目標是否保持不變。 這是否排除了injection H可能改變目標或添加無關緊要的假設的可能性? ...
[英]Why does Adam Chlipala use left-associated nested tuples to represent Ltac lists in CPDT?
通過CpdtTactics.v : 如果x是在列表ls ,則用左相關聯的嵌套元組表示。 Ltac inList x ls := match ls with | x => idtac | (_, x) => idtac | (?LS, _) => inList x ...
[英]Coq: performing inversion on Prop for Set when there is only one case
假設我有一些編程語言,具有“有類型”關系和“小步”關系。 這里的關鍵細節是,對於每個術語變體,只有一種可能匹配的HasType變體。 假設我想證明一個進度引理,但我也希望能夠從中提取一個解釋器。 這給出了錯誤Inversion would require case anal ...