하자가 의 다음과 같이 정의 될 -terms :
- ,
- ,
- .
term 의 복잡성을 에서 정상 형태 (Levy의 관점에서 최적의 평가자를 사용하여) 에서 병렬 베타 감소의 수로 정의 하자 .t t x
큰 용어가 복잡성을 낮추는 동일한 함수에 대한 두 개의 일반적인 -terms 예제를 찾고 있습니다.
...
명확성을 위해 편집
내가 묻고있는 것이 분명하지 않은 것처럼 보이므로 확실한 예를 제시하려고 노력할 것입니다. 함수의 "순진한"/ "가장 단순한"정의가 느리고 최적이 아니라는 믿음이 종종 있습니다. 데이터 구조, 수식 등을 추가해야하기 때문에 성능이 향상되면 용어의 복잡성이 증가합니다. fibonacci
다음과 같이 "순진하게"정의 할 수있는 좋은 예가 있습니다.
-- The fixed fibonacci definition
fib_rec fib n =
if (is_zero x)
then 1
else fib (n - 1) + f (n - 2)
-- Using church numbers instead of the λ-combinator to get a normal form
fib n = n fib_rec 0 n
이것은 종종 fib의 "가장 단순한"정의로 간주되며 매우 느립니다 (지수). 우리가 fib
( 교회 수 추가, pred, is_zero에 대한 일반적인 정의) 의 종속성을 확장 하고 정규화하면 다음과 같은 용어를 얻습니다.
fib = (λa.(a(λbc.(c(λdef.f)(λde.d)(λde.(de))
(λde.(b(λfg.(c(λhi.(i(hf)))(λh.g)(λh.h)))
d(b(λfg.(c(λhi.(i(h(λjk.(k(jf))))))(λhi.g)
(λh.h)(λh.h)))de)))))(λbc.c)a))
메모 테이블과 같은 개선으로이 용어가 더 커질 것입니다. 그러나 훨씬 더 작은 다른 용어 가 있습니다 ...
fib = (λa.(a(λb.(b(λcde.(e(λfg.(cf(dfg)))c))))
(λb.(b(λcd.(cd))(λcd.d)))(λbc.b)))
그리고 흥미롭게도 순진한 것보다 점진적으로 뛰어납니다 O(N)
. 내가 아는 모든 정의 중에서 이것은 가장 빠르고 간단 합니다. 정렬과 동일한 효과가 발생합니다. 같은 거품 정렬 및 분류 종종 삽입으로 "나이브"정의는 (긴 20 + 선) 거대한 조항에 확장받을 만 이 존재 작은 정의 :
-- sorts a church list (represented as the fold) of church numbers
sort = λabc.a(λdefg.f(d(λhij.j(λkl.k(λmn.mhi)l)(h(λkl.l)i))
(λhi.i(λjk.bd(jhk))(bd(h(λjk.j(λlm.m)k)c))))e)(λde.e)
(λde.d(λfg.g)e)c
또한 내가 아는 다른 모든 정의보다 무의식적으로 더 빠릅니다. 이 관찰은 일반적인 믿음과는 달리 가장 작은 Kolmogorov 복잡도를 가진 가장 단순한 용어는 일반적으로 더 빠르다고 믿게합니다. 내 질문은 기본적으로 그 반대의 증거가 있지만 공식화에 어려움을 겪을 것입니다.