'Constructor.  `usr\' is a ``sem.Expression`` representing an
Underspecified Representation Structure (USR).  A USR has the following
special predicates:
ALL(l,v,n),
EXISTS(l,v,n),
AND(l,n,n),
OR(l,n,n),
IMP(l,n,n),
IFF(l,n,n),
PRED(l,v,n,v[,v]*) where the brackets and star indicate zero or more repetitions,
LEQ(n,n),
HOLE(n),
LABEL(n)
where l is the label of the node described by the predicate, n is either
a label or a hole, and v is a variable.'

def __init__(self, usr):

    self.holes = set()
    self.labels = set()
    self.fragments = {}
    self.constraints = set()
    self._break_down(usr)
    self.top_most_labels = self._find_top_most_labels()
    self.top_hole = self._find_top_hole()
