0
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

This is just an example I made up and my question is, if I want to prove it by contradicting the goal, saying assume that (~ eq_nat a c) is true, then prove by finding contradiction in the context, how should I achieve that? Not able to find a way to do that, any hint about what tactic I should use?

SCappella
  • 9,534
  • 1
  • 26
  • 35
Boooooo
  • 157
  • 3
  • 12

1 Answers1

1

This would require double negation elimination (not not goal -> goal) to work. If you have that as an axiom (say Axiom dne: forall P: Prop, ~~P -> P), then the tactic apply dne can be used.

To be precise,

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.
SCappella
  • 9,534
  • 1
  • 26
  • 35