factorial
std.elementwise.factorial · Level L3n! for each n ≥ 0, as P(n, n) through permutations. 0! = 1. Exact through 18! = 6.4·10¹⁵ < 2⁵³; 21! overflows int64.
n! = P(n, n), 0! = 1
Signature
factorial(n: i64[s]) → i64[s]
Structure
The function as NOVA stores it: one box per input, operation and output, and arrows that carry values. A double border marks another library function this one runs — called once, or by Scan once per element; select it to open that function.
- input
- operation
- constant
- call
- output
Verification
- Signature proven by NOVA’s shape solver, for every size.
- Equal to the reference
math.factorial(n)in exact rational arithmetic, on all 40 test cases. - All 155 int64 results are exact: the error is zero.
- Interpreter and NumPy backend return bit-identical results.
- At float32 too: the 40 test cases rounded to float32, and 40 of them exact, with zero error.
Accuracy in detail
- correctly rounded (the int64 nearest the exact value)
- 100%
- bit-equal to the NumPy formula in int64
- 100%
- largest error, in units in the last place
- 0
Identity
sha256:25cc2b185273685ef93e6247c6f2a6304ed5dd6c905445a50658e7e9aca965ebThe semantic hash of the graph. It changes when the program changes, and never when only its documentation does.
Control handle
- Symbol
- Ω:std.elementwise.factorial · Ω:factorial
- Pins
sha256:16b54f3a9d6a1ec11075e60d3f8f77e66d07d772a7c5ff5a2644e33bb882d909this graph and the 3 it reaches through calls- Evidence
sha256:884975e6dd04e930416bcfe3a16ae4f80007725d7206f1c60b77ab4bb9ea292fthe hash of its verification record- Needs
- no capability: a pure function
Through NOVA’s control layer, the symbol launches this function only while the program still matches what it pins: a change to this graph, or to any graph it reaches, needs a migration first.