src/HOL/Real/real_arith.ML
author wenzelm
Tue, 16 May 2006 13:01:22 +0200
changeset 19640 40ec89317425
parent 18708 4b3dadb4fe33
child 20254 58b71535ed00
permissions -rw-r--r--
added Ferrante and Rackoff Algorithm -- by Amine Chaieb;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14426
de890c247b38 fixed bugs in the setup of arithmetic procedures
paulson
parents: 14390
diff changeset
     1
(*  Title:      HOL/Real/real_arith.ML
9436
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
     3
    Author:     Tobias Nipkow, TU Muenchen
14352
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
     4
    Copyright   1999 TU Muenchen
9436
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
     5
14352
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
     6
Simprocs for common factor cancellation & Rational coefficient handling
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
     7
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
     8
Instantiation of the generic linear arithmetic package for type real.
9436
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
     9
*)
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
    10
14387
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    11
val real_le_def = thm "real_le_def";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    12
val real_diff_def = thm "real_diff_def";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    13
val real_divide_def = thm "real_divide_def";
14365
3d4df8c166ae replacing HOL/Real/PRat, PNat by the rational number development
paulson
parents: 14356
diff changeset
    14
14387
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    15
val realrel_in_real = thm"realrel_in_real";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    16
val real_add_commute = thm"real_add_commute";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    17
val real_add_assoc = thm"real_add_assoc";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    18
val real_add_zero_left = thm"real_add_zero_left";
14365
3d4df8c166ae replacing HOL/Real/PRat, PNat by the rational number development
paulson
parents: 14356
diff changeset
    19
14387
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    20
val real_mult_commute = thm"real_mult_commute";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    21
val real_mult_assoc = thm"real_mult_assoc";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    22
val real_mult_1 = thm"real_mult_1";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    23
val real_mult_1_right = thm"real_mult_1_right";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    24
val preal_le_linear = thm"preal_le_linear";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    25
val real_mult_inverse_left = thm"real_mult_inverse_left";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    26
val real_not_refl2 = thm"real_not_refl2";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    27
val real_of_preal_add = thm"real_of_preal_add";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    28
val real_of_preal_mult = thm"real_of_preal_mult";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    29
val real_of_preal_trichotomy = thm"real_of_preal_trichotomy";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    30
val real_of_preal_minus_less_zero = thm"real_of_preal_minus_less_zero";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    31
val real_of_preal_not_minus_gt_zero = thm"real_of_preal_not_minus_gt_zero";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    32
val real_of_preal_zero_less = thm"real_of_preal_zero_less";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    33
val real_le_imp_less_or_eq = thm"real_le_imp_less_or_eq";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    34
val real_le_refl = thm"real_le_refl";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    35
val real_le_linear = thm"real_le_linear";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    36
val real_le_trans = thm"real_le_trans";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    37
val real_less_le = thm"real_less_le";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    38
val real_less_sum_gt_zero = thm"real_less_sum_gt_zero";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    39
val real_gt_zero_preal_Ex = thm "real_gt_zero_preal_Ex";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    40
val real_gt_preal_preal_Ex = thm "real_gt_preal_preal_Ex";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    41
val real_ge_preal_preal_Ex = thm "real_ge_preal_preal_Ex";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    42
val real_less_all_preal = thm "real_less_all_preal";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    43
val real_less_all_real2 = thm "real_less_all_real2";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    44
val real_of_preal_le_iff = thm "real_of_preal_le_iff";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    45
val real_mult_order = thm "real_mult_order";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    46
val real_add_less_le_mono = thm "real_add_less_le_mono";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    47
val real_add_le_less_mono = thm "real_add_le_less_mono";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    48
val real_add_order = thm "real_add_order";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    49
val real_le_add_order = thm "real_le_add_order";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    50
val real_le_square = thm "real_le_square";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    51
val real_mult_less_mono2 = thm "real_mult_less_mono2";
14289
deb8e1e62002 combining Real/{RealArith0,real_arith}.ML
paulson
parents: 14288
diff changeset
    52
14387
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    53
val real_mult_less_iff1 = thm "real_mult_less_iff1";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    54
val real_mult_le_cancel_iff1 = thm "real_mult_le_cancel_iff1";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    55
val real_mult_le_cancel_iff2 = thm "real_mult_le_cancel_iff2";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    56
val real_mult_less_mono = thm "real_mult_less_mono";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    57
val real_mult_less_mono' = thm "real_mult_less_mono'";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    58
val real_sum_squares_cancel = thm "real_sum_squares_cancel";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    59
val real_sum_squares_cancel2 = thm "real_sum_squares_cancel2";
14289
deb8e1e62002 combining Real/{RealArith0,real_arith}.ML
paulson
parents: 14288
diff changeset
    60
14387
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    61
val real_mult_left_cancel = thm"real_mult_left_cancel";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    62
val real_mult_right_cancel = thm"real_mult_right_cancel";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    63
val real_inverse_unique = thm "real_inverse_unique";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    64
val real_inverse_gt_one = thm "real_inverse_gt_one";
14289
deb8e1e62002 combining Real/{RealArith0,real_arith}.ML
paulson
parents: 14288
diff changeset
    65
14387
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    66
val real_of_int_zero = thm"real_of_int_zero";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    67
val real_of_one = thm"real_of_one";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    68
val real_of_int_add = thm"real_of_int_add";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    69
val real_of_int_minus = thm"real_of_int_minus";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    70
val real_of_int_diff = thm"real_of_int_diff";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    71
val real_of_int_mult = thm"real_of_int_mult";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    72
val real_of_int_real_of_nat = thm"real_of_int_real_of_nat";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    73
val real_of_int_inject = thm"real_of_int_inject";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    74
val real_of_int_less_iff = thm"real_of_int_less_iff";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    75
val real_of_int_le_iff = thm"real_of_int_le_iff";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    76
val real_of_nat_zero = thm "real_of_nat_zero";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    77
val real_of_nat_one = thm "real_of_nat_one";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    78
val real_of_nat_add = thm "real_of_nat_add";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    79
val real_of_nat_Suc = thm "real_of_nat_Suc";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    80
val real_of_nat_less_iff = thm "real_of_nat_less_iff";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    81
val real_of_nat_le_iff = thm "real_of_nat_le_iff";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    82
val real_of_nat_ge_zero = thm "real_of_nat_ge_zero";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    83
val real_of_nat_Suc_gt_zero = thm "real_of_nat_Suc_gt_zero";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    84
val real_of_nat_mult = thm "real_of_nat_mult";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    85
val real_of_nat_inject = thm "real_of_nat_inject";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    86
val real_of_nat_diff = thm "real_of_nat_diff";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    87
val real_of_nat_zero_iff = thm "real_of_nat_zero_iff";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    88
val real_of_nat_gt_zero_cancel_iff = thm "real_of_nat_gt_zero_cancel_iff";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    89
val real_of_nat_le_zero_cancel_iff = thm "real_of_nat_le_zero_cancel_iff";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    90
val not_real_of_nat_less_zero = thm "not_real_of_nat_less_zero";
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
    91
val real_of_nat_ge_zero_cancel_iff = thm "real_of_nat_ge_zero_cancel_iff";
14390
55fe71faadda further tweaks to the numeric theories
paulson
parents: 14387
diff changeset
    92
val real_number_of = thm"real_number_of";
55fe71faadda further tweaks to the numeric theories
paulson
parents: 14387
diff changeset
    93
val real_of_nat_number_of = thm"real_of_nat_number_of";
14426
de890c247b38 fixed bugs in the setup of arithmetic procedures
paulson
parents: 14390
diff changeset
    94
val real_of_int_of_nat_eq = thm"real_of_int_of_nat_eq";
14352
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
    95
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
    96
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
    97
(****Instantiation of the generic linear arithmetic package****)
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
    98
14289
deb8e1e62002 combining Real/{RealArith0,real_arith}.ML
paulson
parents: 14288
diff changeset
    99
local
deb8e1e62002 combining Real/{RealArith0,real_arith}.ML
paulson
parents: 14288
diff changeset
   100
14369
c50188fe6366 tidying up arithmetic for the hyperreals
paulson
parents: 14368
diff changeset
   101
val simps = [real_of_nat_zero, real_of_nat_Suc, real_of_nat_add, 
16827
c90a1f450327 accomodate change of real_of_XXX;
wenzelm
parents: 15923
diff changeset
   102
       real_of_nat_mult, real_of_int_zero, real_of_one, real_of_int_add,
c90a1f450327 accomodate change of real_of_XXX;
wenzelm
parents: 15923
diff changeset
   103
       real_of_int_minus, real_of_int_diff,
c90a1f450327 accomodate change of real_of_XXX;
wenzelm
parents: 15923
diff changeset
   104
       real_of_int_mult, real_of_int_of_nat_eq,
14390
55fe71faadda further tweaks to the numeric theories
paulson
parents: 14387
diff changeset
   105
       real_of_nat_number_of, real_number_of];
14355
67e2e96bfe36 Told linear arithmetic package about injections "real" from nat/int into real.
nipkow
parents: 14352
diff changeset
   106
67e2e96bfe36 Told linear arithmetic package about injections "real" from nat/int into real.
nipkow
parents: 14352
diff changeset
   107
val int_inj_thms = [real_of_int_le_iff RS iffD2, real_of_int_less_iff RS iffD2,
67e2e96bfe36 Told linear arithmetic package about injections "real" from nat/int into real.
nipkow
parents: 14352
diff changeset
   108
                    real_of_int_inject RS iffD2];
67e2e96bfe36 Told linear arithmetic package about injections "real" from nat/int into real.
nipkow
parents: 14352
diff changeset
   109
67e2e96bfe36 Told linear arithmetic package about injections "real" from nat/int into real.
nipkow
parents: 14352
diff changeset
   110
val nat_inj_thms = [real_of_nat_le_iff RS iffD2, real_of_nat_less_iff RS iffD2,
67e2e96bfe36 Told linear arithmetic package about injections "real" from nat/int into real.
nipkow
parents: 14352
diff changeset
   111
                    real_of_nat_inject RS iffD2];
14352
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   112
9436
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
   113
in
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
   114
14387
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
   115
val fast_real_arith_simproc =
e96d5c42c4b0 Polymorphic treatment of binary arithmetic using axclasses
paulson
parents: 14369
diff changeset
   116
 Simplifier.simproc (Theory.sign_of (the_context ()))
14352
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   117
  "fast_real_arith" ["(m::real) < n","(m::real) <= n", "(m::real) = n"]
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   118
  Fast_Arith.lin_arith_prover;
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   119
9436
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
   120
val real_arith_setup =
18708
4b3dadb4fe33 setup: theory -> theory;
wenzelm
parents: 17876
diff changeset
   121
  Fast_Arith.map_data (fn {add_mono_thms, mult_mono_thms, inj_thms, lessD, neqE, simpset} =>
14368
2763da611ad9 converted Real/Lubs to Isar script. Converting arithmetic setup
paulson
parents: 14365
diff changeset
   122
   {add_mono_thms = add_mono_thms,
15184
d2c19aea17bc made mult_mono_thms generic.
nipkow
parents: 15003
diff changeset
   123
    mult_mono_thms = mult_mono_thms,
14355
67e2e96bfe36 Told linear arithmetic package about injections "real" from nat/int into real.
nipkow
parents: 14352
diff changeset
   124
    inj_thms = int_inj_thms @ nat_inj_thms @ inj_thms,
14365
3d4df8c166ae replacing HOL/Real/PRat, PNat by the rational number development
paulson
parents: 14356
diff changeset
   125
    lessD = lessD,  (*Can't change LA_Data_Ref.lessD: the reals are dense!*)
15923
01d5d0c1c078 fixed lin.arith
nipkow
parents: 15661
diff changeset
   126
    neqE = neqE,
18708
4b3dadb4fe33 setup: theory -> theory;
wenzelm
parents: 17876
diff changeset
   127
    simpset = simpset addsimps simps}) #>
4b3dadb4fe33 setup: theory -> theory;
wenzelm
parents: 17876
diff changeset
   128
  arith_inj_const ("RealDef.real", HOLogic.natT --> HOLogic.realT) #>
4b3dadb4fe33 setup: theory -> theory;
wenzelm
parents: 17876
diff changeset
   129
  arith_inj_const ("RealDef.real", HOLogic.intT --> HOLogic.realT) #>
4b3dadb4fe33 setup: theory -> theory;
wenzelm
parents: 17876
diff changeset
   130
  (fn thy => (change_simpset_of thy (fn ss => ss addsimprocs [fast_real_arith_simproc]); thy));
14352
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   131
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   132
(* some thms for injection nat => real:
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   133
real_of_nat_zero
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   134
real_of_nat_add
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   135
*)
9436
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
   136
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
   137
end;
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
   138
14352
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   139
15661
9ef583b08647 reverted renaming of Some/None in comments and strings;
wenzelm
parents: 15531
diff changeset
   140
(* Some test data [omitting examples that assume the ordering to be discrete!]
14352
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   141
Goal "!!a::real. [| a <= b; c <= d; x+y<z |] ==> a+c <= b+d";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   142
by (fast_arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   143
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   144
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   145
Goal "!!a::real. [| a <= b; b+b <= c |] ==> a+a <= c";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   146
by (fast_arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   147
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   148
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   149
Goal "!!a::real. [| a+b <= i+j; a<=b; i<=j |] ==> a+a <= j+j";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   150
by (fast_arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   151
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   152
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   153
Goal "!!a::real. a+b+c <= i+j+k & a<=b & b<=c & i<=j & j<=k --> a+a+a <= k+k+k";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   154
by (arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   155
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   156
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   157
Goal "!!a::real. [| a+b+c+d <= i+j+k+l; a<=b; b<=c; c<=d; i<=j; j<=k; k<=l |] \
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   158
\     ==> a <= l";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   159
by (fast_arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   160
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   161
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   162
Goal "!!a::real. [| a+b+c+d <= i+j+k+l; a<=b; b<=c; c<=d; i<=j; j<=k; k<=l |] \
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   163
\     ==> a+a+a+a <= l+l+l+l";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   164
by (fast_arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   165
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   166
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   167
Goal "!!a::real. [| a+b+c+d <= i+j+k+l; a<=b; b<=c; c<=d; i<=j; j<=k; k<=l |] \
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   168
\     ==> a+a+a+a+a <= l+l+l+l+i";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   169
by (fast_arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   170
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   171
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   172
Goal "!!a::real. [| a+b+c+d <= i+j+k+l; a<=b; b<=c; c<=d; i<=j; j<=k; k<=l |] \
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   173
\     ==> a+a+a+a+a+a <= l+l+l+l+i+l";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   174
by (fast_arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   175
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   176
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   177
Goal "!!a::real. [| a+b+c+d <= i+j+k+l; a<=b; b<=c; c<=d; i<=j; j<=k; k<=l |] \
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   178
\     ==> 6*a <= 5*l+i";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   179
by (fast_arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   180
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   181
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   182
Goal "a<=b ==> a < b+(1::real)";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   183
by (fast_arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   184
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   185
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   186
Goal "a<=b ==> a-(3::real) < b";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   187
by (fast_arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   188
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   189
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   190
Goal "a<=b ==> a-(1::real) < b";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   191
by (fast_arith_tac 1);
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   192
qed "";
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   193
9436
62bb04ab4b01 rearranged setup of arithmetic procedures, avoiding global reference values;
wenzelm
parents:
diff changeset
   194
*)
14352
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   195
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   196
a8b1a44d8264 Modified real arithmetic simplification
paulson
parents: 14336
diff changeset
   197