证明布尔蕴涵的策略
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_true
将 bool
嵌入 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 n
和 g n
强制转换为 Prop
。执行代码片段后,您会看到这个
n : nat
Hfn : f n
============================
g n
但 Set Printing Coercions.
表明它确实是
n : nat
Hfn : is_true (f n)
============================
is_true (g n)
你有。
是否有类似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_true
将 bool
嵌入 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 n
和 g n
强制转换为 Prop
。执行代码片段后,您会看到这个
n : nat
Hfn : f n
============================
g n
但 Set Printing Coercions.
表明它确实是
n : nat
Hfn : is_true (f n)
============================
is_true (g n)
你有。