1%% sets.tst 2 3%% Author: F.J.Wright@Maths.QMW.ac.uk 4%% Date: 20 Feb 1994 5 6%% Test of REDUCE sets package, based on the examples on page 51 of 7%% the "Maple V Language Reference Manual" 8%% by Char, Geddes, Gonnet, Leong, Monagan and Watt (Springer, 1991). 9 10%% The output (especially of symbolic set expressions) looks better 11%% using PSL-REDUCE under MS-Windows or X in graphics mode. 12 13%% Note that REDUCE supports n-ary symbolic infix operators, 14%% does not require any special quoting to use an infix operator 15%% as a prefix operator, and supports member as an infix operator. 16%% However, REDUCE ALWAYS requires evalb to explicitly evaluate a 17%% Boolean expression outside of a conditional statement. 18%% Maple 5.2 does not provide any subset predicates. 19 20clear a, b, c, x, y, z; 21 22s := {x,y} union {y,z}; 23% s := {x,y,z} 24 25t := union({x,y},{y,z}); 26% t := {x,y,z} 27 28evalb(s = t); 29% true 30 31evalb(s set_eq t); 32% true 33 34evalb(member(y, s)); 35% true 36 37evalb(y member s); 38% true 39 40evalb(y member {x*y, y*z}); 41% false 42 43evalb(x*y member {x*y, y*z}); 44% true 45 46{3,4} union a union {3,7} union b; 47% {3,4,7} union a union b 48 49{x,y,z} minus {y,z,w}; 50% {x} 51 52a minus b; 53% a\b 54 55a\b; 56% a\b 57 58minus(a,a); 59% {} 60 61{x,y,z} intersect {y,z,w}; 62% {y,z} 63 64intersect(a,c,b,a); 65% a intersection b intersection c 66 67%% End of Maple examples. 68 69(a union b) intersect c where set_distribution_rule; 70% a intersection c union b intersection c 71 72algebraic procedure power_set s; 73 %% Power set of a set as an algebraic list (inefficiently): 74 if s = {} then {{}} else 75 {s} union for each el in s join power_set(s\{el}); 76 77power_set{}; 78power_set{1}; 79power_set{1,2}; 80power_set{1,2,3}; 81 82 83evalb 1; 84% true 85 86evalb 0; 87% false 88 89evalb(a = a); 90% true 91 92evalb(a = b); 93% false 94 95evalb(2 member {1,2} union {2,3}); 96% true 97 98evalb({2} member {1,2} union {2,3}); 99% false 100 101evalb({1,3} subset {1,2} union {2,3}); 102% true 103 104evalb(a subset a union b); 105% true 106 107evalb(a subset_eq a union b); 108% true 109 110evalb(a set_eq a union b); 111% false 112 113evalb(a\b subset a union c); 114% true 115 116mkset{1,2,1}; 117% {1,2} 118 119end; 120