This document discusses reducibility and the halting problem. It introduces reducibility as a way to convert one problem into another problem such that solving the second problem solves the first. The document then discusses the halting problem (HALTTM) in detail, proving it is undecidable through a reduction from the acceptance problem (ATM). It introduces computation histories as a method to prove reductions and discusses their use in showing languages like ALBA, ELBA, and ALLCFG are decidable/undecidable.