Names of signals are propagated through a circuit design inside tuples,
with each tuple including at least a signal name and a sequential depth.
A tuple being propagated is added to a list of zero or more tuples
currently identified with a circuit element, unless a tuple of the same
signal name is already present in the list. If already present in the
list, then propagation of that tuple is stopped. Propagation of tuples
may also be stopped depending on user-defined limits, e.g. on sequential
depth. Tuple propagation may be used, depending on the embodiment, to
identify features of interest in the circuit design, e.g. (a) a point of
convergence of differently clocked signals, (b) location of gray coders,
and (c) location of synchronizers, by appropriate identification of
circuit elements from which tuple propagation is to start, and by
appropriate checks on lists of tuples that result from tuple propagation.