Chapters

Appendix C: Glossary and Learning Checklist

Make sure you can use what you have read.

C.1 A short glossary

TermMeaning
PropositionA claim you want to prove true
Proof termA value of the type corresponding to a proposition
KernelThe small core that checks a proof term against its type
Dependent typeA type whose specific form depends on values
Structural inductionProving the general case by following data constructors
Type classA collection of operations and, where applicable, laws for a type
OwnershipRules governing use, duplication, and disposal of values
BorrowTemporary access without transferring ownership
Algebraic effectsSeparating requested operations from their handlers
ContinuationThe rest of a computation after a suspension point
Multi-shotResuming the same continuation more than once
Effect rowThe set of effects a function leaves for its caller
TotalityProducing a result for every input in the domain
Trust boundaryComponents trusted externally rather than established by the formal proof alone

C.2 Check your understanding

After finishing the book, try answering these questions aloud:

  • How do let and var differ with respect to ownership and mutability?
  • Does Tauto apply a type as Option(i64) or Option<i64>?
  • How do affine and linear differ in the number of permitted resource uses?
  • What are the respective roles of perform and handle?
  • Why does resume ω interact with static ownership checking?
  • Why can Refl prove (2: Nat) + 2 = 4?
  • How does induction differ from a finite set of test cases?
  • Can you distinguish what the kernel proves from what is trusted in a native runtime?

If you can explain these points, you have learned Tauto's basic syntax and the first ideas of proof-oriented software development. Next, give one small function of your own an invariant, then trace how its proof corresponds to individual lines of code.