Download forth/Forth/Example.lean from Snapkitty/ai-free: direct link, hf CLI and curl.
- Browser
- Download file 989 Bytes
-
https://huggingface.co/Snapkitty/ai-free/resolve/main/forth/Forth/Example.lean
- Command line
-
hf download hf://Snapkitty/ai-free/forth/Forth/Example.lean
-
curl -L -o Example.lean https://huggingface.co/Snapkitty/ai-free/resolve/main/forth/Forth/Example.lean
989 Bytes
| import Forth.Correct | |
| /-! | |
| # Forth.Example | |
| The specification's own example, `5 DUP +`, through the whole pipeline: Forth reference | |
| semantics, lowering, and machine execution. | |
| -/ | |
| namespace WordDialect | |
| namespace Forth | |
| def fiveDupPlus : Block := .op (.lit 5) (.op .dup (.op .add .nil)) | |
| theorem fiveDupPlus_run (mem : Memory 64) : | |
| Run [] fiveDupPlus ⟨[], mem, []⟩ (.ok ⟨[10#64], mem, []⟩) := | |
| .opOk (st' := ⟨[5#64], mem, []⟩) (by simp [Op.sem]) | |
| (.opOk (st' := ⟨[5#64, 5#64], mem, []⟩) (by simp [Op.sem]) | |
| (.opOk (st' := ⟨[10#64], mem, []⟩) (by simp [Op.sem]) .nil)) | |
| /-- The lowered program halts with exactly `[10]` on the machine's data stack. -/ | |
| theorem fiveDupPlus_machine (mem : Memory 64) : | |
| ∃ s', Exec (compileProgram fiveDupPlus : Prog 64) (State.init mem) (.halted s') ∧ | |
| s'.dstack = [10#64] ∧ s'.mem = mem ∧ s'.astack = [] := by | |
| have := compileProgram_correct (fiveDupPlus_run mem) | |
| simpa using this | |
| end Forth | |
| end WordDialect | |