Chapters

Appendix D: Language reference index

Use the syntax quick reference for notation and the chapters below for explanations and examples. This index locates the rules covered by the book. It is not an exhaustive specification of every construct or an inventory of unverified features.

D.1 Values, declarations, and types

QuestionRule and boundaryExplanation
Bindings and assignmentDistinguish let from var; use := to assign a mutable cellValues and types
Numeric typesDo not equate fixed-width integers, floating-point values, and the proof-level NatBasic types, runtime correspondence
Functions and branchesCheck parameter and result types, branch results, and remaining effectsFunctions and control flow
Data structuresDistinguish struct fields, enum constructors, and match casesStructs, enums, and match
Type parametersThe book uses <A> for function parameters and List(A) for type application. Do not extrapolate this to arbitrary term genericsGenerics
ClassesDistinguish a where Ord(A) requirement, its comparison implementation, and laws used in proofsClasses, sorting proofs
Names and importsCheck relative imports, standard-library imports, and visibility through pubProjects

D.2 Ownership, borrowing, and effects

QuestionRule and boundaryExplanation
copy / shared / affine / linearRules for duplication and disposal, separate from whether a variable is mutableOwnership kinds
& and &mutDistinguish reading and mutable borrows from passing ownership of a valueBorrowing
View bindingsCheck the usage scope of let &x := ...Borrowing and references
perform / handleSeparate requesting an effect from handling it; unhandled effects remain outsideAlgebraic effects
! {…}Read externally visible effects separately from the function resultFunctions, effects
resumeConsider both continuation usage counts and the usage rules of captured valuesContinuations and ownership
BudgetsDistinguish language budgets from host time and memory limitsExecution limits, trust boundary

D.3 Propositions, proofs, and universes

QuestionRule and boundaryExplanation
Prop and proof termsRead propositions as types and proofs as terms of those typesFirst proofs
ReflUse when both sides coincide through computation of their definitions, not as an automatic proof of arbitrary mathematical equalityEquality
InductionDistinguish constructor cases from the induction hypothesisInduction and recursion
TacticsDistinguish assistance constructing a proof from checking the completed proofTactics
?nameAn unfinished hole; displaying a candidate does not replace checking the filled termProof tools
Type(u) / LevelRead universe levels without assuming unrestricted inference of symbolic levelsDependent types and universes
Axioms and external functionsAssumed propositions and external implementations are part of the trust boundaryTrust boundary

D.4 Common distinctions

  • Type conversion and equality proofs: definitional agreement during type checking is not the same operation as providing a proof term for an equality proposition. Equality that does not follow by computation may require rewriting or another proof.
  • Theorems and execution tests: a theorem about general inputs and a test on selected inputs provide different evidence. Success in one does not imply success in the other.
  • Dependent types and all type-level functions: being able to write a proposition containing values does not imply that every executable function or class method works in a type position. Check the intended path with a small example.
  • Checked and executable: even after a file checks, separately verify its combination of backend, host capabilities, and external functions.

D.5 Looking beyond this index

Inspect exact standard API parameters and visibility with tauto library FILE and tauto doc PATH for the version you use. Consult tauto --help and each subcommand's --help for CLI options. Do not use this index as a complete specification of macros, FFI, or every backend constraint.

Instead of inventing missing syntax, make a small reproduction using the verification guide. Record proposed designs separately from functionality available in the distributed version.