git-subtree-dir: octive-lean git-subtree-mainline:fd3d42ae33git-subtree-split:4b6fcec565
33 lines
1.2 KiB
Text
33 lines
1.2 KiB
Text
namespace OctiveLean.Core
|
|
|
|
/-! # Tiny Octave Core (TOC) — abstract syntax.
|
|
|
|
Parallel to golang-lean's TGC. Shared kernel: ten constructors covering
|
|
λ-calculus core + conditionals + sequencing. Octave-specific extensions:
|
|
`assign` (variable mutation in the env) and `whileT` (loop until false).
|
|
|
|
What is *not* here: matrices, cell arrays, ranges, anonymous-function
|
|
captures with `@(x) expr` syntax, `printf`-family builtins. Those are
|
|
desugaring targets for the surface-Octave→TOC translator (later). -/
|
|
|
|
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₂ (lexical)
|
|
| ifte : Term → Term → Term → Term
|
|
| binop : BinOp → Term → Term → Term
|
|
| seq : Term → Term → Term
|
|
| assign : String → Term → Term -- x = e (mutates env)
|
|
| whileT : Term → Term → Term -- while c do b
|
|
deriving Repr, Inhabited
|
|
|
|
end OctiveLean.Core
|