证明布尔蕴涵的策略

Tactic to prove a boolean implication

是否有类似intros的策略来证明一个布尔蕴涵如

f : nat -> bool
g : nat -> bool
Lemma f_implies_g : forall n : nat, eq_true(implb (f n) (g n)).

这种策略会将 eq_true(f n) 拉入上下文并需要证明 eq_true(g n)

我建议在这种情况下使用 SSReflect。因为它已经有了你需要的机器。它不使用 eq_truebool 嵌入 Prop,而是使用 is_true,这是另一种方法。

From Coq Require Import ssreflect ssrbool.
Variables f g : nat -> bool.
Lemma f_implies_g n : (f n) ==> (g n).
Proof.
apply/implyP => Hfn.
Abort.

上面的代码片段可以满足您的需求,隐式地将 f ng n 强制转换为 Prop。执行代码片段后,您会看到这个

  n : nat
  Hfn : f n
  ============================
  g n

Set Printing Coercions. 表明它确实是

  n : nat
  Hfn : is_true (f n)
  ============================
  is_true (g n)

你有。