meindl_diana@48797
|
1 |
(* Title: test/../rational2
|
meindl_diana@48797
|
2 |
Author: Diana Meindl
|
meindl_diana@48797
|
3 |
Copyright (c) Diana Meindl 2011
|
meindl_diana@48797
|
4 |
12345678901234567890123456789012345678901234567890123456789012345678901234567890
|
meindl_diana@48797
|
5 |
10 20 30 40 50 60 70 80
|
meindl_diana@48797
|
6 |
*)
|
meindl_diana@48797
|
7 |
|
neuper@52074
|
8 |
(*fun nth _ [] = error "nth _ []" (*Isabelle2002, still saved the hours of update*)
|
neuper@52074
|
9 |
| nth 1 (x::_) = x
|
neuper@52074
|
10 |
| nth n (_::xs) = nth (n-1) xs;*)
|
neuper@52074
|
11 |
fun nth xs i = List.nth (xs, i); (*recent Isabelle: TODO update all isac code *)
|
meindl_diana@48797
|
12 |
|
meindl_diana@48797
|
13 |
"--------------------------------------------------------";
|
neuper@48853
|
14 |
"table of contents --------------------------------------";
|
meindl_diana@48797
|
15 |
"--------------------------------------------------------";
|
neuper@48813
|
16 |
"----------- fun div2 -- --------------------------------";
|
meindl_diana@48797
|
17 |
"----------- fun mod_inv --------------------------------";
|
neuper@48814
|
18 |
"----------- fun mod_div --------------------------------";
|
neuper@48813
|
19 |
"----------- fun chinese_remainder ----------------------";
|
neuper@48830
|
20 |
"----------- fun is_prime -------------------------------";
|
neuper@48830
|
21 |
"----------- fun make_primes ----------------------------";
|
neuper@48814
|
22 |
"----------- fun primes_upto ----------------------------";
|
neuper@48834
|
23 |
"----------- fun next_prime_not_dvd ---------------------";
|
neuper@48853
|
24 |
"----------- fun lcoeff_up ------------------------------";
|
neuper@48853
|
25 |
"----------- fun deg_up ---------------------------------";
|
neuper@48853
|
26 |
"----------- fun drop_lc0_up ----------------------------";
|
neuper@48815
|
27 |
"----------- fun normalise ------------------------------";
|
neuper@48814
|
28 |
(* order until here: (GCD_Poly_FP =) GCD_Poly = gcd_poly *)
|
meindl_diana@48797
|
29 |
"----------- fun %* -------------------------------------";
|
meindl_diana@48797
|
30 |
"----------- fun %/ -------------------------------------";
|
meindl_diana@48797
|
31 |
"----------- fun %-% ------------------------------------";
|
neuper@48815
|
32 |
"----------- fun %|% ------------------------------------";
|
meindl_diana@48810
|
33 |
(*"----------- fun %+% ------------------------------------";*)
|
neuper@48855
|
34 |
(*"----------- fun centr_up -----------------------------";*)
|
neuper@48830
|
35 |
"----------- fun LANDAU_MIGNOTTE_bound ------------------";
|
neuper@48855
|
36 |
"----------- fun chinese_remainder_up -------------------";
|
neuper@48857
|
37 |
"----------- fun mod_up ---------------------------------";
|
neuper@48857
|
38 |
"----------- fun mod_up_gcd -----------------------------";
|
neuper@48855
|
39 |
"----------- fun primitive_up ---------------------------";
|
neuper@48855
|
40 |
"----------- fun try_new_prime_up -----------------------";
|
neuper@48855
|
41 |
"----------- fun gcd_up ---------------------------------";
|
neuper@48813
|
42 |
"=========== Multivariate Case ==========================";
|
neuper@48853
|
43 |
"----------- fun lcoeff ---------------------------------";
|
neuper@48853
|
44 |
"----------- fun lexp -----------------------------------";
|
neuper@48853
|
45 |
"----------- fun add_variable ---------------------------";
|
neuper@48870
|
46 |
"----------- fun zero_poly ------------------------------";
|
neuper@48853
|
47 |
"----------- drop_lc0 -----------------------------------";
|
neuper@48853
|
48 |
"----------- fun add_monoms -----------------------------";
|
neuper@48853
|
49 |
"----------- fun lex_ord --------------------------------";
|
neuper@48853
|
50 |
"----------- fun order ----------------------------------";
|
neuper@48846
|
51 |
(*"----------- fun lcoeff_up_poly ---------------------------";*)
|
neuper@48853
|
52 |
"----------- fun lexp -----------------------------------";
|
meindl_diana@48797
|
53 |
"----------- fun max_deg_var ----------------------------";
|
meindl_diana@48797
|
54 |
"----------- infix %%/ ----------------------------------";
|
neuper@48853
|
55 |
"----------- infix %%*%% --------------------------------";
|
neuper@48853
|
56 |
"----------- fun gcd_coeff ------------------------------";
|
neuper@48850
|
57 |
(*"----------- fun gcd_coeff_poly -------------------------";*)
|
neuper@48854
|
58 |
"----------- fun eval -----------------------------------";
|
neuper@48850
|
59 |
"----------- fun multi_to_uni ---------------------------";
|
neuper@48850
|
60 |
"----------- fun uni_to_multi ---------------------------";
|
meindl_diana@48797
|
61 |
"----------- fun find_new_r ----------------------------";
|
meindl_diana@48797
|
62 |
"----------- fun mult_with_new_var ---------------------";
|
neuper@48846
|
63 |
(*"----------- fun greater_deg -----------------";*)
|
meindl_diana@48797
|
64 |
"----------- infix %%+%% -------------------------------";
|
meindl_diana@48797
|
65 |
"----------- infix %%-%% -------------------------------";
|
meindl_diana@48797
|
66 |
"----------- infix %%*%% -------------------------------";
|
neuper@48851
|
67 |
"----------- infix %%/%% -------------------------------";
|
meindl_diana@48797
|
68 |
"----------- fun newton_first --------------------------";
|
neuper@48853
|
69 |
"----------- fun NEWTON --------------------------------";
|
neuper@48853
|
70 |
"----------- fun all_geq -------------------------------";
|
neuper@48853
|
71 |
"----------- fun greater_deg ---------------------------";
|
neuper@52097
|
72 |
"----------- infix %%|%% --------------------------------";
|
neuper@48813
|
73 |
"----------- fun gcd_poly' -----------------------------";
|
neuper@48813
|
74 |
"----------- fun gcd_poly ------------------------------";
|
neuper@52097
|
75 |
"----------- fun gcd_poly downto division by zero -------";
|
neuper@52063
|
76 |
"=========== prep Lucas-Interpretation ==================";
|
neuper@52077
|
77 |
"----------- fun for_quot_regarding ---------------------";
|
neuper@52077
|
78 |
"----------- fun mult_to_deg - --------------------------";
|
neuper@52063
|
79 |
"----------- fun fact_quot ------------------------------";
|
neuper@52063
|
80 |
"----------- fun %+% ------------------------------------";
|
neuper@52063
|
81 |
"----------- fun %*% ------------------------------------";
|
neuper@52063
|
82 |
"----------- fun %*/% -----------------------------------";
|
neuper@52077
|
83 |
"----------- fun %*/% Subscript raised (line 509 of lib--";
|
neuper@52063
|
84 |
"----------- fun EUCLID_naive_up ------------------------";
|
neuper@52080
|
85 |
"----------- last step in EUCLID ------------------------";
|
neuper@48813
|
86 |
" ========== END ======================================= ";
|
meindl_diana@48797
|
87 |
|
meindl_diana@48797
|
88 |
|
neuper@48813
|
89 |
"----------- fun div2 -- --------------------------------";
|
neuper@48813
|
90 |
"----------- fun div2 -- --------------------------------";
|
neuper@48813
|
91 |
"----------- fun div2 -- --------------------------------";
|
meindl_diana@48810
|
92 |
|
meindl_diana@48810
|
93 |
if 5 div 2 = 2 then () else error "5 div 2 = 2 changed";
|
neuper@48813
|
94 |
if (5 div2 2) = 2 then () else error "5 div2 2 = 2 changed";
|
meindl_diana@48810
|
95 |
if ~5 div 2 = ~3 then () else error "~5 div 2 = ~3 changed";
|
neuper@48813
|
96 |
if (~5 div2 2) = ~2 then () else error "~5 div2 2 = ~2 changed";
|
meindl_diana@48810
|
97 |
if ~5 div ~2 = 2 then () else error "~5 div ~2 = 2 changed";
|
neuper@48813
|
98 |
if (~5 div2 ~2) = 2 then () else error "~5 div2 ~2 = 2 changed";
|
meindl_diana@48810
|
99 |
if 5 div ~2 = ~3 then () else error "5 div ~2 = ~3 changed";
|
neuper@48813
|
100 |
if (5 div2 ~2) = ~2 then () else error "5 div2 ~2 = ~2 changed";
|
meindl_diana@48810
|
101 |
|
meindl_diana@48810
|
102 |
|
meindl_diana@48797
|
103 |
"----------- fun mod_inv --------------------------------";
|
meindl_diana@48797
|
104 |
"----------- fun mod_inv --------------------------------";
|
meindl_diana@48797
|
105 |
"----------- fun mod_inv--- -----------------------------";
|
meindl_diana@48797
|
106 |
"~~~~~ fun mod_inv, args:"; val (r, m) = (5,7);
|
meindl_diana@48797
|
107 |
"~~~~~ fun modi, args:"; val (r, rold, m, rinv) = (r, r, m, 1);
|
meindl_diana@48797
|
108 |
rinv < m; (*=true*)
|
meindl_diana@48797
|
109 |
r mod m = 1; (*=false*)
|
meindl_diana@48797
|
110 |
"~~~~~ fun modi, args:"; val (r, rold, m, rinv) = (rold * (rinv + 1), rold, m, rinv + 1);
|
meindl_diana@48797
|
111 |
rinv < m;(*=true*)
|
meindl_diana@48797
|
112 |
r mod m = 1; (*=false*)
|
meindl_diana@48797
|
113 |
"~~~~~ fun modi, args:"; val (r, rold, m, rinv) = (rold * (rinv + 1), rold, m, rinv + 1);
|
meindl_diana@48797
|
114 |
rinv < m;(*=true*)
|
meindl_diana@48797
|
115 |
r mod m = 1; (*=true*)
|
meindl_diana@48797
|
116 |
"~~~~~ to mod_inv return val:"; val (rinv) = (rinv);
|
meindl_diana@48797
|
117 |
|
meindl_diana@48797
|
118 |
if mod_inv 5 7 = 3 then () else error "mod_inv 5 7 = 3 changed";
|
meindl_diana@48797
|
119 |
if mod_inv 3 7 = 5 then () else error "mod_inv 3 7 = 5 changed";
|
meindl_diana@48797
|
120 |
if mod_inv 4 339 = 85 then () else error "mod_inv 4 339 = 85 changed";
|
meindl_diana@48797
|
121 |
|
neuper@48814
|
122 |
"----------- fun mod_div --------------------------------";
|
neuper@48814
|
123 |
"----------- fun mod_div --------------------------------";
|
neuper@48814
|
124 |
"----------- fun mod_div --------------------------------";
|
neuper@48865
|
125 |
if mod_div 21 3 5 = 2 then () else error "mod_div changed"; 21 mod 5 = (3 * 2) mod 5;
|
neuper@48865
|
126 |
if mod_div 22 3 5 = 4 then () else error "mod_div changed"; 22 mod 5 = (3 * 4) mod 5;
|
neuper@48865
|
127 |
if mod_div 23 3 5 = 1 then () else error "mod_div changed"; 23 mod 5 = (3 * 1) mod 5;
|
neuper@48865
|
128 |
if mod_div 24 3 5 = 3 then () else error "mod_div changed"; 24 mod 5 = (3 * 3) mod 5;
|
neuper@48865
|
129 |
if mod_div 25 3 5 = 0 then () else error "mod_div changed"; 25 mod 5 = (3 * 0) mod 5;
|
neuper@48865
|
130 |
|
neuper@48814
|
131 |
if mod_div 21 4 5 = 4 then () else error "mod_div 21 4 5 = 4 changed";
|
neuper@48814
|
132 |
if mod_div 1 4 5 = 4 then () else error "mod_div 1 4 5 = 4 changed";
|
neuper@48814
|
133 |
if mod_div 0 4 5 = 0 then () else error "mod_div 0 4 5 = 0 changed";
|
neuper@48814
|
134 |
|
neuper@48813
|
135 |
"----------- fun chinese_remainder ----------------------";
|
neuper@48813
|
136 |
"----------- fun chinese_remainder ----------------------";
|
neuper@48813
|
137 |
"----------- fun chinese_remainder ----------------------";
|
meindl_diana@48797
|
138 |
|
neuper@48862
|
139 |
if chinese_remainder(17,9) (3,4) = 35 then () else error "chinese_remainder(17,9)(3,4)=35 changed";
|
neuper@48862
|
140 |
if chinese_remainder(7,2) (6,11) = 17 then () else error "chinese_remainder(7,2)(6,11)=17 changed";
|
meindl_diana@48797
|
141 |
|
neuper@48830
|
142 |
"----------- fun is_prime -------------------------------";
|
neuper@48830
|
143 |
"----------- fun is_prime -------------------------------";
|
neuper@48830
|
144 |
"----------- fun is_prime -------------------------------";
|
neuper@48830
|
145 |
if is_prime [2, 3] 2 = false then () else error "is_prime changed";
|
neuper@48830
|
146 |
if is_prime [2, 3] 3 = false then () else error "is_prime changed";
|
neuper@48830
|
147 |
if is_prime [2, 3] 4 = false then () else error "is_prime changed";
|
neuper@48830
|
148 |
if is_prime [2, 3] 5 = true then () else error "is_prime changed";
|
neuper@48830
|
149 |
if is_prime [2, 3, 5] 5 = false then () else error "is_prime changed";
|
neuper@48830
|
150 |
if is_prime [2, 3] 6 = false then () else error "is_prime changed";
|
neuper@48830
|
151 |
if is_prime [2, 3] 7 = true then () else error "is_prime changed";
|
neuper@48830
|
152 |
if is_prime [2, 3] 25 = true then () else error "is_prime changed";
|
neuper@48830
|
153 |
|
neuper@48830
|
154 |
"----------- fun make_primes ----------------------------";
|
neuper@48830
|
155 |
"----------- fun make_primes ----------------------------";
|
neuper@48830
|
156 |
"----------- fun make_primes ----------------------------";
|
neuper@48830
|
157 |
if make_primes [2, 3] 3 4 = [2, 3, 5] then () else error "make_primes changed";
|
neuper@48830
|
158 |
if make_primes [2, 3] 3 5 = [2, 3, 5] then () else error "make_primes changed";
|
neuper@48830
|
159 |
if make_primes [2, 3] 3 6 = [2, 3, 5, 7] then () else error "make_primes changed";
|
neuper@48830
|
160 |
if make_primes [2, 3] 3 7 = [2, 3, 5, 7] then () else error "make_primes changed";
|
neuper@48830
|
161 |
if make_primes [2, 3] 3 8 = [2, 3, 5, 7, 11] then () else error "make_primes changed";
|
neuper@48830
|
162 |
if make_primes [2, 3] 3 9 = [2, 3, 5, 7, 11] then () else error "make_primes changed";
|
neuper@48830
|
163 |
if make_primes [2, 3] 3 10 = [2, 3, 5, 7, 11] then () else error "make_primes changed";
|
neuper@48830
|
164 |
if make_primes [2, 3] 3 11 = [2, 3, 5, 7, 11] then () else error "make_primes changed";
|
neuper@48830
|
165 |
if make_primes [2, 3] 3 12 = [2, 3, 5, 7, 11, 13] then () else error "make_primes changed";
|
neuper@48830
|
166 |
if make_primes [2, 3] 3 13 = [2, 3, 5, 7, 11, 13] then () else error "make_primes changed";
|
neuper@48830
|
167 |
if make_primes [2, 3] 3 14 = [2, 3, 5, 7, 11, 13, 17] then () else error "make_primes changed";
|
neuper@48830
|
168 |
if make_primes [2, 3] 3 15 = [2, 3, 5, 7, 11, 13, 17] then () else error "make_primes changed";
|
neuper@48830
|
169 |
if make_primes [2, 3] 3 16 = [2, 3, 5, 7, 11, 13, 17] then () else error "make_primes changed";
|
neuper@48830
|
170 |
if make_primes [2, 3] 3 17 = [2, 3, 5, 7, 11, 13, 17] then () else error "make_primes changed";
|
neuper@48830
|
171 |
if make_primes [2, 3] 3 18 = [2, 3, 5, 7, 11, 13, 17, 19] then () else error "make_primes changed";
|
neuper@48830
|
172 |
if make_primes [2, 3] 3 19 = [2, 3, 5, 7, 11, 13, 17, 19] then () else error "make_primes changed";
|
neuper@48830
|
173 |
if make_primes [2, 3, 5, 7] 7 4 = [2, 3, 5, 7] then () else error "make_primes changed";
|
neuper@48830
|
174 |
|
neuper@48814
|
175 |
"----------- fun primes_upto ----------------------------";
|
neuper@48814
|
176 |
"----------- fun primes_upto ----------------------------";
|
neuper@48814
|
177 |
"----------- fun primes_upto ----------------------------";
|
neuper@48835
|
178 |
if primes_upto 1 = [2] then () else error " primes_upto 1 = [2] changed";
|
neuper@48835
|
179 |
if primes_upto 3 = [2,3] then () else error " primes_upto 3 = [2,3] changed";
|
neuper@48835
|
180 |
if primes_upto 6 = [2,3,5,7] then () else error " primes_upto 6 = [2,3,5,7] changed";
|
neuper@48835
|
181 |
if primes_upto 7 = [2,3,5,7] then () else error " primes_upto 7 = [2,3,5,7] changed";
|
meindl_diana@48797
|
182 |
|
neuper@48827
|
183 |
"----------- fun next_prime_not_dvd ----------------";
|
neuper@48827
|
184 |
"----------- fun next_prime_not_dvd ----------------";
|
neuper@48827
|
185 |
"----------- fun next_prime_not_dvd ----------------";
|
neuper@48835
|
186 |
if ( 1 next_prime_not_dvd 15) = 2 then () else error "next_prime_not_dvd ..changed";
|
neuper@48835
|
187 |
if ( 2 next_prime_not_dvd 15) = 7 then () else error "next_prime_not_dvd ..changed";
|
neuper@48835
|
188 |
if ( 3 next_prime_not_dvd 15) = 7 then () else error "next_prime_not_dvd ..changed";
|
neuper@48835
|
189 |
if ( 4 next_prime_not_dvd 15) = 7 then () else error "next_prime_not_dvd ..changed";
|
neuper@48835
|
190 |
if ( 5 next_prime_not_dvd 15) = 7 then () else error "next_prime_not_dvd ..changed";
|
neuper@48835
|
191 |
if ( 6 next_prime_not_dvd 15) = 7 then () else error "next_prime_not_dvd ..changed";
|
neuper@48835
|
192 |
if ( 7 next_prime_not_dvd 15) = 11 then () else error "next_prime_not_dvd ..changed";
|
meindl_diana@48797
|
193 |
|
neuper@48853
|
194 |
"----------- fun lcoeff_up ------------------------------";
|
neuper@48853
|
195 |
"----------- fun lcoeff_up ------------------------------";
|
neuper@48853
|
196 |
"----------- fun lcoeff_up ------------------------------";
|
neuper@48846
|
197 |
if lcoeff_up [3,4,5,6] = 6 then () else error "lcoeff_up (3,4,5,6) = 6 changed" ;
|
neuper@48846
|
198 |
if lcoeff_up [3,4,5,6,0] = 6 then () else error "lcoeff_up (3,4,5,6,0) = 6 changed" ;
|
neuper@48814
|
199 |
|
neuper@48853
|
200 |
"----------- fun deg_up ---------------------------------";
|
neuper@48853
|
201 |
"----------- fun deg_up ---------------------------------";
|
neuper@48853
|
202 |
"----------- fun deg_up ---------------------------------";
|
neuper@48846
|
203 |
if deg_up [3,4,5,6] = 3 then () else error "deg_up [3,4,5,6] = 3 changed" ;
|
neuper@48846
|
204 |
if deg_up [3,4,5,6,0] = 3 then () else error "deg_up [3,4,5,6,0] = 3 changed";
|
neuper@48814
|
205 |
|
neuper@48853
|
206 |
"----------- fun drop_lc0_up ----------------------------";
|
neuper@48853
|
207 |
"----------- fun drop_lc0_up ----------------------------";
|
neuper@48853
|
208 |
"----------- fun drop_lc0_up ----------------------------";
|
neuper@48846
|
209 |
if drop_lc0_up [0, 1, 2, 3, 4, 5, 0, 0] = [0, 1, 2, 3, 4, 5] then ()
|
neuper@48846
|
210 |
else error "drop_lc0_up [0, 1, 2, 3, 4, 5, 0, 0] = [0, 1, 2, 3, 4, 5] changed";
|
neuper@48846
|
211 |
if drop_lc0_up [0, 1, 2, 3, 4, 5] = [0, 1, 2, 3, 4, 5] then ()
|
neuper@48846
|
212 |
else error "drop_lc0_up [0, 1, 2, 3, 4, 5]=[0, 1, 2, 3, 4, 5] changed";
|
neuper@48814
|
213 |
|
neuper@48815
|
214 |
"----------- fun normalise ------------------------------";
|
neuper@48815
|
215 |
"----------- fun normalise ------------------------------";
|
neuper@48815
|
216 |
"----------- fun normalise ------------------------------";
|
neuper@48815
|
217 |
if (normalise [~18, ~15, ~20, 12, 20, ~13, 2] 5) = [1, 0, 0, 1, 0, 1, 1 ] then ()
|
neuper@48815
|
218 |
else error "(normalise [~18, ~15, ~20, 12, 20, ~13, 2] 5) = [1, 0, 0, 1, 0, 1, 1 ] changed"
|
meindl_diana@48797
|
219 |
|
meindl_diana@48797
|
220 |
"----------- fun %* ------------------------------";
|
meindl_diana@48797
|
221 |
"----------- fun %* ------------------------------";
|
meindl_diana@48797
|
222 |
"----------- fun %* ------------------------------";
|
neuper@48815
|
223 |
if ([5, 4, 7, 8, 1] %* 5) = [25, 20, 35, 40, 5] then ()
|
neuper@48815
|
224 |
else error "[5, 4, 7, 8, 1] %* 5 = [25, 20, 35, 40, 5] changed";
|
neuper@48815
|
225 |
if ([5, 4, ~7, 8, ~1] %* 5) = [25, 20, ~35, 40, ~5] then ()
|
neuper@48815
|
226 |
else error "[5, 4, ~7, 8, ~1] %* 5 = [25, 20, ~35, 40, ~5] changed";
|
meindl_diana@48797
|
227 |
|
meindl_diana@48797
|
228 |
"----------- fun %/ -------------------------------";
|
meindl_diana@48797
|
229 |
"----------- fun %/ -------------------------------";
|
meindl_diana@48797
|
230 |
"----------- fun %/ -------------------------------";
|
neuper@48815
|
231 |
if ([4, 3, 2, 5, 6] %/ 3) = [1, 1, 0, 1, 2] then ()
|
neuper@48815
|
232 |
else error "%/ [4, 3, 2, 5, 6] 3 = [1, 1, 0, 1, 2] changed";
|
neuper@48815
|
233 |
if ([4, 3, 2, 0] %/ 3) = [1, 1, 0, 0] then ()
|
neuper@48815
|
234 |
else error "%/ [4, 3, 2, 0] 3 = [1, 1, 0, 0] changed";
|
meindl_diana@48797
|
235 |
|
neuper@48815
|
236 |
"----------- fun %-% ------------------------------";
|
neuper@48815
|
237 |
"----------- fun %-% ------------------------------";
|
neuper@48815
|
238 |
"----------- fun %-% -----------------------------";
|
neuper@48815
|
239 |
if ([8, ~7, 0, 1] %-% [~2, 2, 3, 0]) = [10, ~9, ~3, 1] then ()
|
neuper@48815
|
240 |
else error "([8, ~7, 0, 1] %-% [~2, 2, 3, 0]) = [10, ~9, ~3, 1] changed";
|
neuper@48815
|
241 |
if ([8, 7, 6, 5, 4] %-% [2, 2, 3, 1, 1]) = [6, 5, 3, 4, 3] then ()
|
neuper@48815
|
242 |
else error "([8, 7, 6, 5, 4] %-% [2, 2, 3, 1, 1]) = [6, 5, 3, 4, 3] changed";
|
meindl_diana@48797
|
243 |
|
neuper@48817
|
244 |
"----------- fun %|% -------------------------------";
|
neuper@48817
|
245 |
"----------- fun %|% -------------------------------";
|
neuper@48817
|
246 |
"----------- fun %|% -------------------------------";
|
neuper@48817
|
247 |
if ([2, 3] %|% [8, 22, 15]) = true then () else error "[2, 3] %|% [8, 22, 15] = true changed";
|
neuper@48817
|
248 |
if ([4] %|% [6]) = false then () else error "[4] %|% [6] = false changed";
|
neuper@48844
|
249 |
if ([12] %|% [6]) = false then () else error "[12] %|% [6] = false changed";
|
neuper@48817
|
250 |
if ([8] %|% [16, 0]) = true then () else error "[8] %|% [16, 0] = true changed";
|
neuper@48817
|
251 |
if ([3, 2] %|% [0, 0, 9, 12, 4] ) = true then () else error "[3, 2] %|% [0,0,9..] = true changed";
|
neuper@48817
|
252 |
if ([8, 0] %|% [16]) = true then () else error "[8,0] %|% [16] = true changed";
|
meindl_diana@48797
|
253 |
|
neuper@48855
|
254 |
"----------- fun centr_up -----------------------------";
|
neuper@48855
|
255 |
"----------- fun centr_up -----------------------------";
|
neuper@48855
|
256 |
"----------- fun centr_up -----------------------------";
|
neuper@48855
|
257 |
if centr_up [7, 3, 5, 8, 1, 3] 10 = [~3, 3, 5, ~2, 1, 3] then ()
|
neuper@48855
|
258 |
else error "centr_up [7, 3, 5, 8, 1, 3] 10 = [~3, 3, 5, ~2, 1, 3] changed";
|
neuper@48855
|
259 |
if centr_up [1, 2, 3, 4, 5] 2 = [1, 0, 1, 2, 3] then () else error "centr_up [1,.] 2 changed";
|
neuper@48855
|
260 |
if centr_up [1, 2, 3, 4, 5] 3 = [1, ~1, 0, 1, 2] then () else error "centr_up [1,.] 3 changed";
|
neuper@48855
|
261 |
if centr_up [1, 2, 3, 4, 5] 4 = [1, 2, ~1, 0, 1] then () else error "centr_up [1,.] 4 changed";
|
neuper@48855
|
262 |
if centr_up [1, 2, 3, 4, 5] 5 = [1, 2, 3, ~1, 0] then () else error "centr_up [1,.] 5 changed";
|
neuper@48855
|
263 |
if centr_up [1, 2, 3, 4, 5] 6 = [1, 2, 3, ~2, ~1] then () else error "centr_up [1,.]6 changed";
|
neuper@48855
|
264 |
if centr_up [1, 2, 3, 4, 5] 7 = [1, 2, 3, 4, ~2] then () else error "centr_up [1,.] 7 changed";
|
neuper@48855
|
265 |
if centr_up [1, 2, 3, 4, 5] 8 = [1, 2, 3, 4, ~3] then () else error "centr_up [1,.] 8 changed";
|
neuper@48855
|
266 |
if centr_up [1, 2, 3, 4, 5] 9 = [1, 2, 3, 4, 5] then () else error "centr_up [1,.] 9 changed";
|
neuper@48855
|
267 |
if centr_up [1, 2, 3, 4, 5] 10 = [1, 2, 3, 4, 5] then () else error "centr_up [1,.] 10 changed";
|
neuper@48855
|
268 |
if centr_up [1, 2, 3, 4, 5] 11 = [1, 2, 3, 4, 5] then () else error "centr_up [1,.] 11 changed";
|
neuper@48823
|
269 |
|
neuper@48823
|
270 |
"----------- fun sum_lmb --------------------------------";
|
neuper@48823
|
271 |
"----------- fun sum_lmb --------------------------------";
|
neuper@48823
|
272 |
"----------- fun sum_lmb --------------------------------";
|
neuper@48823
|
273 |
if sum_lmb [1, 2, 3, 4, 5] 1 = 15 then () else error "sum_lmb [1, 2, 3, 4, 5] 1 changed";
|
neuper@48823
|
274 |
if sum_lmb [1, 2, 3, 4, 5] 2 = 55 then () else error "sum_lmb [1, 2, 3, 4, 5] 2 changed";
|
neuper@48823
|
275 |
if sum_lmb [1, 2, 3, 4, 5] 3 = 225 then () else error "sum_lmb [1, 2, 3, 4, 5] 3 changed";
|
neuper@48823
|
276 |
if sum_lmb [1, 2, 3, 4, 5] 4 = 979 then () else error "sum_lmb [1, 2, 3, 4, 5] 4 changed";
|
neuper@48823
|
277 |
if sum_lmb [1, 2, 3, 4, 5] 5 = 4425 then () else error "sum_lmb [1, 2, 3, 4, 5] 5 changed";
|
neuper@48823
|
278 |
if sum_lmb [1, 2, 3, 4, 5] 6 = 20515 then () else error "sum_lmb [1, 2, 3, 4, 5] 6 changed";
|
neuper@48823
|
279 |
if sum_lmb [~1, 2, ~3, 4, ~5] 1 = ~3 then () else error "sum_lmb [~1, 2, ~3, 4, ~5] 1 changed";
|
neuper@48823
|
280 |
if sum_lmb [~1, 2, ~3, 4, ~5] 2 = 55 then () else error "sum_lmb [~1, 2, ~3, 4, ~5] 2 changed";
|
neuper@48823
|
281 |
if sum_lmb [~1, 2, ~3, 4, ~5] 3 = ~81 then () else error "sum_lmb [~1, 2, ~3, 4, ~5] 3 changed";
|
neuper@48823
|
282 |
if sum_lmb [~1, 2, ~3, 4, ~5] 4 = 979 then () else error "sum_lmb [~1, 2, ~3, 4, ~5] 4 changed";
|
neuper@48823
|
283 |
if sum_lmb [~1, 2, ~3, 4, ~5] 5 = ~2313 then () else error "sum_lmb [~1, 2, ~3, 4, ~5] 5 changed";
|
neuper@48823
|
284 |
if sum_lmb [~1, 2, ~3, 4, ~5] 6 = 20515 then () else error "sum_lmb [~1, 2, ~3, 4, ~5] 6 changed";
|
neuper@48823
|
285 |
|
neuper@48830
|
286 |
"----------- fun LANDAU_MIGNOTTE_bound ------------------";
|
neuper@48830
|
287 |
"----------- fun LANDAU_MIGNOTTE_bound ------------------";
|
neuper@48830
|
288 |
"----------- fun LANDAU_MIGNOTTE_bound ------------------";
|
neuper@48830
|
289 |
if LANDAU_MIGNOTTE_bound [1] [4, 5] = 1 then () else error "LANDAU_MIGNOTTE_bound 1";
|
neuper@48830
|
290 |
if LANDAU_MIGNOTTE_bound [1, 2] [4, 5] = 2 then () else error "LANDAU_MIGNOTTE_bound 2";
|
neuper@48830
|
291 |
if LANDAU_MIGNOTTE_bound [1, 2, 3] [4, 5] = 2 then () else error "LANDAU_MIGNOTTE_bound 3";
|
neuper@48830
|
292 |
if LANDAU_MIGNOTTE_bound [1, 2, 3] [4] = 1 then () else error "LANDAU_MIGNOTTE_bound 4";
|
neuper@48830
|
293 |
if LANDAU_MIGNOTTE_bound [1, 2, 3] [4, 5] = 2 then () else error "LANDAU_MIGNOTTE_bound 5";
|
neuper@48830
|
294 |
if LANDAU_MIGNOTTE_bound [1, 2, 3] [4, 5, 6] = 12 then () else error "LANDAU_MIGNOTTE_bound 6";
|
neuper@48830
|
295 |
if LANDAU_MIGNOTTE_bound [1, 2, 3] [4, 5] = LANDAU_MIGNOTTE_bound [4, 5] [1, 2, 3] then ()
|
neuper@48830
|
296 |
else error "LANDAU_MIGNOTTE_bound 7";
|
neuper@48830
|
297 |
if LANDAU_MIGNOTTE_bound [~1] [4, 5] = 1 then () else error "LANDAU_MIGNOTTE_bound 11";
|
neuper@48830
|
298 |
if LANDAU_MIGNOTTE_bound [~1, 2] [4, 5] = 2 then () else error "LANDAU_MIGNOTTE_bound 12";
|
neuper@48830
|
299 |
if LANDAU_MIGNOTTE_bound [~1, 2, ~3] [4, ~5] = 2 then () else error "LANDAU_MIGNOTTE_bound 13";
|
neuper@48830
|
300 |
if LANDAU_MIGNOTTE_bound [~1, 2, ~3] [4] = 1 then () else error "LANDAU_MIGNOTTE_bound 14";
|
neuper@48830
|
301 |
if LANDAU_MIGNOTTE_bound [~1, 2, ~3] [4, ~5] = 2 then () else error "LANDAU_MIGNOTTE_bound 15";
|
neuper@48830
|
302 |
if LANDAU_MIGNOTTE_bound [~1, 2, ~3] [4, ~5, 6] = 12 then () else error "LANDAU_MIGNOTTE_bound 16";
|
neuper@48830
|
303 |
if LANDAU_MIGNOTTE_bound [~1, 2, ~3] [4, ~5] = LANDAU_MIGNOTTE_bound [4, 5] [1, 2, 3] then ()
|
neuper@48830
|
304 |
else error "LANDAU_MIGNOTTE_bound 17"
|
meindl_diana@48797
|
305 |
|
neuper@48855
|
306 |
"----------- fun chinese_remainder_up -------------------";
|
neuper@48855
|
307 |
"----------- fun chinese_remainder_up -------------------";
|
neuper@48855
|
308 |
"----------- fun chinese_remainder_up -------------------";
|
neuper@48855
|
309 |
if (chinese_remainder_up (5, 7) ([2, 2, 4, 3], [3, 2, 3, 5])) = [17, 2, 24, 33] then ()
|
neuper@48855
|
310 |
else error "chinese_remainder_up (5, 7)... changed";
|
neuper@48815
|
311 |
|
neuper@48857
|
312 |
"----------- fun mod_up ---------------------------------";
|
neuper@48857
|
313 |
"----------- fun mod_up ---------------------------------";
|
neuper@48857
|
314 |
"----------- fun mod_up ---------------------------------";
|
neuper@48857
|
315 |
if ([5, 4, 7, 8, 1] mod_up 5) = [0, 4, 2, 3, 1] then ()
|
neuper@48857
|
316 |
else error "[5, 4, 7, 8, 1] mod_up 5 = [0, 4, 2, 3, 1] changed" ;
|
neuper@48857
|
317 |
if ([5, 4, ~7, 8, ~1] mod_up 5) = [0, 4, 3, 3, 4] then ()
|
neuper@48857
|
318 |
else error "[5, 4, ~7, 8, ~1] mod_up 5 = [0, 4, 3, 3, 4] changed" ;
|
neuper@48815
|
319 |
|
neuper@48857
|
320 |
"----------- fun mod_up_gcd -----------------------------";
|
neuper@48857
|
321 |
"----------- fun mod_up_gcd -----------------------------";
|
neuper@48857
|
322 |
"----------- fun mod_up_gcd -----------------------------";
|
neuper@48857
|
323 |
if mod_up_gcd [~18, ~15, ~20, 12, 20, ~13, 2] [8, 28, 22, ~11, ~14, 1, 2] 7 =
|
meindl_diana@48819
|
324 |
[2, 6, 0, 2, 6] then ()
|
neuper@48857
|
325 |
else error "( mod_up_gcd [~18, ~15, ~20, ...] [8, 28, 22, ...] 7 = [5, 1, 0, ..] changed";
|
neuper@48857
|
326 |
if mod_up_gcd [8, 28, 22, ~11, ~14, 1, 2] [2, 6, 0, 2, 6] 7 = [2, 6, 0, 2, 6] then ()
|
neuper@48857
|
327 |
else error "mod_up_gcd [8, 28, 22, ...] [2, 6, 0, ...] 7 = [1, 3, 0, 1, 3] changed";
|
neuper@48857
|
328 |
if mod_up_gcd [20, 15, 8, 6] [8, ~2, ~2, 3] 2 = [0, 1] then ()
|
neuper@48857
|
329 |
else error " mod_up_gcd [20, 15, 8, 6] [8, ~2, ~2, 3] 2 = [0, 1] changed";
|
meindl_diana@48797
|
330 |
|
neuper@48857
|
331 |
"~~~~~ fun mod_up_gcd , args:";
|
meindl_diana@48797
|
332 |
val (a,b,m) = ([ ~13, 2,12],[ ~14, 2],5);
|
neuper@48857
|
333 |
val moda = a mod_up m;
|
neuper@48857
|
334 |
val modb = (replicate (length a - length(drop_lc0_up b)) 0) @ (drop_lc0_up b mod_up m) ;
|
neuper@48846
|
335 |
val c = mod_div (lcoeff_up moda) (lcoeff_up modb) m;
|
neuper@48857
|
336 |
val rest = drop_lc0_up (moda %-% (modb %* c) mod_up m) mod_up m;
|
meindl_diana@48797
|
337 |
rest = []; (*=false*)
|
meindl_diana@48797
|
338 |
length rest < length b; (*=false*)
|
neuper@48857
|
339 |
"~~~~~ fun mod_up_gcd , args:";
|
meindl_diana@48819
|
340 |
val (a,b,m) = (rest, b , m );
|
neuper@48857
|
341 |
val moda = a mod_up m
|
neuper@48857
|
342 |
val modb = (replicate (length a - length(drop_lc0_up b)) 0) @ (drop_lc0_up b mod_up m) ;
|
neuper@48846
|
343 |
val c = mod_div (lcoeff_up moda) (lcoeff_up modb) m
|
neuper@48857
|
344 |
val rest = drop_lc0_up ((moda %-% (modb %* c)) mod_up m);
|
meindl_diana@48797
|
345 |
rest = [];(*=flase*)
|
meindl_diana@48797
|
346 |
length rest < length b; (*=true*)
|
neuper@48857
|
347 |
"~~~~~ fun mod_up_gcd , args:";
|
meindl_diana@48819
|
348 |
val (a,b,m) = (b, rest, m);
|
neuper@48857
|
349 |
val moda = a mod_up m
|
neuper@48857
|
350 |
val modb = (replicate (length a - length(drop_lc0_up b)) 0) @ (drop_lc0_up b mod_up m) ;
|
neuper@48846
|
351 |
val c = mod_div (lcoeff_up moda) (lcoeff_up modb) m
|
neuper@48857
|
352 |
val rest = drop_lc0_up ((moda %-% (modb %* c)) mod_up m);
|
meindl_diana@48797
|
353 |
rest = [];(*=flase*)
|
meindl_diana@48797
|
354 |
length rest < length b; (*=false*)
|
neuper@48857
|
355 |
"~~~~~ fun mod_up_gcd , args:";
|
meindl_diana@48819
|
356 |
val (a,b,m) = (rest,b, m);
|
neuper@48857
|
357 |
val moda = a mod_up m
|
neuper@48857
|
358 |
val modb = (replicate (length a - length(drop_lc0_up b)) 0) @ (drop_lc0_up b mod_up m) ;
|
neuper@48846
|
359 |
val c = mod_div (lcoeff_up moda) (lcoeff_up modb) m
|
neuper@48857
|
360 |
val rest = drop_lc0_up ((moda %-% (modb %* c)) mod_up m);
|
meindl_diana@48797
|
361 |
rest = [];(*=true*)
|
meindl_diana@48819
|
362 |
"~~~~~ to return val:"; val b = b;
|
meindl_diana@48797
|
363 |
|
neuper@48855
|
364 |
"----------- fun primitive_up ---------------------------";
|
neuper@48855
|
365 |
"----------- fun primitive_up ---------------------------";
|
neuper@48855
|
366 |
"----------- fun primitive_up ---------------------------";
|
neuper@48855
|
367 |
if primitive_up [12, 16, 32, 44] = [3, 4, 8, 11] then ()
|
neuper@48855
|
368 |
else error "primitive_up [12, 16, 32, 44] = [3, 4, 8, 11] changed";
|
neuper@48855
|
369 |
if primitive_up [4, 5, 12] = [4, 5, 12] then () else error "primitive_up [4, 5, 12] =[4, 5, 12] changed";
|
neuper@48855
|
370 |
if primitive_up [0] = [0] then () else error "primitive_up [0] = [0] changed";
|
neuper@48855
|
371 |
if primitive_up [6] = [1] then () else error "primitive_up [6] = [1] changed";
|
meindl_diana@48797
|
372 |
|
neuper@48855
|
373 |
"----------- fun try_new_prime_up -----------------------";
|
neuper@48855
|
374 |
"----------- fun try_new_prime_up -----------------------";
|
neuper@48855
|
375 |
"----------- fun try_new_prime_up -----------------------";
|
neuper@48855
|
376 |
"~~~~~ fun gcd_up, args:"; val (a, b) = ([~18, ~15, ~20, 12, 20, ~13, 2],
|
neuper@48855
|
377 |
[8, 28, 22, ~11, ~14, 1, 2]);
|
neuper@48855
|
378 |
"~~~~~ fun HENSEL_lifting_up, args:"; val (a, b, d, M, p) =
|
neuper@48855
|
379 |
(a, b, (abs (Integer.gcd (lcoeff_up a) (lcoeff_up b))),
|
neuper@48855
|
380 |
(2 * (abs (Integer.gcd (lcoeff_up a) (lcoeff_up b))) * LANDAU_MIGNOTTE_bound a b), 1);
|
neuper@48855
|
381 |
val p = p next_prime_not_dvd d
|
neuper@48855
|
382 |
|
neuper@48855
|
383 |
val p = p next_prime_not_dvd d
|
neuper@48857
|
384 |
val g_p = centr_up (((normalise (mod_up_gcd a b p) p) %* (d mod p)) mod_up p) p;
|
neuper@48855
|
385 |
deg_up g_p = 0 (* = false*);
|
neuper@48855
|
386 |
(*val g = primitive_up (try_new_prime_up a b d M p g_p p)*)
|
neuper@48855
|
387 |
"~~~~~ fun try_new_prime_up, args:"; val (a, b, d, M, P, g, p) = (a, b, d, M, p, g_p, p);
|
neuper@48855
|
388 |
P > M (* = false*);
|
neuper@48855
|
389 |
val p' = p next_prime_not_dvd d;
|
neuper@48857
|
390 |
val g_p = centr_up (( (normalise (mod_up_gcd a b p') p')
|
neuper@48855
|
391 |
%* (d mod p'))
|
neuper@48857
|
392 |
mod_up p')
|
neuper@48855
|
393 |
p'
|
neuper@48855
|
394 |
;
|
neuper@48871
|
395 |
val (a, b, d, M, P, g, p) = (0, 0, 0, 0, 0, 0, 0) (*isolate test below*)
|
neuper@48871
|
396 |
|
neuper@48871
|
397 |
val (a, b) = ([~18, ~15, ~20, 12, 20, ~13, 2], [8, 28, 22, ~11, ~14, 1, 2])
|
neuper@48871
|
398 |
val d = abs (Integer.gcd (lcoeff_up a) (lcoeff_up b))
|
neuper@48871
|
399 |
val M = 2 * d * LANDAU_MIGNOTTE_bound a b
|
neuper@48871
|
400 |
val p = 1 (*-> p in head of HENSEL_lifting_up*) next_prime_not_dvd d
|
neuper@48871
|
401 |
val g_p = centr_up (((normalise (mod_up_gcd a b p) p) %* (d mod p)) mod_up p) p (*see above*)
|
neuper@48871
|
402 |
val (a, b, d, M, P, g, p) = (a, b, d, M, p, g_p, p);
|
neuper@48871
|
403 |
|
neuper@48871
|
404 |
if try_new_prime_up a b d M P g p = [~1, 1, ~1] then () else error "try_new_prime_up changed";
|
neuper@48855
|
405 |
|
neuper@52065
|
406 |
(* ---- output from changeset cf55b1438731
|
neuper@48871
|
407 |
try_new_prime_up: a = [~18, ~15, ~20, 12, 20, ~13, 2], b = [8, 28, 22, ~11, ~14, 1, 2],
|
neuper@48871
|
408 |
d = 2, M = 10240, P = 12597, g = [~1, 1, ~1], p = 19
|
neuper@48871
|
409 |
try_new_prime_up 1 -----> [~1, 1, ~1] *)
|
neuper@48871
|
410 |
val (a, b, d, M, P, g, p) =
|
neuper@48871
|
411 |
([~18, ~15, ~20, 12, 20, ~13, 2], [8, 28, 22, ~11, ~14, 1, 2],
|
neuper@48871
|
412 |
2, 10240, 3, [~1, 1, ~1], 3);
|
neuper@48871
|
413 |
"-----";
|
neuper@48871
|
414 |
if try_new_prime_up a b d M P g p = [~1, 1, ~1]
|
neuper@48876
|
415 |
then () else error "try_new_prime_up I [~18, ~15, ... changed";
|
neuper@48871
|
416 |
|
neuper@52065
|
417 |
(* ---- output from changeset cf55b1438731
|
neuper@48871
|
418 |
try_new_prime_up: a = [~18, ~15, ~20, 12, 20, ~13, 2], b = [8, 28, 22, ~11, ~14, 1, 2],
|
neuper@48871
|
419 |
d = 2, M = 10240, P = 96577, g = [~4, ~2, 2], p = 23
|
neuper@48871
|
420 |
try_new_prime_up 1 -----> [~4, ~2, 2] *)
|
neuper@48871
|
421 |
val (a, b, d, M, P, g, p) =
|
neuper@48871
|
422 |
([~18, ~15, ~20, 12, 20, ~13, 2], [8, 28, 22, ~11, ~14, 1, 2],
|
neuper@48871
|
423 |
2, 10240, 5, [2, 2, 2, 2], 5);
|
neuper@48871
|
424 |
if try_new_prime_up a b d M P g p = [~4, ~2, 2]
|
neuper@48876
|
425 |
then () else error "try_new_prime_up II [~18, ~15, ... changed";
|
neuper@48876
|
426 |
|
neuper@48876
|
427 |
(* output for "gcd_up [~1, 0 ,1] [0, 1, 1] = [1, 1]" from changeset cf55b1438731
|
neuper@48876
|
428 |
try_new_prime_up: a = [~1, 0, 1], b = [0, 1, 1], d = 1, M = 16, P = 2, g = [1, 1], p = 2
|
neuper@48876
|
429 |
try_new_prime_up: a = [~1, 0, 1], b = [0, 1, 1], d = 1, M = 16, P = 6, g = [1, 1], p = 3
|
neuper@48876
|
430 |
try_new_prime_up: a = [~1, 0, 1], b = [0, 1, 1], d = 1, M = 16, P = 30, g = [1, 1], p = 5
|
neuper@48876
|
431 |
try_new_prime_up 1 -----> [1, 1]*)
|
neuper@48876
|
432 |
val (a, b, d, M, P, g, p) = ([~1, 0, 1], [0, 1, 1], 1, 16, 2, [1, 1], 2);
|
neuper@48876
|
433 |
if try_new_prime_up a b d M P g p = [1, 1]
|
neuper@48876
|
434 |
then () else error "try_new_prime_up [~1, 0, ... changed";
|
neuper@48876
|
435 |
|
neuper@48876
|
436 |
"----------- fun gcd_up ---------------------------------";
|
neuper@48876
|
437 |
"----------- fun gcd_up ---------------------------------";
|
neuper@48876
|
438 |
"----------- fun gcd_up ---------------------------------";
|
neuper@48876
|
439 |
if gcd_up [~18, ~15, ~20, 12, 20, ~13, 2] [8, 28, 22, ~11, ~14, 1, 2] = [~2, ~1, 1]
|
neuper@48876
|
440 |
then () else error "gcd_up [~1, 0 ... changed";
|
neuper@48876
|
441 |
if gcd_up [~1, 0 ,1] [0, 1, 1] = [1, 1]
|
neuper@48876
|
442 |
then () else error "gcd_up [~1, 0 ... changed";
|
meindl_diana@48797
|
443 |
|
neuper@48813
|
444 |
"=========== Multivariate Case ==========================";
|
neuper@48813
|
445 |
"=========== Multivariate Case ==========================";
|
neuper@48813
|
446 |
"=========== Multivariate Case ==========================";
|
meindl_diana@48797
|
447 |
|
neuper@48853
|
448 |
"----------- fun lcoeff ---------------------------------";
|
neuper@48853
|
449 |
"----------- fun lcoeff ---------------------------------";
|
neuper@48853
|
450 |
"----------- fun lcoeff ---------------------------------";
|
neuper@48848
|
451 |
if lcoeff [(1,[1,1]),(2,[1,2]),(3,[1,3]),(4,[1,4]),(5,[1,5])] = 5 then () else
|
neuper@48848
|
452 |
error "lcoeff [(1,[1,1]),(2,[1,2]),(3,[1,3]),(4,[1,4]),(5,[1,5])] = 5 changed";
|
meindl_diana@48797
|
453 |
|
neuper@48853
|
454 |
"----------- fun lexp -----------------------------------";
|
neuper@48853
|
455 |
"----------- fun lexp -----------------------------------";
|
neuper@48853
|
456 |
"----------- fun lexp -----------------------------------";
|
neuper@48850
|
457 |
if lexp [(1,[1,1]),(2,[1,2]),(3,[1,3]),(4,[1,4]),(5,[1,5])] = [1,5] then () else
|
neuper@48848
|
458 |
error "get_coeff [(1,[1,1]),(2,[1,2]),(3,[1,3]),(4,[1,4]),(5,[1,5])] = [1,5] changed";
|
meindl_diana@48797
|
459 |
|
neuper@48853
|
460 |
"----------- fun add_variable ---------------------------";
|
neuper@48853
|
461 |
"----------- fun add_variable ---------------------------";
|
neuper@48853
|
462 |
"----------- fun add_variable ---------------------------";
|
neuper@48870
|
463 |
if add_variable 0
|
neuper@48870
|
464 |
[(1,[1,2]),(2,[2,3])] = [(1, [0, 1, 2]), (2, [0, 2, 3])] then () else
|
neuper@48846
|
465 |
error "add_variable [(1,[1,2]),(2,[2,3])] 0 = [(1, [0, 1, 2]), (2, [0, 2, 3])] changed";
|
neuper@48870
|
466 |
if add_variable 1
|
neuper@48870
|
467 |
[(1,[1,2]),(2,[2,3])] = [(1, [1, 0, 2]), (2, [2, 0, 3])] then () else
|
neuper@48846
|
468 |
error "add_variable [(1,[1,2]),(2,[2,3])] 1 = [(1, [1, 0, 2]), (2, [2, 0, 3]) changed";
|
neuper@48870
|
469 |
if add_variable 2
|
neuper@48870
|
470 |
[(1,[1,2]),(2,[2,3])] = [(1, [1, 2, 0]), (2, [2, 3, 0])] then () else
|
neuper@48846
|
471 |
error "add_variable [(1,[1,2]),(2,[2,3])] 2 = [(1, [1, 2, 0]), (2, [2, 3, 0])] changed";
|
meindl_diana@48797
|
472 |
|
neuper@48870
|
473 |
"----------- fun zero_poly ------------------------------";
|
neuper@48870
|
474 |
"----------- fun zero_poly ------------------------------";
|
neuper@48870
|
475 |
"----------- fun zero_poly ------------------------------";
|
neuper@48870
|
476 |
if zero_poly 1 = [(0, [0])] then () else
|
neuper@48870
|
477 |
error "zero_poly 1 = [(0, [0])] changed";
|
neuper@48870
|
478 |
if zero_poly 5 = [(0, [0, 0, 0, 0, 0])] then () else
|
neuper@48870
|
479 |
error "zero_poly 1 = [(0, [0, 0, 0, 0, 0])] changed";
|
meindl_diana@48797
|
480 |
|
neuper@48853
|
481 |
"----------- drop_lc0 -----------------------------------";
|
neuper@48853
|
482 |
"----------- drop_lc0 -----------------------------------";
|
neuper@48853
|
483 |
"----------- drop_lc0 -----------------------------------";
|
neuper@48846
|
484 |
if drop_lc0 [(4,[2]),(3,[3])] = [(4,[2]),(3,[3])] then ()
|
neuper@48846
|
485 |
else error "drop_lc0 [(4,[2]),(3,[3])] = [(4,[2]),(3,[3])] changed";
|
neuper@48846
|
486 |
if drop_lc0 [(4,[2]),(0,[3])] = [(4,[2])] then ()
|
neuper@48846
|
487 |
else error "drop_lc0 [(4,[2]),(3,[3])] = [(4,[2])] changed";
|
neuper@48846
|
488 |
if drop_lc0 [(0,[2]),(3,[3])] = [(0,[2]),(3,[3])] then ()
|
neuper@48846
|
489 |
else error "drop_lc0 [(0,[2]),(3,[3])] = [(0,[2]),(3,[3])] changed";
|
neuper@48846
|
490 |
if drop_lc0 [(0,[2]),(0,[3])] = [(0,[0])] then ()
|
neuper@48846
|
491 |
else error "drop_lc0 [(0,[2]),(0,[3])] = [(0,[0])] changed";
|
meindl_diana@48824
|
492 |
|
neuper@48853
|
493 |
"----------- fun add_monoms -----------------------------";
|
neuper@48853
|
494 |
"----------- fun add_monoms -----------------------------";
|
neuper@48853
|
495 |
"----------- fun add_monoms -----------------------------";
|
neuper@48847
|
496 |
if add_monoms [(~3,[0,0]),(4,[0,0]),(3,[1,1]),(~3,[1,1]),(2,[1,2]),(~3,[1,2])] =
|
neuper@48846
|
497 |
[(1, [0, 0]), (~1, [1, 2])]
|
neuper@48847
|
498 |
then () else error ("add_monoms [(~3,[0,0]),(4,[0,0]),(3,[1,1]),(~3,[1,1]),(2,[1,2]),(~3,[1,2])] " ^
|
neuper@48846
|
499 |
"= [(1, [0, 0]), (~1, [1, 2])] changed")
|
meindl_diana@48797
|
500 |
|
neuper@48853
|
501 |
"----------- fun lex_ord --------------------------------";
|
neuper@48853
|
502 |
"----------- fun lex_ord --------------------------------";
|
neuper@48853
|
503 |
"----------- fun lex_ord --------------------------------";
|
neuper@48850
|
504 |
if lex_ord (000, [3]) (000, [4])
|
neuper@48850
|
505 |
then error " lex_ord (000, [3]) (000, [4]) changed = false" else ();
|
neuper@48850
|
506 |
if lex_ord (000, [1,2]) (000, [0,3])
|
neuper@48849
|
507 |
then error " lex_ord [1,2] [0,3] changed = false" else ();
|
neuper@48850
|
508 |
if lex_ord (000, [1,2]) (000, [3,0])
|
neuper@48849
|
509 |
then () else error " lex_ord [1,2] [3,0] = true changed";
|
neuper@48850
|
510 |
if lex_ord (000, [1,2]) (000, [1,2])
|
neuper@48849
|
511 |
then error " lex_ord [1,2] [1,2] changed = false" else ();
|
meindl_diana@48797
|
512 |
|
neuper@48853
|
513 |
"----------- fun order ----------------------------------";
|
neuper@48853
|
514 |
"----------- fun order ----------------------------------";
|
neuper@48853
|
515 |
"----------- fun order ----------------------------------";
|
neuper@48851
|
516 |
if order [(3,[1,1]),(2,[1,2]),(~3,[0,0]),(~3,[1,1]),(~3,[1,2]),(4,[0,0])] =
|
neuper@48847
|
517 |
[(1, [0, 0]), (~1, [1, 2])]
|
neuper@48851
|
518 |
then () else error ("order [(3,[1,1]),(2,[1,2]),(~3,[0,0]),(~3,[1,1]),(~3,[1,2]),(4,[0,0])]" ^
|
neuper@48847
|
519 |
" = [(1, [0, 0]), (~1, [1, 2])] changed")
|
meindl_diana@48797
|
520 |
|
neuper@48846
|
521 |
(*"----------- fun lcoeff ---------------------------";
|
neuper@48846
|
522 |
"----------- fun lcoeff ---------------------------";
|
neuper@48846
|
523 |
"----------- fun lcoeff ---------------------------";
|
neuper@48846
|
524 |
if lcoeff [(~3,[0,0]),(4,[0,0]),(3,[1,1]),(~3,[1,1]),(2,[1,2]),(~3,[1,2])] = ~1
|
neuper@48846
|
525 |
then () else error "lcoeff [(~3,[0,0]),(4,[0,0]),(3,[1,1]),(~3,[1,1]),(2,[1,2]),(~3,[1,2])] = ~1 changed";
|
neuper@48846
|
526 |
if lcoeff [(3,[1,1]),(2,[1,2]),(~3,[0,0])] = 2
|
neuper@48846
|
527 |
then () else error "lcoeff [(3,[1,1]),(2,[1,2]),(~3,[0,0])] = 2 changed";*)
|
meindl_diana@48797
|
528 |
|
neuper@48853
|
529 |
"----------- fun lexp -----------------------------------";
|
neuper@48853
|
530 |
"----------- fun lexp -----------------------------------";
|
neuper@48853
|
531 |
"----------- fun lexp -----------------------------------";
|
neuper@48850
|
532 |
if lexp [(~3,[0,0]),(4,[0,0]),(3,[1,1]),(~3,[1,1]),(2,[1,2])] = [1,2]
|
neuper@48850
|
533 |
then () else error "lexp [(~3,[0,0]),(4,[0,0]),(3,[1,1]),(~3,[1,1]),(2,[1,2])] = ~1 changed";
|
meindl_diana@48797
|
534 |
|
meindl_diana@48797
|
535 |
"----------- fun max_deg_var ----------------------------";
|
meindl_diana@48797
|
536 |
"----------- fun max_deg_var ----------------------------";
|
meindl_diana@48797
|
537 |
"----------- fun max_deg_var ----------------------------";
|
meindl_diana@48797
|
538 |
if max_deg_var [(1,[1,2]),(2,[2,3]),(3,[5,4]),(1,[0,0])] 0 = 5 then ()
|
meindl_diana@48797
|
539 |
else error " max_deg_var [(1,[1,2]),(2,[2,3]),(3,[5,4]),(1,[0,0])] 0 = 5 changed";
|
meindl_diana@48797
|
540 |
if max_deg_var [(1,[1,2]),(2,[2,3]),(3,[5,4]),(1,[0,0])] 1 = 4 then ()
|
meindl_diana@48797
|
541 |
else error " max_deg_var [(1,[1,2]),(2,[2,3]),(3,[5,4]),(1,[0,0])] 1 = 4 changed";
|
meindl_diana@48797
|
542 |
|
meindl_diana@48797
|
543 |
"----------- infix %%/ ----------------------------------";
|
meindl_diana@48797
|
544 |
"----------- infix %%/ ----------------------------------";
|
meindl_diana@48797
|
545 |
"----------- infix %%/ ----------------------------------";
|
neuper@48850
|
546 |
if ([(~3, [2, 0]), (~6, [1, 1]), (~1, [3, 1]),(1, [5, 0]), (2, [4, 1])] %%/ 2) =
|
neuper@48850
|
547 |
[(~1, [2, 0]), (~3, [1, 1]), (1, [4, 1])] then ()
|
neuper@48850
|
548 |
else error ("[(~3, [2, 0]), (~6, [1, 1]), (~1, [3, 1]),(1, [5, 0]), (2, [4, 1])] %%/ 2 = " ^
|
neuper@48850
|
549 |
"[(~1, [2, 0]), (~3, [1, 1]), (1, [4, 1])] changed");
|
meindl_diana@48797
|
550 |
|
neuper@48853
|
551 |
"----------- infix %%*%% --------------------------------";
|
neuper@48853
|
552 |
"----------- infix %%*%% --------------------------------";
|
neuper@48853
|
553 |
"----------- infix %%*%% --------------------------------";
|
neuper@48853
|
554 |
val p1 = [(1,[1,0]), (1,[0,1])]; (* a + b *)
|
neuper@48853
|
555 |
val p2 = [(1,[1,0]), (~1,[0,1])]; (* a - b *)
|
neuper@48853
|
556 |
val p = [(1, [2, 0]), (~1, [0, 2])]; (* a^2 - b^2 *)
|
neuper@48853
|
557 |
if (p1 %%*%% p2) = p then () else error "%%*%% changed";
|
neuper@48853
|
558 |
|
neuper@48853
|
559 |
val p1 = order [(1,[1,2,3]), (2,[2,2,2]), (3,[3,2,1])]: poly;
|
neuper@48853
|
560 |
val p2 = order [(10,[1,2,3]), (20,[1,1,1]), (30,[3,2,1])]: poly;
|
neuper@48853
|
561 |
if (p1 %%*%% p2) =
|
neuper@48853
|
562 |
[(60, [4, 3, 2]), (90, [6, 4, 2]), (40, [3, 3, 3]), (60, [5, 4, 3]),
|
neuper@48853
|
563 |
(20, [2, 3, 4]), (60, [4, 4, 4]), (20, [3, 4, 5]), (10, [2, 4, 6])] then ()
|
neuper@48853
|
564 |
else error "%%*%% changed"
|
neuper@48853
|
565 |
|
neuper@48853
|
566 |
"----------- fun gcd_coeff ------------------------------";
|
neuper@48853
|
567 |
"----------- fun gcd_coeff ------------------------------";
|
neuper@48853
|
568 |
"----------- fun gcd_coeff ------------------------------";
|
neuper@48850
|
569 |
if gcd_coeff [4,8,12,~2,0,~4] = 2 then () else error " gcd_coeff [4,8,12,~2,0,~4] = 2 changed";
|
neuper@48850
|
570 |
if gcd_coeff [3,6,9,19] = 1 then () else error " gcd_coeff [3,6,9,19] = 1 changed";
|
meindl_diana@48797
|
571 |
|
neuper@48850
|
572 |
(*"----------- fun gcd_coeff_poly -------------------------";
|
neuper@48850
|
573 |
"----------- fun gcd_coeff_poly -------------------------";
|
neuper@48850
|
574 |
"----------- fun gcd_coeff_poly -------------------------";
|
neuper@48850
|
575 |
if gcd_coeff_poly [(3,[1,2,3,1])] = 3 then () else error " gcd_coeff_poly [(3,[1,2,3,1])] = 3 changed";
|
neuper@48850
|
576 |
if gcd_coeff_poly [(~2, [2, 0]), (4, [5, 0]),(~4, [3, 2]), (2, [2, 3])] = 2 then ()
|
neuper@48850
|
577 |
else error "gcd_coeff_poly [(~2, [2, 0]), (4, [5, 0]),(~4, [3, 2]), (2, [2, 3])] = 2 changed";
|
neuper@48850
|
578 |
if gcd_coeff_poly [(~2, [2, 0]), (5, [5, 0]),(~4, [3, 2]), (2, [2, 3])] = 1 then ()
|
neuper@48850
|
579 |
else error "gcd_coeff_poly [(~2, [2, 0]), (5, [5, 0]),(~4, [3, 2]), (2, [2, 3])] = 1 changed";*)
|
meindl_diana@48797
|
580 |
|
neuper@48854
|
581 |
"----------- fun eval -----------------------------------";
|
neuper@48854
|
582 |
"----------- fun eval -----------------------------------";
|
neuper@48854
|
583 |
"----------- fun eval -----------------------------------";
|
neuper@48854
|
584 |
if eval [(~3, [2, 1]), (2, [0, 1]), (1,[2, 0])] 0 1 = [(1, [0]), (~1, [1])] then ()
|
neuper@48854
|
585 |
else error " eval [(~3, [2, 1]), (2, [0, 1]),(1,[2,0])] 0 1 = [(1, [0]), (~1, [1])] changed";
|
neuper@48854
|
586 |
if eval [(~3, [2, 1]), (2, [0, 1]), (1,[2, 0])] 1 1 = [(2, [0]), (~2, [2])] then ()
|
neuper@48854
|
587 |
else error " eval [(~3, [2, 1]), (2, [0, 1]),(1,[2,0])] 1 1 =[(2, [0]), (~2, [2])] changed";
|
neuper@48854
|
588 |
if eval [(~3, [2, 1]), (2, [0, 1]), (1,[2, 0])] 0 3 = [(9, [0]), (~25, [1])] then ()
|
neuper@48854
|
589 |
else error " eval [(~3, [2, 1]), (2, [0, 1]),(1,[2,0])] 0 3 = [(9, [0]), (~25, [1])] changed";
|
neuper@48854
|
590 |
if eval [(~3, [2, 1]), (2, [0, 1]), (1,[2, 0])] 1 3 = [(6, [0]), (~8, [2])] then ()
|
neuper@48854
|
591 |
else error " eval [(~3, [2, 1]), (2, [0, 1]),(1,[2,0])] 1 3 = [ (6, [0]), (~8, [2])] changed";
|
meindl_diana@48797
|
592 |
|
neuper@48850
|
593 |
"----------- fun multi_to_uni ---------------------------";
|
neuper@48850
|
594 |
"----------- fun multi_to_uni ---------------------------";
|
neuper@48850
|
595 |
"----------- fun multi_to_uni ---------------------------";
|
meindl_diana@48797
|
596 |
if multi_to_uni [(~3, [1]), (2, [1]), (1, [0])] = [1, ~1]
|
meindl_diana@48797
|
597 |
then () else error " multi_to_uni [(~3, [1]), (2, [1]), (1, [0])] = [1, ~1] changed";
|
meindl_diana@48797
|
598 |
|
neuper@48850
|
599 |
"----------- fun uni_to_multi ---------------------------";
|
neuper@48850
|
600 |
"----------- fun uni_to_multi ---------------------------";
|
neuper@48850
|
601 |
"----------- fun uni_to_multi ---------------------------";
|
neuper@48850
|
602 |
if uni_to_multi [~11, 11, 22, 33, 44, 55] =
|
neuper@48850
|
603 |
[(~11, [0]), (11, [1]), (22, [2]), (33, [3]), (44, [4]), (55, [5])] then ()
|
neuper@48854
|
604 |
else error "uni_to_multi changed";
|
neuper@48850
|
605 |
|
neuper@48853
|
606 |
if uni_to_multi [1,2,1,1,3,4] = [(1, [0]), (2, [1]), (1, [2]), (1, [3]), (3, [4]), (4, [5])] then ()
|
neuper@48853
|
607 |
else error "uni_to_multi [1,2,1,1,3,4] = [(1, [0]), (2, [1]), (1, [2]), (1, [3]), (3, [4]), (4, [5])] changed";
|
neuper@48853
|
608 |
if uni_to_multi [1,2,0,0,5,6] = [(1, [0]), (2, [1]), (5, [4]), (6, [5])] then ()
|
neuper@48853
|
609 |
else error "uni_to_multi [1,2,0,0,5,6] = [(1, [0]), (2, [1]), (5, [4]), (6, [5])] changed";
|
neuper@48853
|
610 |
|
neuper@48853
|
611 |
|
meindl_diana@48797
|
612 |
"----------- fun find_new_r ----------------------------";
|
meindl_diana@48797
|
613 |
"----------- fun find_new_r ----------------------------";
|
meindl_diana@48797
|
614 |
"----------- fun find_new_r ----------------------------";
|
meindl_diana@48797
|
615 |
if find_new_r [(2,[0,0]),(1,[1,2])] [(4,[2,2]),(1,[1,2])] ~1 = 1 then ()
|
meindl_diana@48797
|
616 |
else error " find_new_r [(2,[0,0]),(1,[1,2])] [(4,[2,2]),(1,[1,2])] ~1 = 1 changed";
|
meindl_diana@48797
|
617 |
if find_new_r [(2,[0,0]),(1,[1,2])] [(4,[2,2]),(1,[1,2])] 1 = 2 then ()
|
meindl_diana@48797
|
618 |
else error "find_new_r [(2,[0,0]),(1,[1,2])] [(4,[2,2]),(1,[1,2])] 1 = 2 changed";
|
meindl_diana@48797
|
619 |
if find_new_r [(2,[1,2]),(~4,[0,2]),(2,[1,1])] [(1,[1,3]),(~2,[0,3])] 1 = 3 then ()
|
meindl_diana@48797
|
620 |
else error "find_new_r [(2,[1,2]),(~4,[0,2]),(2,[1,1])] [(1,[1,3]),(~2,[0,3])] 1 = 3 changed";
|
meindl_diana@48797
|
621 |
|
meindl_diana@48797
|
622 |
"----------- fun mult_with_new_var ---------------------";
|
meindl_diana@48797
|
623 |
"----------- fun mult_with_new_var ---------------------";
|
meindl_diana@48797
|
624 |
"----------- fun mult_with_new_var ---------------------";
|
meindl_diana@48797
|
625 |
if mult_with_new_var [(3,[0]),(2,[1])] [~1,1] 0 = [(~3, [0, 0]), (3, [1, 0]), (~2, [0, 1]), (2, [1, 1])] then ()
|
meindl_diana@48797
|
626 |
else error "mult_with_new_var [(3,[0]),(2,[1])] [~1,1] 0 = [(~3, [0, 0]), (3, [1, 0]), (~2, [0, 1]), (2, [1, 1])] changed";
|
meindl_diana@48797
|
627 |
|
neuper@48846
|
628 |
(*"----------- fun greater_deg -----------------";
|
neuper@48853
|
629 |
"----------- fun greater_deg -----------------";475
|
neuper@48846
|
630 |
"----------- fun greater_deg -----------------";
|
neuper@48846
|
631 |
greater_deg [1,2,3] [1,2,4] =2;*)
|
meindl_diana@48797
|
632 |
|
meindl_diana@48797
|
633 |
"----------- infix %%+%% -------------------------------";
|
meindl_diana@48797
|
634 |
"----------- infix %%+%% -------------------------------";
|
meindl_diana@48797
|
635 |
"----------- infix %%+%% -------------------------------";
|
meindl_diana@48797
|
636 |
if ([(3,[0,0]),(2,[3,2]),(~3,[1,3])] %%+%% [(3,[3,2]),(~1,[0,0]),(2,[1,1])]) = [(2, [0, 0]), (2, [1, 1]), (5, [3, 2]), (~3, [1, 3])]
|
meindl_diana@48797
|
637 |
then () else error "([(3,[0,0]),(2,[3,2]),(~3,[1,3])] %%+%% [(3,[3,2]),(~1,[0,0]),(2,[1,1])]) = [(2, [0, 0]), (2, [1, 1]), (5, [3, 2]), (~3, [1, 3])] changed";
|
meindl_diana@48797
|
638 |
|
meindl_diana@48797
|
639 |
"----------- infix %%-%% -------------------------------";
|
meindl_diana@48797
|
640 |
"----------- infix %%-%% -------------------------------";
|
meindl_diana@48797
|
641 |
"----------- infix %%-%% -------------------------------";
|
meindl_diana@48797
|
642 |
if ([(2, [0, 0]), (2, [1, 1]), (5, [3, 2]), (~3, [1, 3])] %%-%% [(3,[3,2]),(~1,[0,0]),(2,[1,1])]) = [(3, [0, 0]), (2, [3, 2]), (~3, [1, 3])]
|
meindl_diana@48797
|
643 |
then () else error "([(2, [0, 0]), (2, [1, 1]), (5, [3, 2]), (~3, [1, 3])] %%-%% [(3,[3,2]),(~1,[0,0]),(2,[1,1])]) = [(3, [0, 0]), (2, [3, 2]), (~3, [1, 3])] changed";
|
meindl_diana@48797
|
644 |
|
meindl_diana@48797
|
645 |
"----------- infix %%*%% -------------------------------";
|
meindl_diana@48797
|
646 |
"----------- infix %%*%% -------------------------------";
|
meindl_diana@48797
|
647 |
"----------- infix %%*%% -------------------------------";
|
meindl_diana@48797
|
648 |
if ([(~1,[0]),(1,[1])] %%*%% [(~2,[0]),(1,[1])]) = [(2, [0]), (~3, [1]), (1, [2])]
|
meindl_diana@48797
|
649 |
then () else error "([(~1,[0]),(1,[1])] %%*%% [(~2,[0]),(1,[1])]) = [(2, [0]), (~3, [1]), (1, [2])] changed";
|
meindl_diana@48797
|
650 |
if ([(~2,[0]),(1,[1])] %%*%% [(1,[1]),(2,[0])]) = [(~4, [0]), (1, [2])] then ()
|
meindl_diana@48797
|
651 |
else error "([(~2,[0]),(1,[1])] %%*%% [(1,[1]),(2,[0])]) = [(~4, [0]), (1, [2])] changed";
|
meindl_diana@48797
|
652 |
if ([(3,[0,0]),(2,[0,1])] %%*%% [(1,[1,0]),(~1,[0,0])]) = mult_with_new_var [(3,[0]),(2,[1])] [~1,1] 0
|
meindl_diana@48797
|
653 |
then () else error
|
meindl_diana@48797
|
654 |
"([(3,[0,0]),(2,[0,1])] %%*%% [(1,[1,0]),(~1,[0,0])]) = mult_with_new_var [(3,[0]),(2,[1])] [~1,1] 0 changed";
|
meindl_diana@48797
|
655 |
|
neuper@48851
|
656 |
"----------- infix %%/%% -------------------------------";
|
neuper@48851
|
657 |
"----------- infix %%/%% -------------------------------";
|
neuper@48851
|
658 |
"----------- infix %%/%% -------------------------------";
|
neuper@48851
|
659 |
val a = [(1,[2, 0]), (1,[1, 1]), (~1,[0, 2])]; (* (x^2 + x - y) / (x - y) = *)
|
neuper@48851
|
660 |
val b = [(~1, [1, 0]), (1, [0, 1])];
|
neuper@48851
|
661 |
val (c, r) = (a %%/%% b);
|
neuper@48851
|
662 |
if (c, r) = ([(~1, [0, 1])], [(1, [2, 0])]) then () else error "%%/%% changed";
|
neuper@48851
|
663 |
if ((c %%*%% b) %%+%% r) = a then () else error "%%/%% changed";
|
neuper@48851
|
664 |
|
meindl_diana@48797
|
665 |
"----------- fun newton_first --------------------------";
|
meindl_diana@48797
|
666 |
"----------- fun newton_first --------------------------";
|
meindl_diana@48797
|
667 |
"----------- fun newton_first --------------------------";
|
meindl_diana@48797
|
668 |
if newton_first [1, 2] [[(1,[1,1])], [(4,[1,1])]] 1 =
|
meindl_diana@48797
|
669 |
([(~2, [1, 0, 1]), (3, [1, 1, 1])], [~1, 1], [[(3, [1, 1])]])
|
meindl_diana@48797
|
670 |
then () else error
|
meindl_diana@48797
|
671 |
"newton_first [1, 2] [[(1,[1,1])], [(4,[1,1])]] 1 = "
|
meindl_diana@48797
|
672 |
"([(~2, [1, 0, 1]), (3, [1, 1, 1])], [~1, 1], [[(3, [1, 1])]]) changed";
|
meindl_diana@48797
|
673 |
|
neuper@48853
|
674 |
"----------- fun NEWTON --------------------------------";
|
neuper@48853
|
675 |
"----------- fun NEWTON --------------------------------";
|
neuper@48853
|
676 |
"----------- fun NEWTON --------------------------------";
|
neuper@48870
|
677 |
if NEWTON [1, 2 ] [[(1,[1,1])], [(4,[1,1])]] [] [1] (zero_poly 2) 1 =
|
meindl_diana@48797
|
678 |
([(~2, [1, 0, 1]), (3, [1, 1, 1])], [~1, 1], [[(3, [1, 1])]])
|
meindl_diana@48797
|
679 |
then () else error
|
neuper@48870
|
680 |
"NEWTON [1, 2 ] [[(1,[1,1])], [(4,[1,1])]] [] [1] (zero_poly 2) 1 = "
|
meindl_diana@48797
|
681 |
"([(~2, [1, 0, 1]), (3, [1, 1, 1])], [~1, 1], [[(3, [1, 1])]]) changed";
|
neuper@48851
|
682 |
if NEWTON [1, 2, 3 ] [[(4,[1,1])], [(9,[1,1])]] [[(3, [1, 1])]] [~1, 1] [(~2, [1, 0, 1]), (3, [1, 1, 1])] 1 =
|
meindl_diana@48797
|
683 |
([(1, [1, 2, 1])], [2, ~3, 1], [[(5, [1, 1])], [(1, [1, 1])]])
|
meindl_diana@48797
|
684 |
then () else error
|
neuper@48851
|
685 |
"NEWTON [1, 2, 3 ] [[(4,[1,1])], [(9,[1,1])]] [[(3, [1, 1])]] [~1, 1] [(~2, [1, 0, 1]), (3, [1, 1, 1])] 1 ="
|
meindl_diana@48797
|
686 |
" ([(1, [1, 2, 1])], [2, ~3, 1], [[(5, [1, 1])], [(1, [1, 1])]]) changed";
|
meindl_diana@48797
|
687 |
|
meindl_diana@48797
|
688 |
|
neuper@48853
|
689 |
"~~~~~ fun NEWTON, args:"; val (x,f,steps,t,p,ord) = ([1, 2, 3, 4],[[(9, [0]), (5, [1])], [(16, [0]), (7, [1])]], [[(5, [0]), (2, [1])], [(1, [0])]], [2, ~3, 1], [(1, [2, 0]), (~1, [0, 1]), (2, [1, 1])], 0 );
|
meindl_diana@48797
|
690 |
length x = 2; (* false *)
|
meindl_diana@48797
|
691 |
val new_value_poly = multi_to_uni((uni_to_multi t) %%*%% (uni_to_multi [(nth x (length x -2) )* ~1, 1]));
|
meindl_diana@48797
|
692 |
val new_steps = [((nth f (length f -1)) %%/ ((nth x (length x - 1)) - (nth x (length x - 2)))) %%-%% ((nth f (length f -2)))];
|
meindl_diana@48797
|
693 |
|
meindl_diana@48797
|
694 |
"~~~~~ fun next_step, args:"; val (steps,new_steps, x') = (steps, new_steps, x);
|
meindl_diana@48797
|
695 |
steps = []; (*false*)
|
meindl_diana@48797
|
696 |
|
meindl_diana@48797
|
697 |
"~~~~~ fun next_step, args:"; val (steps,new_steps, x') = (nth_drop 0 steps, new_steps @ [(((nth new_steps (length new_steps -1)) %%-%%(nth steps 0))) %%/
|
meindl_diana@48797
|
698 |
((nth x' (length x' - 1)) - (nth x' (length x' - 3)))], nth_drop (length x' -2) x');steps = []; (*false*)
|
meindl_diana@48797
|
699 |
|
meindl_diana@48797
|
700 |
"~~~~~ fun next_step, args:"; val (steps,new_steps, x') = (nth_drop 0 steps, new_steps @ [(((nth new_steps (length new_steps -1)) %%-%%(nth steps 0))) %%/
|
meindl_diana@48797
|
701 |
((nth x' (length x' - 1)) - (nth x' (length x' - 3)))], nth_drop (length x' -2) x');
|
meindl_diana@48797
|
702 |
steps = []; (*true*)
|
meindl_diana@48797
|
703 |
val steps = new_steps;
|
neuper@48853
|
704 |
val polynom' = p %%+%% (mult_with_new_var (nth steps (length steps -1)) new_value_poly ord);
|
meindl_diana@48797
|
705 |
|
neuper@48853
|
706 |
"----------- fun all_geq -------------------------------";
|
neuper@48853
|
707 |
"----------- fun all_geq -------------------------------";
|
neuper@48853
|
708 |
"----------- fun all_geq -------------------------------";
|
neuper@48846
|
709 |
if all_geq [1,2,3,4,5] [1,2,3,4,5] = true then ()
|
neuper@48846
|
710 |
else error " all_geq [1,2,3,4,5] [1,2,3,4,5] = true changed";
|
neuper@48846
|
711 |
if all_geq [1,2,3,4] [1,2,3,5] = false then ()
|
neuper@48846
|
712 |
else error "all_geq [1,2,3,4] [1,2,3,5] = false changed" ;
|
neuper@48846
|
713 |
if all_geq [1,4,5,4] [0,3,4,5] = false then ()
|
neuper@48846
|
714 |
else error "all_geq [1,2,3,4] [0,3,4,5] = false changed ";
|
meindl_diana@48797
|
715 |
|
neuper@48853
|
716 |
"----------- fun greater_deg ---------------------------";
|
neuper@48853
|
717 |
"----------- fun greater_deg ---------------------------";
|
neuper@48853
|
718 |
"----------- fun greater_deg ---------------------------";
|
neuper@48846
|
719 |
if greater_deg [1,2,3,4,5] [1,2,3,4,5] = 0 then ()
|
neuper@48846
|
720 |
else error " greater_deg [1,2,3,4,5] [1,2,3,4,5] = 0 changed";
|
neuper@48846
|
721 |
if greater_deg [1,2,3,4] [5,2,8,1] = 1 then ()
|
neuper@48846
|
722 |
else error "greater_deg [1,2,3,4] [1,2,3,5] = 1 changed" ;
|
neuper@48846
|
723 |
if greater_deg [1,4,5,4] [0,3,4,5] = 2 then ()
|
neuper@48846
|
724 |
else error "greater_deg [1,2,3,4] [0,3,4,5] = 2 changed ";
|
meindl_diana@48797
|
725 |
|
neuper@52097
|
726 |
"----------- infix %%|%% --------------------------------";
|
neuper@52097
|
727 |
"----------- infix %%|%% --------------------------------";
|
neuper@52097
|
728 |
"----------- infix %%|%% --------------------------------";
|
neuper@52097
|
729 |
if [(1, [0, 0]), (~1, [0, 1])] %%|%% [(1, [0, 0]), (~1, [0, 1])] then ()
|
neuper@52097
|
730 |
(* 1 - y | 1 - y*)
|
meindl_diana@48797
|
731 |
else error "[(1, [0, 0]), (~1, [0, 1])] %%|%% [(1, [0, 0]), (~1, [0, 1])] = true changed";
|
neuper@52097
|
732 |
|
meindl_diana@48797
|
733 |
if [(3,[1,0])] %%|%% [(9,[1,1]),(12,[2,1]),(~3,[1,2])] then ()
|
neuper@52097
|
734 |
(* 3 x | 9 x y + 12 x^2 y - 3 x y^2 *)
|
meindl_diana@48797
|
735 |
else error "[(3,[1,0])] %%|%% [(9,[1,1]),(12,[2,1]),(~3,[1,2])] = true changed";
|
neuper@52097
|
736 |
|
meindl_diana@48797
|
737 |
if [(3,[2,1])] %%|%% [(9,[1,1]),(12,[2,1]),(~3,[1,2])]
|
neuper@52097
|
738 |
(* 3 x^2 y | 9 x y + 12 x^2 y - 3 x y^2 *)
|
meindl_diana@48797
|
739 |
then error "[(3,[2,1])] %%|%% [(9,[1,1]),(12,[2,1]),(~3,[1,2])] = false changed" else ();
|
meindl_diana@48797
|
740 |
|
meindl_diana@48810
|
741 |
"----------- fun gcd_poly' ------------------------------";
|
meindl_diana@48810
|
742 |
"----------- fun gcd_poly' ------------------------------";
|
meindl_diana@48810
|
743 |
"----------- fun gcd_poly' ------------------------------";
|
meindl_diana@48810
|
744 |
if gcd_poly' [(~3,[2,0]),(1,[5,0]),(3,[0,1]),(~6,[1,1]),(~1,[3,1]),(2,[4,1]),(1,[3,2]),(~1,[1,3]),(2,[2,3])]
|
meindl_diana@48810
|
745 |
[(2,[2,0]),(~2,[0,1]),(4,[1,1]),(~1,[3,1]),(1,[1,2]),(~1,[2,2]),(~1,[0,3]),(2,[1,3])] 2 0
|
meindl_diana@48810
|
746 |
= [(1, [2, 0]), (~1, [0, 1]), (2, [1, 1])] then () else error
|
meindl_diana@48810
|
747 |
"gcd_poly' [(~3,[2,0]),(1,[5,0]),(3,[0,1]),(~6,[1,1]),(~1,[3,1]),(2,[4,1]),(1,[3,2]),(~1,[1,3]),(2,[2,3])]"
|
meindl_diana@48810
|
748 |
"[(2,[2,0]),(~2,[0,1]),(4,[1,1]),(~1,[3,1]),(1,[1,2]),(~1,[2,2]),(~1,[0,3]),(2,[1,3])] 2 0 "
|
meindl_diana@48810
|
749 |
"= [(1, [2, 0]), (~1, [0, 1]), (2, [1, 1])] changed";
|
meindl_diana@48810
|
750 |
(* -xy +xy^2z+yz - 1*)(* xy +1*) (*=*) (*xy -1*)
|
meindl_diana@48810
|
751 |
if gcd_poly' [(~1,[0,0,0]),(1,[0,1,1]),(1,[1,2,1]),(~1,[1,1,0])] [(1,[0,0,0]),(1,[1,1,0])] 3 0
|
neuper@52099
|
752 |
= [(~1, [0, 0, 0]), (~1, [1, 1, 0])] then () else error
|
meindl_diana@48810
|
753 |
"gcd_poly' [(~1,[0,0,0]),(1,[0,1,1]),(1,[1,2,1]),(~1,[1,1,0])] [(1,[0,0,0]),(1,[1,1,0])] 3 0 "
|
meindl_diana@48810
|
754 |
"= [(1, [0, 0, 0]), (1, [1, 1, 0])] changed";
|
meindl_diana@48810
|
755 |
|
neuper@48807
|
756 |
"----------- fun gcd_poly ------------------------------";
|
neuper@48807
|
757 |
"----------- fun gcd_poly ------------------------------";
|
neuper@48807
|
758 |
"----------- fun gcd_poly ------------------------------";
|
neuper@48813
|
759 |
if gcd_poly
|
neuper@48867
|
760 |
[(~3,[2,0]),(1,[5,0]),(3,[0,1]),(~6,[1,1]),(~1,[3,1]),(2,[4,1]),(1,[3,2]),(~1,[1,3]),(2,[2,3])]
|
neuper@48867
|
761 |
(* ~3 x^2 + x^5 + 3 y - 6 x y - x^3 y + 2 x^4 y + x^3 y^2 - x y^3 + 2 x^2 y^3*)
|
neuper@48867
|
762 |
[(2,[2,0]),(~2,[0,1]),(4,[1,1]),(~1,[3,1]),(1,[1,2]),(~1,[2,2]),(~1,[0,3]),(2,[1,3])]
|
neuper@48867
|
763 |
(* 2 x^2 - 2 y + 4 x y - x^3 y + x y^2 - x^2 y^2 - y^3 + 2 x y^3*)
|
neuper@52087
|
764 |
= (([(~3, [0, 0]), (1, [3, 0]), (1, [1, 2])], [(2, [0, 0]), (~1, [1, 1]), (1, [0, 2])]),
|
neuper@52087
|
765 |
(*( 3 + x^3 + x y^2 ,, 2 - x y + y^2 ),,*)
|
neuper@52087
|
766 |
[(1, [2, 0]), (~1, [0, 1]), (2, [1, 1])])
|
neuper@52087
|
767 |
(* x^2 - y 2 x y*)
|
neuper@52087
|
768 |
then () else error "gcd_poly ex1 changed";
|
neuper@48813
|
769 |
|
neuper@48813
|
770 |
if gcd_poly
|
neuper@48867
|
771 |
[(~1,[0,0,0]),(1,[0,1,1]),(1,[1,2,1]),(~1,[1,1,0])]
|
neuper@48867
|
772 |
(* ~1 + y z + x y^2 z - x y *)
|
neuper@48867
|
773 |
[(1,[0,0,0]),(1,[1,1,0])]
|
neuper@48867
|
774 |
(* 1 + x y *)
|
neuper@48867
|
775 |
= (([(~1, [0,0,0]), (1, [0,1,1])], [(1, [0,0,0])]), [(1, [0,0,0]), (1, [1,1,0])])
|
neuper@48867
|
776 |
(* ( ~1 + y z ,, 1 ),, 1 + x y *)
|
neuper@48867
|
777 |
then () else error "gcd_poly ex2 changed";
|
neuper@48867
|
778 |
|
neuper@48867
|
779 |
(* example from unipoly: *)
|
neuper@48867
|
780 |
val a = uni_to_multi [~18, ~15, ~20, 12, 20, ~13, 2];
|
neuper@48867
|
781 |
val b = uni_to_multi [8, 28, 22, ~11, ~14, 1, 2];
|
neuper@48867
|
782 |
val ((a', b'), c) = gcd_poly a b;
|
neuper@48867
|
783 |
|
neuper@48867
|
784 |
a' = [(9, [0]), (3, [1]), (13, [2]), (~11, [3]), (2, [4])];
|
neuper@48867
|
785 |
b' = [(~4, [0]), (~12, [1]), (~7, [2]), (3, [3]), (2, [4])];
|
neuper@48867
|
786 |
c = [(~2, [0]), (~1, [1]), (1, [2])];
|
neuper@48867
|
787 |
(* checking the postcondition: *)
|
neuper@48867
|
788 |
if a = (a' %%*%% c) andalso b = (b' %%*%% c) then () else error "gcd_poly ex-unipoly changed";
|
neuper@48867
|
789 |
(* \<forall>c'. (c' dvd\<^isub>p a \<and> c' dvd\<^isub>p b) \<longrightarrow> c' \<le>\<^isub>p c) can NOT be checked this way, of course *)
|
neuper@48867
|
790 |
|
neuper@48867
|
791 |
val cu = gcd_up [~18, ~15, ~20, 12, 20, ~13, 2] [8, 28, 22, ~11, ~14, 1, 2];
|
neuper@48867
|
792 |
if cu = multi_to_uni c then () else error "gcd_up <> gcd_poly";
|
neuper@48867
|
793 |
|
neuper@48867
|
794 |
(* example from mail to Tobias Nipkos *)
|
neuper@48867
|
795 |
val a = [(1,[2, 0]), (~1,[0, 2])]; (* x^2 - y^2 *)
|
neuper@48867
|
796 |
val b = [(1,[2, 0]), (~1,[1, 1])]; (* x^2 - x y *)
|
neuper@48867
|
797 |
val ((a', b'), c) = gcd_poly a b;
|
neuper@48867
|
798 |
|
neuper@52087
|
799 |
a' = [(1, [1, 0]), (1, [0, 1])]; (* x + y *)
|
neuper@52087
|
800 |
b' = [(1, [1, 0])]; (* x *)
|
neuper@52087
|
801 |
c = [(1, [1, 0]), (~1, [0, 1])]; (* x - y *)
|
neuper@48867
|
802 |
(* checking the postcondition: *)
|
neuper@48867
|
803 |
if a = (a' %%*%% c) andalso b = (b' %%*%% c) then () else error "gcd_poly mail changed";
|
neuper@48867
|
804 |
(* \<forall>c'. (c' dvd\<^isub>p a \<and> c' dvd\<^isub>p b) \<longrightarrow> c' \<le>\<^isub>p c) can NOT be checked this way, of course *)
|
meindl_diana@48797
|
805 |
|
neuper@52098
|
806 |
(* regression test for --- fun gcd_poly downto division by zero ---*)
|
neuper@52098
|
807 |
val a = [(9, [5, 2, 4])]: poly
|
neuper@52098
|
808 |
val b = [(15, [6, 3, 1])]: poly
|
neuper@52098
|
809 |
val ((a', b'), c) = gcd_poly a b;
|
neuper@52098
|
810 |
if a = (a' %%*%% c) andalso b = (b' %%*%% c) then () else error "regression test changed";
|
neuper@52098
|
811 |
|
neuper@52099
|
812 |
(* regression test for --- integration lev.1 -- lev.5 in rational.sml *)
|
neuper@52099
|
813 |
val a = [(1, [0, 1, 1, 0, 1]), (1, [1, 0, 0, 1, 1])]: poly
|
neuper@52099
|
814 |
val b = [(1, [0, 1, 0, 1, 1])]: poly
|
neuper@52099
|
815 |
val ((a', b'), c) = gcd_poly a b;
|
neuper@52099
|
816 |
|
neuper@52099
|
817 |
a' = [(1, [0, 1, 1, 0, 0]), (1, [1, 0, 0, 1, 0])];
|
neuper@52099
|
818 |
b' = [(1, [0, 1, 0, 1, 0])];
|
neuper@52099
|
819 |
c = [(1, [0, 0, 0, 0, 1])];
|
neuper@52099
|
820 |
if a = (a' %%*%% c) andalso b = (b' %%*%% c) then () else error "gcd_monom changed";
|
neuper@52099
|
821 |
|
neuper@52097
|
822 |
"----------- fun gcd_poly downto division by zero -------";
|
neuper@52097
|
823 |
"----------- fun gcd_poly downto division by zero -------";
|
neuper@52097
|
824 |
"----------- fun gcd_poly downto division by zero -------";
|
neuper@52098
|
825 |
"-------- example 187a: exception Div raised... REGRSSION TEST FOR REMOVAL OF THIS BUG IS ABOVE";
|
neuper@52097
|
826 |
val a = [(12, [1, 1])]: poly
|
neuper@52097
|
827 |
val b = [(8, [0, 2])]: poly;
|
neuper@52097
|
828 |
(* val ((a', b'), c) = gcd_poly a b
|
neuper@52097
|
829 |
exception Div raised*)
|
neuper@52097
|
830 |
"~~~~~ fun gcd_poly, args:"; val ((a as (_, es)::_ : poly), b) = (a, b);
|
neuper@52097
|
831 |
(* val c = gcd_poly' a b (length es) 0
|
neuper@52097
|
832 |
exception Div raised*)
|
neuper@52097
|
833 |
"~~~~~ fun gcd_poly', args:"; val ((a as (_, es1)::_ : poly), (b as (_, es2)::_ : poly), n, r) =
|
neuper@52097
|
834 |
(a, b, (length es), 0);
|
neuper@52097
|
835 |
lex_ord (lmonom b) (lmonom a) = true;
|
neuper@52097
|
836 |
(*gcd_poly' b a n r
|
neuper@52097
|
837 |
exception Div raised*)
|
neuper@52097
|
838 |
"~~~~~ fun gcd_poly', args:"; val ((a as (_, es1)::_ : poly), (b as (_, es2)::_ : poly), n, r) =
|
neuper@52097
|
839 |
(b, a, n, r);
|
neuper@52097
|
840 |
lex_ord (lmonom b) (lmonom a) = false;
|
neuper@52097
|
841 |
n > 1 = true;
|
neuper@52097
|
842 |
val M = 1 + Int.min (max_deg_var a (length es1 - 2), max_deg_var b (length es2 - 2));
|
neuper@52097
|
843 |
(*try_new_r a b n M r [] []
|
neuper@52097
|
844 |
exception Div raised*)
|
neuper@52097
|
845 |
"~~~~~ and try_new_r, args:"; val (a, b, n, M, r, r_list, steps) = (a, b, n, M, r, [], []);
|
neuper@52097
|
846 |
val r = find_new_r a b r;
|
neuper@52097
|
847 |
val r_list = r_list @ [r];
|
neuper@52097
|
848 |
val g_r = gcd_poly' (order (eval a (n - 2) r))
|
neuper@52097
|
849 |
(order (eval b (n - 2) r)) (n - 1) 0
|
neuper@52097
|
850 |
val steps = steps @ [g_r];
|
neuper@52097
|
851 |
(*HENSEL_lifting a b n M 1 r r_list steps g_r ( zero_poly n ) [1]
|
neuper@52097
|
852 |
exception Div raised*)
|
neuper@52097
|
853 |
"~~~~~ and HENSEL_lifting, args:"; val (a, b, n, M, m, r, r_list, steps, g, g_n, mult) =
|
neuper@52097
|
854 |
(a, b, n, M, 1, r, r_list, steps, g_r, (zero_poly n), [1]);
|
neuper@52097
|
855 |
m > M = false;
|
neuper@52097
|
856 |
val r = find_new_r a b r;
|
neuper@52097
|
857 |
val r_list = r_list @ [r];
|
neuper@52097
|
858 |
val g_r = gcd_poly' (order (eval a (n - 2) r))
|
neuper@52097
|
859 |
(order (eval b (n - 2) r)) (n - 1) 0;
|
neuper@52097
|
860 |
lex_ord (lmonom g) (lmonom g_r) = false;
|
neuper@52097
|
861 |
lexp g = lexp g_r = true;
|
neuper@52097
|
862 |
val (g_n, new, steps) = NEWTON r_list [g, g_r] steps mult g_n (n - 2);
|
neuper@52097
|
863 |
nth steps (length steps - 1) = zero_poly (n - 1) = false;
|
neuper@52097
|
864 |
(*HENSEL_lifting a b n M (m + 1) r r_list steps g_r g_n new
|
neuper@52097
|
865 |
exception Div raised*)
|
neuper@52097
|
866 |
"~~~~~ and HENSEL_lifting, args:"; val (a, b, n, M, m, r, r_list, steps, g, g_n, mult) =
|
neuper@52097
|
867 |
(a, b, n, M, m + 1, r, r_list, steps, g_r, g_n, new);
|
neuper@52097
|
868 |
m > M = true;
|
neuper@52097
|
869 |
(g_n %%|%% a andalso (g_n %%|%% b)) = false;
|
neuper@52097
|
870 |
(*try_new_r a b n M r r_list steps
|
neuper@52097
|
871 |
exception Div raised*)
|
neuper@52097
|
872 |
"~~~~~ and try_new_r, args:"; val (a, b, n, M, r, r_list, steps) = (a, b, n, M, r, r_list, steps);
|
neuper@52097
|
873 |
val r = find_new_r a b r;
|
neuper@52097
|
874 |
val r_list = r_list @ [r];
|
neuper@52097
|
875 |
val g_r = gcd_poly' (order (eval a (n - 2) r))
|
neuper@52097
|
876 |
(order (eval b (n - 2) r)) (n - 1) 0
|
neuper@52097
|
877 |
val steps = steps @ [g_r];
|
neuper@52097
|
878 |
(*HENSEL_lifting a b n M 1 r r_list steps g_r (zero_poly n) [1]
|
neuper@52097
|
879 |
exception Div raised*)
|
neuper@52097
|
880 |
"~~~~~ and HENSEL_lifting, args:"; val (a, b, n, M, m, r, r_list, steps, g, g_n, mult) =
|
neuper@52097
|
881 |
(a, b, n, M, 1, r, r_list, steps, g_r, zero_poly n, [1]);
|
neuper@52097
|
882 |
m > M = false;
|
neuper@52097
|
883 |
val r = find_new_r a b r;
|
neuper@52097
|
884 |
val r_list = r_list @ [r];
|
neuper@52097
|
885 |
val g_r = gcd_poly' (order (eval a (n - 2) r))
|
neuper@52097
|
886 |
(order (eval b (n - 2) r)) (n - 1) 0;
|
neuper@52097
|
887 |
lex_ord (lmonom g) (lmonom g_r) = false;
|
neuper@52097
|
888 |
lexp g = lexp g_r = true;
|
neuper@52097
|
889 |
val (g_n, new, steps) = NEWTON r_list [g, g_r] steps mult g_n (n - 2);
|
neuper@52097
|
890 |
(nth steps (length steps - 1) = zero_poly (n - 1)) = false;
|
neuper@52097
|
891 |
(*HENSEL_lifting a b n M (m + 1) r r_list steps g_r g_n new
|
neuper@52097
|
892 |
exception Div raised*)
|
neuper@52097
|
893 |
"~~~~~ and HENSEL_lifting, args:"; val (a, b, n, M, m, r, r_list, steps, g, g_n, mult) =
|
neuper@52097
|
894 |
(a, b, n, M, m + 1, r, r_list, steps, g_r, g_n, new);
|
neuper@52097
|
895 |
m > M = true;
|
neuper@52097
|
896 |
(g_n %%|%% a andalso g_n %%|%% b) = false;
|
neuper@52097
|
897 |
(*try_new_r a b n M r r_list steps
|
neuper@52097
|
898 |
exception Div raised*)
|
neuper@52097
|
899 |
"~~~~~ and try_new_r, args:"; val (a, b, n, M, r, r_list, steps) = (a, b, n, M, r, r_list, steps);
|
neuper@52097
|
900 |
val r = find_new_r a b r;
|
neuper@52097
|
901 |
val r_list = r_list @ [r];
|
neuper@52097
|
902 |
val g_r = gcd_poly' (order (eval a (n - 2) r))
|
neuper@52097
|
903 |
(order (eval b (n - 2) r)) (n - 1) 0
|
neuper@52097
|
904 |
val steps = steps @ [g_r];
|
neuper@52097
|
905 |
(*HENSEL_lifting a b n M 1 r r_list steps g_r (zero_poly n) [1]
|
neuper@52097
|
906 |
exception Div raised*)
|
neuper@52097
|
907 |
"~~~~~ and HENSEL_lifting, args:"; val (a, b, n, M, m, r, r_list, steps, g, g_n, mult) =
|
neuper@52097
|
908 |
(a, b, n, M, 1, r, r_list, steps, g_r, zero_poly n, [1]);
|
neuper@52097
|
909 |
m > M = false;
|
neuper@52097
|
910 |
val r = find_new_r a b r;
|
neuper@52097
|
911 |
val r_list = r_list @ [r];
|
neuper@52097
|
912 |
val g_r = gcd_poly' (order (eval a (n - 2) r))
|
neuper@52097
|
913 |
(order (eval b (n - 2) r)) (n - 1) 0;
|
neuper@52097
|
914 |
lex_ord (lmonom g) (lmonom g_r) = false;
|
neuper@52097
|
915 |
lexp g = lexp g_r = true;
|
neuper@52097
|
916 |
val (g_n, new, steps) = NEWTON r_list [g, g_r] steps mult g_n (n - 2);
|
neuper@52097
|
917 |
nth steps (length steps - 1) = zero_poly (n - 1) = true;
|
neuper@52097
|
918 |
(*HENSEL_lifting a b n M (M + 1) r r_list steps g_r g_n new
|
neuper@52097
|
919 |
exception Div raised*)
|
neuper@52097
|
920 |
"~~~~~ and HENSEL_lifting, args:"; val (a, b, n, M, m, r, r_list, steps, g, g_n, mult) =
|
neuper@52097
|
921 |
(a, b, n, M, m + 1, r, r_list, steps, g_r, g_n, new);
|
neuper@52097
|
922 |
m > M = true;
|
neuper@52097
|
923 |
(*(g_n %%|%% a andalso g_n %%|%% b);
|
neuper@52097
|
924 |
exception Div raised: !!!!! g_n = [(0, [0, 0])] !!!!!*)
|
neuper@52097
|
925 |
|
neuper@52063
|
926 |
"=========== prep Lucas-Interpretation ==================";
|
neuper@52077
|
927 |
"----------- fun for_quot_regarding ---------------------";
|
neuper@52077
|
928 |
"----------- fun for_quot_regarding ---------------------";
|
neuper@52077
|
929 |
"----------- fun for_quot_regarding ---------------------";
|
neuper@52077
|
930 |
(* -> quot' = [] @ [2] @ (3 * [])*)
|
neuper@52077
|
931 |
"~~~~~ fun for_quot_regarding, args:"; val (p1, p2, p1', quot, remd) =
|
neuper@52077
|
932 |
([2, 2, 2, 2, 2], [1, 2, 3], [2, 2, 2, 2, 2], [], [6, 6, 4, 2]);
|
neuper@52077
|
933 |
val zeros = deg_up p1' - deg_up remd - 1(*length [q]*) (* = 0*)
|
neuper@52077
|
934 |
val max_qot_deg = deg_up p1 - deg_up p2 (* = 2*)
|
neuper@52077
|
935 |
;
|
neuper@52077
|
936 |
zeros + 1(*length [q]*) + deg_up quot > max_qot_deg = false
|
neuper@52077
|
937 |
;
|
neuper@52077
|
938 |
if for_quot_regarding p1 p2 p1' quot remd = 0 then ()
|
neuper@52077
|
939 |
else error "for_quot_regarding 1 changed"
|
neuper@52077
|
940 |
|
neuper@52077
|
941 |
|
neuper@52077
|
942 |
(* -> quot' = [0, 0, 0] @ [1] @ (1 * [])*)
|
neuper@52077
|
943 |
"~~~~~ fun for_quot_regarding, args:"; val (p1, p2, p1', quot, remd) =
|
neuper@52077
|
944 |
([3, 2, 2, 2, 1, 1, 1, 1], [1, 1, 1, 1], [3, 2, 2, 2, 1, 1, 1, 1], [], [3, 2, 2, 2]);
|
neuper@52077
|
945 |
val zeros = deg_up p1' - deg_up remd - 1(*length [q]*) (* = 3*)
|
neuper@52077
|
946 |
val max_qot_deg = deg_up p1 - deg_up p2 (* = 4*)
|
neuper@52077
|
947 |
;
|
neuper@52077
|
948 |
zeros + 1(*length [q]*) + deg_up quot > max_qot_deg = false
|
neuper@52077
|
949 |
;
|
neuper@52077
|
950 |
if for_quot_regarding p1 p2 p1' quot remd = 3 then ()
|
neuper@52077
|
951 |
else error "for_quot_regarding 2 changed"
|
neuper@52077
|
952 |
|
neuper@52077
|
953 |
|
neuper@52077
|
954 |
(* -> quot' = [] @ [2] @ (1 * [0, 0, 0, 1])*)
|
neuper@52077
|
955 |
"~~~~~ fun for_quot_regarding, args:"; val (p1, p2, p1', quot, remd) =
|
neuper@52077
|
956 |
([3, 2, 2, 2, 1, 1, 1, 1], [1, 1, 1, 1], [3, 2, 2, 2], [0, 0, 0, 1], [1]);
|
neuper@52077
|
957 |
val zeros = deg_up p1' - deg_up remd - 1(*length [q]*) (* = 2*)
|
neuper@52077
|
958 |
val max_qot_deg = deg_up p1 - deg_up p2 (* = 4*)
|
neuper@52077
|
959 |
;
|
neuper@52077
|
960 |
zeros + 1(*length [q]*) + deg_up quot > max_qot_deg = true
|
neuper@52077
|
961 |
;
|
neuper@52077
|
962 |
for_quot_regarding p1 p2 p1' quot remd;
|
neuper@52077
|
963 |
if for_quot_regarding p1 p2 p1' quot remd = 0 then ()
|
neuper@52077
|
964 |
else error "for_quot_regarding 3 changed";
|
neuper@52077
|
965 |
|
neuper@52077
|
966 |
|
neuper@52077
|
967 |
"----------- fun mult_to_deg - --------------------------";
|
neuper@52077
|
968 |
"----------- fun mult_to_deg - --------------------------";
|
neuper@52077
|
969 |
"----------- fun mult_to_deg - --------------------------";
|
neuper@52063
|
970 |
val p1 = [2,2,2, 2,2,2];
|
neuper@52063
|
971 |
val p2 = [7,8,6];
|
neuper@52077
|
972 |
if mult_to_deg (deg_up p1) p2 = [0, 0, 0, 7, 8, 6] then () else error "fun mult_to_deg changed";
|
neuper@52063
|
973 |
|
neuper@52063
|
974 |
"----------- fun fact_quot ------------------------------";
|
neuper@52063
|
975 |
"----------- fun fact_quot ------------------------------";
|
neuper@52063
|
976 |
"----------- fun fact_quot ------------------------------";
|
neuper@52063
|
977 |
fact_quot 18 8 = (4, 9);
|
neuper@52063
|
978 |
fact_quot 2 6 = (3, 1);
|
neuper@52063
|
979 |
fact_quot ~2 6 = (3, ~1);
|
neuper@52063
|
980 |
fact_quot 5 6 = (6, 5);
|
neuper@52077
|
981 |
if fact_quot 110 6 = (3, 55) then () else error "fun fact_quot changed 1";
|
neuper@52077
|
982 |
(* this works, if (several) position(s) in the dividend are 0: *)
|
neuper@52077
|
983 |
if fact_quot 0 3 = (1, 0) then () else error "fun fact_quot changed 2";
|
neuper@52063
|
984 |
|
neuper@52063
|
985 |
"----------- fun %+% ------------------------------------";
|
neuper@52063
|
986 |
"----------- fun %+% ------------------------------------";
|
neuper@52063
|
987 |
"----------- fun %+% ------------------------------------";
|
neuper@52063
|
988 |
if (p1 %+% p2) = [9, 10, 8, 2, 2, 2] andalso (p2 %+% p1) = [9, 10, 8, 2, 2, 2]
|
neuper@52063
|
989 |
then () else error "fun %+% changed";
|
neuper@52063
|
990 |
|
neuper@52063
|
991 |
"----------- fun %*% ------------------------------------";
|
neuper@52063
|
992 |
"----------- fun %*% ------------------------------------";
|
neuper@52063
|
993 |
"----------- fun %*% ------------------------------------";
|
neuper@52063
|
994 |
if ([1,2,1] %*% [1,3,3,1]) = [1, 5, 10, 10, 5, 1] then () else error "fun %*% changed";
|
neuper@52063
|
995 |
|
neuper@52063
|
996 |
"----------- fun %*/% -----------------------------------";
|
neuper@52063
|
997 |
"----------- fun %*/% -----------------------------------";
|
neuper@52063
|
998 |
"----------- fun %*/% -----------------------------------";
|
neuper@52063
|
999 |
val p1 = [2,2,2, 2,2,2];
|
neuper@52063
|
1000 |
val p2 = [7, 8, 6];
|
neuper@52063
|
1001 |
val (n (* = 162*),
|
neuper@52063
|
1002 |
q (* = [29, ~33, ~18, 54]*),
|
neuper@52063
|
1003 |
r (* = [317, 295]*)) = p1 %*/% p2;
|
neuper@52063
|
1004 |
if (p1 %* n) = ((q %*% p2) %+% r) then () else error "fun %*/% changed 1";
|
neuper@52063
|
1005 |
|
neuper@52063
|
1006 |
(* demo in GCD_Poly *)
|
neuper@52063
|
1007 |
val p1 = [2, 2, 2, 2, 2];
|
neuper@52063
|
1008 |
val p2 = [1, 2, 3];
|
neuper@52063
|
1009 |
val (n (* = 27*),
|
neuper@52063
|
1010 |
q (* = [8, 6, 18]*),
|
neuper@52063
|
1011 |
r (* = [46, 32]*)) = p1 %*/% p2;
|
neuper@52063
|
1012 |
if (p1 %* n) = ((q %*% p2) %+% r) then () else error "fun %*/% changed 2";
|
neuper@52063
|
1013 |
|
neuper@52077
|
1014 |
"~~~~~ fun div_int_up, args:"; val (p1, p1', p2, quot, ns) = (p1, p1, p2, [], 1);
|
neuper@52077
|
1015 |
val (n, q) = fact_quot (lcoeff_up p1') (lcoeff_up p2);
|
neuper@52077
|
1016 |
val remd = drop_tl_zeros ((p1' %* n) %-% (mult_to_deg (deg_up p1') p2 %* q));
|
neuper@52077
|
1017 |
val zeros = for_quot_regarding p1 p2 p1' quot remd;
|
neuper@52077
|
1018 |
"~~~~~ fun writeln_trace, args:"; val (p1, p1', p2, quot, n, q ,(zeros:int), remd, (ns: int)) =
|
neuper@52077
|
1019 |
(p1, p1', p2, quot, n, q, zeros, remd, ns);
|
neuper@52077
|
1020 |
"~~~~~ fun div_invariant2, args:"; val (p1, p2, n, ns, zeros, q, quot, remd) =
|
neuper@52077
|
1021 |
(p1, p2, n, ns, zeros, q, quot, remd);
|
neuper@52077
|
1022 |
if (p1 %* (n * ns)) =
|
neuper@52077
|
1023 |
((mult_to_deg (deg_up p1 - deg_up p2) ((replicate zeros 0) @ [q] @ (quot %* n))) %*% p2 %+% remd)
|
neuper@52077
|
1024 |
then () else error "div_int_up: invariant 2 does not hold"
|
neuper@52077
|
1025 |
|
neuper@52077
|
1026 |
|
neuper@52077
|
1027 |
"----------- fun %*/% Subscript raised (line 509 of lib--";
|
neuper@52077
|
1028 |
"----------- fun %*/% Subscript raised (line 509 of lib--";
|
neuper@52077
|
1029 |
"----------- fun %*/% Subscript raised (line 509 of lib--";
|
neuper@52077
|
1030 |
val p1 = [3,2,2,2,1,1,1,1];
|
neuper@52077
|
1031 |
val p2 = [1,1,1,1];
|
neuper@52077
|
1032 |
"~~~~~ fun div_int_up, args:"; val (p1, p1', p2, quot, ns) = (p1, p1, p2, [], 1);
|
neuper@52077
|
1033 |
val (n, q) = fact_quot (lcoeff_up p1') (lcoeff_up p2);
|
neuper@52077
|
1034 |
val remd = drop_tl_zeros ((p1' %* n) %-% (mult_to_deg (deg_up p1') p2 %* q));
|
neuper@52077
|
1035 |
val zeros = for_quot_regarding p1 p2 p1' quot remd
|
neuper@52077
|
1036 |
val _ = writeln_trace p1 p1' p2 quot n q zeros remd ns
|
neuper@52077
|
1037 |
val quot = (replicate zeros 0) @ [q] @ (quot %* n)
|
neuper@52077
|
1038 |
val ns = n * ns;
|
neuper@52077
|
1039 |
deg_up remd >= deg_up p2 = true;
|
neuper@52077
|
1040 |
"~~~~~ fun div_int_up, args:"; val (p1, p1', p2, quot, ns) = (p1, remd, p2, quot, ns);
|
neuper@52077
|
1041 |
val (n, q) = fact_quot (lcoeff_up p1') (lcoeff_up p2);
|
neuper@52077
|
1042 |
val remd = drop_tl_zeros ((p1' %* n) %-% (mult_to_deg (deg_up p1') p2 %* q));
|
neuper@52077
|
1043 |
val zeros = for_quot_regarding p1 p2 p1' quot remd;
|
neuper@52077
|
1044 |
"~~~~~ fun writeln_trace, args:"; val (p1, p1', p2, quot, n, q, (zeros:int), remd, (ns: int))=
|
neuper@52077
|
1045 |
(p1, p1', p2, quot, n, q, zeros, remd, ns);
|
neuper@52077
|
1046 |
if (p1 %* (n * ns)) =
|
neuper@52077
|
1047 |
((mult_to_deg (deg_up p1 - deg_up p2)
|
neuper@52077
|
1048 |
(((replicate zeros 0) @ [q] @ (quot %* n))) %*% p2 %+% remd))
|
neuper@52077
|
1049 |
then () else error "writeln_trace changed"
|
neuper@52077
|
1050 |
;
|
neuper@52077
|
1051 |
;
|
neuper@52077
|
1052 |
;
|
neuper@52077
|
1053 |
val quot = (replicate zeros 0) @ [q] @ (quot %* n)
|
neuper@52077
|
1054 |
val ns = n * ns;
|
neuper@52077
|
1055 |
deg_up remd >= deg_up p2 = false;
|
neuper@52077
|
1056 |
val (n (* = 1*),
|
neuper@52077
|
1057 |
q (* = [2, 0, 0, 0, 1]*),
|
neuper@52077
|
1058 |
r (* = [1]*)) = (ns, quot, remd)
|
neuper@52077
|
1059 |
;
|
neuper@52077
|
1060 |
if (p1 %* n) = ((q %*% p2) %+% r) then () else error "fun %*/% changed x"
|
neuper@52077
|
1061 |
|
neuper@52063
|
1062 |
"----------- fun EUCLID_naive_up ------------------------";
|
neuper@52063
|
1063 |
"----------- fun EUCLID_naive_up ------------------------";
|
neuper@52063
|
1064 |
"----------- fun EUCLID_naive_up ------------------------";
|
neuper@52077
|
1065 |
val a = [0,~1,1]; (* -x + x^2 = x *(-1 + x) *)
|
neuper@52077
|
1066 |
val b = [~1,0,1]; (* -1 + x^2 = (1+x)*(-1 + x) *)
|
neuper@52077
|
1067 |
(*EUCLID_naive_up a b; (* = [1, ~1]*) (*( 1 - x) *)
|
neuper@52077
|
1068 |
ERROR: invariant 2 does not hold: [~1, 0, 1] * ~1 = [~1, ~1] ** [1, ~1] ++ [0, 0, 0, 0]*)
|
neuper@52077
|
1069 |
;
|
neuper@52077
|
1070 |
"~~~~~ fun EUCLID_naive_up, args:"; val (a, b) = (a, b);
|
neuper@52077
|
1071 |
deg_up a < deg_up b = false;
|
neuper@52077
|
1072 |
val (n, q, r) = a %*/% b
|
neuper@52077
|
1073 |
(*EUCLID_naive_up b r
|
neuper@52077
|
1074 |
ERROR: invariant 2 does not hold: [~1, 0, 1] * ~1 = [~1, ~1] ** [1, ~1] ++ [0, 0, 0, 0]*)
|
neuper@52077
|
1075 |
;
|
neuper@52077
|
1076 |
"~~~~~ fun EUCLID_naive_up, args:"; val (a, b) = (b, r);
|
neuper@52077
|
1077 |
(* val (n, q, r) = a %*/% b
|
neuper@52077
|
1078 |
invariant 2 does not hold: [~1, 0, 1] * ~1 = [~1, ~1] ** [1, ~1] ++ [0, 0, 0, 0]*)
|
neuper@52077
|
1079 |
;
|
neuper@52077
|
1080 |
"~~~~~ fun %*/%, args:"; val (p1, p2) = (a, b);
|
neuper@52077
|
1081 |
(* val (n, q, r) = div_int_up p1 p1 p2 [] 1
|
neuper@52077
|
1082 |
invariant 2 does not hold: [~1, 0, 1] * ~1 = [~1, ~1] ** [1, ~1] ++ [0, 0, 0, 0]*)
|
neuper@52077
|
1083 |
;
|
neuper@52077
|
1084 |
"~~~~~ fun div_int_up, args:"; val (p1, p1', p2, quot, ns) = (p1, p1, p2, [], 1);
|
neuper@52077
|
1085 |
val (n, q) = fact_quot (lcoeff_up p1') (lcoeff_up p2);
|
neuper@52077
|
1086 |
val remd = drop_tl_zeros ((p1' %* n) %-% (mult_to_deg (deg_up p1') p2 %* q));
|
neuper@52077
|
1087 |
val zeros = for_quot_regarding p1 p2 p1' quot remd
|
neuper@52077
|
1088 |
val _ = writeln_trace p1 p1' p2 quot n q zeros remd ns
|
neuper@52077
|
1089 |
val quot = (replicate zeros 0) @ [q] @ (quot %* n)
|
neuper@52077
|
1090 |
val ns = n * ns;
|
neuper@52077
|
1091 |
deg_up remd >= deg_up p2 = true;
|
neuper@52077
|
1092 |
(*div_int_up p1 remd p2 quot ns
|
neuper@52077
|
1093 |
invariant 2 does not hold: [~1, 0, 1] * ~1 = [~1, ~1] ** [1, ~1] ++ [0, 0, 0, 0]*)
|
neuper@52077
|
1094 |
;
|
neuper@52077
|
1095 |
"~~~~~ fun div_int_up, args:"; val (p1, p1', p2, quot, ns) = ( p1, remd, p2, quot, ns);
|
neuper@52077
|
1096 |
val (n, q) = fact_quot (lcoeff_up p1') (lcoeff_up p2);
|
neuper@52077
|
1097 |
val remd = drop_tl_zeros ((p1' %* n) %-% (mult_to_deg (deg_up p1') p2 %* q));
|
neuper@52077
|
1098 |
val zeros = for_quot_regarding p1 p2 p1' quot remd
|
neuper@52077
|
1099 |
(* val _ = writeln_trace p1 p1' p2 quot n q zeros remd ns
|
neuper@52077
|
1100 |
invariant 2 does not hold: [~1, 0, 1] * ~1 = [~1, ~1] ** [1, ~1] ++ [0, 0, 0, 0]*)
|
neuper@52077
|
1101 |
;
|
neuper@52077
|
1102 |
"~~~~~ fun writeln_trace, args:"; val (p1, p1', p2, quot, n, q ,(zeros:int), remd, (ns: int))=
|
neuper@52077
|
1103 |
(p1, p1', p2, quot, n, q, zeros, remd, ns);
|
neuper@52077
|
1104 |
(*if (p1 %* (n * ns)) =
|
neuper@52077
|
1105 |
((mult_to_deg (deg_up p1 - deg_up p2) ((replicate zeros 0) @ [q] @ (quot %* n))) %*% p2 %+% remd)
|
neuper@52077
|
1106 |
then () else error "div_int_up: invariant 2 does not hold"
|
neuper@52077
|
1107 |
ERROR: div_int_up: invariant 2 does not hold*)
|
neuper@52077
|
1108 |
(p1 %* (n * ns)) = [1, 0, ~1]; (* ERROR came from fact_quot with n<0 *)
|
neuper@52077
|
1109 |
((mult_to_deg (deg_up p1 - deg_up p2) ((replicate zeros 0) @ [q] @ (quot %* n))) %*% p2 %+% remd) =
|
neuper@52077
|
1110 |
[~1, 0, 1];
|
neuper@52077
|
1111 |
|
neuper@52077
|
1112 |
if (p1 %* (abs n * ns)) =
|
neuper@52077
|
1113 |
((mult_to_deg (deg_up p1 - deg_up p2) ((replicate zeros 0) @ [q] @ (quot %* n))) %*% p2 %+% remd)
|
neuper@52077
|
1114 |
then () else error "div_int_up: invariant 2 does not hold in ~~~~~ fun Euclid_naive";
|
neuper@52077
|
1115 |
|
neuper@52077
|
1116 |
|
neuper@52063
|
1117 |
val a = [~1,0,0,1]; (* -1 + x^3 = (1+x+x^2)*(-1 + x) *)
|
neuper@52063
|
1118 |
val b = [0,~1,1]; (* -x + x^2 = x *(-1 + x) *)
|
neuper@52063
|
1119 |
if EUCLID_naive_up a b = [~1, 1] (*(-1 + x) *)
|
neuper@52063
|
1120 |
then () else error "fun EUCLID_naive_up changed 1";
|
neuper@52063
|
1121 |
|
neuper@52063
|
1122 |
val a = [0,~1,0,0,1]; (* -x + x^4 = x*(1+x+x^2)*(-1 + x) *)
|
neuper@52063
|
1123 |
val b = [~2,2]; (* -x + x^2 = 2 *(-1 + x) *)
|
neuper@52063
|
1124 |
if EUCLID_naive_up a b = [~1, 1] then () else error "fun EUCLID_naive_up changed 2";
|
neuper@52063
|
1125 |
|
neuper@52063
|
1126 |
val a = [~5,2,8,~3,~3,0,1,0,1];
|
neuper@52063
|
1127 |
val b = [21,~9,~4,5,0,3];
|
neuper@52063
|
1128 |
if EUCLID_naive_up a b = [1] then () else error "fun EUCLID_naive_up changed 3";
|
neuper@52063
|
1129 |
|
neuper@52063
|
1130 |
val a = [~18, ~15, ~20, 12, 20, ~13, 2];
|
neuper@52063
|
1131 |
val b = [8, 28, 22, ~11, ~14, 1, 2];
|
neuper@52063
|
1132 |
if EUCLID_naive_up a b = [~2, ~1, 1] then () else error "fun EUCLID_naive_up changed 4";
|
neuper@52063
|
1133 |
|
neuper@52080
|
1134 |
"----------- last step in EUCLID ------------------------";
|
neuper@52080
|
1135 |
"----------- last step in EUCLID ------------------------";
|
neuper@52080
|
1136 |
"----------- last step in EUCLID ------------------------";
|
neuper@52080
|
1137 |
trace_div := false;
|
neuper@52080
|
1138 |
trace_div_invariant := false;
|
neuper@52080
|
1139 |
trace_Euclid := false;
|
neuper@52080
|
1140 |
val a = [~18, ~15, ~20, 12, 20, ~13, 2];
|
neuper@52080
|
1141 |
val b = [8, 28, 22, ~11, ~14, 1, 2];
|
neuper@52080
|
1142 |
"~1~~~~ fun EUCLID_naive_up, args:"; val (a, b) = (a, b);
|
neuper@52080
|
1143 |
val (n, q, r) = a %*/% b;
|
neuper@52080
|
1144 |
"~2~~~~ fun EUCLID_naive_up, args:"; val (a, b) = (b, r);
|
neuper@52080
|
1145 |
val (n, q, r) = a %*/% b;
|
neuper@52080
|
1146 |
"~3~~~~ fun EUCLID_naive_up, args:"; val (a, b) = (b, r);
|
neuper@52080
|
1147 |
val (n, q, r) = a %*/% b;
|
neuper@52080
|
1148 |
"~4~~~~ fun EUCLID_naive_up, args:"; val (a, b) = (b, r);
|
neuper@52080
|
1149 |
val (n, q, r) = a %*/% b;
|
neuper@52080
|
1150 |
"~5~~~~ fun EUCLID_naive_up, args:"; val (a, b) = (b, r);
|
neuper@52080
|
1151 |
(* val (n, q, r) = a %*/% b;*)
|
neuper@52080
|
1152 |
"~~~~~ fun %*/%, args:"; val (p1, p2) = (a, b);
|
neuper@52080
|
1153 |
(*div_int_up p1 p1 p2 [] 1*)
|
neuper@52080
|
1154 |
"~~~~~ fun div_int_up, args:"; val (p1, p1', p2, quot, ns) = (p1, p1, p2, [], 1);
|
neuper@52080
|
1155 |
(*
|
neuper@52080
|
1156 |
val p1 = [~1316434, ~3708859, ~867104, 1525321]: int list
|
neuper@52080
|
1157 |
val p1' = [~1316434, ~3708859, ~867104, 1525321]: int list
|
neuper@52080
|
1158 |
val p2 = [~5000595353600, ~2500297676800, 2500297676800]: int list
|
neuper@52080
|
1159 |
val quot = []: 'a list
|
neuper@52080
|
1160 |
val ns = 1: int
|
neuper@52080
|
1161 |
*)
|
neuper@52080
|
1162 |
val (n, q) = fact_quot (lcoeff_up p1') (lcoeff_up p2)
|
neuper@52080
|
1163 |
(*n = 7289497600, q = 4447*)
|
neuper@52080
|
1164 |
val remd = drop_tl_zeros ((p1' %* n) %-% (mult_to_deg (deg_up p1') p2 %* q))
|
neuper@52080
|
1165 |
(*remd = [~9596142483558400, ~4798071241779200, 4798071241779200]*)
|
neuper@52080
|
1166 |
val zeros = for_quot_regarding p1 p2 p1' quot remd
|
neuper@52080
|
1167 |
(*0*)
|
neuper@52080
|
1168 |
val _ = writeln_trace p1 p1' p2 quot n q zeros remd ns
|
neuper@52080
|
1169 |
(**)
|
neuper@52080
|
1170 |
val quot = (replicate zeros 0) @ [q] @ (quot %* n)
|
neuper@52080
|
1171 |
(*quot = [4447]*)
|
neuper@52080
|
1172 |
val ns = n * ns
|
neuper@52080
|
1173 |
(*ns = 7289497600*)
|
neuper@52080
|
1174 |
val (n, q, r) = a %*/% b;
|
neuper@52080
|
1175 |
"~6~~~~ fun EUCLID_naive_up, args:"; val (a, []) = (b, r);
|
neuper@52077
|
1176 |
|
neuper@48813
|
1177 |
" ========== END ======================================= ";
|
neuper@52074
|
1178 |
fun nth _ [] = error "nth _ []" (*Isabelle2002, still saved the hours of update*)
|
neuper@52074
|
1179 |
| nth 1 (x::_) = x
|
neuper@52074
|
1180 |
| nth n (_::xs) = nth (n-1) xs;
|
neuper@52074
|
1181 |
(*fun nth xs i = List.nth (xs, i); recent Isabelle: TODO update all isac code *)
|
neuper@48834
|
1182 |
|