aboutsummaryrefslogtreecommitdiffhomepage
path: root/theories/Reals/DiscrR.v
blob: a5155163b95a64663bfdc78af6c725f5c41ea849 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
(***********************************************************************)
(*  v      *   The Coq Proof Assistant  /  The Coq Development Team    *)
(* <O___,, *        INRIA-Rocquencourt  &  LRI-CNRS-Orsay              *)
(*   \VV/  *************************************************************)
(*    //   *      This file is distributed under the terms of the      *)
(*         *       GNU Lesser General Public License Version 2.1       *)
(***********************************************************************)

(* $Id$ *)

Require Rbase.

Tactic Definition Sup0 :=
  Match Context With
  | [ |- (Rgt R1 R0) ] -> Unfold Rgt;Apply Rlt_R0_R1
  | [ |- (Rgt (Rplus R1 ?1) R0) ] ->
    Apply (Rgt_trans (Rplus R1 ?1) ?1 R0);
    [Pattern 1 (Rplus R1 ?1);Rewrite Rplus_sym;Unfold Rgt;
     Apply Rlt_r_r_plus_R1
    |Sup0].

Tactic Definition DiscrR :=
  Match Context With
  | [ |- ~R1==R0 ] -> Red;Intro;Apply R1_neq_R0;Assumption
  | [ |- ~((Rplus R1 ?1)==R0) ] -> Apply Rgt_not_eq;Sup0
  | [ |- ~(Ropp ?1)==R0 ] -> Apply Ropp_neq; DiscrR
  | [ |- ~(?1==?1) ] -> ElimType False
  | [ |- ~(Rminus R0 ?1)==R0 ] -> Rewrite Rminus_Ropp; DiscrR
  | [ |- ~(?1==?2) ] -> 
    (Apply Rminus_not_eq; Ring (Rminus ?1 ?2); 
      (Match Context With
      | [ |- ~(Rplus (Ropp R1) ?)==R0 ] -> 
        Repeat Rewrite <-Ropp_distr1; DiscrR
      | [ |- ? ] -> DiscrR)
     Orelse (Apply Rminus_not_eq_right; DiscrR)).