Examples cleanup
[maxima.git] / tests / rtestnset.mac
blobb570ba7a07d746f8cb92ea4ade184b093034734d
1 kill (all)$
2 done$
4 /* Test ability of parser to recognize curly braces notation on input.
5  */
7 {};
8 set ();
10 {a, b, c};
11 set (a, b, c);
13 [{b, c}, {a}];
14 [set (b, c), set (a)];
16 [{a, b, c}, {}];
17 [set (a, b, c), set ()];
19 {{{{a, b, c}}}};
20 set (set (set (set (a, b, c))));
22 {a, b, 2^{c, d, e}, mogrify ({x, y, [{}]}, {[]})};
23 set (a, b, 2^set (c, d, e), mogrify (set (x, y, [set ()]), set ([])));
25 /* 1-d output should contain curly braces.
26  */
28 string (set ());
29 "{}";
31 string (set (a, b, set (c, d, set (e))));
32 "{a,b,{c,d,{e}}}";
34 /* General tests.
35  */
37 emptyp(set());
38 true$
40 emptyp([]);
41 true$
43 emptyp(set(false));
44 false$
46 emptyp([false]);
47 false$
49 emptyp(set(true));
50 false$
52 emptyp(set(set()));
53 false$
55 emptyp(set([]));
56 false$
58 emptyp(set(u,n,k));
59 false$
61 adjoin(set(),set());
62 set(set())$
64 adjoin(set(),set(a));
65 set(set(),a)$
67 adjoin(a,set());
68 set(a)$
70 adjoin(false,set());
71 set(false)$
73 adjoin(false,set(false));
74 set(false)$
76 adjoin(false,set(true));
77 set(true,false)$
79 adjoin(a, set(set()));
80 set(set(),a)$
82 adjoin(a,set(a));
83 set(a)$
85 adjoin(set(a),set(a));
86 set(a,set(a))$
88 adjoin(a,set(a,b));
89 set(a,b)$
91 adjoin(a,set(b,a));
92 set(a,b)$
94 adjoin(z,set(a,b));
95 set(a,b,z)$
97 errcatch(adjoin(a,b));
98 []$
100 disjoin(x,set());
101 set()$
103 disjoin(x,set(x));
104 set()$
106 disjoin(x,set(y));
107 set(y)$
109 disjoin(0,set(0,1,2));
110 set(1,2)$
112 disjoin(1,set(0,1,2));
113 set(0,2)$
115 disjoin(2,set(0,1,2));
116 set(0,1)$
118 set(a,a,c);
119 set(a,c)$
121 set(a,c,a);
122 set(a,c)$
124 set(a,a,a);
125 set(a)$
127 set(set(a,b),set(a,b),z);
128 set(set(a,b),z)$
130 union();
131 set()$
133 union(set());
134 set()$
136 union(set(),set());
137 set()$
139 union(set(false),set());
140 set(false)$
142 union(set(6));
143 set(6)$
145 union(set(8,8,1932));
146 set(8,1932)$
148 union(set(a),set(a,b),set(a,b,c));
149 set(a,b,c)$
151 union(set(),set(a));
152 set(a)$
154 union(set(a),set(b),set(c));
155 set(a,b,c)$
157 union(set(set(a)),set(a))$
158 set(a,set(a))$
160 errcatch(union(set(a),set(b),x));
163 union(set(a),set());
164 set(a)$
166 union(set(),set(set()));
167 set(set())$
169 setdifference(set(a,b),set());
170 set(a,b)$
172 setdifference(set(a,b),set(a));
173 set(b)$
175 setdifference(set(a,b),set(b));
176 set(a)$
178 setdifference(set(a,b),set(x));
179 set(a,b)$
181 setdifference(set(a,b),set());
182 set(a,b)$
184 setdifference(set(),set(x));
185 set()$
187 setdifference(set(a),set(x));
188 set(a)$
190 setdifference(set(a,b),set(x));
191 set(a,b)$
193 errcatch(setdifference(a,b));
196 errcatch(setdifference(set(a),b));
199 errcatch(setdifference(a,set(b)));
202 errcatch(intersection());
205 intersection(set(x));
206 set(x)$
208 intersection(set(),set());
209 set()$
211 intersection(set(set()),set());
212 set()$
214 intersection(set(set()),set(set(),set(set())));
215 set(set())$
217 intersection(set(a,b),set(a,b,c));
218 set(a,b)$
220 intersection(set(a,b),set(x,y,z));
221 set()$
223 intersection(set(a,b,c),set(a,y,x),set(z,a),set(p,q,a));
224 set(a)$
226 errcatch(intersect());
229 intersect(set(x));
230 set(x)$
232 intersect(set(),set());
233 set()$
235 intersect(set(set()),set());
236 set()$
238 intersect(set(set()),set(set(),set(set())));
239 set(set())$
241 intersect(set(a,b),set(a,b,c));
242 set(a,b)$
244 intersect(set(a,b),set(x,y,z));
245 set()$
247 intersect(set(a,b,c),set(a,y,x),set(z,a),set(p,q,a));
248 set(a)$
251 subsetp(set(),set());
252 true$
254 subsetp(set(),set(a));
255 true$
257 subsetp(set(a),set())$
258 false$
260 subsetp(set(),set(set()));
261 true$
263 subsetp(set(set()),set(set()));
264 true$
266 subsetp(set(a,b),set(a,b,c));
267 true$
269 subsetp(set(a,b,c),set(a,b));
270 false$
272 errcatch(subsetp(a,b));
275 errcatch(subsetp(a,set(b)));
278 errcatch(subsetp(set(a),b));
281 disjointp(set(),set());
282 true$
284 disjointp(set(set()),set());
285 true$
287 errcatch(disjointp(a,a+b));
290 errcatch(disjointp(set(a),a+b));
293 errcatch(disjointp(a,set(a+b)));
296 disjointp(set(a),set(b));
297 true$
299 disjointp(set(b,a),set(a));
300 false$
302 subset(set(),evenp);
303 set()$
305 subset(set(3,5,8),evenp);
306 set(8)$
308 errcatch(subset(a,oddp));
311 subset(set(a,b,4,sin(x)), evenp);
312 set(4)$
314 symmdifference();
315 set()$
317 symmdifference(set());
318 set()$
320 symmdifference(set(1));
321 set(1)$
323 symmdifference(set(1,2,3));
324 set(1,2,3)$
326 symmdifference(set(a),set(b),set(c));
327 set(a,b,c)$
329 symmdifference(set(a),set(a,b),set(a,b,c));
330 set(a,c)$
332 symmdifference(set(a,b,c),set(a,b),set(a));
333 set(a,c)$
335 symmdifference(set(a,b,c),set(),set(1,2,3));
336 set(a,b,c,1,2,3)$
338 symmdifference(set(), set(1,2,3),set(a,b,c));
339 set(a,b,c,1,2,3)$
341 symmdifference(set(1,2,3),set(a,b,c),set());
342 set(a,b,c,1,2,3)$
344 symmdifference(set(), set(1,2,3),set(a,b,c),set(),set());
345 set(a,b,c,1,2,3)$
347 symmdifference(set(),set());
348 set()$
350 symmdifference(set(set()),set());
351 set(set())$
353 symmdifference(set(i,s,t,j), set(i,n,t,p));
354 set(s,n,j,p)$
356 errcatch(symmdifference(a,set(b)));
359 errcatch(symmdifference(set(a),b));
362 errcatch(symmdifference(a,set(b)));
365 symmdifference(set(a,b),set(a));
366 set(b)$
369 subsetp(set(),set());
370 true$
372 subsetp(set(set()),set());
373 false$
375 subsetp(set(),set(set()));
376 true$
378 subsetp(set(x),set(set(x)));
379 false$
381 subsetp(set(a,b),set(a,y));
382 false$
384 subsetp(set(a,b),set(a,b));
385 true$
387 subsetp(set(set(a)),set(x,y,set(a)));
388 true$
390 subsetp(set(rat(x)),set(x));
391 true$
393 subsetp(set(a,a,a,x),set(a,x));
394 true$
396 adjoin(x,set());
397 set(x)$
400 set(x,rat(x),x,x,x);
401 set(x)$
403 union(set(),set());
404 set()$
406 union(set(),set(8));
407 set(8)$
409 union(set(1932),set());
410 set(1932)$
412 union(set(set(8)),set(8));
413 set(set(8),8)$
415 is(union(set(a),set(b),set(c))= set(a,b,c));
416 true$
418 is(union(set(set()),set(b),set()) = set(b,set()));
419 true$
421 is(union(set(x=6),set(y=3),set(z=-8)) = set(z=-8,y=3,x=6));
422 true$
424 setify([]);
425 set()$
427 setify([a,b]);
428 set(a,b)$
430 setify([[a]]);
431 set([a])$
433 setify([set(a)]);
434 set(set(a))$
436 setify([false]);
437 set(false)$
439 setify([false,false]);
440 set(false)$
442 setify([false,false,true]);
443 set(true,false)$
445 listify(set());
448 listify(set(a));
449 [a]$
451 listify(set(set(a)));
452 [set(a)]$
454 listify(set(set()));
455 [set()]$
457 full_listify(set());
460 full_listify(set(false));
461 [false]$
463 full_listify(set(set));
464 [set]$
466 full_listify(set(x));
467 [x]$
469 full_listify(set(set()));
470 [[]]$
472 full_listify(set(set(false)));
473 [[false]]$
475 full_listify(set(a,set(b),set(set(c))));
476 [a,[b],[[c]]]$
478 full_listify(a+b=c);
479 a+b=c$
481 full_listify(matrix([1,2],[3,4]));
482 matrix([1,2],[3,4])$
484 full_listify(f(set(a)));
485 f([a])$
487 full_listify(f(set(set(a))));
488 f([[a]])$
490 full_listify(f(a,set(a), [a+b]));
491 f(a,[a],[a+b])$
493 full_listify(5);
496 full_listify(a);
499 full_listify(a[5]);
500 a[5]$
502 full_listify(sin(x+7));
503 sin(x+7)$
505 full_listify(7.8e-4);
506 7.8e-4$
508 full_listify(5.6b2);
509 5.6b2$
511 full_listify(set + 7);
512 set + 7$
514 full_listify(a^b + 1/set + set^z);
515 a^b + 1/set + set^z$
517 (simp : false,0);
520 listify(set());
523 listify(set(a,a,b));
524 [a,a,b]$
526 full_listify(set(a,a,b));
527 [a,a,b]$
529 full_listify(set(a,a,b,set()));
530 [a,a,b,[]]$
532 (simp : true,0);
535 subst(b=a,set(a,b));
536 set(a)$
538 subst(b=a,set());
539 set()$
541 subst([a=x,b=x,c=x],set(a,b,c));
542 set(x)$
544 union(set(x),set(y));
545 set(x,y)$
547 union(set(),set());
548 set();
550 errcatch(intersect());
553 intersect(set(a));
554 set(a)$
556 intersect(set(a),set(a,b));
557 set(a)$
559 elementp(x,set());
560 false$
562 elementp(false, set());
563 false$
565 elementp(false, set(false));
566 true$
568 elementp(set(),set());
569 false$
571 elementp(set(),set(set()));
572 true$
574 elementp(x,set(x));
575 true$
577 elementp(rat(x),set(x));
578 true$
580 elementp(x,set([x]));
581 false$
583 union(set(false),set(true));
584 set(false,true)$
586 union(setify([true,false]), set(x));
587 set(x,true,false)$
589 fullsetify([]);
590 set()$
592 fullsetify([false]);
593 set(false)$
595 fullsetify([[]]);
596 set(set())$
598 fullsetify([a,b,c]);
599 set(a,b,c)$
601 fullsetify([a,[b]]);
602 set(a,set(b))$
604 fullsetify(f[0,1]);
605 f[0,1]$
607 fullsetify(f[5](x));
608 f[5](x)$
610 fullsetify(matrix([1,2],[3,4]));
611 matrix([1,2],[3,4])$
613 (remfunction(f,g),0);
616 flatten(3);
619 flatten(-3);
622 flatten(2/3);
623 2/3$
625 flatten(-2/3);
626 -2/3$
628 flatten(1.4d2);
629 1.4d2$
631 flatten(-3.4d0);
632 -3.4d0$
634 flatten(x);
637 flatten(abc);
638 abc$
640 flatten(%pi);
641 %pi$
643 flatten(rat(x));
644 ''(rat(x))$
646 flatten(rat(-x));
647 ''(rat(-x))$
650 flatten(x[5]);
651 x[5]$
653 flatten(x[8,32]);
654 x[8,32]$
656 flatten(-x);
659 flatten(rat(-x));
660 ''(rat(-x))$
662 flatten(a+b);
663 a+b$
665 flatten(rat(a+b));
666 ''(rat(a+b))$
669 flatten(a*b);
670 a*b$
672 flatten([]);
675 flatten([[]]);
678 flatten([x]);
679 [x]$
681 flatten([[x]]);
682 [x]$
684 flatten(f(g(f(f(x)))));
685 f(g(f(f(x))))$
687 flatten(f(f(g(f(x)))));
688 f(g(f(x)))$
690 /* Examples from Macsyma 422 */
692 flatten([a,b,[c,[d]],e,[[f],g,h]]);
693 [a,b,c,d,e,f,g,h]$
695 flatten([a,b([c]),[d]]);
696 [a,b([c]),d]$
698 flatten(f(f(a,b), f(c,d)));
699 f(a,b,c,d)$
701 flatten(f[1](f[1](a,b), f[1](c,d)));
702 f[1](a,b,c,d)$
704 elementp(false,set());
705 false$
707 elementp(false,set(1));
708 false$
710 elementp(false,set(false));
711 true$
713 elementp(0,set());
714 false$
716 elementp(1,set(1));
717 true$
719 elementp(0,set(1));
720 false$
722 elementp(2,set(1));
723 false$
725 elementp(1,set(0,2));
726 false$
728 adjoin(false,set());
729 set(false)$
731 adjoin(false,set(1));
732 set(false,1)$
734 adjoin(false,set(false));
735 set(false)$
737 adjoin(0,set());
738 set(0)$
740 adjoin(1,set(1));
741 set(1)$
743 adjoin(0,set(1));
744 set(1,0)$
746 adjoin(2,set(1));
747 set(2,1)$
749 adjoin(1,set(0,2));
750 set(0,1,2)$
752 cardinality(set());
755 cardinality(set([]));
758 cardinality(set(8,8,1932));
761 errcatch(cardinality(x+y));
764 setp([]);
765 false$
767 setp(false);
768 false$
770 setp(true);
771 false$
773 setp(a+b);
774 false$
776 setp([x]);
777 false$
779 setp(set());
780 true$
782 setp(set(set(a+b=c)));
783 true$
785 setp(rat(x));
786 false$
788 setp(1.5b34);
789 false$
791 errcatch(setp());
794 listify(adjoin(-1,set(2,4,6)));
795 [-1,2,4,6]$
797 listify(adjoin(2,set(2,4,6)));
798 [2,4,6]$
800 listify(adjoin(3,set(2,4,6)));
801 [2,3,4,6]$
803 listify(adjoin(6,set(2,4,6)));
804 [2,4,6]$
806 listify(adjoin(7,set(2,4,6)));
807 [2,4,6,7]$
809 permutations(set());
810 set([])$
812 permutations([]);
813 set([])$
815 permutations([a]);
816 set([a])$
818 permutations([a,a]);
819 set([a,a])$
821 (s : listify(permutations([0,1,2,3,4])),0);
824 is(s = sort(s));
825 true$
827 (s : listify(permutations([a,b,b,a])),0);
830 is(s = sort(s));
831 true$
833 (q : [1,2,3,4,5],0);
836 (s : permutations(q),0);
839 is(cardinality(s) = length(q)!);
840 true$
842 elementp([5,3,2,1,4],s);
843 true$
845 elementp([5,3,2,1,0],s);
846 false$
848 (p : map(setify,s),0);
851 is(p = set(setify(q)));
852 true$
854 (remvalue(s,p),0);
857 powerset(set());
858 set(set())$
860 powerset(set(x));
861 set(set(),set(x))$
863 powerset(set(x,y));
864 set(set(),set(x),set(y),set(x,y))$
866 errcatch(powerset(a+b=c));
869 errcatch(powerset(rat(a)));
872 powerset(set(),0);
873 set(set())$
875 powerset(set(),1);
876 set()$
878 powerset(set(1),2);
879 set()$
881 powerset(set(false));
882 set(set(),set(false))$
884 powerset(set(a+b=c),1);
885 set(set(a+b=c))$
887 powerset(set(1,2,3),2);
888 set(set(1,2),set(1,3),set(2,3))$
890 errcatch(powerset(a+b=c));
893 is(subset(powerset(set(a,b,c,d,e)),lambda([x],is(cardinality(x)=3))) = powerset(set(a,b,c,d,e),3));
894 true$
896 is(subset(powerset(set(a,b,c,d,e)),lambda([x],is(cardinality(x)=5))) =  
897         powerset(set(a,b,c,d,e),5));
898 true$
900 is(subset(powerset(set(a,b,c,d,e)),lambda([x],is(cardinality(x)=7))) = 
901 powerset(set(a,b,c,d,e),7));
902 true$
904 extremal_subset(set(),lambda([x],x^2), max);
905 set()$
907 extremal_subset(set(-1,0,1),lambda([x],x^2), max);
908 set(-1,1)$
910 extremal_subset(set(1,sqrt(2),3,%pi),log, max);
911 set(%pi)$
913 /* quote exp because some other tests assign a value to exp,
914    and kill refuses to kill the assigned value ... (sigh)
915  */
916 extremal_subset(set(sqrt(2),sqrt(3),sqrt(5)), 'exp, max);
917 set(sqrt(5))$
919 extremal_subset(set(1+%i,sqrt(2),1-%i),abs, max);
920 set(1+%i,sqrt(2),1-%i)$
922 extremal_subset(set(a,a+b,1.4b0,sqrt(28)),lambda([x],if atom(x) then 0 else 1), max);
924 set(a+b,sqrt(28))$
926 cartesian_product();
927 set([])$
929 cartesian_product(set());
930 set()$
932 cartesian_product(set(a));
933 set([a])$
935 cartesian_product(set(),set(),set());
936 set()$
938 cartesian_product(set(a),set(b));
939 set([a,b])$
941 cartesian_product(set(u,n,k),set());
942 set()$
944 cartesian_product(set(), set(u,n,k));
945 set()$
947 cartesian_product(set(u,n,k),set(1));
948 set([u,1],[n,1],[k,1])$
950 cartesian_product(set(a,b),set(1,2));
951 set([a,1],[a,2],[b,1],[b,2])$
953 equiv_classes(set(),"=");
954 set()$
956 equiv_classes(set(),"#");
957 set()$
959 equiv_classes(set(a,b,c),"=");
960 set(set(a),set(b),set(c))$
962 equiv_classes(set(a,b,c),"#");
963 set(set(a,b,c))$
965 equiv_classes(set(1,2,3,4,5),lambda([x,y],remainder(x-y,2)=0));
966 set(set(1,3,5),set(2,4))$
968 partition_set(set(),evenp);
969 [set(),set()]$
971 partition_set(set(9),evenp);
972 [set(9), set()]$
974 partition_set(set(2,4),evenp);
975 [set(), set(2,4)]$
977 partition_set(set(a,b,c),lambda([x],false));
978 [set(a,b,c), set()]$
980 partition_set(set(a,b,c),lambda([x],true));
981 [set(),set(a,b,c)]$
983 partition_set(set(a,b,c),lambda([x],orderlessp(x,b)));
984 [set(b,c), set(a)]$
986 set_partitions(set());
987 set(set())$
989 set_partitions(set(),1);
990 set()$
992 set_partitions(set(),2);
993 set()$
995 set_partitions(set(u,n,k),1);
996 set(set(set(u,n,k)))$
998 set_partitions(set(u,n,k),2);
999 set(set(set(u),set(n,k)),set(set(n),set(u,k)), set(set(k),set(u,n)))$
1001 makelist(stirling1(i,0),i,0,5);
1002 [1,0,0,0,0,0]$
1004 makelist(stirling1(i,i),i,0,5);
1005 [1,1,1,1,1,1]$
1007 factor(sum(stirling1(3,i)*x^i,i,0,3));
1008 x*(x-1)*(x-2)$
1010 makelist(stirling1(i,1) - (-1)^(i-1)*(i-1)!,i,1,5);
1011 [0,0,0,0,0]$
1013 sum(stirling1(8,k),k,1,8);  /* A & S 24.1.3 */
1016 sum(stirling1(3,k),k,1,3); 
1019 sum(stirling1(5,k)*(-1)^(5-k),k,0,5);
1022 sum(stirling1(2,k)*(-1)^(2-k),k,0,2);
1025 (declare([a,b],integer),0);
1028 (assume(a>0,b>0),0);
1031 stirling1(b,a);
1032 stirling1(b,a)$
1034 stirling2(b,a);
1035 stirling2(b,a)$
1037 (forget(a>0,b>0),0);
1040 (remove(a,integer), remove(b,integer),0);
1043 stirling2(0,0);
1046 stirling2(1,0);
1049 stirling2(0,1);
1052 stirling2(10,10);
1055 stirling2(10,11);
1058 stirling2(10,5) - 5 * stirling2(9,5) - stirling2(9,4);
1061 sum((-1)^(12-m) * m! * stirling2(12,m),m,0,12);
1064 /* test stirling2 simplification rules */
1066 (remvalue(n),0);
1069 (e : stirling2(n,0),0);
1072 makelist(subst(n=i,e) - stirling2(i,0),i,-5,5);
1073 ''(makelist(0,i,-5,5))$
1075 (e : stirling2(n,1),0);
1078 makelist(subst(n=i,e) - stirling2(i,1),i,-5,5);
1079 ''(makelist(0,i,-5,5))$
1081 (e : stirling2(n,2),0);
1084 makelist(subst(n=i,e) - stirling2(i,2),i,-5,5);
1085 ''(makelist(0,i,-5,5))$
1087 (e : stirling2(n,n),0);
1090 makelist(subst(n=i,e) - stirling2(i,i),i,-5,5);
1091 ''(makelist(0,i,-5,5))$
1093 (assume(n >=0), declare(n,integer), declare(k,integer), declare(kk,integer), assume(k >=0),0);
1096 stirling1(n,n);
1099 stirling1(kk,kk);
1100 stirling1(kk,kk)$
1102 stirling1(1,kk);
1103 stirling1(1,kk)$
1105 stirling1(1,k);
1106 kron_delta(1,k)$
1108 stirling1(n,0);
1109 stirling1(n,0)$
1111 stirling1(n+1,0);
1114 stirling1(n,1);
1115 stirling1(n,1)$
1117 stirling1(n+1,1);
1118 (-1)^(n) * (n)!$
1120 stirling1(n,n-1);
1121 stirling1(n,n-1)$
1123 stirling1(n+1,n);
1124 -binomial(n+1,2)$
1126 stirling2(n,n);
1129 stirling2(n,0);
1130 stirling2(n,0)$
1132 stirling2(n+1,0);
1135 stirling2(n,1);
1136 stirling2(n,1)$
1138 stirling2(n+1,1);
1141 stirling2(n,2);
1142 stirling2(n,2)$
1144 stirling2(n+1,2);
1145 2^n -1$
1147 stirling2(n,n-1);
1148 stirling2(n,n-1)$
1150 stirling2(n+1,n);
1151 binomial(n+1,2)$
1153 (forget(n>=0), forget(k >=0), remove(n,integer),remove(k,integer),remove(kk,integer),0);
1156 (remvalue(e),0);
1159 is(cardinality(set_partitions(set())) = belln(0));
1160 true$
1162 is(cardinality(set_partitions(set(1))) = belln(1));
1163 true$
1165 is(cardinality(set_partitions(set(1,2))) = belln(2));
1166 true$
1168 is(cardinality(set_partitions(set(1,2,3))) = belln(3));
1169 true$
1171 belln([5,6]);
1172 [belln(5),belln(6)]$
1174 integer_partitions(0);
1175 set([])$
1177 integer_partitions(1);
1178 set([1])$
1180 integer_partitions(2);
1181 set([1,1],[2])$
1183 is(cardinality(integer_partitions(25)) = 1958)$
1184 true;
1186 map(lambda([x], apply("+",x)), integer_partitions(25));
1187 set(25)$
1189 integer_partitions(2,1);
1190 set([2])$
1192 integer_partitions(2,2);
1193 set([1,1],[2,0])$
1195 integer_partitions(5,3);
1196 set([5,0,0],[4,1,0],[3,1,1],[3,2,0],[2,2,1])$
1198 multinomial_coeff(0);
1201 multinomial_coeff(1);
1204 multinomial_coeff(5);
1207 multinomial_coeff(2,3,4);
1208 (2+3+4)! / (2! * 3! * 4!)$
1210 factor(sum(multinomial_coeff(i,5-i) * x^(5-i) * y^i,i,0,5));
1211 (x+y)^5$
1213 diff((x+y+z)^9,x,3,y,6);
1214 ''(multinomial_coeff(3,6,0) * 3! * 6!)$
1216 kron_delta(false,false);
1219 /* need to have true and false sysconsts (not standard) for this to work
1220 kron_delta(false,true);
1224 kron_delta(true,true);
1227 kron_delta(0,0);
1230 kron_delta(a+b,a+b);
1233 kron_delta(rat(x), x);
1236 kron_delta(x,y) - kron_delta(y,x);
1239 kron_delta(x,y) / 42 - kron_delta(y,x) / 42;
1242 kron_delta(%i*x,%i*y) - kron_delta(%i*y,%i*x);
1245 kron_delta(0.42,0.42);
1248 kron_delta(0.42, 42/100);
1249 kron_delta(0.42, 42/100)$
1251 kron_delta(2,3);
1254 kron_delta(x,x);
1257 kron_delta(x,x-1);
1260 kron_delta(%i*x,%i*y);
1261 kron_delta(%i*x,%i*y)$
1263 kron_delta(%i*x,%i*x);
1266 ratsimp(kron_delta(%i*(x+1)^2,%i*(x^2+2*x+1)));
1269 (assume(a > b),0);
1272 kron_delta(a,b);
1275 kron_delta(%i*a,%i*b);
1278 (forget(a > b),0);
1281 (assume(a < 1, b >= 3/2),0);
1284 kron_delta(a,b);
1287 kron_delta(%i,%i);
1290 kron_delta(5+%i,5+%i);
1293 kron_delta(5-%i,5+%i);
1296 kron_delta(3 + %i/7,1 + %i/7);
1299 kron_delta(1 + %i/5,1 + %i/7);
1302 /* new kronecker delta tests for multivariable version */
1304 (map('forget, facts()),0);
1307 errcatch(kron_delta(x));
1310 kron_delta();
1313 kron_delta(sqrt(2), 1/sqrt(2), %pi);
1316 kron_delta(a,b,a);
1317 kron_delta(a,b)$
1319 subst(a=c, kron_delta(a,b,rat(c)));
1320 kron_delta(c,b)$
1322 kron_delta(a,b)-kron_delta(-a,-b);
1325 kron_delta(a,-b)-kron_delta(-a,b);
1328 kron_delta(a,b,-c)-kron_delta(-a,-b,c);
1331 kron_delta(-a,b,-c)-kron_delta(a,-b,c);
1334 conjugate(kron_delta(a+%i,b,c));
1335 kron_delta(a+%i,b,c)$
1337 cabs(kron_delta(a,b,23 +%i));
1338 kron_delta(a,b,23 + %i)$
1340 abs(kron_delta(l,s,s));
1341 kron_delta(l,s)$
1343 sign(kron_delta(u,n,k,1));
1346 featurep(kron_delta(a+%i, cos(x - %i), 42/19),'integer);
1347 true$
1349 /* end new kronecker delta tests */
1351 every(f,[]);
1352 true$
1354 every(f,set());
1355 true$
1357 every(evenp,set());
1358 true$
1360 every(evenp,set(2));
1361 true$
1363 every(evenp,set(%pi));
1364 false$
1366 every(evenp,set(2,4,6,%pi));
1367 false$
1369 every(evenp,set(1,2,4,6));
1370 false$
1372 every("=",[],[]);
1373 true$
1375 every("=",[1,2],[2,1]);
1376 false$
1378 every("#",[a,b],[b,a]);
1379 true$
1381 some(f,[]);
1382 false$
1384 some(f,set());
1385 false$
1387 some(oddp,set());
1388 false$
1390 some(oddp,set(%i));
1391 false$
1393 some(oddp,set(%i,1));
1394 true$
1396 some(oddp,[1,%i]);
1397 true$
1399 some("<",[a,1],[4,2]);
1400 true$
1402 some("=",[a,4],[a,5]);
1403 true$
1405 some("<=",[5,a],[6,a]);
1406 true$
1408 rreduce("+",[],0);
1411 rreduce("+",[a],0);
1414 rreduce("+",[a,b]);
1415 a+b$
1417 rreduce(adjoin, [1,2,3,4], set());
1418 set(1,2,3,4)$
1420 rreduce(lambda([x,y],x),[a,b,c,d]);
1423 rreduce(lambda([x,y],y),[a,b,c,d]);
1426 rreduce(concat,["a","m","h"],"");
1427 "amh"$
1429 flatten(rreduce(f,[1,2,3,4]));
1430 f(1,2,3,4)$
1432 lreduce("+",[],0);
1435 lreduce("+",[a],0);
1438 lreduce("+",[a,b]);
1439 a+b$
1441 lreduce(lambda([x,y],x),[a,b,c,d]);
1444 lreduce(lambda([x,y],y),[a,b,c,d]);
1447 lreduce(concat,["a","m","h"],"");
1448 "amh"$
1450 flatten(lreduce(f,[1,2,3,4]));
1451 f(1,2,3,4)$
1453 xreduce('max,[]);
1454 minf$
1456 xreduce('min,[]);
1457 inf$
1459 xreduce('max,[0,1]);
1462 xreduce('min,[0,1]);
1465 xreduce('max,[],x);
1468 xreduce('min,[],x);
1471 xreduce("and",[]);
1472 true$
1474 xreduce("or",[]);
1475 false$
1477 xreduce("and",[true]);
1478 true$
1480 xreduce("and",[false]);
1481 false$
1483 xreduce("and",[true,true],false)$
1484 false$
1486 xreduce("or",[true]);
1487 true$
1489 xreduce("or",[false]);
1490 false$
1492 xreduce("or",[true,true],false)$
1493 true$
1495 xreduce("and",[]);
1496 true$
1498 xreduce("or",[]);
1499 false$
1501 xreduce("and",[true]);
1502 true$
1504 xreduce("and",[false]);
1505 false$
1507 xreduce("and",[true,true],false)$
1508 false$
1510 xreduce("or",[true]);
1511 true$
1513 xreduce("or",[false]);
1514 false$
1516 xreduce("or",[true,true],false)$
1517 true$
1519 (nary ("@@@"), declare ("@@@", nary), "@@@" ([L]) := apply (FOO, L), kill (FOO));
1520 done;
1522 xreduce ("@@@", [a, e, c, b, d]);
1523 FOO (a, e, c, b, d);
1525 xreduce ("@@@", {a, e, c, b, d});
1526 FOO (a, b, c, d, e);
1528 (infix ("%%%"), "%%%" (aa, bb) := BAR (aa, bb), kill (BAR));
1529 done;
1531 xreduce ("%%%", [a, e, c, b, d]);
1532 BAR (BAR (BAR (BAR (a, e), c), b), d);
1534 xreduce ("%%%", {a, e, c, b, d});
1535 BAR (BAR (BAR (BAR (a, b), c), d), e);
1537 makeset(i,[i],set());
1538 set()$
1540 makeset(i,[i],[[1]]);
1541 set(1)$
1543 makeset(i,[i],[[true],[false]]);
1544 set(true,false)$
1546 makeset(i/j,[i,j],[[2,6],[6,28]]);
1547 set(2/6,6/28)$
1549 num_partitions(0);
1552 every(is, makelist(num_partitions(i)=cardinality(integer_partitions(i)),i,1,15));
1553 true$
1555 (distinctp(l) := is(cardinality(setify(l)) = length(l)),0);
1558 (chk(n) := cardinality(subset(integer_partitions(n),distinctp)), 0);
1561 every(is, makelist(num_distinct_partitions(i)=chk(i),i,0,10));
1562 true$
1564 (remfunction(chk,distinctp),0);
1567 divisors(1);
1568 set(1)$
1570 divisors(2);
1571 set(1,2)$
1573 divisors(28);
1574 set(1,2,4,7,14,28)$
1576 divisors([28]);
1577 [set(1,2,4,7,14,28)]$
1579 divisors(a=b);
1580 divisors(a) = divisors(b)$
1582 every(is, makelist(divsum(i) = xreduce("+",divisors(i)),i,1,100));
1583 true$
1585 moebius(1);
1588 moebius(2);
1591 moebius(3);
1594 moebius([3,4]);
1595 [moebius(3),moebius(4)]$
1597 /* See A & S 24.3.1 */
1599 every(is, makelist(xreduce("+", map(moebius, divisors(i))) = 0,i,2,100));
1600 true$
1602 (rprimep(i,j) := block([ ],
1603   if integerp(i) and integerp(j) then if gcd(i,j) > 1 then 0 else 1
1604   else funmake(rprimep,[i,j])),0);
1607 every(is, makeset(moebius(i*j) = moebius(i) * moebius(j) * rprimep(i,j),[i,j],
1608 cartesian_product(setify(makelist(i,i,1,15)),setify(makelist(j,j,1,15)))));
1609 true$
1611 /* Tests for random_permutation */
1613 (set_random_state (make_random_state (1234)), 0);
1616 (L : '[a + 1, b - 2, c * d, %pi, %e], S : setify (L), 0);
1619 [random_permutation (L), random_permutation (L), random_permutation (L)];
1620 '[[a + 1, %e, c*d, b - 2, %pi], [b - 2, a + 1, c*d, %e, %pi], [a + 1, c*d, b - 2, %e, %pi]];
1622 [random_permutation (S), random_permutation (S), random_permutation (S)];
1623 '[[c*d, b - 2, a + 1, %pi, %e], [%pi, %e, a + 1, b - 2, c*d], [b - 2, %pi, a + 1, %e, c*d]];
1625 apply ("+", makelist (if random_permutation ([1, 2, 3, 4]) = [4,2,1,3] then 1 else 0, i, 1, 1000));
1628 /* Tests for sublist_indices */
1630 sublist_indices ([], lambda([x], x='b));
1633 errcatch (sublist_indices (1, lambda([x], x='b)));
1636 sublist_indices ('[a, b, b, c, 1, 2, b, 3, b], lambda ([x], x='b));
1637 [2, 3, 7, 9];
1639 sublist_indices ('[a, b, b, c, 1, 2, b, 3, b], lambda ([x], integerp (x)));
1640 [5, 6, 8];
1642 sublist_indices ('[a, b, b, c, 1, 2, b, 3, b], symbolp);
1643 [1, 2, 3, 4, 7, 9];
1645 sublist_indices ([true, false, false, true, true], identity);
1646 [1, 4, 5];
1648 sublist_indices ([1 > 0, 1 < 0, 2 < 1, 2 > 1, 2 > 0], identity);
1649 [1, 4, 5];
1651 (kill (P), P(x) := ordergreatp (x, 'm), sublist_indices ('[a, %pi, x, z, h, y, %e, 1, s], P));
1652 [3, 4, 6, 9];
1654 sublist_indices ('[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], lambda ([x], evenp(x) and primep(x)));
1655 [3];
1657 /* Tests for sublist (not part of nset but related functionality) */
1659 sublist ([], lambda([x], x='b));
1662 errcatch (sublist (1, lambda([x], x='b)));
1665 sublist ('[a, b, b, c, 1, 2, b, 3, b], lambda ([x], x='b));
1666 [b, b, b, b];
1668 sublist ('[a, b, b, c, 1, 2, b, 3, b], lambda ([x], integerp (x)));
1669 [1, 2, 3];
1671 sublist ('[a, b, b, c, 1, 2, b, 3, b], symbolp);
1672 [a, b, b, c, b, b];
1674 sublist ([true, false, false, true, true], identity);
1675 [true, true, true];
1677 sublist ([1 > 0, 1 < 0, 2 < 1, 2 > 1, 2 > 0], identity);
1678 [1 > 0, 2 > 1, 2 > 0];
1680 (kill (P), P(x) := ordergreatp (x, 'm), sublist ('[a, %pi, x, z, h, y, %e, 1, s], P));
1681 [x, z, y, s];
1683 sublist ('[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], lambda ([x], evenp(x) and primep(x)));
1684 [2];
1686 /* from mailing list 2009-08-27 "what happened to 'ev' ?" */
1688 block ([l1: [[2,3], [3,4], [4,5]]], local(s_list),
1689   s_list(list, option) := sublist(list, lambda([x], ev(option))),
1690   s_list(l1, x[2]<4));
1691 [[2, 3]];
1693 block ([l1: [[2,3], [3,4], [4,5]]], local(s_list_indices),
1694   s_list_indices(list, option) := sublist_indices(list, lambda([x], ev(option))),
1695   s_list_indices(l1, x[2]<4));
1696 [1];
1698 /* SF bug 2698078  set_partitions does not produce simplified sets */
1699 (l : set_partitions({1,2,3,4},3),0);
1702 is(l = expand(l));
1703 true$
1705 map(lambda([s], xreduce('union,s)), l);
1706 set(set(1,2,3,4))$
1708 map(lambda([s], xreduce('intersection,s)), l);
1709 set(set())$
1711 (l : set_partitions({1,2,3,4}),0);
1714 is(l = expand(l));
1715 true$
1717 map(lambda([s], xreduce('union,s)), l);
1718 set(set(1,2,3,4))$
1720 map(lambda([s], xreduce('intersection,s)), l);
1721 set(set(), set(1,2,3,4))$
1723 (l : set_partitions(set(a,b, set(c)),2),0);
1726 is(l = expand(l));
1727 true$
1729 map(lambda([s], xreduce('union,s)), l);
1730 set(set(a,b,set(c)))$
1732 map(lambda([s], xreduce('intersection,s)), l);
1733 set(set())$
1735 (l : set_partitions(set(a,b, set(c))),0);
1738 is(l = expand(l));
1739 true$
1741 map(lambda([s], xreduce('union,s)), l);
1742 set(set(a,b,set(c)))$
1744 map(lambda([s], xreduce('intersection,s)), l);
1745 set(set(),set(a,b,set(c)))$
1747 (remvalue(l),0);
1750 in_exactly_one(set());
1751 set()$
1753 in_exactly_one(set(l), set(s), set(s));
1754 set(l)$
1756 in_exactly_one(set(r), set(e), set(n), set(e), set(e));
1757 set(r,n)$
1759 in_exactly_one(set(m), set(a), set(x), set(i,m,a));
1760 set(i,x)$
1762 in_exactly_one(set(x),set(x), set(a,b));
1763 set(a,b)$
1765 /* bug reported to mailing list, is(f("x") > 0) => Lisp error
1766  * following example from Matthew Gwynne 2010-04-29, thanks Matthew!
1767  */
1770  /* F as specified in original example
1771  F : {{gv("CSup"),-gv("DiagF"),-gv("DisT"),-gv("ProgF"),-gv("SymA"),-gv("Via")},
1772     {-gv("CSup"),-gv("DiagF"),-gv("DisT"),-gv("ProgF"),-gv("SymA"),-gv("Via")},
1773     {gv("CSup"),-gv("DiagF"),-gv("DisT"),-gv("ProgF"),-gv("SymA"),-gv("Via")},
1774     {-gv("CSup"),-gv("DiagF"),gv("DisT"),-gv("ProgF"),gv("SymA"),-gv("Via")},
1775     {-gv("CSup"),gv("DiagF"),-gv("DisT"),-gv("ProgF"),gv("SymA"),gv("Via")},
1776     {gv("CSup"),gv("DiagF"),-gv("DisT"),-gv("ProgF"),gv("SymA"),gv("Via")},
1777     {gv("CSup"),gv("DiagF"),gv("DisT"),-gv("ProgF"),gv("SymA"),gv("Via")},
1778     {gv("CSup"),gv("DiagF"),gv("DisT"),-gv("ProgF"),gv("SymA"),gv("Via")},
1779     {-gv("CSup"),gv("DiagF"),-gv("DisT"),gv("ProgF"),gv("SymA"),gv("Via")},
1780     {gv("CSup"),gv("DiagF"),gv("DisT"),gv("ProgF"),gv("SymA"),gv("Via")},
1781     {gv("CSup"),gv("DiagF"),gv("DisT"),gv("ProgF"),gv("SymA"),gv("Via")}}, */
1782  /* here is a smaller (fewer variables) example */
1783  F : {{gv("CSup"),-gv("DiagF"),-gv("DisT")},
1784       {gv("CSup"),gv("DiagF"),gv("DisT")},
1785       {gv("CSup"),gv("DiagF"),gv("DisT")}},
1786  var_cs(F) := map(abs,apply(union,listify(F))),
1787  all_tass(V) :=
1788   map(setify,
1789    apply(cartesian_product,
1790      map(lambda([v],{-v,v}),listify(V)))),
1791  fullcnf2fulldnf(F) := setdifference(all_tass(var_cs(F)),F),
1792  fullcnf2fulldnf(F));
1794 {{-abs(gv("CSup")),-abs(gv("DiagF")),-abs(gv("DisT"))},{-abs(gv("CSup")),-abs(gv("DiagF")),abs(gv("DisT"))},
1795  {-abs(gv("CSup")),abs(gv("DiagF")),-abs(gv("DisT"))},{-abs(gv("CSup")),abs(gv("DiagF")),abs(gv("DisT"))},
1796  {abs(gv("CSup")),-abs(gv("DiagF")),-abs(gv("DisT"))},{abs(gv("CSup")),-abs(gv("DiagF")),abs(gv("DisT"))},
1797  {abs(gv("CSup")),abs(gv("DiagF")),-abs(gv("DisT"))},{abs(gv("CSup")),abs(gv("DiagF")),abs(gv("DisT"))}}$
1799 /* full_listify - ID: 3005820 */
1800 full_listify(rat(3/4));
1801 3/4$
1803 /* is union nary? */
1804 xreduce('union,[]);
1805 set()$