thedeemon: (professor)
Dmitry Popov ([personal profile] thedeemon) wrote2021-05-09 01:45 pm

Overly algebraic

Вот список имеет вид
data List a = Nil | Cons a (List a)
т.е.
F(x) = 1 + x * F(x)
а значит
F(x) - x * F(x) = 1
(1-x) * F(x) = 1
F(x) = 1 / (1-x)
и действительно, если мы такую функцию разложим в ряд, то получим
F(x) = 1 + x + x*x + x*x*x + x*x*x*x + ...
т.е. как раз тип описывает списки из х разной длины.

Но вот что любопытно,
F(F(F(x))) = 1 / (1 - (1 / (1 - 1 / (1 - x)))) = ... = x
можете на бумажке проверить или вот тут увидеть.
Это что же значит, [[[a]]] = a? ;)
deniok: (Default)

[personal profile] deniok 2021-05-09 03:57 pm (UTC)(link)
Можно задать более простой вопрос, какой формальный рад соответствует списку списков F(F(x))?
juan_gandhi: (Default)

[personal profile] juan_gandhi 2021-05-09 05:55 pm (UTC)(link)

1/(1-1/(1-x)) = 1/((1-x-1)/(1-x)) = (x-1)/x = 1-1/x

Трудно сообразить, что это вообще значит. Еще можно понять x^n/n!.

deniok: (Default)

[personal profile] deniok 2021-05-09 06:20 pm (UTC)(link)
Это не порождает при обратной сборке рекурсивного уравнения, вот в чем беда: 1 + x * F(F(x)) = x.
migmit: (Default)

[personal profile] migmit 2021-06-17 03:39 pm (UTC)(link)
Хех. Если x=0, то списков [Void] — ровно один, а вот списков [[Void]] — бесконечно много. Поэтому свободный член такого рядо должен быть бесконечным.
deniok: (Default)

[personal profile] deniok 2021-06-26 07:15 am (UTC)(link)
Вот-вот.