अनाम पुनरावृत्ति
एक फिक्स्ड-पॉइंट कॉम्बिनेटर एक उच्च-क्रम फ़ंक्शन fix
है जो परिभाषा के अनुसार समतुल्यता को संतुष्ट करता है
forall f. fix f = f (fix f)
fix f
x
निश्चित-बिंदु समीकरण के समाधान का प्रतिनिधित्व करता है
x = f x
एक प्राकृतिक संख्या के तथ्य को सिद्ध किया जा सकता है
fact 0 = 1
fact n = n * fact (n - 1)
fix
सामान्य / μ-पुनरावर्ती कार्यों पर मनमाने ढंग से रचनात्मक प्रमाणों का उपयोग करना , बिना स्व-संदर्भ के प्राप्त किया जा सकता है।
fact n = (fix fact') n
कहाँ पे
fact' rec n = if n == 0
then 1
else n * rec (n - 1)
ऐसा है कि
fact 3
= (fix fact') 3
= fact' (fix fact') 3
= if 3 == 0 then 1 else 3 * (fix fact') (3 - 1)
= 3 * (fix fact') 2
= 3 * fact' (fix fact') 2
= 3 * if 2 == 0 then 1 else 2 * (fix fact') (2 - 1)
= 3 * 2 * (fix fact') 1
= 3 * 2 * fact' (fix fact') 1
= 3 * 2 * if 1 == 0 then 1 else 1 * (fix fact') (1 - 1)
= 3 * 2 * 1 * (fix fact') 0
= 3 * 2 * 1 * fact' (fix fact') 0
= 3 * 2 * 1 * if 0 == 0 then 1 else 0 * (fix fact') (0 - 1)
= 3 * 2 * 1 * 1
= 6
यह औपचारिक प्रमाण है कि
fact 3 = 6
विधिपूर्वक पुनर्लेखन के लिए नियत-बिंदु कॉम्बिनेटर तुल्यता का उपयोग करता है
fix fact' -> fact' (fix fact')
लैम्ब्डा कैलकुलस
Untyped लैम्ब्डा पथरी रीतिवाद एक विषय से मुक्त व्याकरण में होते हैं
E ::= v Variable
| λ v. E Abstraction
| E E Application
बीटा और एटा कटौती नियमों के v
साथ, जहां चर पर पर्वतमाला होती है
(λ x. B) E -> B[x := E] Beta
λ x. E x -> E if x doesn’t occur free in E Eta
बीटा रिडक्शन x
एक्सट्रैक्शन ("फंक्शन") बॉडी में वेरिएबल की सभी फ्री घटनाओं B
को एक्सप्रेशन ("वाद") द्वारा प्रतिस्थापित करता है E
। एटा कमी निरर्थक अमूर्तता को समाप्त करती है। इसे कभी-कभी औपचारिकता से हटा दिया जाता है। एक विडंबनापूर्ण अभिव्यक्ति, जिसमें कोई कमी नियम लागू नहीं होती है, सामान्य या विहित रूप में होती है ।
λ x y. E
के लिए आशुलिपि है
λ x. λ y. E
(अमूर्त बहुआयामी),
E F G
के लिए आशुलिपि है
(E F) G
(आवेदन पत्र-संघात),
λ x. x
तथा
λ y. y
हैं अल्फा बराबर ।
अमूर्त और अनुप्रयोग लैम्ब्डा कैलकुलस के केवल दो "भाषा प्रधान" हैं, लेकिन वे मनमाने ढंग से जटिल डेटा और संचालन की एन्कोडिंग की अनुमति देते हैं ।
चर्च अंक पीनो-स्वयंसिद्ध नैचुरल के समान प्राकृतिक संख्याओं का एक एन्कोडिंग हैं।
0 = λ f x. x No application
1 = λ f x. f x One application
2 = λ f x. f (f x) Twofold
3 = λ f x. f (f (f x)) Threefold
. . .
SUCC = λ n f x. f (n f x) Successor
ADD = λ n m f x. n f (m f x) Addition
MULT = λ n m f x. n (m f) x Multiplication
. . .
एक औपचारिक प्रमाण है कि
1 + 2 = 3
बीटा कमी के पुनर्लेखन नियम का उपयोग करना:
ADD 1 2
= (λ n m f x. n f (m f x)) (λ g y. g y) (λ h z. h (h z))
= (λ m f x. (λ g y. g y) f (m f x)) (λ h z. h (h z))
= (λ m f x. (λ y. f y) (m f x)) (λ h z. h (h z))
= (λ m f x. f (m f x)) (λ h z. h (h z))
= λ f x. f ((λ h z. h (h z)) f x)
= λ f x. f ((λ z. f (f z)) x)
= λ f x. f (f (f x)) Normal form
= 3
combinators
लैम्ब्डा कैलकुलस में, कॉम्बीनेटर अमूर्त होते हैं जिनमें कोई मुक्त चर नहीं होता है। ज्यादातर बस: I
पहचानकर्ता
λ x. x
पहचान समारोह के लिए isomorphic
id x = x
इस तरह के कॉम्बीनेटर एसकेआई सिस्टम की तरह कॉम्बीनेटर गणना के आदिम ऑपरेटर हैं ।
S = λ x y z. x z (y z)
K = λ x y. x
I = λ x. x
बीटा कमी दृढ़ता से सामान्य नहीं है ; नहीं सभी reducible भाव, "redexes", बीटा कमी के तहत सामान्य रूप में परिवर्तित। एक सरल उदाहरण ओमेगा ω
कॉम्बिनेटर का विचलन अनुप्रयोग है
λ x. x x
खुद को:
(λ x. x x) (λ y. y y)
= (λ y. y y) (λ y. y y)
. . .
= _|_ Bottom
बाईं ओर के उप-विभाजनों ("हेड्स") को कम करना प्राथमिकता है। आवेदन आदेश प्रतिस्थापन से पहले तर्कों को सामान्य करता है , सामान्य आदेश नहीं करता है। दो रणनीतियाँ उत्सुक मूल्यांकन, उदा C, और आलसी मूल्यांकन, जैसे हास्केल के अनुरूप हैं।
K (I a) (ω ω)
= (λ k l. k) ((λ i. i) a) ((λ x. x x) (λ y. y y))
उत्सुक आवेदक-आदेश बीटा में कमी के तहत विचलन
= (λ k l. k) a ((λ x. x x) (λ y. y y))
= (λ l. a) ((λ x. x x) (λ y. y y))
= (λ l. a) ((λ y. y y) (λ y. y y))
. . .
= _|_
सख्त शब्दार्थों के बाद से
forall f. f _|_ = _|_
लेकिन आलसी सामान्य-क्रम बीटा कमी के तहत अभिसरण होता है
= (λ l. ((λ i. i) a)) ((λ x. x x) (λ y. y y))
= (λ l. a) ((λ x. x x) (λ y. y y))
= a
यदि किसी अभिव्यक्ति का एक सामान्य रूप है, तो सामान्य-क्रम बीटा कमी उसे मिल जाएगी।
Y
फिक्स्ड-पॉइंट कॉम्बिनेटर की आवश्यक संपत्तिY
λ f. (λ x. f (x x)) (λ x. f (x x))
द्वारा दिया गया है
Y g
= (λ f. (λ x. f (x x)) (λ x. f (x x))) g
= (λ x. g (x x)) (λ x. g (x x)) = Y g
= g ((λ x. g (x x)) (λ x. g (x x))) = g (Y g)
= g (g ((λ x. g (x x)) (λ x. g (x x)))) = g (g (Y g))
. . . . . .
समतुल्यता
Y g = g (Y g)
isomorphic to है
fix f = f (fix f)
लावारिस लैम्ब्डा कैलकुलस सामान्य / μ-पुनरावर्ती कार्यों पर मनमाने ढंग से रचनात्मक साक्ष्यों को सांकेतिक कर सकता है।
FACT = λ n. Y FACT' n
FACT' = λ rec n. if n == 0 then 1 else n * rec (n - 1)
FACT 3
= (λ n. Y FACT' n) 3
= Y FACT' 3
= FACT' (Y FACT') 3
= if 3 == 0 then 1 else 3 * (Y FACT') (3 - 1)
= 3 * (Y FACT') (3 - 1)
= 3 * FACT' (Y FACT') 2
= 3 * if 2 == 0 then 1 else 2 * (Y FACT') (2 - 1)
= 3 * 2 * (Y FACT') 1
= 3 * 2 * FACT' (Y FACT') 1
= 3 * 2 * if 1 == 0 then 1 else 1 * (Y FACT') (1 - 1)
= 3 * 2 * 1 * (Y FACT') 0
= 3 * 2 * 1 * FACT' (Y FACT') 0
= 3 * 2 * 1 * if 0 == 0 then 1 else 0 * (Y FACT') (0 - 1)
= 3 * 2 * 1 * 1
= 6
(गुणा विलम्ब, संगम)
चर्चियन अनपिप्ड लैम्ब्डा कैलकुलस के लिए, इसके अलावा फिक्स्ड-पॉइंट कॉम्बिनेटरों की एक पुनरावृत्ति करने योग्य अनन्तता का अस्तित्व दिखाया गया है Y
।
X = λ f. (λ x. x x) (λ x. f (x x))
Y' = (λ x y. x y x) (λ y x. y (x y x))
Z = λ f. (λ x. f (λ v. x x v)) (λ x. f (λ v. x x v))
Θ = (λ x y. y (x x y)) (λ x y. y (x x y))
. . .
सामान्य-क्रम बीटा में कमी से अपरिचित लाम्बडा कैलकुलस को ट्यूरिंग-पूर्ण रीराइट सिस्टम बना देता है।
हास्केल में, फिक्स्ड-पॉइंट कॉम्बिनेटर को सुरुचिपूर्ण ढंग से लागू किया जा सकता है
fix :: forall t. (t -> t) -> t
fix f = f (fix f)
हास्केल का आलस्य एक सूक्ष्मता को सामान्य करता है, इससे पहले कि सभी उपप्रकारों का मूल्यांकन किया गया हो।
primes :: Integral t => [t]
primes = sieve [2 ..]
where
sieve = fix (\ rec (p : ns) ->
p : rec [n | n <- ns
, n `rem` p /= 0])