Dependent types are a powerful concept that allows us to write proof-carrying code. Idris is a programming language that supports dependent types. We will learn about the mathematical foundations, and then write correct software and mathematically prove properties about it. This book aims to be accessible to novices that have no prior experience beyond high school mathematics. Thus, this book is designed to be self-contained. The first part of this book serves as an intr...