ai-free / wolfram /Wolfram /MatrixExample.lean
SNAPKITTYWEST's picture
October 2026 main drop: mirror from GitHub
f5deffb verified
Raw History Blame Contribute Delete
2.02 kB
import Wolfram.MatrixDot
/-!
# Wolfram.MatrixExample
The preconditions of `dotProgram_correct` are satisfiable, and the theorem delivers the right
numbers on a concrete product:
[[1,2],[3,4]] . [[5,6],[7,8]] = [[19,22],[43,50]]
`A` is stored at address 0, `B` at 4, and `C` is written at 8 (64-bit words).
-/
namespace WordDialect
namespace Wolfram
def tbl (q : Nat) : Int := [1, 2, 3, 4, 5, 6, 7, 8].getD q 0
def exMem : Memory 64 :=
{ cell := fun a => BitVec.ofInt 64 (tbl a.toNat), valid := fun a => decide (a.toNat < 12) }
def exA : Nat → Nat → Int := fun i j => tbl (i * 2 + j)
def exB : Nat → Nat → Int := fun i j => tbl (4 + i * 2 + j)
theorem ex_geom : DotGeom 64 2 2 2 0 4 8 where
hn := by decide
hm := by decide
hk := by decide
hp := by decide
hA := by decide
hB := by decide
hC := by decide
dA := Or.inr (by decide)
dB := Or.inr (by decide)
theorem ex_hA : MatAt exMem 0 2 2 exA := by
intro i j hi hj
rcases (by omega : i = 0 ∨ i = 1) with rfl | rfl <;>
rcases (by omega : j = 0 ∨ j = 1) with rfl | rfl <;> decide
theorem ex_hB : MatAt exMem 4 2 2 exB := by
intro i j hi hj
rcases (by omega : i = 0 ∨ i = 1) with rfl | rfl <;>
rcases (by omega : j = 0 ∨ j = 1) with rfl | rfl <;> decide
theorem ex_hvC : ∀ q, q < 2 * 2 → exMem.valid (BitVec.ofNat 64 (8 + q)) = true := by
intro q hq
rcases (by omega : q = 0 ∨ q = 1 ∨ q = 2 ∨ q = 3) with rfl | rfl | rfl | rfl <;> decide
/-- Running the lowered program leaves `C[1][1] = 50` in memory (`3·6 + 4·8`). -/
theorem ex_entry_11 :
∃ s', WordDialect.Exec ((dotFrag 2 2 2 0 4 8 : IR.Frag 64).emit 0 ++ [.halt])
(State.init exMem) (.halted s') ∧
s'.mem.read? (BitVec.ofNat 64 (8 + 1 * 2 + 1)) = some (BitVec.ofInt 64 50) := by
obtain ⟨s', hex, _, hmat, _, _⟩ := dotProgram_correct ex_geom ex_hA ex_hB ex_hvC
refine ⟨s', hex, ?_⟩
have := hmat 1 1 (by decide) (by decide)
rw [this]
simp [dotSum, exA, exB, tbl]
end Wolfram
end WordDialect