metanum 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -172,8 +172,7 @@ new MetaNum(100).linear_sroot(3); // ³ss̅r̅t̅(100)
172
172
  new MetaNum(10).layeradd(3); // add 3 layers of exponentiation
173
173
  new MetaNum(10).layeradd10(3); // 10^^3 (explicit base 10)
174
174
 
175
- // General hyperoperation inverses: if a{b}c = d then
176
- // d.hyper_log(a)(b) = c and d.hyper_root(c)(b) = a
175
+ // General hyperoperation inverses: if a{b}c = d then d.hyper_log(a)(b) = c and d.hyper_root(c)(b) = a
177
176
  MetaNum(14).hyper_log(2)(0); // 2*7 = 14 → 7
178
177
  MetaNum(100000).hyper_log(10)(1); // 10^5 → 5
179
178
  MetaNum(65536).hyper_log(2)(2); // 2↑↑4 → 4 (slog)
@@ -281,36 +280,16 @@ x.expoiter(3); // expo(3) = hwa1
281
280
  // Level ω^(ω*2): ω^(ω*2) = ω^(ω+base)
282
281
  x.trioterate(3); // tria(3) = hwm2
283
282
 
284
- // Level ω^(ω^2): diagonalize ω^(ω*y) (layer 2)
283
+ // Level ω^(ω^2): diagonalize ω^(ω*y)
285
284
  x.trixxate(3); // trix(3) = hwp2
286
285
 
287
- // Level ω^(ω^ω): diagonalize ω^(ω^y) (layer 3)
286
+ // Level ω^(ω^ω): diagonalize ω^(ω^y) (layer 2)
288
287
  x.aperixxate(3); // apix(3) = hwpw
289
288
 
290
- // Level ε₀ = ω↑↑ω: diagonalize ω↑↑y (layer 4)
289
+ // Level ε₀ = ω↑↑ω: diagonalize ω↑↑y (layer 3+)
291
290
  x.epsilonate(3); // epsl(3) = hepsl
