如何应用公理来简化 Coq 中的匹配?

How to apply an axiom to simplify a match in Coq?

我有这个代码

Parameter foo : nat -> option bool.

Definition foo_valid x :=
  match foo x with
      Some _ => True
    | None => False
  end.

Axiom foo_is_valid : forall x, foo x = Some true.

Lemma foo_some_is_true_for_real : forall {x : nat}, foo_valid x.
  cbv.
  intros.

至此我有了这个目标


x : nat

========================= (1 / 1)

match foo x with
| Some _ => True
| None => False
end

是否可以使用foo_is_valid公理来消除匹配并完成证明?我该怎么做?

foo_is_valid x 是一个等式,所以你可以用它来重写。 最简单的方法是使用 rewrite tactic.

rewrite foo_is_valid.

应该在您的目标中用 Some true 替换 foo x,然后 simpl 将进行 match 计算。