The proof that deciding if a digraph can be pushed to be acyclic is NP-complete is in error. The result is correct, however, as the following proof shows.
As in the paper, we do a transformation from NAE-3SAT instance S with m clauses.
Assume without loss of generality that u, not u do not appear as a pair in any clause (else the clause is trivially NAE satisfied).
We use the following gadget (one for each variable in each clause, so we have 3m gadgets, and we number the gadgets from 1 to 3m in a left to right fashion, i.e. the gadgets corresponding to the variables in clause i will be numbered 3(i-1)+1, 3(i-1)+2, and 3(i-1)+3):
u, not u, x, y on a 4-cycle u -> x -> not u -> y -> u, where u, not u correspond to boolean variable u and its negation. Create two additional vertices w, z for each variable appearing in each clause where x, y are dominated by z and x, y dominate w. u and not u are called variable vertices. Other edges in the gadget are shown in the figure below. Note that we must push exactly one of u, not u to make the gadget acyclic.
A gadget is shown here:
At this point we have 3m*6=18m vertices. It is easy to show that exactly one of u, not u must be pushed to make gadget acyclic.
Connect each three literals in each clause on a 3-cycle, called a clause cycle (so we have m vertex disjoint 3-cycles). Thus either 1 or 2 literals must be pushed in each of these clause cycles to make each of them acyclic.
To ensure consistency, we construct consistency components:
each u vertex also dominates the u in the next hightest number gadget in which u/not u appears (say these are numbered as u_i, u_j, i less than j). We create four new vertices for each such pair, a_i, b_i, e_i, f_i and let a_i dominate both u_i and u_j and let u_i and u_j both dominate b_i. We let a_i dominate e_i, e_i dominate u_i, f_i dominate u_i, u_j dominate e_i, f_i dominate u_i, f_i dominate b_i.
Note that we are re-using the same variable vertices from the gadgets here.
Likewise each not u vertex dominates the not u vertex in the next hightest number gadget in which u/not u appear. We create four new vertices for each such pair, c_i, d_i, g_i, and h_i and let c_i dominate both not u_i and not u_j and let not u_i and not u_j both dominate d_i. We let c_i dominate g_i, g_i dominate not u_i, h_i dominate not u_i, not u_j dominate g_i, h_i dominate not u_i, h_i dominate d_i.
A consistency component is shown here:
Observe that if we push u_i and do not push u_j, then we must push a_i to avoid a 3-cycle. Pushing a_i then means we must push e_i to avoid a 3-cycle. but this means we must push u_j, a contradiction. Similarly if we push u_j and do not push u_i.
By transitvity, this ensures consistency, since pushing a vertex corresponds to it evaluating "true."
If we have a consistent truth assignment for S, we push u_i if the corresponding variable is assigned true and push not u_i otherwise. We also push e_i, f_i if u_i is not pushed and push a_i, b_i pair otherwise, i.e if u_i is pushed. Likewise, if we push not u_i, we will push c_i and d_i and otherwise push g_i and h_i. It is now not hard to see that there can be no cycles in the graph.
Suppose we push vertices corresponding to a consistent (and NAE satisfying) truth assignment and we push the appropriate e, f,g, h, vertices. Then all clause 3-cycles and all gadget cycles are broken as described above as well as all cycles that can be contained within any single consistency component, since:
i) if we pushed e_i and f_i (or g_i and h_i) then u_i and u_j (not u_i and not u_j) are a source and sink vertex within the consistency component and b_i is also a sink.
ii) if we pushed u_i and u_j (and thus also pushed a_i and b_i) then the effect is the same as i).
It is clear that there can be no other cycles in the graph, since all edges of the form u_iu_j will be directed from "left to right."
It now follows that S has a NAE truth assignment if and only if the digraph can be made acyclic, since we cannot make a consistency component acyclic without pushing a variable vertex, nor can we make a clause or gadget component acyclic with pushing variable vertices.
Thanks to Gary MacGillivray and Kathryn Wood for pointing out this error.
Gary MacGillivray informs me that determining if a bipartite graph can be made acyclic using pushes is also NP-complete.