namespace GolangLean.Core /-! # Tiny Go Core (TGC) — abstract syntax. A small calculus that captures the *essential computation* of Go's sequential fragment: variables, functions, mutable references (Go's `&`/`*`), sequencing, and conditionals. Everything in surface Go is intended to desugar into this kernel. What is *not* here: types (introduced in a later module), goroutines, channels, structs, slices, methods, interfaces. The point of starting tiny is that every theorem we prove about TGC carries over once those extensions are added compositionally. -/ inductive BinOp where | add | sub | mul | eq | lt deriving Repr, BEq, DecidableEq, Inhabited inductive Term where | unitT : Term | intLit : Int → Term | boolLit : Bool → Term | var : String → Term | lam : String → Term → Term -- λ x. e | app : Term → Term → Term | letIn : String → Term → Term → Term -- let x = e₁ in e₂ | ifte : Term → Term → Term → Term | binop : BinOp → Term → Term → Term | refMk : Term → Term -- &e (allocate) | deref : Term → Term -- *e (read) | assign : Term → Term → Term -- *p = e | seq : Term → Term → Term deriving Repr, Inhabited end GolangLean.Core