Understanding Understanding: How Do We Reason About Computational Logic?