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
22
23
24s := {x,y} union {y,z};
25
26
27s := {x,y,z}
28
29% s := {x,y,z}
30
31t := union({x,y},{y,z});
32
33
34t := {x,y,z}
35
36% t := {x,y,z}
37
38evalb(s = t);
39
40
41true
42
43% true
44
45evalb(s set_eq t);
46
47
48true
49
50% true
51
52evalb(member(y, s));
53
54
55true
56
57% true
58
59evalb(y member s);
60
61
62true
63
64% true
65
66evalb(y member {x*y, y*z});
67
68
69false
70
71% false
72
73evalb(x*y member {x*y, y*z});
74
75
76true
77
78% true
79
80{3,4} union a union {3,7} union b;
81
82
83{3,4,7} union a union b
84
85% {3,4,7} union a union b
86
87{x,y,z} minus {y,z,w};
88
89
90{x}
91
92% {x}
93
94a minus b;
95
96
97a\b
98
99% a\b
100
101a\b;
102
103
104a\b
105
106% a\b
107
108minus(a,a);
109
110
111{}
112
113% {}
114
115{x,y,z} intersect {y,z,w};
116
117
118{y,z}
119
120% {y,z}
121
122intersect(a,c,b,a);
123
124
125a intersection b intersection c
126
127% a intersection b intersection c
128
129%% End of Maple examples.
130
131(a union b) intersect c where set_distribution_rule;
132
133
134a intersection c union b intersection c
135
136% a intersection c union b intersection c
137
138algebraic procedure power_set s;
139   %% Power set of a set as an algebraic list (inefficiently):
140   if s = {} then {{}} else
141      {s} union for each el in s join power_set(s\{el});
142
143
144power_set
145
146
147power_set{};
148
149
150{{}}
151
152power_set{1};
153
154
155{{1},{}}
156
157power_set{1,2};
158
159
160{{2},{1,2},{1},{}}
161
162power_set{1,2,3};
163
164
165{{3},{2,3},{2},{1,3},{1,2,3},{1,2},{1},{}}
166
167
168
169evalb 1;
170
171
172true
173
174% true
175
176evalb 0;
177
178
179false
180
181% false
182
183evalb(a = a);
184
185
186true
187
188% true
189
190evalb(a = b);
191
192
193false
194
195% false
196
197evalb(2 member {1,2} union {2,3});
198
199
200true
201
202% true
203
204evalb({2} member {1,2} union {2,3});
205
206
207false
208
209% false
210
211evalb({1,3} subset {1,2} union {2,3});
212
213
214true
215
216% true
217
218evalb(a subset a union b);
219
220
221true
222
223% true
224
225evalb(a subset_eq a union b);
226
227
228true
229
230% true
231
232evalb(a set_eq a union b);
233
234
235false
236
237% false
238
239evalb(a\b subset a union c);
240
241
242true
243
244% true
245
246mkset{1,2,1};
247
248
249{1,2}
250
251% {1,2}
252
253end;
254
255Tested on x86_64-pc-windows CSL
256Time (counter 1): 0 ms
257
258End of Lisp run after 0.00+0.06 seconds
259real 0.20
260user 0.00
261sys 0.07
262