如何通过与目标相矛盾来证明?
How to prove by contradicting the goal?
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 a c) 为真,然后通过在中找到矛盾来证明上下文,我应该如何实现?无法找到一种方法来做到这一点,关于我应该使用什么策略的任何提示?
这需要消除双重否定(不是非目标 -> 目标)才能起作用。如果您将其作为公理(例如 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.
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 a c) 为真,然后通过在中找到矛盾来证明上下文,我应该如何实现?无法找到一种方法来做到这一点,关于我应该使用什么策略的任何提示?
这需要消除双重否定(不是非目标 -> 目标)才能起作用。如果您将其作为公理(例如 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.