Add proof of reaching definition analysis
This requires a few pieces: * Make node tags use `Fin n` intead of natural numbers. This makes it possible to build a finite lattice over AST nodes, and also ensure automatic, total indexing from CFG nodes into the AST that created them. For this, use the elaborator to derive the ordering statements etc. where possible. * Adjust the forward framework to enable proofs that don't just state correctness on the environment, but also on an arbitrary additional state accumulated from traversing the trace. * State the reaching definition analysis's correctness in terms of this new framework. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -46,22 +46,20 @@ inductive EvalExpr : Env → Expr → Value → Prop
|
||||
/-- Inference rules for evaluating a basic statement (`Spa.BasicStmt`) in
|
||||
a given environment, potentially changing the environment.
|
||||
Pretty standard big-step evaluation. -/
|
||||
inductive EvalBasicStmt : Env → BasicStmt → Env → Prop
|
||||
inductive EvalBasicStmt : Env → BasicStmt → Env → Type
|
||||
| noop (ρ : Env) : EvalBasicStmt ρ .noop ρ
|
||||
| assign (ρ : Env) (x : String) (e : Expr) (v : Value) :
|
||||
EvalExpr ρ e v → EvalBasicStmt ρ (.assign x e) ((x, v) :: ρ)
|
||||
|
||||
/-- Inference rules for evaluating a sequence of basic statements. -/
|
||||
inductive EvalBasicStmts : Env → List BasicStmt → Env → Prop
|
||||
| nil {ρ : Env} : EvalBasicStmts ρ [] ρ
|
||||
| cons {ρ₁ ρ₂ ρ₃ : Env} {bs : BasicStmt} {bss : List BasicStmt} :
|
||||
EvalBasicStmt ρ₁ bs ρ₂ → EvalBasicStmts ρ₂ bss ρ₃ →
|
||||
EvalBasicStmts ρ₁ (bs :: bss) ρ₃
|
||||
inductive EvalBasicStmtOpt : Env → Option BasicStmt → Env → Type
|
||||
| none {ρ : Env} : EvalBasicStmtOpt ρ Option.none ρ
|
||||
| some {ρ₁ ρ₂ : Env} {bs : BasicStmt} :
|
||||
EvalBasicStmt ρ₁ bs ρ₂ → EvalBasicStmtOpt ρ₁ (Option.some bs) ρ₂
|
||||
|
||||
/-- Inference rules for evaluating statements (`Spa.Stmt`) in a given
|
||||
environment, potentially changing the environment.
|
||||
Pretty standard big-step evaluation. -/
|
||||
inductive EvalStmt : Env → Stmt → Env → Prop
|
||||
inductive EvalStmt : Env → Stmt → Env → Type
|
||||
| basic (ρ₁ ρ₂ : Env) (bs : BasicStmt) :
|
||||
EvalBasicStmt ρ₁ bs ρ₂ → EvalStmt ρ₁ (.basic bs) ρ₂
|
||||
| andThen (ρ₁ ρ₂ ρ₃ : Env) (s₁ s₂ : Stmt) :
|
||||
|
||||
Reference in New Issue
Block a user