"The Rees algebra is an algebra over Z[t^−1]"
Such a small sentence and yet it means very little to me. I understand some constituent pieces, but I don't understand what Z is here other than a 'ring' and I don't really grasp how t^-1 converts this into a generalized family of algebra. It would take me a lot of effort to understand this and use it practically. I find that fascinating because it really is such a small statement that seems perfectly cromulent, but there's a lot packed in there that someone like me is totally missing.
I suppose there may be similar concepts in computer science, but nothing comes to mind that ever stumped me. To be frank, the field has been relatively accessible to me because it hasn't been too challenging. Not sure if that's a personal aptitude thing or it is genuinely simpler.
It's a class with an array of integers in it with .length() == t - 1 and the same methods as Matrix.
In lean4, even without mathlib4, TCP/IP is way more code than a Rees algebra.
Math uses dense notation that is gigaoverloaded, and the disambiguating context was historically the leisure and proximity to have someone explain what the lexemes even mean.
lean4 is proving to be very revealing as an uncorruptible referee on a lot of things, including the relative difficulty of computer science and complex analysis.
-- A Rees algebra over ℤ[t⁻¹] is this.
-- That's it. That's the whole thing.
structure ReesAlgebra where
coeffs : Array Int -- integers, indexed by grade
-- grade k means the coefficient sits at t^k
-- negative indices are the t⁻¹ part
-- The "algebra" part: you can add them
def ReesAlgebra.add (a b : ReesAlgebra) : ReesAlgebra :=
⟨a.coeffs.zipWith b.coeffs (· + ·)⟩
-- And multiply them (convolution, same as polynomial multiplication)
def ReesAlgebra.mul (a b : ReesAlgebra) : ReesAlgebra :=
sorry -- it's Array.foldl over index pairs (i,j) summing into slot (i+j)
-- exactly how you'd multiply polynomials in a job interview
-- That's the entire mathematical content of
-- "The Rees algebra is an algebra over Z[t^{-1}]"
--
-- Compare: a minimal TCP SYN handshake in Lean4 would be
-- ~200 lines before you even get to retransmission.
--
-- The notation is the gate, not the math.
Z is the ring of integers, t is a formal variable allowing us to discuss polynomials whose coefficients are in some ring. That’s what R[t] means: the ring of polynomials of the formal variable t with coefficients in R. Adding in t^-1 lets us include inverted terms like 2t^-3.
An algebra over a ring (call it S so we don’t confuse it with R from the previous paragraph) is a like a vector space over S, with the added structure that you can multiply elements of the algebra together (vector spaces only let you add their elements together). So for example the collection of even integers 2Z is an algebra over the ring of all integers Z. The collection of all polynomials with integer coefficients, Z[t], is another algebra over Z.
This is a great example of how dense language gets in math. There are tons of concepts hiding in the unstated background. Many are quite simple to explain individually, but there are so many of them that an outsider won’t know where to start to tease them apart. There’s a good reason to do it this way though; it would take a very long time to say anything in math without ever increasing levels of information density.