test/Tools/isac/Knowledge/Isac.thy
author Walther Neuper <neuper@ist.tugraz.at>
Mon, 11 Oct 2010 12:55:40 +0200
branchisac-update-Isa09-2
changeset 38057 293a30867f15
parent 37962 720173478af6
child 41943 f33f6959948b
permissions -rw-r--r--
intermed. repair Isac.thy, thehier := the_hier ...

*** ME_Isa: thy 'Isac.thy' not in system
TODO query-replace ".thy" --> ""
neuper@37961
     1
(*  Title:  test/Tools/isac/Isac.thy
neuper@38057
     2
    Author: Walther Neuper, TU Graz, 2010
neuper@38057
     3
    (c) due to copyright terms
neuper@37961
     4
neuper@37961
     5
12345678901234567890123456789012345678901234567890123456789012345678901234567890
neuper@37961
     6
        10        20        30        40        50        60        70        80
neuper@37961
     7
*)
neuper@37961
     8
neuper@37961
     9
theory Isac imports Complex_Main (*TODO Build_Isac*) begin
neuper@37961
    10
neuper@38057
    11
text {* rlsthmsNOTisac from Isabelle2002-isac are all applicable to reals;
neuper@38057
    12
        the leading parts of longnames can be dropped with some exceptions. *}
neuper@37961
    13
neuper@37961
    14
lemma "take n (x # xs) = (case n of 0 => [] | Suc m => x # take m xs)"          by (rule List.take_Cons)
neuper@37961
    15
lemma "t = (t::real)"                                                           by (rule HOL.refl)
neuper@37961
    16
lemma "take n [] = []"                                                          by (rule List.take_Nil)
neuper@37961
    17
lemma "(f o g) x = f (g x)"                                                     by (rule Fun.o_apply)
neuper@37961
    18
lemma "(if True then x else y) = x"                                             by (rule HOL.if_True)
neuper@37961
    19
lemma "(if False then x else y) = y"                                            by (rule HOL.if_False)
neuper@37961
    20
