Fix some issues with make dist-gzip
[maxima.git] / share / multiadditive / rtest_opproperties.mac
blob45ead430d101173963c2c0b13f918768bc3f43ed
1 (kill(all), load(multiadditive), 0);
2 0$
4 (declare(f,threadable),0);
5 0$
7 f(a=b);
8 f(a) = f(b)$
10 f([]);
11 []$
13 f([a]);
14 [f(a)]$
16 f([[a]]);
17 [[f(a)]]$
19 f([[a], b]);
20 [[f(a)], f(b)]$
22 f(set());
23 set()$
25 f(set(x));
26 set(f(x))$
28 f(set(set()));
29 set(set())$
31 f(set(x,y));
32 set(f(x), f(y))$
34 f(matrix());
35 matrix()$
37 f(matrix([]));
38 matrix([])$
40 f(matrix([1]));
41 matrix([f(1)])$
43 is(op(f(a < b)) = f);
44 true$
46 is(op(f(4.5)) = f);
47 true$
49 is(args(f(4.5)) = [4.5]);
50 true$
52 is(args(f(4.5b0, x, a=b)) = [4.5b0, x, a=b]);
53 true$
55 is(op(f(rat(x))) = f);
56 true$
58 is(args(f(rat(x)))= [x])$
59 true$
61 is(args(f(false)) = [false]);
62 true$
64 (matchdeclare(x, mapatom),0);
67 (tellsimpafter(f(x),5),0);
70 f([x,x + y]);
71 [5,f(x+y)]$
73 (declare(g,multiadditive, f, multiadditive),0);
76 is(op(g(x)) = g);
77 true$
79 is(op(g(false)) = g);
80 true$
82 is(op(g()) = g);
83 true$
85 is(args(g(4.5)) = [4.5])$
86 true$
88 g(a + b);
89 g(a) + g(b)$
91 g(a+b,c);
92 g(a,c) + g(b,c)$
94 g(a,b+c);
95 g(a,b) + g(a,c)$
97 g(a+b,c+d);
98 g(a,c) + g(a,d) + g(b,c) + g(b,d)$
100 is(op(g(a*b)) = g) and is(args(g(a*b)) = [a*b]);
101 true$
103 f([x,x + y]);
104 [5,10]$
106 f([x*z]);
107 [f(x*z)]$
109 (declare([f,g],multiplicative),0);
112 g(a+b*c);
113 g(a) + g(b) * g(c)$
115 f(a+b*c);
118 f([a+b*c]);
119 [30]$
121 f(set(a+b*c,x,x^^2));
122 set(30,5,f(x^^2))$
124 (declare(h,involution),0);
127 h(h(x));
130 h(h(a+b));
131 a+b$
133 h(h([]));
136 h(h(false));
137 false$
139 h(h(true));
140 true$
142 h(h(h(x)));
143 h(x)$
145 is(op(h()) = h);
146 true$
148 is(args(h()) = []);
149 true$
151 is(args(h(8)) = [8]);
152 true$
154 is(op(h(8)) = h);
155 true$
157 h(h(f(a+b)));
158 f(a) + f(b)$
160 9 + h(h(x));
161 9 + x$
163 (matchfix("{{","}}"),0);
166 (declare("{{",multiadditive),0);
169 {{a+b}};
170 {{a}} + {{b}}$
172 {{a, b + c}};
173 {{a,b}} + {{a,c}}$
175 (declare(p, idempotent),0);
178 p(p());
179 p()$
181 p(p(7));
182 p(7)$
184 p(p(x));
185 p(x)$
187 p(p(p(x)));
188 p(x)$
190 (mypos(e) := block([prederror : false], sign(e) = 'pos),0);
193 (declare(myabs, idempotent, myabs, multiplicative),0);
196 (declare(myabs, evenfun),0);
199 (matchdeclare(e, mypos),0);
202 (tellsimpafter(myabs(e),e),0);
205 myabs(x*y);
206 myabs(x) * myabs(y)$
208 (assume(xp > 0),0);
211 myabs(xp);
214 myabs(xp * myabs(z));
215 xp * myabs(z)$
217 myabs(x) - myabs(-x);
220 (remove(f,threadable, f, multiadditive, g, multiadditive, h,involution, p,idempotent),0);
223 (remove(myabs,[idempotent, multiplicative,evenfun]),0);
226 (forget(xp > 0),0);
229 (declare(f, symmetric),0);
232 f(x,y) - f(y,x);
235 29 * f(-a,b) - 29 * f(b,-a);
238 f(a,b,c) + f(c,b,a) + f(a,c,b) + f(a,c,b) + f(b,a,c) + f(c,b,a);
239 6 * f(a,b,c)$
241 f(a,b) / f(b,a);
244 (declare(g, antisymmetric),0);
247 g(x,y,z) + g(x,z,y);
250 s * g(z,y,x) + s * g(x,y,z);
253 g(x,y) / g(y,x);
256 (remove(f, symmetric, g, antisymmetric),0);
259 (define_opproperty (identity, simplify_identity),
260  simplify_identity(e) := first(e),
261  kill(f, g),
262  declare ([f, g], identity));
263 done;
265 f(t + 10);
266 t + 10;
268 g(3*u) - f(2*u);
271 /* same as identity property, but with lambda expression */
272 define_opproperty (identity1, lambda ([e], first(e)));
273 done;
275 (kill (f1, g1), declare ([f1, g1], identity1));
276 done;
278 [f1(t + 10), g1(3*u) - f1(2*u)];
279 [t + 10, u];
281 /* tests for bilinear declaration */
283 kill("foo");
284 done;
286 (kill(foo),
287  infix(foo),
288  if not member (bilinear, opproperties) then load (bilinear),
289  declare ("foo", bilinear));
290 done;
292 (kill(a, b, c, d, e, f),
293  (a + b) foo (c + d));
294 a foo c + a foo d + b foo c + b foo d;
296 (%pi*a - c/2) foo (d - 2*e - f^^2);
297 %pi*(a foo d) - 2*%pi*(a foo e) - %pi*(a foo (f^^2)) - (c foo d)/2 + (c foo e) + (c foo (f^^2))/2;
299 declare ("foo", symmetric);
300 done;
302 b foo a;
303 a foo b;
305 declare ("foo", scalar);
306 done;
308 ((a foo b)*c) foo ((c foo d)*e);
309 (a foo b)*(c foo d)*(c foo e);
311 /* verify later declarations don't interfere with earlier ones */
313 (%pi*a - c/2) foo (d - 2*e - f^^2);
314 %pi*(a foo d) - 2*%pi*(a foo e) - %pi*(a foo (f^^2)) - (c foo d)/2 + (c foo e) + (c foo (f^^2))/2;
316 b foo a;
317 a foo b;
319 /* bilinear, symmetric, scalar all together */
321 (c/(a foo f)) foo ((c foo (a + b))*e);
322 ((a foo c) + (b foo c))*(c foo e)/(a foo f);
324 (3*a - c/(a foo f)) foo ((c foo (a + b))*e);
325 3*((a foo c) + (b foo c))*(a foo e) - ((a foo c) + (b foo c))*(c foo e)/(a foo f);
327 (3*a + c/(a foo f)) foo (d + (c foo (a + b))*e);
328 3*(a foo d) + (c foo d)/(a foo f) + 3*((a foo c) + (b foo c))*(a foo e) + ((a foo c) + (b foo c))*(c foo e)/(a foo f);
330 (kill (S), declare (S, scalar));
331 done;
333 /* I want to test 1234 + 5*(3*a - c/(a foo f)) foo (d - (c foo (a + b))*e)
334  * Work up to it step by step.
335  */
337 /* F */
338 (3*a) foo d;
339 3*(a foo d);
341 /* O */
342 (3*a) foo (S*((c foo (a + b))*e));
343 3*S*(c foo a + c foo b)*(a foo e);
345 /* F + O */
346 (3*a) foo (d + S*((c foo (a + b))*e));
347 3*(a foo d) + 3*S*(c foo a + c foo b)*(a foo e);
349 /* I */
350 (S*(c/(a foo f))) foo d;
351 S*(c foo d)/(a foo f);
353 /* L */
354 (S*(c/(a foo f))) foo (S*((c foo (a + b))*e));
355 S^2*(c foo a + c foo b)*(c foo e)/(a foo f);
357 /* I + L */
359 (S*(c/(a foo f))) foo (d + (S*((c foo (a + b))*e)));
360 S*(c foo d)/(a foo f) + S^2*(c foo a + c foo b)*(c foo e)/(a foo f);
362 /* F + O + I + L */
364 (3*a + (S*(c/(a foo f)))) foo (d + (S*((c foo (a + b))*e)));
365 3*(a foo d) + 3*S*(c foo a + c foo b)*(a foo e) + S*(c foo d)/(a foo f) + S^2*(c foo a + c foo b)*(c foo e)/(a foo f);
367 /* same as preceding, but with fewer parentheses */
368 (3*a + S*c/(a foo f)) foo (d + S*(c foo (a + b))*e);
369 3*(a foo d) + 3*S*(c foo a + c foo b)*(a foo e) + S*(c foo d)/(a foo f) + S^2*(c foo a + c foo b)*(c foo e)/(a foo f);
371 /* same as preceding, now let S = -1 */
372 subst (S = -1, (3*a + S*c/(a foo f)) foo (d + S*(c foo (a + b))*e));
373 ''(myfoilsubst : subst (S = -1, 3*(a foo d) + 3*S*(c foo a + c foo b)*(a foo e) + S*(c foo d)/(a foo f) + S^2*(c foo a + c foo b)*(c foo e)/(a foo f)));
375 /* same as preceding, rewrite with minus signs;
376  * test via ratsimp since I can't get simplified forms to agree
377  */
378 ratsimp ((3*a - c/(a foo f)) foo (d - (c foo (a + b))*e) - myfoilsubst);
381 /* what I was trying to test to start with */
382 ratsimp (1234 + 5*(3*a - c/(a foo f)) foo (d - (c foo (a + b))*e) - (1234 + 5*myfoilsubst));