Computer Logic: Design Principles and Applications