(*lemma "- z1 = -1 * z1"                                                        by (rule \*)
neuper@37961
    21
lemma "(z1 + z2) * w = z1 * w + z2 * (w::real)"                                 by (rule Rings.semiring_class.left_distrib)
neuper@37961
    22
lemma "w * (z1 + z2) = w * z1 + w * (z2::real)"                                 by (rule Rings.semiring_class.right_distrib)
neuper@37961
    23
lemma "r1 * r1 = (r1::real) ^ 2"                                                by (rule Semiring_Normalization.comm_semiring_1_class.normalizing_semiring_rules(29))
neuper@37961
    24
lemma "r1 ^ n1 * r1 ^ m1 = (r1::real) ^ (n1 + m1)"                              by (rule Semiring_Normalization.comm_semiring_1_class.normalizing_semiring_rules(26))
neuper@37961
    25
lemma "z * 1 = (z::real)"                                                       by (rule Groups.monoid_mult_class.mult_1_right)
neuper@37961
    26
(*lemma "z1 + z1 = 2 * z1::real)"                                               by (rule !!!Semiring_Normalization.comm_semiring_1_class.normalizing_semiring_rules(4)): m + m = ((1::'a) + (1::'a)) * m*)
neuper@37961
    27
lemma "1 * z = (z::real)"                                                       by (rule Groups.monoid_mult_class.mult_1_left)
neuper@37961
    28
lemma "0 * z = (0::real)"                                                       by (rule Rings.mult_zero_class.mult_zero_left)
neuper@37961
    29
lemma "z * 0 = (0::real)"                                                       by (rule Rings.mult_zero_class.mult_zero_right)
neuper@37961
    30
lemma "0 + z = (z::real)"                                                       by (rule Groups.monoid_add_class.add_0_left)
neuper@37961
    31
lemma "z + 0 = (z::real)"                                                       by (rule Groups.monoid_add_class.add_0_right)
neuper@37961
    32
lemma "0 / x = (0::real)"                                                       by (rule Rings.division_ring_class.divide_zero_left)
neuper@37961
    33
lemma "z1 * (z2 * z3) = z1 * z2 * (z3::real)"                                   by (rule Semiring_Normalization.comm_semiring_1_class.normalizing_semiring_rules(18))
neuper@37961
    34
lemma "n <= (n::real)"                                                          by (rule RealDef.real_le_refl)
neuper@37961
    35
lemma "- (- z) = (z::real)"                                                     by (rule Groups.group_add_class.minus_minus)
neuper@37961
    36
lemma "z * w = w * (z::real)"                                                   by (rule RealDef.real_mult_commute)
neuper@37961
    37
lemma "z1 * (z2 * z3) = z2 * (z1 * (z3::real))"                                 by (rule Semiring_Normalization.comm_semiring_1_class.normalizing_semiring_rules(19))
neuper@37961
    38
lemma "z1 * z2 * z3 = z1 * (z2 * (z3::real))"                                   by (rule RealDef.real_mult_assoc)
neuper@37961
    39
lemma "z + w = w + (z::real)"                                                   by (rule Groups.ab_semigroup_add_class.add_commute)
neuper@37961
    40
lemma "x + (y + z) = y + (x + (z::real))"                                       by (rule Groups.ab_semigroup_add_class.add_left_commute)
neuper@37961
    41
lemma "z1 + z2 + z3 = z1 + (z2 + (z3::real))"                                   by (rule Groups.semigroup_add_class.add_assoc)
neuper@37961
    42
lemma "- (x1 * y1) = - x1 * (y1::real)"                                         by (rule Rings.ring_class.minus_mult_left)
neuper@37961
    43
lemma "z + - z = (0::real)"                                                     by (rule Groups.group_add_class.right_minus)
neuper@37961
    44
lemma "z1 + (z2 + z3) = z1 + z2 + (z3::real)"                                   by (rule Semiring_Normalization.comm_semiring_1_class.normalizing_semiring_rules(25))
neuper@37961
    45
lemma "- (x1 / y1) = - x1 / (y1::real)"                                         by (rule Rings.division_ring_class.minus_divide_left)
neuper@37962
    46
neuper@37961
    47
lemma "x * (y / z) = x * y / (z::real)"                                         by (rule Fields.field_class.times_divide_eq(1))
neuper@37962
    48
lemma "x * (y / z) = x * y / (z::real)"                                         by (rule Rings.division_ring_class.times_divide_eq_right) (*without (1)*)
neuper@37962
    49
neuper@37961
    50
lemma "y / z * x = y * x / (z::real)"                                           by (rule Fields.field_class.times_divide_eq_left)
neuper@37961
    51
lemma "x / y / z = x / (y * (z::real))"                                         by (rule Fields.field_inverse_zero_class.divide_divide_eq_left)
neuper@37961
    52
lemma "x / (y / z) = x * z / (y::real)"                                         by (rule Fields.field_inverse_zero_class.divide_divide_eq_right)
neuper@37961
    53
lemma "x / 1 = (x::real)"                                                       by (rule Rings.division_ring_class.divide_1)
neuper@37961
    54
lemma "(z1 - z2) * w = z1 * w - z2 * (w::real)"                                 by (rule Rings.ring_class.left_diff_distrib)
neuper@37961
    55
lemma "w * (z1 - z2) = w * z1 - w * (z2::real)"                                 by (rule Rings.ring_class.right_diff_distrib)
neuper@37961
    56
lemma "(x + y) / z = x / z + y / (z::real)"                                     by (rule Rings.division_ring_class.add_divide_distrib)
neuper@37961
    57
neuper@37962
    58
section {* comments on the above *}
neuper@37962
    59
subsection {* these are twice: *}
neuper@37962
    60
text {*
neuper@37961
    61
(*lemma "m1 + (n1 + k1) = m1 + n1 + k1"              + see sym_real_add_assoc *)
neuper@37961
    62
(*lemma "m1 * (n1 * k1) = m1 * n1 * k1"  )]          + see sym_real_mult_assoc*)
neuper@37961
    63
*}
neuper@37962
    64
neuper@37962
    65
subsection {* leading parts of long.names can be omitted, except *_class.*(n)*}
neuper@37962
    66
lemma "take n (x # xs) = (case n of 0 => [] | Suc m => x # take m xs)"          by (rule take_Cons)
neuper@37962
    67
lemma "t = (t::real)"                                                           by (rule refl)
neuper@37962
    68
lemma "take n [] = []"                                                          by (rule take_Nil)
neuper@37962
    69
lemma "(f o g) x = f (g x)"                                                     by (rule o_apply)
neuper@37962
    70
lemma "(if True then x else y) = x"                                             by (rule if_True)
neuper@37962
    71
lemma "(if False then x else y) = y"                                            by (rule if_False)
neuper@37962
    72
(*lemma "- z1 = -1 * z1"                                                        by (rule \*)
neuper@37962
    73
lemma "(z1 + z2) * w = z1 * w + z2 * (w::real)"                                 by (rule left_distrib)
neuper@37962
    74
lemma "w * (z1 + z2) = w * z1 + w * (z2::real)"                                 by (rule right_distrib)
neuper@37962
    75
lemma "r1 * r1 = (r1::real) ^ 2"                                                by (rule comm_semiring_1_class.normalizing_semiring_rules(29))
neuper@37962
    76
lemma "r1 ^ n1 * r1 ^ m1 = (r1::real) ^ (n1 + m1)"                              by (rule comm_semiring_1_class.normalizing_semiring_rules(26))
neuper@37962
    77
lemma "z * 1 = (z::real)"                                                       by (rule mult_1_right)
neuper@37962
    78
(*lemma "z1 + z1 = 2 * z1::real)"                                               by (rule !!!Semiring_Normalization.comm_semiring_1_class.normalizing_semiring_rules(4)): m + m = ((1::'a) + (1::'a)) * m*)
neuper@37962
    79
lemma "1 * z = (z::real)"                                                       by (rule mult_1_left)
neuper@37962
    80
lemma "0 * z = (0::real)"                                                       by (rule mult_zero_left)
neuper@37962
    81
lemma "z * 0 = (0::real)"                                                       by (rule mult_zero_right)
neuper@37962
    82
lemma "0 + z = (z::real)"                                                       by (rule add_0_left)
neuper@37962
    83
lemma "z + 0 = (z::real)"                                                       by (rule add_0_right)
neuper@37962
    84
lemma "0 / x = (0::real)"                                                       by (rule divide_zero_left)
neuper@37962
    85
lemma "z1 * (z2 * z3) = z1 * z2 * (z3::real)"                                   by (rule Semiring_Normalization.comm_semiring_1_class.normalizing_semiring_rules(18))
neuper@37962
    86
lemma "n <= (n::real)"                                                          by (rule real_le_refl)
neuper@37962
    87
lemma "- (- z) = (z::real)"                                                     by (rule minus_minus)
neuper@37962
    88
lemma "z * w = w * (z::real)"                                                   by (rule real_mult_commute)
neuper@37962
    89
lemma "z1 * (z2 * z3) = z2 * (z1 * (z3::real))"                                 by (rule Semiring_Normalization.comm_semiring_1_class.normalizing_semiring_rules(19))
neuper@37962
    90
lemma "z1 * z2 * z3 = z1 * (z2 * (z3::real))"                                   by (rule real_mult_assoc)
neuper@37962
    91
lemma "z + w = w + (z::real)"                                                   by (rule add_commute)
neuper@37962
    92
lemma "x + (y + z) = y + (x + (z::real))"                                       by (rule add_left_commute)
neuper@37962
    93
lemma "z1 + z2 + z3 = z1 + (z2 + (z3::real))"                                   by (rule add_assoc)
neuper@37962
    94
lemma "- (x1 * y1) = - x1 * (y1::real)"                                         by (rule minus_mult_left)
neuper@37962
    95
lemma "z + - z = (0::real)"                                                     by (rule right_minus)
neuper@37962
    96
lemma "z1 + (z2 + z3) = z1 + z2 + (z3::real)"                                   by (rule Semiring_Normalization.comm_semiring_1_class.normalizing_semiring_rules(25))
neuper@37962
    97
lemma "- (x1 / y1) = - x1 / (y1::real)"                                         by (rule minus_divide_left)
neuper@37962
    98
neuper@37962
    99
lemma "x * (y / z) = x * y / (z::real)"                                         by (rule Fields.field_class.times_divide_eq(1))
neuper@37962
   100
lemma "x * (y / z) = x * y / (z::real)"                                         by (rule times_divide_eq_right)
neuper@37962
   101
neuper@37962
   102
lemma "y / z * x = y * x / (z::real)"                                           by (rule times_divide_eq_left)
neuper@37962
   103
lemma "x / y / z = x / (y * (z::real))"                                         by (rule divide_divide_eq_left)
neuper@37962
   104
lemma "x / (y / z) = x * z / (y::real)"                                         by (rule divide_divide_eq_right)
neuper@37962
   105
lemma "x / 1 = (x::real)"                                                       by (rule divide_1)
neuper@37962
   106
lemma "(z1 - z2) * w = z1 * w - z2 * (w::real)"                                 by (rule left_diff_distrib)
neuper@37962
   107
lemma "w * (z1 - z2) = w * z1 - w * (z2::real)"                                 by (rule right_diff_distrib)
neuper@37962
   108
lemma "(x + y) / z = x / z + y / (z::real)"                                     by (rule add_divide_distrib)
neuper@37962
   109
neuper@37962
   110
neuper@37961
   111
end