Я думаю, что ваш вопрос немного смущен. Пожалуйста, позвольте мне уточнить несколько моментов.
Прежде всего, упомянутая теорема традиционно известна как теорема стандартизации и принадлежит Карри и Фейсу (Комбинационная логика I, 1958), обобщенная на eta-редукция Хиндли (Standard and normal reductions), а затем пересмотренная многими другими авторами (см., например, это question).
Во-вторых, внешнее сокращение отличается от вызова по необходимости (вызов по необходимости не является даже стратегией сокращения в традиционном смысле слова).
Приходит к проблеме сложности, то есть ядро вопроса, вызов по необходимости является оптимальным только в отношении слабой редукции. Однако слабая редукция не всегда является наилучшим способом сокращения лямбда-терминов. Хорошо известным примером является следующий термин:
n 2 I I
где n и 2 являются целыми целыми числами, а I является личностью. Я добавляю два я в конце, иначе слабые языки сократят вычисления слишком рано.
Заметим, что термин сводится к
2 (2 (... (2 I))..) I
и (2 I) сводится к I. Так, с сокровенной сокращения вы могли бы сократить срок в линейном времени w.r.t п.
С другой стороны, я предлагаю вам выполнить предыдущие вычисления в Haskell, и вы обнаружите, что время сокращения растет экспоненциально по n.Я оставляю вам понять причины этого явления.
Аналогичное обсуждение было сделано в этом thread.
Зачем идти за асимптотической сложностью? Интуитивно, позывные должны иметь минимальную сложность в целом, в абсолютных числах. –
Я уверен, что вызов по требованию не является оптимальным при любой разумной модели затрат, предполагая, что он понимается как не уменьшающийся внутри тела лямбды (который может применяться многократно). Для меня не совсем очевидно, как сделать случай, когда он асимптотически неоптимален. –
Я думаю, что сложная часть этого доказательства - «среди всех стратегий сокращения». Учитывается ли глобальная memoization как стратегия оценки? Если да, то какая у него сложность? –