Explain why the gap between semi-decidable and decidable is 'absolute' — why can't a semi-decision procedure be converted into a decision procedure by limiting computation time?
Think about your answer, then reveal below.
Model answer: A semi-decision procedure has an asymmetry: it can produce 'yes' witnesses (accepting) but never produces 'no' witnesses — it just runs forever on non-members. To convert it to a decider, you'd need a finite time after which you can safely output 'no.' But for the halting problem, programs can take arbitrarily long to halt: for any timeout T you choose, there exist programs that halt on step T+1. Stopping at T and outputting 'no' would incorrectly reject those programs. There is no computable function that bounds the runtime of all halting programs, so no timeout is correct for all inputs. The gap is absolute because 'may run forever on non-members' cannot be made finite by a computable bound.
The reason this fails is that the set of programs that halt within T steps grows as T grows, but is never the complete set of halting programs. Deciding membership in the halting problem would require knowing, for an arbitrary program, whether it eventually halts — which is exactly the undecidable question you started with. Any timeout-based approach simply relocates the problem rather than solving it.