coq - 创建 Coq 策略 : how to use a newly generated name?

标签 coq proof coq-tactic

我想创建一个如下所示的 Coq 策略。我断言一个名为 H 的命题,我证明该命题,然后我在该命题内使用 simpl。该策略看起来像这样:

Tactic Notation "foo" :=
  assert (True) as H; try apply I;
  simpl in H.

但是,我希望 Coq 为我生成一个新名称,而不是为这个假设使用名称 H。问题是,我怎样才能在这个假设中使用 simpl

Tactic Notation "foo" :=
  assert (True) as ?; try apply I;
  simpl in (* what? *).

有没有一种方法可以生成一个假设名称,然后在相同的策略中引用它?

最佳答案

您可以为此使用fresh 策略。这是一个例子:

Tactic Notation "foo" :=
  let H := fresh "H" in
  assert True as H; try apply I; simpl in H.

Goal False.
foo. (* H : True *)
foo. (* H, H0 : True *)
Abort.

关于coq - 创建 Coq 策略 : how to use a newly generated name?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71443387/

相关文章:

coq - 软件基础: proving leb_complete and leb_correct

abstract-syntax-tree - 如何在抽象树中表示替换的 kleisli 组合

algorithm - 证明大 O 符号语句

Coq 计算风格双条件链

proof - 如何证明 (forall x, P x/\Q x) -> (forall x, P x)

coq - 如何在 Coq 中重新排列新定义的关联术语?

Coq 为单射函数定义类型构造函数

coq - 在 Coq 假设中对等式两边应用函数

coq - Coq 中匹配假设的更短表示法?

Coq:在假设或目标中用 'forall' 重写