GRASSMANN LAB · 3 SPACE DIMENSIONS + TIME

Fields in motion.

Starting renderer
ℝ³ / [−1, 1]³ virtual m343 vectors

Drag to orbit · Pinch / scroll to zoom

t = 0.00 s
Speed ‖F‖ · m/s
01.93.8
Viridis · fixed scale

THE FIELD

F(x,y,z,t) = (−a y, a x, b sin(t + x) cos z)

Time loops from 0 to 4π at 0.6 simulation seconds per real second. Scrubbing pauses animation.

LIVE GRADE-1 COORDINATES

X ≈ (0.50) e₁ + (0.50) e₂ + (0.00) e₃ [virtual m]

Rounded to 0.01 m · residual ‖X − Xrounded‖ = 0.00000 m

F = (−0.500) e₁ + (0.500) e₂ + (0.336) e₃ [m/s]

x = 0.500 m, y = 0.500 m, z = 0 m; a = 1.00 s⁻¹, b = 0.70 m/s, t = 0.000 s

Choose Move probe, then drag the white handle on the z = 0 slice, or focus the scene and use arrow keys. The line from the origin to the white handle is displacement X. The white arrow is velocity F at the unrounded probe position. These are coordinate readouts, not a fit or inference from arbitrary gestures.

Analytic browser simulation

These presets use the same field-core package as the native app: shared expression data, units, Viridis stops, and golden tests. They run in JavaScript here; they do not execute Lean or the Grassmann implementation.

Read the project's proof boundary
Controls & mathematical notes

Mouse dragging orbits the camera. On touch screens, the scene initially allows page scrolling; tap Rotate view for one-finger orbit and pinch zoom, then Scroll page to leave that mode. In Move probe mode, dragging moves the sample point in the fixed z = 0 plane; arrow keys move it in that plane too. Pinch, the mouse wheel, or +/− zooms. With the scene focused, arrow keys orbit and 0 restores the camera. Native sliders also support arrow keys. Reset environment restores this preset's parameters, time, arrow size, and camera, and pauses playback.

Units and model limits. In the analytic presets, coordinates and the draggable grade-1 displacement use configured virtual metres; time uses seconds; F is a velocity in m/s. The parameter labels show rates (s⁻¹) or speeds (m/s). Sine and cosine arguments normalize time by 1 second and position by 1 metre. The scene is not calibrated to real-world space, and no camera measurement is involved. This panel only shows grade-1 quantities; coefficients of other grades may have different units. X is displayed to 0.01 m, with its rounding residual; F is computed at the unrounded probe position and displayed to three decimals. Calculations use floating-point arithmetic, not exact symbolic algebra.

Recorded Grassmann mode. This separate dataset contains actual outputs of Grassmann.TA.sandwich from source commit 48f02068. It has 9 stepped rotor frames and 27 integer sample positions per frame. Its parameter t is dimensionless, not physical time; playback advances one recorded frame per second. No interpolation is used. The probe snaps to the recorded z = 0 grid. The fixture has no physical units: its vectors and norms are shown as unitless algebra values, separately from the analytic velocity models. The exact rational values are preserved in the dataset; rendered arrow coordinates are binary64 approximations.

The analytic arrows sample a 7 × 7 × 7 grid. Zero vectors are hidden. Positions and directions are genuinely three-dimensional; the extra slider is time, not a fourth spatial dimension. Colors use a fixed magnitude range [0, 3.8] across the analytic presets and parameter edits. Recorded rotor values use the same numerical color range but are unitless, so they are not speed comparisons. The Viridis ramp is interpolated from the nine shared color stops. Glyph length is independently capped at 0.38 scene units for readability.

Subtle motion cues. Faded marks travel along compressed instantaneous velocity arrows using the selected field time. They are direction cues, not particles, advection, streamlines, or 3D pathlines. Pause freezes them; scrubbing and reset deterministically reposition them. The XY guide is the exact vortex trajectory projection seeded at (0.72 m, 0), with displayed z = 0 omitting z motion. Its selected-time reset can jump for arbitrary rotation rates. The circle names the e₁₂ orientation only; no general bivector or measured area is inferred. Recorded rotor mode only shows the selected frame’s exported angle on that reference plane, using dimensionless τ.

Reduced-motion preferences start the scene paused and suppress added moving marks. Offscreen or hidden pages stop animating. If WebGL is unavailable, a software 3D projection keeps the same presets and controls usable.

Shared preset specification (JSON) · Shared JS + Swift core (ZIP) · Golden reference cases · Shared JS + Swift motion cues (ZIP) · Cue meaning & units · Recorded Grassmann package (ZIP) · Fixture scope & provenance · Exact rational Clifford example · Renderer: Three.js (MIT license)

ALOK'S RESEARCH SOFTWARE · LEAN 4

