# 8.10 IsTransitive

`IsTransitive( G, D )`
`IsTransitive( G, D, operation )`

`IsTransitive` returns `true` if the group G operates transitively on the domain D, which must be a list of points of arbitrary type.

We say that a group G acts transitively on a domain D if and only if for every pair of points d and e there is an element g of G such that d^g = e. An alternative characterization of this property is to say that D as a set is equal to the orbit of every single point.

It is allowed that D is a proper subset of a domain, i.e., that D is not invariant under the operation of G. In this case `IsTransitive` checks whether for every pair of points d, e of D there is an element g of G, such that d^g = e. This can also be characterized by saying that D is a subset of the orbit of every single point.

`IsTransitive` accepts a function operation of two arguments d and g as optional third argument, which specifies how the elements of G operate (see Other Operations).

```    gap> g := Group( (1,2,3)(6,7), (3,4,5)(7,8) );;
gap> IsTransitive( g, [1..8] );
false
gap> IsTransitive( g, [1,6] );
false    # note that the domain need not be invariant
gap> sets := Combinations( [1..5], 3 );;  Length( sets );
10    # a list of all three element subsets of '[1..5]'
gap> IsTransitive( g, sets, OnSets );
true ```

`IsTransitive` calls
`G.operations.IsTransitive( G, D, operation )`
and returns the value. Note that the third argument is not optional for functions called this way.

The default function called this way is `GroupOps.IsTransitive`, which tests whether D is a subset of the orbit of the first point in D. This function is seldom overlaid, because it is difficult to improve it.

GAP 3.4.4
April 1997