# [xquery-talk] Need some theory help

Florent Georges lists at fgeorges.org
Mon Sep 8 15:08:53 PDT 2008

```Michael Kay wrote:

Hi Michael,

> Given general expressions E,F,G, I believe it is true that
> the following two expressions are equivalent:

> E/F union E/G <=> E/(F union G)

> (That is, union distributes through "/")

> But this is not true for "except".

> \$a/descendant::*/child::b except \$a/descendant::*/(child::c/child::b)

> is not the same as

> a/descendant::*/(child::b except child::c/child::b)

> (easily seen because child::c/child::b will not select any
> nodes that are selected by child::b).

I am not really a theoretician, but I feel this problem is
related to the descendant axis rather than the set operations
(union, except...)

Intuitively, I would say that "E//F x E//G" (for some
operator x) is not the same as "E//(F x G)" because in the
later "F x G" is 'anchored' at particular nodes, where in the
former two sequences are built then the operator is applied.

For the union, I guess this leads into the same result
(intuitively again), but it doesn't with the difference (the
except operator.)

Maybe using only a subset of axises to try to prove your
assertions could help find the way?

Regards,

--drkm

```