Clifford algebra.
Explicit assumptions.

A Lean port of the Grassmann ecosystem, bringing typed geometric algebra, Julia-compatible behavior, and implementation-linked proofs into the same project.

Active construction · Independent derivative of Michael Reed's work

CL(3, 0)8 BASIS BLADES
00 Scalar
1
01 Vectors
e1
e2
e3
02 Bivectors
e12
e13
e23
03 Trivector
e123
e1e2 = −e2e1Order and metric both matter.
Development snapshot

Public Lean baseline: September 25, 2026

01 / DESIGN

Keep the computation.
Make the laws explicit.

The public port models spaces as values and carries dimensions, grades, and parity in types. The public proof documentation separates the algebraic model, implementation blade rules, and tested execution paths.

01

Data & operations

Coefficient values, metric data, storage layouts, and executable algebra operations form the computational layer.

Coeff · TA · Kernels
02

Law assumptions

The specification proves laws over a commutative ring. A computational coefficient interface does not itself establish those laws.

Cl g · CommRing · associativity
03

Implementation links

Blade-rule theorems connect selected families of spaces to the model. The plan interpreter and typed-container execution remain tested, not proved.

blade rules · plans · interpreter
Two complementary layers

Typed elements constrain shape at compile time. The dynamic TA layer tracks Julia-style result kinds at runtime. Generated numerical kernels and their general refinement proofs are separate pieces of work.

02 / EXACT ARITHMETIC

When does a blade
have an inverse?

Take A = c e12 in a diagonal Clifford algebra, where e1² = g1 and e2² = g2. Change the metric or coefficient and see which assumptions matter.

Choose the algebra

Exact rationals

Use integers or fractions, such as −2 or 3/2. Denominators must be nonzero.

RESULTInverse exists
Blade square
e₁₂² = −1
Element square
A² = −9/4
Checked power · n = −1
−2/3 e₁₂

A · A⁻¹ = A⁻¹ · A = 1

The coefficient and both diagonal metric entries are nonzero.

Illustration, not a Lean session. This browser demo uses a small, independent JavaScript model with BigInt rational arithmetic. It does not execute the project's implementation or check proofs in the Lean kernel. For this single-blade example, e12² = −g1g2 and A⁻¹ = −e12/(c g1g2) when the denominator is nonzero.

03 / PROOF BOUNDARY

What is established.
What remains open.

This summary follows the public proof documentation at the September 25, 2026 baseline. It is not a claim that the entire port is verified.

In the public baseline

  • Algebraic specificationThe diagonal-metric model proves associativity, unit laws, graded commutativity of the exterior product, involution laws, and complement identities over a commutative ring.
  • Implementation blade rulesLink theorems connect geometric-product blade rules in plain signature and diagonal spaces of dimension ≤ 64 to the model. Exterior-product links cover flat spaces.
  • Finite kernel checksNamed small spaces have kernel-checked tables and selected plans. Conformal product results for CGA2 and CGA3 rely on checked transport tables.
  • Proof automationThe clifford tactic uses proved coordinate reflection; grind [grassmann] uses the model's algebraic theorems.

Still open or intentionally limited

  • Executable kernel refinementThe plan interpreter and typed containers are tested, not proved. Blade-rule theorems do not establish every optimized execution path.
  • Operation & space coverageSeveral contractions, complements, sandwich operators, tangent and dyadic cases lack general implementation links. The diagonal model does not cover general tensor metrics, except for the metric-independent exterior-product link.
  • Numerical claimsCommutative-ring theorems do not establish floating-point field laws or numerical accuracy of transcendental functions. Julia parity tests and mathematical proofs provide different evidence.
  • Higher-dimensional sandwichesEven-element sandwiches preserve vector grade in dimension ≤ 4 under the documented assumptions. Higher dimensions require stronger conditions, such as versors.
Public evidence & how to read it

PROOFS.md distinguishes general theorems, finite Lean-kernel checks, and compiled tests. Its “Not covered” section records the remaining boundaries. This page reports that documentation; it does not certify a new build or test run.

The public source baseline is 6cedc44 (September 25, 2026). Local-only proof-work reports and unpushed test results are not included. The browser playground and exact-arithmetic example do not execute Lean or check proofs.

04 / DIRECTION

Close the gap between
the theorem and the code.

  1. 01

    Carry blade-rule laws through the plan interpreter to typed-container operations.

  2. 02

    Extend implementation links to the operations and spaces listed as not covered.

  3. 03

    Keep general proofs, finite kernel checks, and numerical tests explicitly distinguished.

SOURCE & LINEAGE

Built on Grassmann.

Michael Reed (chakravala) created the original Julia Grassmann ecosystem. This Lean derivative is Alok's independent project; it is not an upstream release or endorsement. The public repository retains the name Grassmann.jl, but its current baseline contains the Lean port.