CatalanNumbers
The Catalan numbers as a lazy indexed collection.
Wikipedia
Catalan numberMathWorldCatalanNumberWikidataQ270513nLabCatalan numberDLMF26.5.E1OEISA000108Wolfram LanguageCatalanNumberSageMathsage.combinat.combinat.catalan_number(n)mathlib4catalanCatalanNumbers, an infinite indexed collection.Details
- A lazy indexed collection: , and unranks exactly (bigint arithmetic; already exceeds ) -- .
- OEIS A000108, starting exactly at its offset-0 term: ; counts balanced parenthesizations, binary trees, Dyck paths and more.
- Membership goes through Element: is true, is false.
Definition
Epsil, as the implementation runs it.
count()
PositiveInfinityunrank(_r)
Fold(Function([Apply(
(ct_g: integer) => Apply((ct_m: integer) => Apply(
(ct_q: integer) => Apply(
(ct_u: integer) => ct_q * ct_u,
(4wk_n + 2) /
ct_g,
),
wk_w[1] /
ct_m,
), (wk_n +
2) /
ct_g),
GCD(4wk_n + 2, wk_n + 2),
)], wk_w, wk_n), [1], Range(0, _r - 1, 1))[1]rank(_x)
Fold(
Function(wk_w if wk_n >= 0 && wk_w[1] > _x else [Apply(
(ct_g: integer) => Apply(
(ct_m: integer) => Apply((ct_q: integer) => Apply(
(ct_u: integer) => ct_q * ct_u,
(4wk_n + 2) /
ct_g,
), wk_w[1] / ct_m),
(wk_n + 2) /
ct_g,
),
GCD(
4wk_n + 2,
wk_n + 2,
),
), wk_n if wk_w[2] <
0 && wk_w[1] ==
_x else wk_w[2]], wk_w, wk_n),
[1, -1],
Range(
0,
1 * (Apply(
(fl_r: list<integer>) => fl_r[2],
Fold(Function(
[
(fl_s[1] - fl_s[1] % 2 ^ fl_k) / 2 ^
fl_k,
fl_s[2] + fl_k,
] if fl_s[1] >= 2 ^ fl_k else fl_s,
fl_s,
fl_k,
), [_x + 2, 0], [
8_192,
4_096,
2_048,
1_024,
512,
256,
128,
64,
32,
16,
8,
4,
2,
1,
]),
) + 1) + 12,
1,
),
)[2] if _x >= 0 else -1valid(_x)
Fold(
Function(wk_w if wk_n >= 0 && wk_w[1] > _x else [Apply(
(ct_g: integer) => Apply(
(ct_m: integer) => Apply((ct_q: integer) => Apply(
(ct_u: integer) => ct_q * ct_u,
(4wk_n + 2) /
ct_g,
), wk_w[1] / ct_m),
(wk_n + 2) /
ct_g,
),
GCD(
4wk_n + 2,
wk_n + 2,
),
), wk_n if wk_w[2] <
0 && wk_w[1] ==
_x else wk_w[2]], wk_w, wk_n),
[1, -1],
Range(
0,
1 * (Apply(
(fl_r: list<integer>) => fl_r[2],
Fold(Function(
[
(fl_s[1] - fl_s[1] % 2 ^ fl_k) / 2 ^
fl_k,
fl_s[2] + fl_k,
] if fl_s[1] >= 2 ^ fl_k else fl_s,
fl_s,
fl_k,
), [_x + 2, 0], [
8_192,
4_096,
2_048,
1_024,
512,
256,
128,
64,
32,
16,
8,
4,
2,
1,
]),
) + 1) + 12,
1,
),
)[2] >= 0 if _x >= 0 else FalseEnumeration
Examples
1 more kept as data, checked against the oracles See also: Count, At, Element, MotzkinNumbers, SymmetricGroup