  We present a technique for the automated verification of abstract models of
multithreaded programs providing fresh name generation, name mobility, and
unbounded control.
  As high level specification language we adopt here an extension of
communication finite-state machines with local variables ranging over an
infinite name domain, called TDL programs. Communication machines have been
proved very effective for representing communication protocols as well as for
representing abstractions of multithreaded software.
  The verification method that we propose is based on the encoding of TDL
programs into a low level language based on multiset rewriting and constraints
that can be viewed as an extension of Petri Nets. By means of this encoding,
the symbolic verification procedure developed for the low level language in our
previous work can now be applied to TDL programs. Furthermore, the encoding
allows us to isolate a decidable class of verification problems for TDL
programs that still provide fresh name generation, name mobility, and unbounded
control. Our syntactic restrictions are in fact defined on the internal
structure of threads: In order to obtain a complete and terminating method,
threads are only allowed to have at most one local variable (ranging over an
infinite domain of names).
