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 . 这将是像这样使用: