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 |