# 4.13 Union

`Union( D1, D2... )`
`Union( list )`

In the first form `Union` returns the union of the domains D1, D2, etc. In the second form list must be a list of domains and `Union` returns the union of those domains. Each argument D or element of list respectively may also be an arbitrary list, in which case `Union` silently applies `Set` (see Set) to it first.

The result of `Union` is the set of elements that lie in any the domains D1, D2, etc. Functions called by the dispatcher function `Union` however, are encouraged to keep as much structure as possible. However, currently GAP does not support any category that is closed under taking unions except the category of all domains. So the only case that structure will be kept is when one argument D or element of list respectively is a superset of all the other arguments or elements of list.

```    gap> Union( GaussianIntegers, Rationals );
Error, sorry, cannot unite <E> with the infinite domain <D>
gap> Union( D12, Group( (1,2), (1,2,3) ) );
[ (), (2,3), (2,6)(3,5), (1,2), (1,2)(3,6)(4,5), (1,2,3),
(1,2,3,4,5,6), (1,3,2), (1,3), (1,3)(4,6), (1,3,5)(2,4,6),
(1,4)(2,3)(5,6), (1,4)(2,5)(3,6), (1,5)(2,4), (1,5,3)(2,6,4),
(1,6,5,4,3,2), (1,6)(2,5)(3,4) ]
gap> Union( [2,4,6,8,10], [3,6,9,12,15], [5,10,15,20,25] );
[ 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 20, 25 ]
# two or more domains or sets as arguments are legal
gap> Union( [ [1,2,4], [2,3,4], [1,3,4] ] );
[ 1, 2, 3, 4 ]    # or a list of domains or sets
gap> Union( [ ] );
[  ] ```

The dispatcher function (see Dispatchers) `Union` is slightly different from other dispatcher functions. It does not simply call the function in the operations record passings its arguments. Instead it loops over its arguments (or the list of domains or sets) and calls the function in the operations record repeatedly, and passes each time only two domains. This obviously makes writing the function for the operations record simpler.

The default function `DomainOps.Union` checks whether either domain is infinite. If one is it signals an error. If both domains are finite it computes the proper sets of elements of both and unites them (see Elements and Set Functions for Sets). This default method is overlaid by more special functions for some other domains. Those functions usually are faster.

GAP 3.4.4
April 1997