FUNCTION identical_to_one_of_set_of_sets
(set_a : class, set_of_sets : SET [0:?] OF class) : BOOLEAN;
LOCAL i : INTEGER; initial_size : INTEGER; augmented_size : INTEGER; set_of_forward_equivalences : SET OF same_membership := []; set_of_backward_equivalences : SET OF same_membership := []; augmented_set_of_sets : SET OF class := []; END_LOCAL; -- test membership OF the specified SET OF sets IF (set_a IN set_of_sets) THEN RETURN (TRUE); END_IF; -- extend the specified SET TO include all sets that have the same membership -- AS an existing member initial_size := SIZEOF(set_of_sets); IF (initial_size = 0) THEN RETURN (FALSE); END_IF; REPEAT i := 1 TO initial_size; set_of_forward_equivalences := set_of_forward_equivalences + USEDIN(set_of_sets[i], 'SET_THEORY_SCHEMA.SAME_MEMBERSHIP.SET_1'); set_of_backward_equivalences := set_of_forward_equivalences + USEDIN(set_of_sets[i], 'SET_THEORY_SCHEMA.SAME_MEMBERSHIP.SET_2'); END_REPEAT; augmented_set_of_sets := set_of_sets; IF (SIZEOF(set_of_forward_equivalences) > 0) THEN REPEAT i := 1 TO HIINDEX(set_of_forward_equivalences); augmented_set_of_sets := augmented_set_of_sets + set_of_forward_equivalences[i].set_2; END_REPEAT; END_IF; IF (SIZEOF(set_of_backward_equivalences) > 0) THEN REPEAT i := 1 TO HIINDEX(set_of_backward_equivalences); augmented_set_of_sets := augmented_set_of_sets + set_of_backward_equivalences[i].set_1; END_REPEAT; END_IF; -- IF the specified SET OF sets has been augmented, THEN test membership augmented_size := SIZEOF(augmented_set_of_sets); IF augmented_size = initial_size THEN RETURN (FALSE); END_IF; RETURN (identical_to_one_of_set_of_sets(set_a, augmented_set_of_sets)); END_FUNCTION; -- identical_to_one_of_set_of_sets
|