In short: What is the basic difference that allows model checking for hardware to be "easily" solvable, but makes it undecidable for software?
I guess it has to boil down to the difference between hardware being finite automata and software having the expressiveness of a Turing machine, which would basically mean that its the infinite amount of (randomly accessible, vs. that of a push-down automaton) memory that the Turing machine has available -- is this correct?