%% sets.tst

%% Author: F.J.Wright@Maths.QMW.ac.uk
%% Date: 20 Feb 1994

%% Test of REDUCE sets package, based on the examples on page 51 of
%% the "Maple V Language Reference Manual"
%% by Char, Geddes, Gonnet, Leong, Monagan and Watt (Springer, 1991).

%% The output (especially of symbolic set expressions) looks better
%% using PSL-REDUCE under MS-Windows or X in graphics mode.

%% Note that REDUCE supports n-ary symbolic infix operators,
%% does not require any special quoting to use an infix operator
%% as a prefix operator, and supports member as an infix operator.
%% However, REDUCE ALWAYS requires  evalb  to explicitly evaluate a
%% Boolean expression outside of a conditional statement.
%% Maple 5.2 does not provide any subset predicates.

clear a, b, c, x, y, z;



s := {x,y} union {y,z};


s := {x,y,z}

% s := {x,y,z}

t := union({x,y},{y,z});


t := {x,y,z}

% t := {x,y,z}

evalb(s = t);


true

% true

evalb(s set_eq t);


true

% true

evalb(member(y, s));


true

% true

evalb(y member s);


true

% true

evalb(y member {x*y, y*z});


false

% false

evalb(x*y member {x*y, y*z});


true

% true

{3,4} union a union {3,7} union b;


{3,4,7} union a union b

% {3,4,7} union a union b

{x,y,z} minus {y,z,w};


{x}

% {x}

a minus b;


a\b

% a\b

a\b;


a\b

% a\b

minus(a,a);


{}

% {}

{x,y,z} intersect {y,z,w};


{y,z}

% {y,z}

intersect(a,c,b,a);


a intersection b intersection c

% a intersection b intersection c

%% End of Maple examples.

(a union b) intersect c where set_distribution_rule;


a intersection c union b intersection c

% a intersection c union b intersection c

algebraic procedure power_set s;
   %% Power set of a set as an algebraic list (inefficiently):
   if s = {} then {{}} else
      {s} union for each el in s join power_set(s\{el});


power_set


power_set{};


{{}}

power_set{1};


{{1},{}}

power_set{1,2};


{{2},{1,2},{1},{}}

power_set{1,2,3};


{{3},{2,3},{2},{1,3},{1,2,3},{1,2},{1},{}}



evalb 1;


true

% true

evalb 0;


false

% false

evalb(a = a);


true

% true

evalb(a = b);


false

% false

evalb(2 member {1,2} union {2,3});


true

% true

evalb({2} member {1,2} union {2,3});


false

% false

evalb({1,3} subset {1,2} union {2,3});


true

% true

evalb(a subset a union b);


true

% true

evalb(a subset_eq a union b);


true

% true

evalb(a set_eq a union b);


false

% false

evalb(a\b subset a union c);


true

% true

mkset{1,2,1};


{1,2}

% {1,2}

end;

Tested on x86_64-pc-windows CSL
Time (counter 1): 0 ms

End of Lisp run after 0.00+0.06 seconds
real 0.20
user 0.00
sys 0.07
