如何通过与目标矛盾来证明?

时间:2019-11-17 19:48:44

标签: coq coq-tactic

Require Import Arith.

Goal forall a b c: nat, nat_eq a b -> nat_eq b c -> nat_eq a c.
Proof.
  intros a b c H0 H1.
1 subgoal
a, b, c : nat
H0 : eq_nat a b
H1 : eq_nat b c
______________________________________(1/1)
eq_nat a c

这只是我所举的一个例子,我的问题是,如果我想通过与目标矛盾来证明这一点,假设(〜eq_nat ac)是正确的,然后通过在上下文中找到矛盾来证明,我应该如何做?实现吗?找不到解决方法,是否暗示我应该使用哪种策略?

1 个答案:

答案 0 :(得分:1)

这需要双重否定消除(不是目标->目标)才能起作用。如果您将其作为公理(例如Axiom dne: forall P: Prop, ~~P -> P),则可以使用策略apply dne

确切地说,

Require Import Arith.

Axiom dne: forall P: Prop, ~~P -> P.

Goal forall a b c: nat, nat_eq a b -> nat_eq b c -> nat_eq a c.
Proof.
  intros a b c H0 H1.
  apply dne; intro H2.
  (* now the context is
     1 subgoal
     a, b, c : nat
     H0 : eq_nat a b
     H1 : eq_nat b c
     H2 : ~ eq_nat a c
     ______________________________________(1/1)
     False
  *)
Abort.