如何在Coq中重写negb true to false?

时间:2016-11-25 09:57:15

标签: coq

  

如何在Coq中将negb true重写为false

我一直在图书馆中搜索将negb true重写为false的简单方法。

然而,我还没有找到任何有用的东西。

我知道simpl.,但我更喜欢更基本的语法。

2 个答案:

答案 0 :(得分:4)

搜索引力时,搜索引擎仅查看导入的模块。

这就是你第一次需要

的原因
Require Import Bool.

然后

Search (negb _ = false).

揭示了引理

negb_false_iff: forall b : bool, negb b = false <-> b = true

如果Require Import Setoid,您可以使用引理进行重写。

Goal negb true = false.
  rewrite negb_false_iff. reflexivity. Qed.

您可能不想使用simpl,因为您在某些情况下negb true并且simpl弄乱了您的目标/假设,因为它展开太多而且创造了大量难以理解的术语。您可以通过这种方式缩小simpl适用的上下文:

simpl (negb true).       (* rewrites `negb true` to `false` in the goal *)

simpl (negb true) in *.  (* rewrites `negb true` in the goal and hypotheses *)

答案 1 :(得分:1)

您已经知道simpl确实会将negb true缩减为false。 这是因为这两者是相同的。

有了这些知识,你首先可以证明你需要的陈述,然后用它重写:

assert (H: negb true = false) by reflexivity.
rewrite H.

但更好的是,您可以使用change在一行中完成所有这些操作:

change (negb true) with false.