crosslang/OctiveLean.lean
Maximus Gorog d86d500b4f Prove preservation theorem for TOC big-step semantics.
OctiveLean/Core/Preservation.lean — the TOC analogue of TGC's
preservation. Statement:

  HasType Γ e T  ∧  HasTypeEnv env Γ  ∧  BigStep env e v env'
    ⟹  HasTypeV v T  ∧  HasTypeEnv env' Γ

No heap-typing extension (Octave has no heap). Γ is unchanged across
big-steps (assign requires x already typed).

Three structural changes were required to make preservation provable
under env-mutation, all small:

  * letIn semantics shifted to scope-restoring: BigStep.letInR now
    returns env1 (the env after evaluating the bound expression)
    rather than env2 (after the body). This drops body's mutations
    at scope-end, matching the lambda-calculus tradition. Determinism
    and Eval updated to match.

  * HasTypeV.vClos uses a two-part premise (he_dom + he_typed)
    instead of nested ∃ — the kernel rejects nested inductive
    parameters with locally-bound vars. The two parts are equivalent
    to HasTypeEnv via the new HasTypeV.vClos_to_env inversion lemma.

  * Inversion via HasTypeV.vClos_to_env exposes the closure's typing
    context as an existential — preservation's appR case uses this
    to construct the body's HasTypeEnv via extend_letIn.

The cross-language symmetry that emerged:

  TGC preservation  : threads heap-typings, weakens via extension.
  TOC preservation  : threads env directly, no extension needed.

In both, the rule cases collapse into the same three structural
shapes — terminal, IH-chain, contradiction-collapse. The case bodies
differ in HOW state is propagated (heap-typing for TGC, env for TOC)
but the SHAPE of each case is identical. That's the cross-language
abstraction speaking.

Zero sorries / axioms / admits across both projects.
2026-05-10 04:32:52 -06:00

25 lines
684 B
Text

import OctiveLean.Error
import OctiveLean.AST
import OctiveLean.Value
import OctiveLean.Env
import OctiveLean.Lexer
import OctiveLean.Parser
import OctiveLean.Eval
import OctiveLean.Builtins
import OctiveLean.REPL
import OctiveLean.PureEval
import OctiveLean.BigStep
import OctiveLean.ValueEquiv
import OctiveLean.PlotData
import OctiveLean.PlotSVG
import OctiveLean.PlotWidget
import OctiveLean.PlotBuiltins
import OctiveLean.DSL
import OctiveLean.Corpus
import OctiveLean.Core.Syntax
import OctiveLean.Core.Semantics
import OctiveLean.Core.Determinism
import OctiveLean.Core.Eval
import OctiveLean.Core.Types
import OctiveLean.Core.TypeSoundness
import OctiveLean.Core.Preservation