292
291
  ```
293
292
 
294
- ### The ω^ω … ε₀ operations follow rule 3 exactly
295
-
296
- Every operation above is evaluated with the unified limit rule
297
- `n{λ}b = n{λ[b]}n` — the final operand is the **base** n, never b. Whenever the
298
- reduced level λ[y] still fits a Cantor-normal-form coefficient row the whole
299
- fundamental-sequence cascade is evaluated:
300
-
301
- ```javascript
302
- MetaNum(3).iterate(5); // 3{ω^ω}5 = 3{ω^5}3 = 3{ω^4*3}3 = …
303
- // … = 3{ω^4*2+ω^3*2+ω^2*2+ω*2+2}3 → top row [1,2,2,2,2,2]
304
- ```
305
-
306
- Levels ≥ ω^ω have no finite coefficient row, so the result is stored as the
307
- compact **layer marker** of λ[y] (see the representation rule above: layer L ⇒
308
- `10{ω^ω^…((L-1) ω^'s)…^(bracket)}10`):
309
-
310
- so the encoded ordinals grow with the operation
311
- (`iter < itmu < cube < expo < tria < trix < apix < epsl`) and with y, and
312
- `epsilonate(MSI)` is exactly the library's ε-tower cap.
313
-
314
293
  ## Inverse Operations
315
294
 
316
295
  Each expansion operation has a corresponding inverse for decrementing ordinal structure:
@@ -352,11 +331,22 @@ x.i_apix(z) // iwpw = inverse of aperixxate
352
331
  x.i_epsl(z) // iepsl = inverse of epsilonate
353
332
  ```
354
333
 
334
+ ### The operations follow n{λ}b = n{λ[b]}n exactly
335
+
336
+ Every operation above is evaluated with the unified limit rule `n{λ}b = n{λ[b]}n` — the final operand is the **base** n, never b. Whenever the reduced level λ[y] still fits a Cantor-normal-form coefficient row the whole fundamental-sequence cascade is evaluated:
337
+
338
+ ```javascript
339
+ MetaNum(3).iterate(5); // 3{ω^ω}5 = 3{ω^5}3 = 3{ω^4*3}3 = …
340
+ // … = 3{ω^4*2+ω^3*2+ω^2*2+ω*2+2}3 → layer=0, top row [1,2,2,2,2,2]
341
+ ```
342
+
343
+ Levels ≥ ω^ω have no finite coefficient row, so the result is stored as the compact **layer marker** of λ[y] (see the representation rule above: layer L ⇒ `10{ω^ω^…(L ω^'s)…^(ω^'s polynomial)}10`):
344
+
345
+ so the encoded ordinals grow with the operation (`iter < itmu < cube < expo < tria < trix < apix < epsl`) and with y, and `epsilonate(MSI)` is exactly the library's ε-tower cap.
346
+
355
347
  ### Fractional hyperoperation levels
356
348
 
357
- Levels interpolate geometrically (README rule (i)); `x{n+f}y = x{n+1}(θf)`
358
- with `θf` continuous between `x{n}y` (f=0) and `x{n+1}y` (f=1). For the
359
- canonical diagonal this is exactly `10{n+f}10 = 10{n+1}(2·5^f)`:
349
+ Levels interpolate geometrically; `x{n+f}y = x{n+1}(θf)` with `θf` continuous between `x{n}y` (f=0) and `x{n+1}y` (f=1). For the canonical diagonal this is exactly `10{n+f}10 = 10{n+1}(2·5^f)`:
360
350
 
361
351
  ```javascript
362
352
  MetaNum(10).arrow(3.5)(10); // 10{3.5}10 = 10{4}(2·5^0.5)
@@ -365,9 +355,7 @@ MetaNum(10).arrow(3.2)(10); // monotone between 10{3}10 and 10{4}10
365
355
 
366
356
  ### Non-integer arguments at ordinal levels
367
357
 
368
- The same continuity applies to the ω-and-above operations. Successor levels
369
- follow `x{α}(m+f) = x{α-1}` applied m times to `x^f`; the ω level matches
370
- `aperiote` exactly, so composition identity holds verbatim:
358
+ The same continuity applies to the ω-and-above operations. Successor levels follow `x{α}(m+f) = x{α-1}` applied m times to `x^f`; the ω level matches `aperiote` exactly, so composition identity holds verbatim:
371
359
 
372
360
  ```javascript
373
361
  MetaNum(10).expande(2.1); // 10{ω+1}2.1 = 10{ω}10{ω}(10^0.1)
@@ -375,21 +363,12 @@ MetaNum(10).expande(2); // 10{ω}10 (continuous at the integers)
375
363
  MetaNum(10).multiexpande(2.1); // (10{ω+1})²(10^0.1)
376
364
  ```
377
365
 
378
- **Limit levels take the fundamental sequence at the full (fractional) `y`**, so
379
- the fraction is never dropped (`h20(10,2.1)` ≠ `h20(10,2)`). The sequence can
380
- then carry fractional coefficients, which resolve against the base x because on
381
- the diagonal ω reads as x:
366
+ **Limit levels** take the fundamental sequence at the full (fractional) `y`. The sequence can then carry fractional coefficients, which resolve against the base x because on the diagonal ω reads as x:
382
367
 
383
- - ω^(k)·(c+f) = ω^(k)·c + ω^(k-1)·(x·f), applied top-down (ω^0.1 = x^0.1), so
384
- only the constant term can still be fractional;
385
- - a leftover fractional constant γ+f is one level of interpolation:
386
- **x{γ+f}x = x{γ+1}(2·(x/2)^f)** — continuous at f=0 because x{γ+1}2 = x{γ}x.
368
+ - ω^(k)·(c+f) = ω^(k)·c + ω^(k-1)·(x·f), applied top-down (ω^0.1 = x^0.1), so only the constant term can still be fractional;
369
+ - a leftover fractional constant γ+f is one level of interpolation: x{γ+f}x = x{γ+1}(2·(x/2)^f) — continuous at f=0 because x{γ+1}2 = x{γ}x.
387
370
 
388
- **Successor levels** keep `x{α}(m+f) = x{α-1}` applied m times to `x^f`, and they
389
- are stored in the same **expanded** form as the integer arguments: the α-1 row
390
- carries the m applications (`ceil(y)-2 = m-1`) and the cascade below it is
391
- generated at the fundamental-sequence index `x^f`, so the value grows with f
392
- inside the interval and converges to the next integer as f → 1:
371
+ **Successor levels** keep `x{α}(m+f) = x{α-1}` applied m times to `x^f`, so the value grows with f inside the interval and converges to the next integer as f → 1:
393
372
 
394
373
  ```javascript
395
374
  MetaNum(10).h21(2.0001); // Ba2.218Ab9 f → 0: cascade bottoming at ω
@@ -397,11 +376,7 @@ MetaNum(10).h21(2.5); // Ba1.772Ad9 the cascade deepens with f
397
376
  MetaNum(10).h21(2.99); // Ba2.447Aj9 → converges to h21(10,3) = Ba1.000Ak9
398
377
  ```
399
378
 
400
- For the ω+1 / ω+2 / ω+3 levels the applications after the first still have an
401
- operand inside MSI, so those are evaluated directly by the rule (that is the
402
- `10{ω}10{ω}(10^0.1)` composition above) — which is also the exact identity.
403
- An iteration count beyond direct evaluation diagonalizes through the engine's
404
- huge-argument convention (y plus one α-level marker row). Then we have:
379
+ For the ω+1 / ω+2 / ω+3 levels the applications after the first still have an operand inside MSI, so those are evaluated directly by the rule (that is the `10{ω}10{ω}(10^0.1)` composition above) — which is also the exact identity. An iteration count beyond direct evaluation diagonalizes through the engine's huge-argument convention (y plus one α-level marker row). Then we have:
405
380
 
406
381
  10{ω\*2}2.1=10{ω+2.1}10=10{ω+3}2\*5^0.1 (because 10{ω+2}10=10{ω+3}2)
407
382
 
@@ -420,8 +395,7 @@ huge-argument convention (y plus one α-level marker row). Then we have:
420
395
  Bowers' Exploding Array Function (BEAF) is supported via ordinal arithmetic for 3+ arguments:
421
396
 
422
397
  ```javascript
423
- // BEAF(a,b,c,d,e,f,...) = a{...+ω^3*(f-1)+ω^2*(e-1)+ω*(d-1)+c}b
424
- // (the constant term keeps its value; ω-and-above coefficients decrement by 1)
398
+ // BEAF(a,b,c,d,e,f,...) = a{...+ω^3*(f-1)+ω^2*(e-1)+ω*(d-1)+c}b (the constant term keeps its value; ω-and-above coefficients decrement by 1)
425
399
 
426
400
  // 3-entry: {a,b,c} = a↑^c b (standard up-arrow notation)
427
401
  MetaNum.BEAF(3, 3, 2); // 3↑↑3 = 7625597484987
@@ -436,20 +410,6 @@ MetaNum.BEAF(10, 2, 1, 1, 2); // 10{ω^2}2
436
410
  MetaNum.BEAF(3, 3, 3, 3, 2); // 3{ω^2+ω*2+3}3
437
411
  MetaNum.BEAF(4, 5, 6, 7, 8, 9); // 4{ω^3*8+ω^2*7+ω*6+6}5
438
412
 
439
- // Ordinal expansion order and truncation (maxRows = 100 by default):
440
- // the expansion evaluates from the largest ordinal down and keeps the largest
441
- // maxRows-1 ordinal rows. Without truncation the expansion is exact, e.g.
442
- // BEAF(3,3,5,5,5) = 3{ω^2*4+ω*4+5}3 enumerates all 50 sub-ordinals.
443
- // When the expansion exceeds the row budget the base defaults to [10] and the
444
- // first kept row's count is incremented by 1 as a truncation marker, e.g.
445
- // BEAF(5,5,1,1,1,2) = 5{ω^3+1}5 → [[10],[4,2,0,1],...,[3,0,0,0,1]].
446
-
447
- // nested BEAF: {a,{b,c,d,e},f,g,h}
448
- // An argument exceeding MSI supremum-collapses (use fundamental sequences rules):
449
- // ω*i+HUGE ≈ ω*(i+1), ω^i*HUGE ≈ ω^(i+1), etc.
450
- // (lower coefficients are swallowed), and the result anchors at that argument's value.
451
- MetaNum.BEAF(4, MetaNum.BEAF(4, 2, 3, 5), 3, 5); // 4{ω*4+3}4{ω*4+3}2
452
-
453
413
  // Parse BEAF string notation
454
414
  MetaNum.fromBeaf("{3,3,3}"); // 3↑↑↑3
455
415
  MetaNum.fromBeaf("{3,3,3,3}"); // 3{ω*2+3}3
@@ -460,66 +420,112 @@ new MetaNum(7625597484987).toBeaf(); // "{7625597484987}"
460
420
  MetaNum.BEAF(3,3,3).toBeaf(); // "{3638334640023.7783}"
461
421
  ```
462
422
 
423
+ ### nested BEAF
424
+
425
+ nested BEAF: {a,{b,c,d,e},f,g,h}
426
+
427
+ An argument exceeding MSI supremum-collapses (use fundamental sequences rules):
428
+
429
+ ω*i+HUGE ≈ ω*(i+1), ω^i*HUGE ≈ ω^(i+1), etc.
430
+
431
+ lower coefficients are swallowed, and the result anchors at that argument's value.
432
+
433
+ ```javascript
434
+ MetaNum.BEAF(4, MetaNum.BEAF(4, 2, 3, 5), 3, 5); // 4{ω*4+3}4{ω*4+3}2
435
+
436
+ ```
437
+
463
438
  ## Hardy Hierarchy
464
439
 
465
- `MetaNum.hardy(n)` evaluates the Hardy hierarchy `H_α(10)` where the ordinal α
466
- is built from the decimal digits of n (base 10, `hardy(1234) = H_{ω³+ω²·2+ω·3+4}(10)`):
440
+ `MetaNum.hardy(n)` evaluates the Hardy hierarchy `H_α(10)` where the ordinal α is built from the decimal digits of n (base 10, `hardy(1234) = H_{ω³+ω²·2+ω·3+4}(10)`):
467
441
 
468
442
  ```javascript
469
443
  MetaNum.hardy(10); // H_ω(10) = 20
444
+ MetaNum.hardy(10.5); // H_ω(10+0.5) = 21
470
445
  MetaNum.hardy(11); // H_{ω+1}(10) = 22
471
446
  MetaNum.hardy(100); // H_{ω²}(10) = 10240
472
- MetaNum.hardy(1234); // H_{ω³+ω²·2+ω·3+4}(10), exact for small levels and
473
- // engine-collapsed (F_j = H^{ω^j}) for deep segments
447
+ MetaNum.hardy(100.5); // H_{ω²}(10+0.5) ≈ 11085
448
+ MetaNum.hardy(1234); // H_{ω³+ω²·2+ω·3+4}(10), exact for small levels and engine-collapsed (F_j = H^{ω^j}) for deep segments
474
449
  ```
475
450
 
476
- Recursion rules: `H_0(n) = n`, `H_{α+1}(n) = H_α(n+1)` (only +1, never
477
- iterated), `H_λ(n) = H_{λ[n]}(n)` with the CNF fundamental sequences.
451
+ Recursion rules:
452
+ -`H_0(n) = n`, `H_{α+1}(n) = H_α(n+1)` (only +1, never iterated),
453
+ -For fractional 0<f<1 we have `H_{α+f}(n) = H_α(n+f)`,
454
+ -`H_λ(n) = H_{λ[n]}(n)` with the CNF fundamental sequences.
478
455
 
479
456
  ### Hardy beyond ω^ω
480
457
 
481
- For n ≥ 1e10 the leading exponent k ≥ 10 is itself converted to a base-10
482
- ordinal, so `hardy(1e11) = H_{ω^(ω+1)}(10)` sits at the `10{ω+1}10` scale
483
- (via `H_{ω^β}(n) = F_β(n)`), not the flat `10{11}10` scale. The value is
484
- evaluated per the definition (from below), so it is strictly BELOW the
485
- matching engine hyper-op:
458
+ For n ≥ 1e10 the leading exponent k ≥ 10 itself converted to a base-10 ordinal, so `hardy(1e11) = H_{ω^(ω+1)}(10)` sits at the `10{ω+1}10` scale (via `H_{ω^β}(n) = F_β(n)`), The value is evaluated per the definition (from below),so it is strictly below the matching engine hyper-op:
486
459
 
487
460
  ```javascript
488
- MetaNum.hardy(1e10); // = H_{ω^ω}(10) = H_{ω^10}(10), array exactly
489
- // [3086.036065328153, 9,9,9,9,9,9,9,9] — below 10{10}10
461
+ MetaNum.hardy(1e10); // = H_{ω^ω}(10) = H_{ω^10}(10), array exactly [3086.036065328153, 9,9,9,9,9,9,9,9] — below 10{10}10
490
462
  MetaNum.hardy(1e11); // = H_{ω^(ω+1)}(10) — below 10{ω+1}10 (expande(10,10))
463
+ MetaNum.hardy("1e10+11"); // H_{ω^ω+ω+1}(10) = H_{ω^ω}(22) → the truncated exact tower [3086.036…, 21×19] — the single row [非整数, 21, 21, …, 21], format "X23"
464
+ MetaNum.hardy("1e10+22"); // H_{ω^ω+ω*2+2}(10) → [3086.036…, 47×19], format "X49"
465
+ ```
466
+
467
+ Once the definitional from-below tower `[c0, (n1−1)×(n1−2)]` (n1 = hardy(rest)) no longer fits `maxCols`, hardy keeps the TRUNCATED cascade `[3086.036…, (n1−1)×(maxCols−1)]` — the tower level n1−1 over the definitional base — instead of the engine value.
468
+
469
+ Fractional inputs collapse into ONE plain row (the fractional hyper-operation result) and hardy stays continuous across the integers:
470
+
471
+ ```javascript
472
+ MetaNum.hardy(1e10) < MetaNum.hardy("1e10+0.5") < MetaNum.hardy(1e10+1); // single rows throughout
473
+ MetaNum.hardy("1e10+0.5"); // [4581.009607833985, 10,10,10,10,10,10,10,10,10]
474
+ MetaNum.hardy("1e10+1.5"); // [10030.57513899962, 11×10]
491
475
  ```
492
476
 
493
- More generally, with n = dk·10^kExp + rest: α = ω^ord(kExp)·dk + ord(rest) is
494
- built recursively (n1 = H_ord(rest)(10), base = H_{ω^n1}(n1) when n1 is a
495
- small finite), and the rows of 10{ω+c}(9+dk) are mirrored onto that base for
496
- kExp ≥ 11. hardy is monotone across this range:
497
- `hardy(9999999999) < hardy(1e10) < hardy(10000000001)`.
477
+ Strings of the form `"AeB+C"` (`"1e10+0.5"`, `"1e16+1e13"`, …) parse to the exact decimal sum, so the digit path never reads 0.
498
478
 
499
- hardy(1e20) = H_{ω^(ω*2)}(10), hardy(1e100)=H_{ω^(ω^2)}(10), hardy(e1e10)=H_{ω^(ω^ω)}(10), and so on.
479
+ More generally, with n = dk·10^kExp + rest: α = ω^ord(kExp)·dk + ord(rest) is built recursively (n1 = H_ord(rest)(10)), and the leading term ω^β·dk (β = ord(kExp)) is **dk applications of H_{ω^β}, one after the other on the running value** — an application is one row `[1, β]`:
480
+
481
+ ```javascript
482
+ MetaNum.hardy(1.1e11); // H_{ω^(ω+1)+ω^ω}(10) = H_{ω^(ω+1)}(H_{ω^ω}(10)) (one row per application)
483
+ MetaNum.hardy(2e11); // H_{ω^(ω+1)·2}(10) = H_{ω^(ω+1)}(H_{ω^(ω+1)}(10))
484
+ MetaNum.hardy(3e11); // → … [8,0,1], [2,1,1] (one more row per application)
485
+ MetaNum.hardy(1e16 + 1e13); // H_{ω^(ω+6)}(H_{ω^(ω+3)}(10)) → … [1,6,1]
486
+ ```
487
+
488
+ So hardy is monotone across this range: `hardy(9999999999) < hardy(1e10) < hardy(10000000001)`, and `hardy(1e11) < hardy(1.1e11) < hardy(2e11)`.
489
+
490
+ ### Hardy of power towers: one layer per 10^ level
491
+
492
+ For a clean tower the ordinal is ω^ord(W) — exactly one ω above hardy(W) — so **every extra 10^ level in the input raises hardy's layer by ONE, and the array rows stay those of the innermost readable expansion**:
493
+
494
+ ```javascript
495
+ MetaNum.hardy("1e308"); // layer 0 — the digit-path cascade, last rows [8,6,0,3], [8,7,0,3]
496
+ MetaNum.hardy("e1e308"); // layer 1 — the SAME array rows
497
+ MetaNum.hardy("ee1e308"); // layer 2 — the SAME array rows, and so on
498
+ MetaNum.hardy("e1e10"); // = layerUp(hardy(1e10)) = [[3086.036…, 9×8]] at layer 1
499
+ MetaNum.hardy("eee10"); // layer 2, hardy(10^^100) → layer 98, hardy(10^^MSI) → layer MSI-2
500
+ ```
501
+
502
+ The layer therefore equals `floor(tower height) − 2`; towers whose bracket is a finite ω-polynomial keep the definitional base rows instead of being folded down by the standard de-layer rule.
503
+
504
+ More generally, with n = dk·10^kExp + rest: α = ω^ord(kExp)·dk + ord(rest) is built recursively (n1 = H_ord(rest)(10)), and the leading term ω^β·dk (β = ord(kExp)) is **dk applications of H_{ω^β}, one after the other on the running value** — an application is one row `[1, β]`:
505
+
506
+ ```javascript
507
+ MetaNum.hardy(1.1e11); // H_{ω^(ω+1)+ω^ω}(10) = H_{ω^(ω+1)}(H_{ω^ω}(10)) → [3086.036065328153, 9×8], [1,1,1] (H_{ω^ω} once, then H_{ω^(ω+1)} once)
508
+ MetaNum.hardy(2e11); // H_{ω^(ω+1)·2}(10) = H_{ω^(ω+1)}(H_{ω^(ω+1)}(10)) → [3086.036065328153, 9×8], [8,0,1] [1,1,1]
509
+ MetaNum.hardy(3e11); // → … [8,0,1], [2,1,1] (one more row per application)
510
+ MetaNum.hardy(1e16 + 1e13); // H_{ω^(ω+6)}(H_{ω^(ω+3)}(10)) → … [8,2,1], [1,6,1]
511
+ ```
512
+
513
+ So hardy is monotone across this range: `hardy(9999999999) < hardy(1e10) < hardy(10000000001)`, and `hardy(1e11) < hardy(1.1e11) < hardy(2e11)`.
500
514
 
501
515
  ### hardy input extensions
502
516
 
517
+ And we have hardy(1e20) = H_{ω^(ω*2)}(10), hardy(1e100)=H_{ω^(ω^2)}(10), hardy("e1e10")=H_{ω^(ω^ω)}(10), hardy("1F10")=H_{ω^^10}(10), and so on.
518
+
519
+ `MetaNum.infinity` (alias of `MetaNum.POSITIVE_INFINITY`) is the value returned once the input passes the ε₀ ceiling: any MetaNum beyond `10^^MSI` — e.g. `G600` (= 10{3}600), `3{9}3`, or a power tower taller than `10^^MSI` — has no Hardy level inside the library, so `hardy` yields Infinity.
520
+
503
521
  ```javascript
504
- MetaNum.hardy(1e21); // >1e20 scientific strings expand to exact
505
- // digits — the reading stays monotone:
506
- // hardy(1e20) < hardy(1e21) < hardy(1e22)
507
- MetaNum.hardy(MetaNum(10).tetr(100));
508
- // power towers shadow to ω^ω^…^ω (k ω's):
509
- // hardy(10^^k) = 10.epsilonate(k)
510
- MetaNum.hardy(MetaNum(10).tetr(Number.MAX_SAFE_INTEGER));
511
- // hardy(10^^MSI) = the MetaNum limit exactly:
512
- // 10{ω^ω^…^ω(MSI ω's)}10 (the ε-tower cap)
522
+ MetaNum.hardy(1e21); // hardy(1e20) < hardy(1e21) < hardy(1e22), >1e20 scientific strings expand to exact digits — the reading stays monotone
523
+ MetaNum.hardy(MetaNum(10).tetr(100)); // power towers shadow to ω^ω^…^ω (k ω's): hardy(10^^k) = H_ω^ω^…^ω (k ω's)(10) — the ordinal is read off the value itself (10^W → ω^ord(W))
524
+ MetaNum.hardy(MetaNum(10).tetr(Number.MAX_SAFE_INTEGER)); // hardy(10^^MSI) = the MetaNum limit: layer MSI-3 (the ε-tower cap)
513
525
  MetaNum.hardy(MetaNum("G600")) // MetaNum-object > 10^^MSI should return Infinity
514
526
  MetaNum.hardy(MetaNum.arrow(3, 9, 3)) // = Infinity (3{9}3 is far above 10^^MSI)
515
527
  ```
516
528
 
517
- `MetaNum.infinity` (alias of `MetaNum.POSITIVE_INFINITY`) is the value returned
518
- once the input passes the ε₀ ceiling: any MetaNum beyond `10^^MSI` — e.g. `G600`
519
- (= 10{3}600), `3{9}3`, or a power tower taller than `10^^MSI` — has no Hardy
520
- level inside the library, so `hardy` yields Infinity. Below the ceiling the
521
- tower height still reads exactly: `hardy(10^^(MSI-1)) = 10.epsilonate(MSI-1)`.
522
-
523
529
  ## Layer & Serialization
524
530
 
525
531
  ```javascript
@@ -538,9 +544,7 @@ new MetaNum(100).toPrecision(3); // "100"
538
544
  new MetaNum(100).toHyperE(); // "100"
539
545
  new MetaNum(100).toStringWithDecimalPlaces(4); // "100.0000"
540
546
  new MetaNum(100).toJSON(); // {sign:1, array:[[100]], layer:0}
541
- new MetaNum(100).format(); // letter notation (format-metanum.js),
542
- // e.g. MetaNum.hardy(4166).format() → "2.397G5"
543
- // optional args: format(precision, small)
547
+ new MetaNum(100).format(); // letter notation (format-metanum.js), e.g. MetaNum.hardy(4166).format() → "2.397G5", optional args: format(precision, small)
544
548
  ```
545
549
 
546
550
  ## Utility Functions
@@ -561,7 +565,7 @@ MetaNum.sumArithmeticSeries(5, 1, 2); // 1+3+5+7+9 = 25
561
565
  MetaNum.affordArithmeticSeries(100, 1, 2, 0);
562
566
 
563
567
  // Configuration
564
- MetaNum.config({ maxRows: 50, maxCols: 50, maxArrow: 1e6, debug: 1 });
568
+ MetaNum.config({ maxRows: 50, maxCols: 50, serializeMode: 1, debug: 1 });
565
569
  ```
566
570
 
567
571
  # Mathematical Background
@@ -593,48 +597,26 @@ where α\[b] denotes the b-th element of the fundamental sequence assign to the
593
597
 
594
598
  ### The application count of each ordinal row
595
599
 
596
- Expanding rules 2-3 all the way down shows that **only the top row depends on
597
- the argument b** — every row below it is produced by decomposing with the base
598
- n as the operand:
599
-
600
- - successor α: n{α}b = n{α-1}^(b-2) (n{α-1}n), so the α-1 row carries **b-2**
601
- applications and every lower row (which comes from n{α-1}n, n{α-2}n, …
602
- whose operand is n) carries **n-2**;
603
- - limit α: rule 3 first rewrites n{α}b = n{α\[b]}n, so the operand is n at
604
- every level and **all** rows carry **n-2**.
600
+ Expanding rules 2-3 all the way down shows that **only the top row depends on the argument b**
601
+ — every row below it is produced by decomposing with the base n as the operand:
602
+ - successor α: n{α}b = n{α-1}^(b-2) (n{α-1}n), so the α-1 row carries **b-2** applications and every lower row (which comes from n{α-1}n, n{α-2}n, … whose operand is n) carries **n-2**;
603
+ - limit α: rule 3 first rewrites n{α}b = n{α\[b]}n, so the operand is n at every level and **all** rows carry **n-2**.
604
+ - when expanded ordinal rows >= maxRows, it is truncated, and array[0] is default [10] and the first ordinal row count add 1.(to get precise value)
605
605
 
606
606
  ```javascript
607
607
  MetaNum(10).h13(20); // 10{ω+3}20 = 10{ω+2}^18 10{ω+1}^8 10{ω}^8 10{ω}10
608
608
  // array → [[1e10,8,8,8,8,8,8,8,8], [8,0,1], [8,1,1], [18,2,1]]
609
- // ω+2 row = 18 = y-2, ω+1 and ω rows = 8 = x-2
610
609
  MetaNum(10).h12(20); // 10{ω+2}20 → [8,0,1] [18,1,1]
611
610
  MetaNum(3).h13(20); // 3{ω+3}20 → [1,0,1] [1,1,1] [18,2,1] (x-2 = 1)
612
- ```
613
-
614
- The same n-2 count is what the finite r0 coefficients carry (10{10}10 → all-8s),
615
- so a row below the top one never moves when b changes.
616
-
617
- The law is uniform for **every** level from ω+1 to ω^4:
618
-
619
- | kind | rows | top row count | lower rows |
620
- |---|---|---|---|
621
- | successor α = β+1 | rows of n{β}n, then one β-row | **b-2** | **n-2** |
622
- | limit α | rows of n{α\[b]}n | **n-2** | **n-2** |
623
-
624
- ```javascript
625
611
  MetaNum(10).h21(20); // 10{ω*2+1}20 = 10{ω*2}^18 (10{ω*2}10)
626
612
  // 10{ω*2}10 = 10{ω+10}10 → the ω..ω+9 cascade, every count x-2 = 8
627
613
  // array → [[…,8,…], [8,0,1] … [8,9,1], [18,0,2]]
628
614
  MetaNum(10).h22(20); // … + [8,0,2] + [18,1,2] (ω*2 row = 8, ω*2+1 row = 18)
629
615
  MetaNum(3).h21(20); // 3{ω*2+1}20 → [1,0,1] [1,1,1] [1,2,1] [18,0,2] (x-2 = 1)
616
+ MetaNum(10).h100(20); //10{ω^2}20=10{ω*20}10=10{ω*19+9}^8 10{ω*19+8}^8 ... 10{ω*18+1}^9 10
617
+ // array → [[10], [9,1,18], [8,2,18] … [8,8,19], [8,9,19]] (maxrows=20)
630
618
  ```
631
619
 
632
- A limit operation stays **expanded** for every argument up to MSI: rule 3 turns
633
- b into a fundamental-sequence index, so 100 < b ≤ MSI still yields the largest
634
- `maxRows-1` fundamental-sequence rows (with the standard truncation marker)
635
- instead of collapsing to a one-row marker — `h20(10,1000)` keeps 19 rows whose
636
- top one is ω+999, and `h20(10,MSI)` keeps rows up to ω+(MSI-1).
637
-
638
620
  ## Examples
639
621
 
640
622
  642663{0}178187=642663×178187=114514191981
@@ -753,9 +735,7 @@ In the previous section we've defined a finite sequence of functions, so we can
753
735
 
754
736
  let 10{1}α = Eα, 10{2}α = Fα, 10{3}α = Gα, ..., 10{22}α = Zα.
755
737
 
756
- we had: Aaα = 10{α}10.
757
-
758
- So Aa has ω hyper-operation level, comparable to f\_ω\_(n) in FGH.
738
+ we had: Aaα = 10{α}10, so Aa has ω hyper-operation level.
759
739
 
760
740
  Then, we'll give a definition for non-integer 10{α}10 and amend the definition of Aa:
761
741
 
@@ -763,7 +743,9 @@ Then, we'll give a definition for non-integer 10{α}10 and amend the definition
763
743
 
764
744
  The seemingly complex expression simply gives us a smooth geometric curve between 2 and 10. This ensures that Aa would be continuous, given the identity 10{β}10 = 10{β+1}2.
765
745
 
766
- For example, Aa10 = 2Aa10 = 10{10}2 = 2Aa10, Aa10.5 = 10{10}2\*5^0.5 = 10{10}4.472 = 4.472Aa10
746
+ Then we can define Binary-Letter-Canonical form of Aa: αAaβ = 10{β+1}α = 10{β}10{β}10...{β}10^frac(α) with int(α)10's
747
+
748
+ For example, 1Aa10=10, 2Aa10 = 10{10}10, 2.5Aa10 = 10{10}2.5 = 10{10}10{10}3.162, 3Aa10 = 10{10}10{10}10, Aa10.5 = 10{11}2\*5^0.5 = 10{11}4.472 = 4.472Aa10, 10Aa10 = 10{10}^9 10 = 10{11}10 = 2Aa11
767
749
 
768
750
  ### Ab,Ac,Ad,...,Az and their Universal Binary-Letter-Canonical Forms
769
751
 
@@ -773,27 +755,25 @@ Abα = AaAa...AaAa(10^frac(α)) with int(α) Aa's = 10{ω+1}α
773
755
 
774
756
  Acα = AbAb...AbAb(10^frac(α)) with int(α) Ab's = 10{ω+2}α
775
757
 
776
- then we have Ad,Ae,...,Az, each with the same definition as Ab and Ac.
777
-
778
- And that's it. So A(the β+1-th lowercase letter)α is 10{ω+β}α, comparable to f\_ω+β\_(n) in the FGH.
758
+ then we have Ad,Ae,...,Az, each with the same definition as Ab and Ac, and that's it. So A(the β+1-th lowercase letter)α is 10{ω+β}α.
779
759
 
780
760
  Again we have Ab0=Ac0=Ad0=...=Az0=1, Ab1=Ac1=Ad1=...=Az1=10, Aa10=Ab2, Ab10=Ac2, ... and Ab,Ac,Ad,...,Az are all continuous. So any number greater than 1 has a unique Ab to Az Canonical Form.
781
761
 
782
- Moreover, since Aa10=Ab2, we can extend our definition of the "Universal Binary-Letter-Canonical Form" up to Az:
762
+ Moreover, since 10{10}10=Aa10=Ab2(2Aa10=1Ab2), we can extend our definition of the Binary-Letter-Canonical form up to Az:
783
763
 
784
- (1) Set a threshold number θ (such as 100, that's 1E2)
764
+ (1) Set a threshold number θ (such as 1000, that's 1E3)
785
765
 
786
- (2) if the number <θ then we write down the scientific notation of this number.
766
+ (2) if the number <θ then we write down the scientific notation (...E...) of this number.
787
767
 
788
- (3) Otherwise, we write Γα = 10^frac(α)Γint(α) for letter combinations (E~Z, Ab~Az) or = 2*5^frac(α)Γint(α) for Aa, and 2≤α<θ. If there is more than one possible choice, we choose the letter combination which comes first in order.
768
+ (3) Otherwise, we write Γα → 10^frac(α)Γint(α) for letter combinations (E~Z, Ab~Az) or → 2*5^frac(α)Γint(α) for Aa, and 2≤α<θ. If there is more than one possible choice, we choose the letter combination which comes first in order.
789
769
 
790
770
  Examples:
791
771
 
792
- 10{20}10 = X10 = Y2 = Aa20, so we write it as 1X10.
772
+ 10{20}10 = 1X10 = 1Y2 = 2Aa20, so we write it as 1.000X10.
793
773
 
794
- 10{30}10 = Aa30, so we write it as 2Aa30.
774
+ 10{30}10 = 2Aa30, so we write it as 2.000Aa30.
795
775
 
796
- 10{ω+1}10 = Ab10 = Ac2, so we write it as 1Ab10.
776
+ 10{ω+1}10 = 1Ab10 = 1Ac2, so we write it as 1.000Ab10.
797
777
 
798
778
  ### Defining from Ba to Bz
799
779
 
@@ -805,9 +785,9 @@ And define Baα in a way similar to Aaα:
805
785
 
806
786
  Baα = 10{ω+α}10 = 10{ω+int(α)+1}2\*5^frac(α)
807
787
 
808
- This gives rise to writing numbers in Ba Canonical form and extend the Universal Binary-Letter-Canonical Form up to Ba10, which have ω\*2 level.
788
+ This gives rise to writing numbers in Ba Canonical form and extend the universal Binary-Letter-Canonical form of Ba: αBaβ = 10{ω+β+1}α = 10{ω+β}10{ω+β}10...{ω+β}10^frac(α) with int(α)10's. Because of 10{ω+β}10 = 10{ω+β+1}2, α in αBaβ has a range of [2,10).
809
789
 
810
- Then we can define Bb,Bc, Bd,...,Bz with recursions in a similar way. Bbα = BaBa...BaBa(10^frac(α)) with int(α) Ba's = 10{ω\*2+1}α, and Bcα = BbBb...BbBb(10^frac(α)) with int(α) Bb's = 10{ω\*2+2}α, etc. So B(the β+1-th lowercase letter)α is 10{ω\*2+β}α.
790
+ Then we can define Bb,Bc,Bd,...,Bz with recursions in a similar way. Bbα = BaBa...BaBa(10^frac(α)) with int(α) Ba's = 10{ω\*2+1}α, and Bcα = BbBb...BbBb(10^frac(α)) with int(α) Bb's = 10{ω\*2+2}α, etc. So B(the β+1-th lowercase letter)α is 10{ω\*2+β}α.
811
791
 
812
792
  ### A Supporting Extended Arrow Operation and Aaa
813
793
 
@@ -833,11 +813,13 @@ And with this new supporting notation we can now to define:
833
813
 
834
814
  Containing a very neat trick that allows us to do the double-diagonalization with a single number: Aaa1.5 = 10{ω+5}10, Aaa2.5 = 10{ω\*2+5}10
835
815
 
836
- At any rate, it isn't too difficult to see that Aaa behaves "nicely" and allows us to speak of Aaa Canonical Forms of any number. And since Aaa1=Aa10, Aaa2=Ba10, ..., Aaa26=Za10, this also enables us to write the Unversal Binary-Letter-Canonical Form of any number below 10{ω^2}10.
816
+ At any rate, it isn't too difficult to see that Aaa behaves "nicely" and allows us to speak of Aaa Canonical Forms of any number. Aaa1=Aa10, Aaa2=Ba10, ..., Aaa26=Za10 take the foundamental sequences.
817
+
818
+ This also enables us to write the unversal Binary-Letter-Canonical form of any number up to Aaa: αAaaβ = 10{ω^2}(log5(α/2)+β). Since 10{ω^2}1=10{ω}10, 10{ω^2}2=10{ω\*2}10, α in αAaaβ has a range of [2,10).
837
819
 
838
820
  ## Symbol and letter notation
839
821
 
840
- ### Arrays with more than two variables, and !Aa
822
+ ### Notations with more than three letters, and !Aa
841
823
 
842
824
  Extended arrow operations can be easily extended, like so:
843
825
 
@@ -861,9 +843,9 @@ Now, all that is left to do is to define !Aa, which has ω^ω level.
861
843
 
862
844
  - !Aaα = 10{ω^int(α)\*frac(α)}10
863
845
 
864
- Then we have !Aa2 = Aaa10, !Aa3 = Aaaa10,... Just like the previous letters, any number can be written as !Aaα. Here, it is actually the binary form of !αAaβ = !Aa(β+logα) which has the most intuitive meaning:
846
+ Then we have !Aa1 = Aa10, !Aa2 = Aaa10, !Aa3 = Aaaa10,... Just like the previous letters, any number can be written as !Aaα. Here, it is actually the binary form of !αAaβ = !Aa(β+logα) which has the most intuitive meaning:
865
847
 
866
- In terms of the extended arrow operation, β tells us ω^β is in the ordinal and the digits of α tell us its coefficient and what residue ordinals are. Actually, !αAaβ has a more ω^ layer compare to αAaβ in ordinal level. For example, !1.2345Aa4 = 10{ω^4+ω^3\*2+ω^2\*3+ω\*4+5}10 and 10{4}10 < 1.2345Aa4 < 10{4}10{4}10
848
+ In terms of the extended arrow operation, β tells us ω^β is in the ordinal and the digits of α tell us its coefficient and what residue ordinals are. Actually, !αAaβ has a more ω^ layer compare to αAaβ in ordinal level. For example, !2.0000Aa4 = 10{ω^4}10 and 2.0000Aa4 = 10{4}10
867
849
 
868
850
  And in terms of ordinals, β gives us the maximum power of ω and the digits of α give us the coefficents of the various powers of ω, these neat relations are also true for β=1 and α≥2.
869
851
 
@@ -901,22 +883,24 @@ Then we can define (the β-th symbol or symbol combination)Aaα = 10{ω^ω^...^(
901
883
 
902
884
  Implementation of dlsdl's letter notation for large number library, currently metanum.js
903
885
 
886
+ the letter notations follow **diagonal letters**: names ending in `a` (`Aa` = ω, `Ba` = ω·2, `Aaa` = ω², …) carry the mantissa `α = 2·5^f ∈ [2,10)`: `10{ω*3}100=10{ω*2+100}10` → `2.000Ca100`, `10{ω^2}100=10{ω*100}10` → `2.000Aaa100`. And mantissa `α∈[1,10)` for the other letters: `10{ω*3+1}100=10{ω*3}^99 10` → `1.000Cb100`
887
+
904
888
  ## format options
905
889
 
906
890
  ```javascript
907
891
  smallNotationUseE // 1. for small value notations, true then use αE-β,false then use number⁻¹
908
892
  smallNotationThreshold // 2. =n then value < 10^-n uses small notation
909
893
  decimalPlaces // 3. for normal notations, =0 is 1,=1 is 1.0,=2 is 1.00 etc.
910
- decimalThreshold // 4. =n then value >= 10^n do not show decimal part
894
+ decimalThreshold // 4. =n then value >= 10^n only show integer part
911
895
  useCommas // 5. whether to show commas in normal numbers (true/false)
912
896
  sciThreshold // 6. =n then value >= 10^n use scientific notation, same for β in αEβ
913
897
  sciSignificantDigits // 7. =n then α has n decimal places in αEβ
914
898
  sciDecimalThreshold // 8. =n then β >= 10^n in αEβ only show integer part of α
915
899
  singleLetterDigits // 9. α's decimal places in αFβ,αGβ...αZβ
916
- repeatLetterThreshold // 10. =n then n repeated single letters use next letter notation, n<2 then use 2
917
- multiLetterDigits // 11. α's decimal places in αAaβ,αAbβ...αAzβ and above
918
- multiLetterRepeatThreshold// 12. =n then n repeated multi letter combinations use next letter notation, n<2 then use 2
919
- multiLetterLimit // 13. =n then length of multi letter combinations does not exceed n, exceed then switch to next notation (length of Aa is 2, Aaa is 3, Aaaa is 4...), n<2 then use 2
900
+ repeatLetterThreshold // 10. =n then n repeated single letters use next letter notation
901
+ multiLetterDigits // 11. α's decimal places in αAaβ,αAbβ...αAaaβ and above
902
+ multiLetterRepeatThreshold// 12. =n then n repeated multi letter combinations use next letter notation
903
+ multiLetterLimit // 13. =n then length of multi letter combinations does not exceed n, exceed then switch to next notation (length of Aa~Zz is 2, Aaa~Zzz is 3, Aaaa~Zzzz is 4...)
920
904
  epsilonSignificantDigits // 14. α's decimal places in αεβ
921
905
  ```
922
906
 
@@ -977,84 +961,18 @@ Implementation of dlsdl's letter notation for large number library, currently me
977
961
  - 10{ω^ω^……^ω}10 ~ 10{ω^ω^…(10^sciThreshold ω^'s)…^ω}10: αεβformat
978
962
  - 10{ω^ω^…(10^sciThreshold ω^'s)…^ω}10 ~ limit of metanum.js: εαEβformat
979
963
 
980
- ### format-metanum rules (v2.0)
964
+ ### format-metanum rules
981
965
 
982
- - **Γ-canonical α/β (bisect law)**: the true α and β of a value v at letter Γ
983
- are recovered by bisecting 10{L}x = v on the engine's own smooth arrow curve
984
- (Γ = E,F,G,... single letters, L = level). α = 10^frac(x), β = floor(x):
966
+ - **Γ-canonical α/β (bisect law)**: the true α and β of a value v at letter Γ are recovered by bisecting 10{L}x = v on the engine's own smooth arrow curve (Γ = E,F,G,... single letters, L = level). α = 10^frac(x), β = floor(x), n operations of level L applied to a Γ^{L+1}-structured value collapse to ONE Γ^{L+1} with arg + n (e.g. F⁴(G(1.3796)) = G(5.3796)):
985
967
  `format(arrow(3,4.1,3))` → `G1.161G897`,
986
968
  `format(arrow(3,4.3,3))` → `1.285H8`,
987
969
  `format(hardy(4166))` → `2.397G5`.
988
- - **+count collapse**: n operations of level L applied to a Γ^{L+1}-structured
989
- value collapse to ONE Γ^{L+1} with arg + n (F⁴(G(1.3796)) = G(5.3796)),
990
- which is why single-letter chains like `G1.161G897` appear.
991
- - **α appears at most once**, attached to the innermost value:
992
- `format(GE12)` → `G1.000E12`; hardy(1120) → `F4.398E13`. Once the innermost β reaches
993
- 10^sciThreshold the letter goes bare and β carries its own sci form.
994
- - **At most 2 finite letter types** may appear in a display's hyper-op chain
995
- (VαEβ → VαFβ → … → VαVβ, never another like VFαEβ)
996
- (AaαEβ → AaαFβ → … → AaαZβ → AaαAaβ, never another like AaFαEβ)
997
- A cascade that would spell more than two letter types spells only its top two levels
998
- and compresses the rest into the second letter's binary form.
999
- "bottom Γ repeation": 3{9}3 → `L2.376K2`, 3{10}3 → `M2.376L2`,
1000
- 4{9}4 → `LLK3.550K3`, 5{9}5 → `LLLKK4.669K4`; repeatLetterThreshold+1 top
1001
- repeats carry to the next letter instead (6{9}6 → `5.760M5`), and levels
1002
- 22→21, 23→22 stay two-letter (`Y2.376X2`, `Z2.376Y2`), level ≥ 23 cascades
1003
- display as the αΓβ polarize diagonal. Diagonal letter combinations
1004
- (multi-letter tokens whose last lowercase letter is `a`: Aa, Ba, Ca, Aaa,
1005
- Aaaa, …) use the **pure dlsdl α=2·5^f ∈[2,10) convention**; the other
1006
- letters (Ab, Bb, …) keep the ordinary α∈[1,10) convention. The polarize
1007
- triple t = log₁₀(bottom)+repeation maps as: t∈[2,10) smooth → α=t,
1008
- β=arrows; discrete integer arguments (10{L}b with 2≤b≤100) all sit at the
1009
- α=2 anchor of the next β; a structured argument climbs the geometric
1010
- smooth-log steps f→1+log10(f) to its diagonal mantissa. Examples:
1011
- 3{24}3 → `2.376Aa23`, 3{100}3 → `2.376Aa99`,
1012
- 10{100}10 … 10{100}100 → `2.000Aa100`, 10{23}10 → `2.000Aa23`,
1013
- 10{100}(10{93}10) → `2.002Aa100`, 10{10000}10 → `2.000Aa10,000`;
1014
- nested ordinals prefix the ω-row letter:
1015
- 3{3{100}3}3 → `Aa2.376Aa99`, 3{10{10000}10}3 → `Aa2.000Aa10,000`.
1016
- Symbol de-layering follows the same convention: !Aa3 = 10{ω³}10 →
1017
- `2.000Aaaa10` (layer 0), @Aa3 = 10{ω^(ω³)}10 → `!2.000Aaaa10`.
1018
- - **multiLetterLimit symbol carry**: a multi-letter combination of k letters
1019
- sits at level ω^(k-1). Once it would be longer than multiLetterLimit the
1020
- notation switches to the next one instead of growing another letter: the
1021
- symbol form !αAaβ, whose β is exactly that ω-exponent and whose α digits are
1022
- the CNF coefficients per the !-form definition
1023
- (!1.2345Aa4 = 10{ω^4+ω^3*2+ω^2*3+ω*4+5}10). With limit 4 the successor of
1024
- Zzzz is `!…Aa4` — never Aaaaa — and a 10-letter level displays as a short
1025
- `!2.222Aa9`: `format(iter(3,5))` → `!2.222Aa4`,
1026
- `format(iter(3,10))` → `!2.222Aa9`.
1027
- **Every symbol-prefixed format carries too** — the symbols stack
1028
- (no-symbol → ! → @ → # …), so a layer-1 value whose diagonal letter would
1029
- exceed the limit reads as one more symbol with the Aa argument taking the
1030
- exponent: `format(apix(3,10))` → `@2.000Aa10`
1031
- (= 10{ω^(ω^10)}10), `format(apix(3,5))` → `@2.000Aa5`; past the symbol
1032
- table the ε form takes over (`format(epsilonate(3,15))` → `1.000Ak10ε14`).
1033
- Diagonal combinations in symbol forms keep the pure dlsdl α = 2·5^f ∈ [2,10)
1034
- mantissa (integer exponents anchor 2.000).
1035
- - **Cascade compression**: the ordinal rows are a COMPOSITION, so the top row
1036
- leads the display and the row below it (which collapses from its repeat count)
1037
- keeps the single α and β — a 20-row cascade keeps its top two levels:
1038
- `format(h10000(3,10))` → `Iccc1.000Iccb10`.
1039
- - **Stacking the same function nests the letter** (issue #14): `n{α}(n{α}y)` is
1040
- one more application of the same level on top of the inner value, so the
1041
- letter appears twice. `poea(10,poea(10,100))` = Ad(Ad(99)) → `Ad1.000Ad99`
1042
- (before: the rows were folded into one letter, `1.000Ad114`), and the same
1043
- holds for ω+1, ω+2, ω*2+1, ω*2+2, ω²+1, ω²+2, ω³+1 —
1044
- `Ab2.398Ab99`, `Ac1.000Ac99`, `Bb1.000Bb99`, `Bc1.000Bc99`,
1045
- `Abb1.000Abb99`, `Aac1.000Aac99`, `Aaab1.000Aaab99`; with an operand above
1046
- MSI, `apea(apea(1e16))` → `BaBa1.000E16`.
1047
- - **A coefficient above 25 has no letter in the grid** (the letters hold
1048
- ω·d+v with 0 ≤ v ≤ 25), so a ω*2 fundamental-sequence row (ω+81, ω+99, …)
1049
- clamps down to the largest letter below it instead of wrapping into a higher,
1050
- wrong letter: `format(apea(10,100))` → `1.000Ba154` (the ω*2 level), not the
1051
- wrapped ω*4+3 letter.
1052
- Formats are identical at maxRows=maxCols=10/20/50/100.
970
+ - **α appears at most once**, attached to the innermost value: `format(GE12)` → `G1.000E12`; hardy(1120) → `F4.398E13`. Once the innermost β reaches 10^sciThreshold the letter goes bare and β carries its own sci form.
971
+ - **At most 2 finite letter types** may appear in a display's hyper-op chain (VαEβ → VEαEβ → VαFβ → … → VαVβ, never another like VFαEβ), (AaαEβ → AaαFβ → … → AaαZβ → AaαAaβ, never another like AaFαEβ). A cascade that would spell more than two letter types spells only its top two levels and compresses the rest into the second letter's binary form. "bottom Γ repeation": 3{9}3 → `L2.376K2`, 3{10}3 → `M2.376L2`, 4{9}4 → `LLK3.550K3`, 5{9}5 → `LLLKK4.669K4`; repeatLetterThreshold+1 top repeats carry to the next letter instead (6{9}6 → `5.760M5`), and levels 22→21, 23→22 stay two-letter (`Y2.376X2`, `Z2.376Y2`), level ≥ 23 cascades display as the αΓβ polarize diagonal.
1053
972
 
1054
973
  ### Precision budget (maxRows / maxCols)
1055
974
 
1056
- Every hyperoperation is stored EXACTLY while it fits the array budget and
1057
- approximately once it does not:
975
+ Every hyperoperation is stored EXACTLY while it fits the array budget and approximately once it does not:
1058
976
 
1059
977
  - exact capacity = maxRows+maxCols−2 finite hyperoperation levels:
1060
978
  `arrow(x,L,z)` holds `r0 = [a0, a1, …, a(maxCols-1)]` (levels 0…maxCols−1)
@@ -1079,6 +997,9 @@ approximately once it does not:
1079
997
 
1080
998
  # Changelog
1081
999
 
1000
+
1001
+ - 2026-9-30 v2.0.2: Fix a lot of bugs e.g. hardy(non integer > 1000) throwing, hardy beyond the 1.8e308 range fails, format of "ω^n\*large numbers" fails, some FORMAT_OPTIONS not take effect.
1002
+ - 2026-9-25 v2.0.1: Fix arrow(x,y,y) not being monotone in y and array except array[0][0] may be non-integer
1082
1003
  - 2026-9-15 v2.0: Add hyper-root & hyper-log, hardy function, fractional hyperoperation inputs, fix BEAF operation level and format
1083
1004
  - 2026-8-18 v1.4 Support hyper operation >MSI and fix format-metanum bugs
1084
1005
  - 2026-7-31 v1.3 Add format-metanum.js, fix basic operations, hyper operations and BEAF bugs