Тактика, чтобы доказать логическое значение

Есть ли тактика, похожая на 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),

1 ответ

Решение

Позвольте мне предложить использовать 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)

что у вас есть.

Другие вопросы по тегам