Why acyclic holds
 Imagine starting at Root and following the
    contents relation.  Suppose you found a cyclic
    path and followed it.  At some point, you will encounter a
    directory which you have already visited.
-  The duplicated directory cannot be the root, since the root has
     no parent (and we have constrained the contents and parent
     relations to be reciprocal).
-  The duplicated directory cannot be a non-root directory, say
     d, since that would mean that d has two parents
     (but that cannot be the case since the parent relation maps to
     single directory, not a set of directories).
 Thus a cycle cannot exist.