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