ltac

    1熱度

    2回答

    我正在嘗試使用可以輕鬆生成的術語(在此特定示例中,從tauto)實例化存在量詞的策略。我第一次嘗試: Ltac mytac := match goal with | |- (exists (_ : ?X), _) => cut X; [ let t := fresh "t" in intro t ; exists t; firstorder

    6熱度

    2回答

    當在Ltac中實現複雜的策略時,我預計會出現一些Ltac命令或戰術調用失敗以及預期的位置(例如終止repeat或導致回溯)。這些故障通常在故障級別爲0時提升。 故障在較高級別上升「逃脫」周圍的try或repeat區塊,並可用於發出意外故障。 我缺少的是什麼,甚至爲0級運行策略tac和對待它的失敗,是在一個較高的水平,同時保留了失敗的消息的方式。這可以讓我確保repeat不會由於我身邊的Ltac編程

    2熱度

    1回答

    我正在嘗試編寫一個柯里函數的策略,包括普遍量化的函數。 Require Import Coq.Program.Tactics. Definition curry1 := forall A B C, (A /\ B -> C) -> (A -> B -> C). Definition curry2 := forall A B, (forall C, A /\ B -> C) -> (foral

    2熱度

    2回答

    Ltac checkForall H := let T := type of H in match T with | forall x, ?P x => idtac | _ => fail 1 "not a forall" end. Example test : (forall x, x) -> True. Proof.

    3熱度

    1回答

    我有幾個證據遵循相同的結構。其中第一個可以用trivial完成,其他所有用auto with foo_db完成,其中foo_db是在第一個證明完成後填充提示的提示數據庫。我想寫一個使用auto with foo_db來解決所有這些證明的Ltac程序。但是,當運行該Ltac解決我的第一個證明foo_db尚不存在,所以科克抱怨:Error: No such Hint database: foo_db.

    0熱度

    2回答

    考慮這個簡單的發展。我有兩個複雜數據類型: Inductive A := | A1 | A2. Inductive B := | B1 : A -> B | B2. 現在我介紹關係的概念和定義排序的數據類型A和B表示爲感應數據類型: Definition relation (X : Type) := X -> X -> Prop. Reserved Notation "a1 '

    2熱度

    3回答

    如何在ltac中調用rewrite只重寫一個發生?我認爲coq的文檔提到了一些關於rewrite at的內容,但我在實踐中並沒有真正使用它,並且沒有例子。 這是什麼,我試圖做一個例子: Definition f (a b: nat): nat. Admitted. Theorem theorem1: forall a b: nat, f a b = 4. Admitted. Theor

    1熱度

    1回答

    假設我有以下設置: Inductive exp: Set := | CE: nat -> exp. Inductive adt: exp -> Prop := | CA: forall e, adt e. Coercion nat_to_exp := CE. Ltac my_tactic := match goal with | [ |- adt (CE ?N) ] => app

    2熱度

    1回答

    我想了解'上下文'表達式(與context模式相反)。在手動它被描述爲: 上下文IDENT [EXPR] IDENT必須表示由 匹配表達式的上下文圖案結合的上下文變量。這個表達式的計算結果用expr的值替換了ident的 值的空洞。 有人可以共享一個例子說明這種構造的用法嗎?我想它必須涉及match使用context模式,然後上述形式使用匹配的上下文。

    3熱度

    1回答

    獲取假名'類型 我正在尋找一種通過它的名字獲得假名以匹配它的方法。就像這樣: Ltac mytactic h_name := let h := hyp_from_name h_name in match h with | _ /\ _ => do_something | _ => print_error_message end . 這將是像這樣使用: