2

coq 中是否有一种证明策略,它采用表达式(andb、orb、implb 等)中的所有布尔运算并将它们替换为命题连接词(and、or、impl)并将布尔变量 x 封装在 Is_true(x) 中?

如果没有,我怎么写一个?

4

1 回答 1

3

您可以使用重写数据库,例如:

Require Import Setoid.
Require Import Bool.

Lemma andb_prop_iff x y: Is_true (x && y) <-> Is_true x /\ Is_true y.
Proof.
  split; [apply andb_prop_elim | apply andb_prop_intro].
Qed.

Lemma orb_prop_iff x y: Is_true (x || y) <-> Is_true x \/ Is_true y.
Proof.
  split; [apply orb_prop_elim | apply orb_prop_intro].
Qed.

Hint Rewrite
  andb_prop_iff
  orb_prop_iff
  : quotebool.

Goal forall a b c, Is_true (a && b || c && (b || a)).
  intros.
  autorewrite with quotebool.
于 2013-06-28T01:00:34.710 回答