创建 Coq 策略:如何使用新生成的名称?
Creating Coq tactic: how to use a newly generated name?
我想创建一个如下所示的 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 策略。我断言一个名为 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.