Skip to content

SchroederNumbers ​

The (large) Schröder numbers 1,2,6,22,90,394,…1, 2, 6, 22, 90, 394, … as a lazy indexed collection.

SchroederNumbersS0=1S_0 = 1, Sn=2snS_n = 2 s_n for n≥1n \ge 1 (twice the little Schröder numbers), an infinite indexed collection.

Domain: Collections

Details
  • A lazy indexed collection: Count(SchroederNumbers)=+∞Count(SchroederNumbers) = +\infty, and At(SchroederNumbers,k)At(SchroederNumbers, k) unranks term k−1k-1 by doubling LittleSchroderNumbers rather than re-deriving a recurrence -- At(SchroederNumbers,1)=S0=1At(SchroederNumbers, 1) = S_0 = 1.
  • OEIS A006318, starting exactly at its offset-0 term: 1,2,6,22,90,394,1806,…1, 2, 6, 22, 90, 394, 1806, …; counts monotone lattice paths from (0,0)(0,0) to (n,n)(n,n) using steps (1,0)(1,0), (0,1)(0,1) and (1,1)(1,1) that never rise above the diagonal.
  • Membership goes through Element: Element(22,SchroederNumbers)Element(22, SchroederNumbers) is true, Element(10,SchroederNumbers)Element(10, SchroederNumbers) is false.

Definition

Epsil, as the implementation runs it.

count()

PositiveInfinity

unrank(_r)

Fold(
      Function(sm_a + Binomial(_r + sm_k, _r - sm_k) * (Binomial(2sm_k, sm_k) -
                                                        (0 if 2sm_k < sm_k + 1 else Binomial(2sm_k, sm_k + 1))), sm_a, sm_k),
      0,
      Range(0, _r, 1),
    )

rank(_x)

Apply(
       (sq_at: integer) => sq_at if Fold(
                                          Function(sm_a + Binomial(
                                                                    sq_at + sm_k,
                                                                    sq_at - sm_k,
                                                                  ) * (Binomial(2sm_k, sm_k) -
                                                                      (0 if 2sm_k <
                                                                            sm_k +
                                                                            1 else Binomial(2sm_k, sm_k + 1))), sm_a, sm_k),
                                          0,
                                          Range(0, sq_at, 1),
                                        ) == _x else -1,
       Fold(
             Function(
                       sq_at + 2 ^ sq_b if Fold(
                                                 Function(sm_a + Binomial(sq_at +
                                                                          2 ^
                                                                          sq_b +
                                                                          sm_k, sq_at +
                                                                            2 ^
                                                                            sq_b -
                                                                            sm_k) *
                                                                 (Binomial(
                                                                            2sm_k,
                                                                            sm_k,
                                                                          ) -
                                                                  (0 if 2sm_k <
                                                                        sm_k + 1 else Binomial(2sm_k, sm_k + 1))), sm_a, sm_k),
                                                 0,
                                                 Range(0, sq_at + 2 ^ sq_b, 1),
                                               ) <= _x else sq_at,
                       sq_at,
                       sq_b,
                     ),
             0,
             Range(Floor(Log(Floor(Log(_x, 2)) + 2, 2)) + 1, 0, -1),
           ),
     ) if True else -1

valid(_x)

Apply(
       (sq_at: integer) => Fold(
                                 Function(
                                           sm_a + Binomial(
                                                            sq_at + sm_k,
                                                            sq_at - sm_k,
                                                          ) * (Binomial(
                                                                        2sm_k,
                                                                        sm_k,
                                                                      ) -
                                                              (0 if 2sm_k < sm_k +
                                                                            1 else Binomial(2sm_k, sm_k + 1))),
                                           sm_a,
                                           sm_k,
                                         ),
                                 0,
                                 Range(0, sq_at, 1),
                               ) == _x,
       Fold(
             Function(
                       sq_at + 2 ^ sq_b if Fold(
                                                 Function(sm_a + Binomial(sq_at +
                                                                          2 ^
                                                                          sq_b +
                                                                          sm_k, sq_at +
                                                                            2 ^
                                                                            sq_b -
                                                                            sm_k) *
                                                                 (Binomial(
                                                                            2sm_k,
                                                                            sm_k,
                                                                          ) -
                                                                  (0 if 2sm_k <
                                                                        sm_k + 1 else Binomial(2sm_k, sm_k + 1))), sm_a, sm_k),
                                                 0,
                                                 Range(0, sq_at + 2 ^ sq_b, 1),
                                               ) <= _x else sq_at,
                       sq_at,
                       sq_b,
                     ),
             0,
             Range(Floor(Log(Floor(Log(_x, 2)) + 2, 2)) + 1, 0, -1),
           ),
     ) if True && _x >= 1 else False

Enumeration

Examples

1 more kept as data, checked against the oracles
About
Examples1
CrosswalkOEIS

See also: Count, At, Element, LittleSchroderNumbers, CentralDelannoyNumbers