This course provides students with techniques useful in a wide variety of applications and develops a way of thinking that leads to understanding of the structure, behavior, limitations and capabilities of logical machines.