I think there exist one right definition for “Art” and that is as simple as this “Anything that communicates emotion is art”.
Just realized the music for the “Moon”, “Requiem for a Dream”, and “The Fountain” are all written by the same person, and that person is Clint Mansell.
You sir are going to be my new obsession for the week.
Also Black Swan? Cool.
I’m listening to the music of “The Fountain” and I’m going to cry. Why should someone like me listen to these things?
This makes me think of loosing Zea and I just can’t bear the thought of it.
And it makes me cry for Kamwa .

With popovers, one thing the Archive lacked was the Wolfram style hover to copy code. I didn’t implement that, but I added code popovers and so if you hover on a Nota-rendered math, you see the input form Nota that went into making it.
![New nota rendering:
╭ 2 y
In[1]: lim │ ─── dy
x → 1 ╯ x 2
_
Out[1]: 0.749](/photographs/automatic/2026/10/13/fixing-nota.webp)
I had DeepSeek read Nota Language ’s code and they found some problems in it which we fixed together. After that they implemented the missing integration algorithm that I had removed, we fixed so many panics, grammar problems, rendering, and computation problems, then at the end, I asked it to make nota render repeated digit sequences in the numeric outputs with a line on top of them so that it will no longer output things like 0.74999999999....

So I thought now that LLMs can do everything fast, why not having them implement function definitions for Nota ? And so nota now finally has a beautiful function definition! You can do amazing things here! This made me become able to fully transfer the previously badly written math in the Archive to the modern Nota . The next thing is going to have rational numbers, and symbolic computation. Then if I add the rewriting systems it will be just amazing.
The following reference is fully generated by LLMs. This is to have an account of how Nota looked today.
Overview
Nota Language is an arbitrary-precision calculator language that both evaluates expressions and renders them as beautifully typeset Unicode text art. Every value is computed at 256-bit decimal precision, so there is no floating-point rounding error.
The two primary data types are Numeric and Matrix. There is no dedicated boolean type; zero is false and non-zero is true.
Numbers
Numbers can be integers, decimals, or use spaces as visual grouping.
Spaces inside numbers are ignored by the parser, so 1 000 000 is the same as 1000000.
Precision
All arithmetic is performed at 256-bit precision (configurable via BIG_FLOAT_PRECISION). Pi and E are stored with over 100 correct digits.
Infinity
Inf
Infinity
Both render as ∞.
Names and Identifiers
Names start with a letter and can contain letters, digits, spaces, and apostrophes.
x
my variable
earth's radius
Names are normalized when rendered:
| Raw name | Rendered |
|---|---|
A | a |
A' | A |
Alpha | α |
Alpha' | Α |
earth's radius | Earth’s Radius |
Pi | π |
Multi-word names have each word capitalized. Single Latin letters are lowercase by default; appending ' toggles to uppercase. Greek letter names render as their Unicode symbol; appending ' gives the uppercase form.
Operators
Arithmetic
| Operator | Meaning | Example |
|---|---|---|
+ | addition | 3 + 2 |
- | subtraction or unary negation | 5 - 3, -x |
* | multiplication | 4 * 2 |
/ | division | 10 / 3 |
% | modulo | 10 % 3 |
^ | exponentiation | 2 ^ 10 |
! | factorial (postfix) | 5! |
Comparison
| Operator | Meaning |
|---|---|
== | equal |
!= | not equal |
< | less than |
> | greater than |
<= | less or equal |
>= | greater or equal |
Comparison returns 1 for true and 0 for false.
Logical
| Operator | Meaning | ||
|---|---|---|---|
&& | and | ||
| ` | ` | or |
Precedence
From lowest to highest:
| Level | Operators | Associativity | ||
|---|---|---|---|---|
| 1 | ` | , &&` | left | |
| 2 | ==, !=, <, >, <=, >= | left | ||
| 3 | +, - | left | ||
| 4 | / | right | ||
| 5 | *, % | right | ||
| 6 | ^ | right | ||
| 7 | ! | postfix | ||
| 8 | unary - | prefix |
Parentheses override precedence.
Assignment
name = expression
name = start..stop
The range form is used by iteration constructs.
Assignments to a built-in constant or function name are rejected.
Function Calls
FunctionName[arg1, arg2, ...]
Arguments use square brackets and are comma-separated. Every function has a fixed arity range and type signature; wrong counts or types produce a computation error.
Built-in Functions
Arithmetic
Abs
Abs[x]
Absolute value. Works on scalars and element-wise on matrices.
Ceil
Ceil[x]
Round up to the nearest integer. Element-wise on matrices.
Floor
Floor[x]
Round down. Element-wise on matrices.
Sqrt
Sqrt[x]
Square root. Renders as a radical sign.
Error if x < 0.
Root
Root[n, x]
n-th root of x. First argument is the degree, second is the radicand.
Both arguments must be positive.
Log
Log[base, x]
Logarithm of x in the given base. Renders with the base as a subscript.
Constraints: base > 0, base ≠ 1, x > 0.
Limit
Limit[x = a, expression]
Numerical limit of expression as x approaches a. Also aliased as Lim.
The limit point can be Inf or -Inf.
Trigonometry
Sin
Sin[x]
Sine of x in radians.
Cos
Cos[x]
Cosine of x in radians.
Tan
Tan[x]
Tangent of x in radians.
All three work element-wise on matrices.
Statistics
Max
Max[a, b, ...]
Max[matrix]
Largest value among 1–64 numeric arguments, or the maximum element of a single matrix argument.
Min
Min[a, b, ...]
Min[matrix]
Smallest value, same calling conventions as Max.
Mean
Mean[a, b, ...]
Mean[matrix]
Arithmetic mean. Same calling conventions as Max.
Iteration
Sum
Sum[i = start..stop, expression]
Summation of expression as i runs from start to stop inclusive. Renders as Σ with bounds.
The second argument is evaluated in a fresh sub-scope that sees the iterator.
Product
Product[i = start..stop, expression]
Product of expression over the range. Renders as Π with bounds.
Loop
Loop[i = start..stop, r = expression]
Iterative loop. The second argument must be a declaration; the accumulator r is initialized to zero and updated on every iteration.
Int
Int[x = start..stop, expression, step?]
Numerical integration using composite Simpson’s rule. Renders as ∫ with bounds. The optional third argument is either an interval count (≥ 2) or a step size in the domain.
Matrix
Id
Id[n]
n×n identity matrix.
Det
Det[matrix]
Determinant of a square matrix.
Trans
Trans[matrix]
Transpose. Renders with a dagger (†) superscript.
Rows
Rows[matrix]
Number of rows.
Cols
Cols[matrix]
Number of columns.
Row
Row[matrix, index]
Extract a single row as a column vector. Index is 1-based.
Column
Column[matrix, index]
Extract a single column as a row vector. Index is 1-based.
Get
Get[matrix, row, col]
Read a single element. Indices are 1-based. Renders with subscript notation.
Set
Set[row, col, matrix, value]
Return a new matrix with the element at (row, col) replaced. The original is not modified.
Iota
Iota[columns, rows?]
Matrix filled with sequential integers starting from 1. If rows is omitted, produces a single row.
Shuffle
Shuffle[matrix]
Randomly permutes all elements.
REPL
Out
Out[index]
Returns a previous REPL output. Negative indices count from the end.
Out[1]
Out[-1]
Out[-2]
Matrices
Literals
Rows are separated by ;, columns by ,.
Elements can be any expression.
Nested matrices are not supported.
Builders
Comprehension syntax:
[mapping | variable <- source, conditions...]
The conditions are evaluated in the same sub-scope as the mapper, so they can reference the iterator.
Element-wise Operations
Arithmetic operators and most scalar functions apply element-wise:
Matrix–matrix multiplication uses standard linear algebra rules. Matrix division computes the inverse of the divisor first, so the divisor must be square and non-singular.
Conditions
Piecewise expressions use curly brackets with condition–value pairs separated by ; and a default after ?.
{ condition1: expression1 ? default }
{ condition1: expression1 ; condition2: expression2 ? default }
Conditions are evaluated in order; the first match wins.
Rendering uses the standard curly-bracket piecewise notation:
Unit Conversion
Syntax
sourceUnit : destinationUnit [ value ]
Source and destination can be given by name, abbreviation, or synonym.
Length
Reference unit is the meter.
| Unit | Abbreviation | Synonyms |
|---|---|---|
| meter | m | metre, metres, meters |
| kilometer | km | kilometre, kilometres, kilometers |
| centimeter | cm | centimetre, centimetres, centimeters |
| millimeter | mm | millimetre, millimetres, millimeters |
| micrometer | µm | micrometre, micrometres, micrometers |
| nanometer | nm | nanometre, nanometres, nanometers |
| picometer | pm | picometre, picometres, picometers |
| femtometer | fm | femtometre, femtometres, femtometers |
| angstrom | Å | angstrom, angstroms |
| yard | yd | yard, yards |
| foot | ft | foot, feet |
| inch | in | inch, inches |
| mile | mi | mile, miles |
| nautical mile | nmi | nautical mile, nautical miles |
| parsec | pc | parsec, parsecs |
| astronomical unit | asu | astronomical unit, astronomical units |
| light year | ly | light year, light years |
| fathom | ftm | fathom, fathoms |
| furlong | fur | furlong, furlongs |
| light day | ld | light day, light days |
| light second | ls | light second, light seconds |
| light minute | lm | light minute, light minutes |
| light hour | lh | light hour, light hours |
| marathon | mar | marathon, marathons |
| pica | pi | pica, picas |
| TeX point | tex | TeX point, TeX points |
| PostScript point | pt | PostScript point, PostScript points |
Area
Reference unit is the square meter.
| Unit | Abbreviation | Synonyms |
|---|---|---|
| Square Meter | m² | m2, metre^2, metres^2, meters^2, square metre, square metres, square meters, square m |
| Hectare | ha | hectare, hectares |
| Barony | barony | barony, baronies |
| Acre | acre | acres |
Time
Reference unit is the second.
| Unit | Abbreviation | Synonyms |
|---|---|---|
| second | s | sec, secs, seconds |
| minute | min | mins, minutes |
| hour | hour | hr, hrs, hours |
| day | day | days |
| week | wk | weeks |
| year | yr | years |
| century | century | centuries |
| millisecond | ms | milisec, milisecs, miliseconds |
| microsecond | us | microsec, microsecs, microseconds |
| nanosecond | ns | nanosec, nanosecs, nanoseconds |
| atomic unit of time | atu | — |
Computer Storage
Reference unit is the bit.
| Unit | Abbreviation | Notes |
|---|---|---|
| Bit | bit | 1 bit |
| Byte | byte | 8 bits |
| Kilo Bytes | kb | SI, 1000 bytes |
| Mega Bytes | mb | SI |
| Giga Bytes | gb | SI |
| Tera Bytes | tb | SI |
| Peta Bytes | pb | SI |
| Exa Bytes | eb | SI |
| Zetta Bytes | zb | SI |
| Yotta Bytes | yb | SI |
| Brontobyte | bb | ronnabyte, hellabyte |
| Quettabyte | qb | geopbyte |
| Kibibyte | kib | 1024 bytes |
| Mebibyte | mib | 1024 kibibytes |
| Gibibyte | gib | binary |
| Tebibyte | tib | binary |
| Pebibyte | pib | binary |
| Exbibyte | eib | binary |
| Zebibyte | zib | binary |
| Yobibyte | yib | binary |
| Robibyte | rib | binary |
| Qubibyte | qib | binary |
Conversion works through the reference unit, so any two units in the same category are interchangeable. Cross-category conversion is rejected.
Constants
Mathematical
| Name | Rendered | Value |
|---|---|---|
Pi | π | 3.14159265358979323846… |
E | e | 2.71828182845904523536… |
Inf | ∞ | positive infinity |
Infinity | ∞ | alias for Inf |
Special
| Name | Rendered | Value |
|---|---|---|
Nota | nota | 5 |
Zea | zea | 17 |
Pouzea | pouzea | days since 24⟡339 |
Unix | Unix Time | current Unix timestamp |
Last | Last Output | previous REPL result (0 if none) |
Greek Letters
All 24 Greek letters are available as identifiers. Lowercase by default; append ' for uppercase.
| Lowercase | Symbol | Uppercase | Symbol |
|---|---|---|---|
Alpha | α | Alpha' | Α |
Beta | β | Beta' | Β |
Gamma | γ | Gamma' | Γ |
Delta | δ | Delta' | Δ |
Epsilon | ε | Epsilon' | Ε |
Zeta | ζ | Zeta' | Ζ |
Eta | η | Eta' | Η |
Theta | θ | Theta' | Θ |
Iota | ι | Iota' | Ι |
Kappa | κ | Kappa' | Κ |
Lambda | λ | Lambda' | Λ |
Mu | μ | Mu' | Μ |
Nu | ν | Nu' | Ν |
Xi | ξ | Xi' | Ξ |
Omicron | ο | Omicron' | Ο |
Pi | π | Pi' | Π |
Rho | ρ | Rho' | Ρ |
Sigma | σ | Sigma' | Σ |
Tau | τ | Tau' | Τ |
Upsilon | υ | Upsilon' | Υ |
Phi | φ | Phi' | Φ |
Chi | χ | Chi' | Χ |
Psi | ψ | Psi' | Ψ |
Omega | ω | Omega' | Ω |
User-Defined Functions
name[param1, param2, ...] = body
The name cannot shadow a built-in function or constant. Parameters are bound in a fresh sub-scope on every call, so definitions can recurse:
Rendering Rules
Nota Language renders each construct as a specific Unicode layout:
| Construct | Render |
|---|---|
| division | vertical fraction with horizontal bar |
| exponentiation | superscript |
| square root | radical sign with roof |
| n-th root | radical with index |
| summation | Σ with bounds above/below |
| product | Π with bounds |
| loop | loop notation |
| integral | ∫ with bounds |
| limit | lim with subscript |
| matrix | aligned elements in brackets |
| condition | curly-bracket piecewise |
| transpose | dagger superscript |
| log with base | subscript notation |
Grammar Summary
Lexer Tokens
InOperator ::= "<-"
ArrowOperator ::= "->"
RangeOperator ::= ".."
OrOperator ::= "||"
AndOperator ::= "&&"
BarOperator ::= "|"
ComparisonOperators ::= "==" | "!=" | "<" | ">" | ">=" | "<="
AssignOperator ::= "="
FactorialOperator ::= "!"
Number ::= (( " " Digit | Digit )+ ( "." ... )?)?
Name ::= Letter ( ( "'" | " " | WordChar )* WordChar )?
ExponentOperator ::= "^"
MultiplyModuleOperators ::= "*" | "%"
DivisionOperator ::= "/"
MinusOperator ::= "-"
PlusOperator ::= "+"
LeftBracket ::= "["
RightBracket ::= "]"
LeftCurlyBracket ::= "{"
RightCurlyBracket ::= "}"
LeftParenthesis ::= "("
RightParenthesis ::= ")"
QuestionMark ::= "?"
Comma ::= ","
Colon ::= ":"
SemiColon ::= ";"
Top Level
Statement ::= FunctionDefinition
| LimitDeclaration
| Assignment
| AndOrExpression
Expression Precedence
AndOrExpression ::= ComparisonExpression ( ("&&" | "||") AndOrExpression )?
ComparisonExpression ::= AddSubExpression ( ComparisonOp ComparisonExpression )?
AddSubExpression ::= DivisionExpression ( ("+" | "-") AddSubExpression )?
DivisionExpression ::= MulModExpression ( "/" DivisionExpression )?
MulModExpression ::= ExponentExpression ( ("*" | "%") MulModExpression )?
ExponentExpression ::= FactorialExpression ( "^" ExponentExpression )?
FactorialExpression ::= UnaryExpression "!"?
UnaryExpression ::= "-" OperationsEnding | OperationsEnding
OperationsEnding ::= AtomicValue | "(" AndOrExpression ")" | UnaryExpression
Atomic Values
AtomicValue ::= FunctionCall
| MatrixBuilder
| MatrixLiteral
| ConditionExpression
| NumericLiteral
| UnitConversion
| Identifier
Composite Forms
FunctionCall ::= Name "[" Statement ("," Statement)* "]"
MatrixLiteral ::= "[" Row (";" Row)* "]"
Row ::= Statement ("," Statement)*
MatrixBuilder ::= "[" Statement "|" Identifier "<-" Statement ("," Statement)* "]"
ConditionExpression ::= "{" Pair (";" Pair)* "?" AndOrExpression "}"
Pair ::= AndOrExpression ":" AndOrExpression
UnitConversion ::= Identifier ":" Identifier "[" AndOrExpression "]"
Assignment ::= Name "=" AndOrExpression ( (".." | "->") AndOrExpression )?
FunctionDefinition ::= Name "[" Identifier ("," Identifier)* "]" "=" AndOrExpression
LimitDeclaration ::= Name "=" AndOrExpression
Quick Reference
| Feature | Syntax | Example | ||
|---|---|---|---|---|
| number | digits, decimal point, spaces | 1 000.5 | ||
| string? | not supported | — | ||
| variable | name = expr | r = 5 | ||
| range | name = a..b | i = 1..10 | ||
| function | Name[args] | Sqrt[2] | ||
| user function | f[x] = body | f[x] = x^2 | ||
| matrix literal | [a, b; c, d] | [1, 2; 3, 4] | ||
| matrix builder | `[expr | i <- src]` | `[i^2 | i <- [1,2,3]]` |
| condition | {cond: val ? default} | {x>0: 1 ? 0} | ||
| unit conversion | u : v [value] | m : ft [100] | ||
| comment | any non-parseable text | -- anything |


