  Unfolding can tackle the path-explosion problem caused by concurrency.
Traditional unfolding generation faces an NP-complete problem when adding
events to the unfolding structure, which also exists in the case of verifying
linear temporal logic (LTL). The reason is that it is necessary to enumerate
possible concurrent event combinations after adding an event. Many
state-of-the-art methods optimally explore unfolding-based structure (called
event structure) by a tree-like structure, which should be constructed on the
event structure with complete conflict and causal relations. However, a
synchronization of a Petri net and the Buchi representation of LTL as a folded
net can not represent complete conflict and causal relations. Thus, it is
difficult to apply such a tree-like structure directly on the folded net. To
resolve this difficulty, we propose a new method, called partial-order checking
with unfolding, to verify LTL based on PDNet (program dependence net). We
define an exploration tree with a new notion of delayed transitions, which is
different from the existing tree-like structure. It improves the unfolding
generation by avoiding all possible event combinations. Then, we propose an
algorithm to simultaneously construct the exploration tree while generating the
unfolding structure, as well as checking LTL. We implement a tool PUPER for
concurrent programs with POSIX threads. It improves traditional unfolding
generations via our exploration tree-based algorithms and shows better
performance than SPIN and DiVine on the used benchmarks.
