1. A method for bounded model checking of computer programs, comprising: providing a program having at least one reachable property node; decomposing the program for bounded model checking (BMC) into subproblems by: creating at least one tunnel based on disjunctive control paths through the program; obtaining a reduced BMC sub-problem using BMC unrolling, while using path constraints imposed by the at least one tunnel; for the reachable property node, determining a quantifier-free formula (QFP) in a decidable subset of first order logic; and checking satisfiability of the QFP, independently and individually, to determine whether the QFP is satisfiable for the subproblem; and continuing the decomposing until the a BMC bound is reached.