कर्र्यींग (Currying)

गणित और कंप्यूटर विज्ञान में, करींग एक फ़ंक्शन (गणित) के मूल्यांकन का अनुवाद करने की तकनीक है जो कई पैरामीटर (कंप्यूटर विज्ञान) को कार्यों के अनुक्रम का मूल्यांकन करने में लेती है, प्रत्येक एक ही तर्क के साथ। उदाहरण के लिए, एक समारोह करी $$f$$ जो तीन तर्क लेता है एक नेस्टेड यूनरी फ़ंक्शन बनाता है $$g$$, ताकि कोड
 * $$\text{let }x=f(a,b,c)$$

देता है $$x$$ कोड के समान मूल्य

\begin{align} \text{let }h = g(a) \\ \text{let }i = h(b) \\ \text{let }x = i(c), \end{align}$$ या क्रम में कहा जाता है,
 * $$\text{let }x = g(a)(b)(c).$$

अधिक गणितीय भाषा में, एक फ़ंक्शन जो दो तर्क लेता है, एक से $$X$$ और एक से $$Y$$, और में आउटपुट उत्पन्न करता है $$Z,$$ करी द्वारा एक ऐसे कार्य में अनुवादित किया जाता है जो एक तर्क लेता है $$X$$ और आउटपुट के रूप में उत्पादन करता है $$Y$$ प्रति $$Z.$$ यह इन दो प्रकार के कार्यों के बीच एक स्वाभाविक एक-से-एक पत्राचार है, जिससे कि सेट (गणित) उनके बीच के कार्यों के साथ एक कार्टेशियन बंद श्रेणी बनाते हैं। दो से अधिक तर्कों वाले फ़ंक्शन की करी को तब प्रेरण द्वारा परिभाषित किया जा सकता है। करी संबंधित है, लेकिन आंशिक अनुप्रयोग के समान नहीं है।

करी करना व्यावहारिक और सैद्धांतिक दोनों स्थितियों में उपयोगी है। कार्यात्मक प्रोग्रामिंग भाषाओं और कई अन्य भाषाओं में, यह स्वचालित रूप से प्रबंधित करने का एक तरीका प्रदान करता है कि फ़ंक्शन और अपवादों के लिए तर्क कैसे पास किए जाते हैं। सैद्धांतिक कंप्यूटर विज्ञान में, यह सरल सैद्धांतिक मॉडल में कई तर्कों के साथ कार्यों का अध्ययन करने का एक तरीका प्रदान करता है जो केवल एक तर्क प्रदान करता है। करी और अनकरींग की सख्त धारणा के लिए सबसे सामान्य सेटिंग बंद मोनोइडल श्रेणी में है, जो क्वांटम यांत्रिकी, कोबोर्डिज्म और स्ट्रिंग थ्योरी सहित कई अन्य संरचनाओं के साथ पत्राचार के लिए करी-हावर्ड पत्राचार के सबूत और कार्यक्रमों के विशाल सामान्यीकरण को रेखांकित करता है।. यह Gottlob Frege द्वारा पेश किया गया था, मूसा शॉनफिंकेल द्वारा विकसित, और आगे हास्केल करी द्वारा विकसित किया गया। Uncurrying द्वैत (गणित) को करी करने के लिए परिवर्तन है, और इसे निष्क्रियता के एक रूप के रूप में देखा जा सकता है। यह एक कार्य (गणित) लेता है $$f$$ जिसका रिटर्न वैल्यू एक और फंक्शन है $$g$$, और एक नया कार्य उत्पन्न करता है $$f'$$ जो पैरामीटर के रूप में दोनों के लिए तर्क लेता है $$f$$ तथा $$g$$, और रिटर्न, के आवेदन के परिणामस्वरूप $$f$$ और बाद में, $$g$$, उन तर्कों के लिए। प्रक्रिया को पुनरावृत्त किया जा सकता है।

प्रेरणा
करींग उन कार्यों के साथ काम करने का एक तरीका प्रदान करता है जो कई तर्क लेते हैं, और उन्हें ढांचे में उपयोग करते हैं जहां कार्य केवल एक तर्क ले सकते हैं। उदाहरण के लिए, कुछ #Definition केवल एक तर्क के साथ फ़ंक्शन (गणित) पर लागू किए जा सकते हैं। व्यावहारिक कार्य अक्सर इससे अधिक तर्क लेते हैं। गोटलॉब फ्रेग ने दिखाया कि यह एकल तर्क मामले के लिए समाधान प्रदान करने के लिए पर्याप्त था, क्योंकि एक फ़ंक्शन को कई तर्कों के साथ एकल-तर्क कार्यों की श्रृंखला में बदलना संभव था। यह परिवर्तन अब करी के रूप में जानी जाने वाली प्रक्रिया है। गणितीय विश्लेषण या कंप्यूटर प्रोग्रामिंग में आम तौर पर सामने आने वाले सभी सामान्य कार्यों को नियंत्रित किया जा सकता है। हालांकि, ऐसी श्रेणियां हैं जिनमें करी बनाना संभव नहीं है; करीने की अनुमति देने वाली सबसे सामान्य श्रेणियां बंद मोनोइडल श्रेणी हैं।

कुछ प्रोग्रामिंग लैंग्वेज लगभग हमेशा कई तर्कों को प्राप्त करने के लिए करीबी कार्यों का उपयोग करती हैं; उल्लेखनीय उदाहरण एमएल ([[प्रोग्रामिंग भाषा)]] और हास्केल (प्रोग्रामिंग भाषा) हैं, जहां दोनों मामलों में सभी कार्यों में बिल्कुल एक तर्क होता है। यह संपत्ति लैम्ब्डा कैलकुस से विरासत में मिली है, जहां बहु-तर्क कार्यों को आम तौर पर घुमावदार रूप में दर्शाया जाता है।

करी संबंधित है, लेकिन आंशिक अनुप्रयोग के समान नहीं है। अभ्यास में, क्लोजर (कंप्यूटर प्रोग्रामिंग) की प्रोग्रामिंग तकनीक का उपयोग आंशिक अनुप्रयोग और एक प्रकार की करींग करने के लिए किया जा सकता है, जो करी फ़ंक्शन के साथ यात्रा करने वाले वातावरण में तर्क छिपाकर करता है।

चित्रण
मान लीजिए हमारे पास एक समारोह है $$f:\mathbb{R}\times\mathbb{R}\to\mathbb{R}$$ जो दो वास्तविक संख्या लेता है ($$\mathbb{R}$$) तर्क और वास्तविक संख्या को आउटपुट करता है, और इसके द्वारा परिभाषित किया जाता है $$f(x,y)=x+y^2$$. करींग इसे एक समारोह में अनुवादित करता है $$h$$ जो एक वास्तविक तर्क लेता है और कार्यों को आउटपुट करता है $$\mathbb{R}$$ प्रति $$\mathbb{R}$$. प्रतीकों में, $$h:\mathbb{R}\to\mathbb{R}^\mathbb{R}$$, कहाँ पे $$\mathbb{R}^\mathbb{R}$$उन सभी कार्यों के सेट को दर्शाता है जो एक वास्तविक तर्क लेते हैं और वास्तविक आउटपुट उत्पन्न करते हैं। प्रत्येक वास्तविक संख्या के लिए $$x$$, फ़ंक्शन को परिभाषित करें $$h_x : \mathbb{R}\to\mathbb{R}$$ द्वारा $$h_x(y)=x+y^2$$, और उसके बाद फ़ंक्शन को परिभाषित करें $$h:\mathbb{R}\to\mathbb{R}^\mathbb{R}$$ द्वारा $$h(x)=h_x$$. तो उदाहरण के लिए, $$h(2)$$ वह कार्य है जो अपना वास्तविक तर्क भेजता है $$y$$ आउटपुट के लिए $$2+y^2$$, या $$h(2)(y)=h_2(y)=2+y^2$$. हम इसे सामान्य तौर पर देखते हैं


 * $$h(x)(y)=x+y^2=f(x,y)$$

ताकि मूल कार्य $$f$$ और इसकी करी $$h$$ बिल्कुल वही जानकारी दें। ऐसी स्थिति में हम लिखते भी हैं


 * $$\text{curry}(f) = h.$$

यह दो से अधिक तर्कों वाले कार्यों के लिए भी काम करता है। यदि $$f$$ तीन तर्कों का एक कार्य था $$f(x,y,z)$$, इसकी करी $$h$$ संपत्ति होगी


 * $$f(x,y,z)=h(x)(y)(z).$$

इतिहास
करी में करी तर्कशास्त्री हास्केल करी का एक संदर्भ है, जिन्होंने इस अवधारणा का व्यापक रूप से उपयोग किया था, लेकिन करी से 6 साल पहले मूसा शॉनफिंकेल का विचार था। वैकल्पिक नाम Schonfinkelisation प्रस्तावित किया गया है। गणितीय संदर्भ में, सिद्धांत को 1893 में गोटलॉब फ्रेज द्वारा काम पर वापस खोजा जा सकता है।

करींग शब्द का जनक स्पष्ट नहीं है। डेविड टर्नर (कंप्यूटर वैज्ञानिक) का कहना है कि यह शब्द क्रिस्टोफर स्ट्रेची द्वारा अपने 1967 के व्याख्यान नोट्स में मौलिक अवधारणाओं को प्रोग्रामिंग भाषाओं में गढ़ा गया था। लेकिन यद्यपि अवधारणा का उल्लेख किया गया है, नोटों में करी शब्द प्रकट नहीं होता है। जॉन सी रेनॉल्ड्स ने 1972 के पेपर में करी को परिभाषित किया, लेकिन इस शब्द को गढ़ने का दावा नहीं किया।

परिभाषा
एक अनौपचारिक परिभाषा के साथ शुरू करके करी को सबसे आसानी से समझा जा सकता है, जिसे बाद में कई अलग-अलग डोमेन में फिट करने के लिए ढाला जा सकता है। सबसे पहले, स्थापित करने के लिए कुछ संकेतन है। अंकन $$X \to Y $$ से सभी फ़ंक्शन (गणित) को दर्शाता है $$X$$ प्रति $$Y$$. यदि $$f$$ ऐसा एक कार्य है, हम लिखते हैं $$f \colon X \to Y $$. होने देना $$X \times Y$$ के तत्वों के क्रमित जोड़े को निरूपित करें $$X$$ तथा $$Y$$ क्रमशः, अर्थात्, कार्टेशियन उत्पाद $$X$$ तथा $$Y$$. यहां, $$X$$ तथा $$Y$$ सेट हो सकते हैं, या वे टाइप हो सकते हैं, या वे अन्य प्रकार के ऑब्जेक्ट हो सकते हैं, जैसा कि नीचे एक्सप्लोर किया गया है।

एक समारोह दिया


 * $$f \colon (X \times Y) \to Z $$,

करी एक नया कार्य बनाता है


 * $$h \colon X \to (Y \to Z) $$.

वह है, $$h $$ से तर्क लेता है $$X$$ और एक फ़ंक्शन देता है जो मैप करता है $$Y$$ प्रति $$Z$$. इसके द्वारा परिभाषित किया गया है


 * $$h(x)(y)=f(x,y)$$

के लिये $$x$$ से $$X$$ तथा $$y$$ से $$Y$$. फिर हम भी लिखते हैं


 * $$\text{curry}(f)=h.$$

अनकरींग रिवर्स ट्रांसफ़ॉर्मेशन है, और इसके सही आसन्न, लागू | फ़ंक्शन के संदर्भ में सबसे आसानी से समझा जाता है $$\operatorname{apply}.$$

सेट सिद्धांत
सेट सिद्धांत में, अंकन $$Y^X$$ सेट से कार्यों के सेट (गणित) को निरूपित करने के लिए उपयोग किया जाता है $$X$$ सेट पर $$Y$$. करी सेट के बीच प्राकृतिक समानता है $$A^{B\times C}$$ से कार्यों की $$B\times C$$ प्रति $$A$$, और सेट $$(A^C)^B$$ से कार्यों की $$B$$ कार्यों के सेट से $$C$$ प्रति $$A$$. प्रतीकों में:


 * $$A^{B\times C}\cong (A^C)^B$$

वास्तव में, यह प्राकृतिक आपत्ति है जो कार्यों के सेट के लिए घातीय संकेतन को सही ठहराती है। जैसा कि करीने के सभी उदाहरणों में होता है, ऊपर दिया गया सूत्र एक सहायक कारक का वर्णन करता है: प्रत्येक निश्चित सेट के लिए $$C$$, काम करनेवाला $$B\mapsto B\times C$$ functor के पास छोड़ दिया जाता है $$A \mapsto A^C$$.

सेट की श्रेणी में, गणितीय वस्तु $$Y^X$$ घातीय वस्तु कहा जाता है।

समारोह रिक्त स्थान
फ़ंक्शन रिक्त स्थान के सिद्धांत में, जैसे कि कार्यात्मक विश्लेषण या होमोटॉपी सिद्धांत में, आमतौर पर टोपोलॉजिकल स्पेस स्थान के बीच निरंतर कार्यों में रुचि होती है। एक लिखता है $$\text{Hom}(X,Y)$$ (मैं एक आदमी के रूप में काम करता हूं) से सभी कार्यों के सेट के लिए $$X$$ प्रति $$Y$$, और अंकन का उपयोग करता है $$Y^X$$ निरंतर कार्यों के सबसेट को निरूपित करने के लिए। यहां, $$\text{curry}$$ आक्षेप है


 * $$\text{curry}:\text{Hom}(X\times Y, Z) \to \text{Hom}(X, \text{Hom}(Y,Z)) ,$$

जबकि uncurrying उलटा नक्शा है। यदि सेट $$Y^X$$ से निरंतर कार्यों की $$X$$ प्रति $$Y$$ कॉम्पैक्ट-ओपन टोपोलॉजी दी जाती है, और यदि स्पेस $$Y$$ तब स्थानीय रूप से कॉम्पैक्ट हौसडॉर्फ है


 * $$\text{curry} : Z^{X\times Y}\to (Z^Y)^X$$

एक होमियोमोर्फिज्म है। ऐसा तब भी होता है जब $$X$$, $$Y$$ तथा $$Y^X$$ कॉम्पैक्ट रूप से उत्पन्न स्थान हैं, जबकि और भी मामले हैं। एक उपयोगी उपप्रमेय यह है कि एक फलन निरंतर होता है यदि और केवल यदि इसका करीड रूप निरंतर हो। एक अन्य महत्वपूर्ण परिणाम यह है कि लागू, जिसे आमतौर पर इस संदर्भ में मूल्यांकन कहा जाता है, निरंतर है (ध्यान दें कि eval कंप्यूटर विज्ञान में एक पूरी तरह से अलग अवधारणा है।) अर्थात,

$$\begin{align} &&\text{eval}:Y^X \times X \to Y \\ && (f,x) \mapsto f(x) \end{align}$$ निरंतर है जब $$Y^X$$ कॉम्पैक्ट-ओपन है और $$Y$$ स्थानीय रूप से कॉम्पैक्ट हौसडॉर्फ। होमोटॉपी की निरंतरता को स्थापित करने के लिए ये दो परिणाम केंद्रीय हैं, अर्थात कब $$X$$ इकाई अंतराल है $$I$$, ताकि $$Z^{I\times Y} \cong (Z^Y)^I$$ या तो दो कार्यों के होमोटॉपी के रूप में सोचा जा सकता है $$Y$$ प्रति $$Z$$, या, समतुल्य, एक एकल (निरंतर) पथ $$Z^Y$$.

बीजगणितीय टोपोलॉजी
बीजगणितीय टोपोलॉजी में, करी एकमैन-हिल्टन द्वैत के उदाहरण के रूप में कार्य करता है, और, जैसे, विभिन्न सेटिंग्स में एक महत्वपूर्ण भूमिका निभाता है। उदाहरण के लिए, लूप स्पेस कम निलंबन के निकट है; इसे आमतौर पर इस रूप में लिखा जाता है
 * $$[\Sigma X,Z] \approxeq [X, \Omega Z]$$

कहाँ पे $$[A,B]$$ नक्शों की होमोटॉपी कक्षाओं का सेट है $$A \rightarrow B$$, तथा $$\Sigma A$$ ए का निलंबन (टोपोलॉजी) है, और $$\Omega A$$ ए का लूप स्पेस है। संक्षेप में, निलंबन $$\Sigma X$$ के कार्टेशियन उत्पाद के रूप में देखा जा सकता है $$X$$ इकाई अंतराल के साथ, अंतराल को लूप में बदलने के लिए एक तुल्यता संबंध मॉड्यूल करें। कढ़ी रूप तब अंतरिक्ष को मैप करता है $$X$$ लूप्स से फ़ंक्शंस के स्थान पर $$Z$$, यानी से $$X$$ में $$\Omega Z$$. फिर $$\text{curry}$$ आसन्न फ़ंक्टर है जो लूप स्पेस के लिए निलंबन को मैप करता है, और अनकरीइंग डुअल है।

मैपिंग कोन (टोपोलॉजी) और मैपिंग फाइबर (cofibration और कंपन) के बीच द्वंद्व करीने के एक रूप के रूप में समझा जा सकता है, जो बदले में लंबे सटीक अनुक्रम और कॉक्सैक्ट पपी अनुक्रमों के द्वंद्व की ओर जाता है।

समरूप बीजगणित में, करी और अनकरींग के बीच संबंध को टेंसर-होम संयोजन के रूप में जाना जाता है। यहाँ, एक दिलचस्प मोड़ उत्पन्न होता है: होम फ़ंक्टर और टेन्सर उत्पाद फ़ंक्टर एक सटीक क्रम में (गणित) नहीं उठा सकते हैं; यह Ext functor और Tor functor की परिभाषा की ओर ले जाता है।

डोमेन सिद्धांत
आदेश सिद्धांत में, अर्थात्, आंशिक रूप से आदेशित सेटों के जाली (क्रम) का सिद्धांत, $$\text{curry}$$ जाली को स्कॉट टोपोलॉजी दिए जाने पर एक सतत कार्य होता है। लैम्ब्डा कैलकुस के लिए शब्दार्थ प्रदान करने के प्रयास में स्कॉट-निरंतर कार्यों की पहली बार जांच की गई थी (जैसा कि सामान्य सेट सिद्धांत ऐसा करने के लिए अपर्याप्त है)। अधिक आम तौर पर, स्कॉट-निरंतर कार्यों का अध्ययन अब डोमेन सिद्धांत में किया जाता है, जिसमें कंप्यूटर एल्गोरिदम के सांकेतिक शब्दार्थ का अध्ययन शामिल है। ध्यान दें कि स्कॉट टोपोलॉजी टोपोलॉजिकल स्पेस की श्रेणी में आने वाली कई सामान्य टोपोलॉजी से काफी अलग है; स्कॉट टोपोलॉजी आमतौर पर अंतिम टोपोलॉजी है, और शांत स्थान नहीं है।

निरंतरता की धारणा होमोटोपी प्रकार के सिद्धांत में प्रकट होती है, जहां, मोटे तौर पर बोलना, दो कंप्यूटर प्रोग्रामों को होमोटोपिक माना जा सकता है, अर्थात समान परिणामों की गणना करें, यदि वे एक से दूसरे में लगातार कोड रीफैक्टरिंग कर सकते हैं।

लैम्ब्डा गणना
सैद्धांतिक कंप्यूटर विज्ञान में, करींग लैम्ब्डा कैलकुस जैसे बहुत ही सरल सैद्धांतिक मॉडल में कई तर्कों के साथ कार्यों का अध्ययन करने का एक तरीका प्रदान करता है, जिसमें कार्य केवल एक तर्क लेते हैं। एक समारोह पर विचार करें $$f(x,y)$$ दो तर्क लेना, और प्रकार रखना $$(X \times Y)\to Z$$, जिसका अर्थ यह समझा जाना चाहिए कि x का प्रकार होना चाहिए $$X$$, y का प्रकार होना चाहिए $$Y$$, और फ़ंक्शन स्वयं प्रकार लौटाता है $$Z$$. F के कढ़ी रूप को परिभाषित किया गया है


 * $$\text{curry}(f) = \lambda x.(\lambda y.(f(x,y)))$$

कहाँ पे $$\lambda$$ लैम्ब्डा कैलकुलस का अमूर्त है। चूंकि करी, इनपुट के रूप में, प्रकार के साथ कार्य करती है $$(X\times Y)\to Z$$, कोई निष्कर्ष निकालता है कि करी का प्रकार ही है


 * $$\text{curry}:((X \times Y)\to Z) \to (X \to (Y \to Z))$$

→ ऑपरेटर को अक्सर सही सहयोगी माना जाता है, इसलिए करी फ़ंक्शन प्रकार $$X \to (Y \to Z)$$ अक्सर के रूप में लिखा जाता है $$X \to Y \to Z$$. इसके विपरीत, समारोह आवेदन को ऑपरेटर सहयोगीता माना जाता है | बाएं-सहयोगी, ताकि $$f(x, y)$$ के बराबर है


 * $$((\text{curry}(f) \; x) \;y) = \text{curry}(f) \; x \;y$$.

यही है, आवेदन के क्रम को स्पष्ट करने के लिए कोष्ठक की आवश्यकता नहीं है।

करीबी कार्यों का उपयोग किसी भी प्रोग्रामिंग भाषा में किया जा सकता है जो क्लोजर (कंप्यूटर विज्ञान) का समर्थन करता है; हालांकि, अनिश्चित कार्यों को आम तौर पर दक्षता कारणों से पसंद किया जाता है, क्योंकि आंशिक अनुप्रयोग के ऊपरी हिस्से और बंद करने के निर्माण को अधिकांश फ़ंक्शन कॉलों के लिए टाला जा सकता है।

प्रकार सिद्धांत
प्रकार के सिद्धांत में, कंप्यूटर विज्ञान में एक प्रकार की प्रणाली के सामान्य विचार को एक विशिष्ट बीजगणित के प्रकारों में औपचारिक रूप दिया जाता है। उदाहरण के लिए, लिखते समय $$f \colon X \to Y $$, आशय यह है $$X$$ तथा $$Y$$ टाइप सिस्टम हैं, जबकि एरो $$\to$$ एक प्रकार कंस्ट्रक्टर टाइप करें है, विशेष रूप से, फ़ंक्शन प्रकार या तीर प्रकार। इसी तरह, कार्टेशियन उत्पाद $$X \times Y$$ प्रकार का निर्माण उत्पाद प्रकार कन्स्ट्रक्टर द्वारा किया जाता है $$\times$$.

प्रकार-सैद्धांतिक दृष्टिकोण प्रोग्रामिंग भाषाओं जैसे एमएल (प्रोग्रामिंग भाषा) और उससे प्राप्त और प्रेरित भाषाओं में व्यक्त किया गया है: सीएएमएल, हास्केल (प्रोग्रामिंग भाषा) और एफ शार्प (प्रोग्रामिंग भाषा) | एफ #।

प्रकार-सैद्धांतिक दृष्टिकोण श्रेणी सिद्धांत की भाषा के लिए एक स्वाभाविक पूरक प्रदान करता है, जैसा कि नीचे चर्चा की गई है। ऐसा इसलिए है क्योंकि श्रेणियों, और विशेष रूप से, मोनोइडल श्रेणियों में एक आंतरिक भाषा होती है, जिसमें साधारण रूप से टाइप की गई लैम्ब्डा कैलकुलस ऐसी भाषा का सबसे प्रमुख उदाहरण है। यह इस संदर्भ में महत्वपूर्ण है, क्योंकि इसे एक प्रकार के कंस्ट्रक्टर, एरो टाइप से बनाया जा सकता है। इसके बाद करी भाषा को एक प्राकृतिक उत्पाद प्रकार प्रदान करती है। श्रेणियों और प्रकारों में वस्तुओं के बीच पत्राचार तब प्रोग्रामिंग भाषाओं को लॉजिक्स (करी-हावर्ड पत्राचार के माध्यम से) और अन्य प्रकार की गणितीय प्रणालियों के रूप में फिर से व्याख्या करने की अनुमति देता है, जैसा कि आगे की खोज की गई है।

तर्क
करी-हावर्ड पत्राचार के तहत, करी और अनकरींग का अस्तित्व तार्किक प्रमेय के बराबर है $$(A \land B) \to C \Leftrightarrow A \to (B \to C)$$, क्योंकि टुपल्स (उत्पाद प्रकार) तर्क में संयोजन से मेल खाता है, और फ़ंक्शन प्रकार निहितार्थ से मेल खाता है।

घातीय वस्तु $$Q^P$$ Heyting algebras की श्रेणी में सामान्य रूप से सामग्री सशर्त के रूप में लिखा जाता है $$P\to Q$$. वितरण हेटिंग बीजगणित बूलियन बीजगणित हैं, और घातीय वस्तु का स्पष्ट रूप है $$\neg P \lor Q$$, इस प्रकार यह स्पष्ट करता है कि घातीय वस्तु वास्तव में भौतिक निहितार्थ (अनुमान का नियम) है।

श्रेणी सिद्धांत
करीइंग और अनकरींग की उपरोक्त धारणाएं श्रेणी सिद्धांत में उनके सबसे सामान्य, अमूर्त कथन को खोजती हैं। Currying एक घातीय वस्तु की एक सार्वभौमिक संपत्ति है, और कार्टेशियन बंद श्रेणी में एक संयोजन (श्रेणी सिद्धांत) को जन्म देती है। अर्थात्, एक उत्पाद (श्रेणी सिद्धांत) से रूपवाद (श्रेणी सिद्धांत) के बीच एक प्राकृतिक परिवर्तन समरूपता है। $$f \colon (X \times Y) \to Z $$ और एक घातीय वस्तु के लिए morphisms $$g \colon X \to Z^Y $$.

यह बंद मोनोइडल श्रेणी में एक व्यापक परिणाम के लिए सामान्यीकरण करता है: करीइंग यह कथन है कि मोनोइडल श्रेणी और आंतरिक होम आसन्न फ़ैक्टर हैं; यानी हर वस्तु के लिए $$B$$ एक प्राकृतिक परिवर्तन है:


 * $$ \mathrm{Hom}(A\otimes B, C) \cong \mathrm{Hom}(A, B\Rightarrow C) .$$

यहाँ, होम श्रेणी में सभी morphisms के (बाहरी) होम-फ़ंक्टर को दर्शाता है, जबकि $$B\Rightarrow C$$ बंद monoidal श्रेणी में आंतरिक होम functor को दर्शाता है। समुच्चयों की श्रेणी के लिए, दोनों समान हैं। जब उत्पाद कार्तीय उत्पाद है, तो आंतरिक होम $$B\Rightarrow C$$ घातीय वस्तु बन जाती है $$C^B$$.

करी दो तरह से टूट सकती है। एक यह है कि यदि कोई श्रेणी बंद श्रेणी नहीं है, और इस प्रकार एक आंतरिक होम फ़ैक्टर की कमी है (संभवतः क्योंकि इस तरह के फ़ैक्टर के लिए एक से अधिक विकल्प हैं)। दूसरा तरीका यह है कि यदि यह मोनोइडल श्रेणी नहीं है, और इस प्रकार एक उत्पाद की कमी है (अर्थात, वस्तुओं के जोड़े को लिखने का एक तरीका नहीं है)। जिन श्रेणियों में उत्पाद और आंतरिक होम दोनों होते हैं, वे बिल्कुल बंद मोनोइडल श्रेणियां हैं।

शास्त्रीय तर्क की चर्चा के लिए कार्टेशियन बंद श्रेणियों की सेटिंग पर्याप्त है; बंद मोनोइडल श्रेणियों की अधिक सामान्य सेटिंग क्वांटम संगणना के लिए उपयुक्त है। इन दोनों के बीच का अंतर यह है कि कार्टेशियन श्रेणियों के लिए उत्पाद (गणित) (जैसे सेट की श्रेणी, पूर्ण आंशिक ऑर्डर या हेटिंग बीजगणित) केवल कार्टेशियन उत्पाद है; इसकी व्याख्या वस्तुओं की एक क्रमबद्ध जोड़ी (या एक सूची) के रूप में की जाती है। बस टाइप किया गया लैम्ब्डा कैलकुस कार्टेशियन बंद श्रेणियों की आंतरिक भाषा है; और यह इस कारण से है कि जोड़े और सूचियाँ LISP, योजना (प्रोग्रामिंग भाषा) और कई कार्यात्मक प्रोग्रामिंग भाषाओं के प्रकार सिद्धांत में प्राथमिक प्रकार की प्रणाली हैं।

इसके विपरीत, मोनोइडल श्रेणी के लिए उत्पाद (जैसे हिल्बर्ट अंतरिक्ष और कार्यात्मक विश्लेषण के वेक्टर रिक्त स्थान) टेंसर उत्पाद है। ऐसी श्रेणियों की आंतरिक भाषा रेखीय तर्क है, जो क्वांटम तर्क का एक रूप है; इसी प्रकार की प्रणाली रैखिक प्रकार की प्रणाली है। ऐसी श्रेणियां उलझी हुई क्वांटम अवस्थाओं का वर्णन करने के लिए उपयुक्त हैं, और, अधिक आम तौर पर, करी-हावर्ड पत्राचार को क्वांटम यांत्रिकी, बीजगणितीय टोपोलॉजी में coboardism और स्ट्रिंग सिद्धांत के लिए एक विशाल सामान्यीकरण की अनुमति देती हैं। रेखीय प्रकार प्रणाली, और रेखीय तर्क तुल्यकालन आदिमों का वर्णन करने के लिए उपयोगी होते हैं, जैसे पारस्परिक बहिष्करण ताले, और वेंडिंग मशीनों का संचालन।

आंशिक फ़ंक्शन एप्लिकेशन
के साथ तुलना करें

करी और आंशिक कार्य अनुप्रयोग अक्सर मिश्रित होते हैं। दोनों के बीच महत्वपूर्ण अंतरों में से एक यह है कि आंशिक रूप से लागू किए गए फ़ंक्शन के लिए कॉल तुरंत परिणाम देता है, करींग श्रृंखला के नीचे कोई अन्य फ़ंक्शन नहीं; इस भेद को उन कार्यों के लिए स्पष्ट रूप से चित्रित किया जा सकता है जिनकी संख्या दो से अधिक है। प्रकार का एक कार्य दिया $$f \colon (X \times Y \times Z) \to N $$, करी पैदा करता है $$\text{curry}(f) \colon X \to (Y \to (Z \to N)) $$. यही है, जबकि पहले फ़ंक्शन का मूल्यांकन इस रूप में प्रदर्शित किया जा सकता है $$f(1, 2, 3)$$, करीबी समारोह के मूल्यांकन के रूप में प्रतिनिधित्व किया जाएगा $$f_\text{curried}(1)(2)(3)$$, प्रत्येक तर्क को पिछले मंगलाचरण द्वारा लौटाए गए एकल-तर्क फ़ंक्शन के बदले में लागू करना। ध्यान दें कि कॉल करने के बाद $$f_\text{curried}(1)$$, हम एक ऐसे फ़ंक्शन के साथ बचे हैं जो एक तर्क लेता है और दूसरा फ़ंक्शन देता है, न कि एक ऐसा फ़ंक्शन जो दो तर्क लेता है।

इसके विपरीत, आंशिक फ़ंक्शन एप्लिकेशन एक फ़ंक्शन के लिए कई तर्कों को ठीक करने की प्रक्रिया को संदर्भित करता है, जो कि छोटे arity के दूसरे फ़ंक्शन का निर्माण करता है। की परिभाषा दी $$f$$ ऊपर, हम पहले तर्क को ठीक (या 'बाइंड') कर सकते हैं, जिससे एक प्रकार का फ़ंक्शन तैयार होता है $$\text{partial}(f) \colon (Y \times Z) \to N$$. इस समारोह के मूल्यांकन के रूप में प्रतिनिधित्व किया जा सकता है $$f_\text{partial}(2, 3)$$. ध्यान दें कि इस मामले में आंशिक फ़ंक्शन एप्लिकेशन का परिणाम एक ऐसा फ़ंक्शन है जो दो तर्क लेता है।

सहज रूप से, आंशिक फ़ंक्शन एप्लिकेशन कहता है कि यदि आप फ़ंक्शन के पहले पैरामीटर (कंप्यूटर विज्ञान) को ठीक करते हैं, तो आपको शेष तर्कों का एक फ़ंक्शन मिलता है। उदाहरण के लिए, यदि फ़ंक्शन div डिवीजन ऑपरेशन x/y के लिए खड़ा है, तो पैरामीटर x के साथ div 1 पर तय किया गया है (यानी, div 1) एक और फ़ंक्शन है: फ़ंक्शन inv के समान जो इसके तर्क के गुणात्मक व्युत्क्रम को परिभाषित करता है, परिभाषित आमंत्रण द्वारा (y) = 1/y.

आंशिक अनुप्रयोग के लिए व्यावहारिक अभिप्रेरणा यह है कि बहुत बार किसी फलन के लिए सभी नहीं बल्कि कुछ तर्क देकर प्राप्त किए गए फलन उपयोगी होते हैं; उदाहरण के लिए, कई भाषाओं में समान कार्य या संचालिका होती है. आंशिक अनुप्रयोग इन कार्यों को परिभाषित करना आसान बनाता है, उदाहरण के लिए एक फ़ंक्शन बनाकर जो इसके पहले तर्क के रूप में 1 बाउंड के साथ अतिरिक्त ऑपरेटर का प्रतिनिधित्व करता है।

आंशिक अनुप्रयोग को एक निश्चित बिंदु पर एक निश्चित कार्य के मूल्यांकन के रूप में देखा जा सकता है, उदा। दिया गया $$f \colon (X \times Y \times Z) \to N $$ तथा $$a \in X$$ फिर $$\text{curry}(\text{partial}(f)_a)(y)(z) = \text{curry}(f)(a)(y)(z) $$ या केवल $$\text{partial}(f)_a = \text{curry}_1(f)(a) $$ कहाँ पे $$\text{curry}_1$$ करी एफ का पहला पैरामीटर।

इस प्रकार, आंशिक अनुप्रयोग एक निश्चित बिंदु पर एक करीबी समारोह में कम हो जाता है। इसके अलावा, एक निश्चित बिंदु पर एक घुमावदार कार्य (तुच्छ रूप से), एक आंशिक अनुप्रयोग है। अधिक साक्ष्य के लिए, ध्यान दें कि, कोई भी कार्य दिया गया है $$f(x,y)$$, एक समारोह $$g(y,x)$$ इस प्रकार परिभाषित किया जा सकता है $$g(y,x) = f(x,y)$$. इस प्रकार, किसी भी आंशिक आवेदन को एक करी ऑपरेशन में घटाया जा सकता है। जैसे, करी को एक ऑपरेशन के रूप में अधिक उपयुक्त रूप से परिभाषित किया गया है, जो कई सैद्धांतिक मामलों में, अक्सर पुनरावर्ती रूप से लागू होता है, लेकिन जो सैद्धांतिक रूप से अप्रभेद्य है (जब एक ऑपरेशन के रूप में माना जाता है) आंशिक आवेदन से।

तो, एक आंशिक अनुप्रयोग को कुछ फ़ंक्शन के इनपुट के कुछ क्रम पर करी ऑपरेटर के एकल अनुप्रयोग के उद्देश्य परिणाम के रूप में परिभाषित किया जा सकता है।

यह भी देखें

 * टेंसर-होम संयोजन
 * आलसी मूल्यांकन
 * क्लोजर (कंप्यूटर साइंस)
 * एसएमएन प्रमेय |$S n m$प्रमेय
 * बंद मोनोइडल श्रेणी

इस पेज में लापता आंतरिक लिंक की सूची

 * अंक शास्त्र
 * समारोह (गणित)
 * आंशिक आवेदन
 * लैम्ब्डा कैलकुलस
 * प्रोग्रामिंग भाषाओं में मौलिक अवधारणाएँ
 * क्रमित युग्म
 * कार्तीय गुणन
 * समुच्चय सिद्धान्त
 * समारोह स्थान
 * द्विभाजन
 * अगर और केवल अगर
 * होमोटॉपी वर्ग
 * सहायक संचालिका
 * लिफ्ट (गणित)
 * लंबा सटीक क्रम
 * टेंसर उत्पाद
 * गुड़िया अनुक्रम
 * जाली (आदेश)
 * होमोटॉपी प्रकार सिद्धांत
 * ऑपरेटर साहचर्य
 * क्लोजर (कंप्यूटर साइंस)
 * प्रकार प्रणाली
 * समारोह प्रकार
 * सरल रूप से टाइप किया हुआ लैम्ब्डा कैलकुलस
 * मोनोइडल श्रेणियां
 * टपल
 * सामग्री निहितार्थ (अनुमान का नियम)
 * समाकृतिकता
 * क्वांटम गणना
 * बस टाइप किया हुआ लैम्ब्डा कैलकुलस
 * पूर्ण आंशिक आदेश
 * सदिश स्थल
 * रैखिक प्रकार प्रणाली
 * रैखिक तर्क
 * उलझी हुई क्वांटम अवस्थाएँ
 * arity

बाहरी संबंध

 * Currying Schonfinkelling at the Portland Pattern Repository
 * Currying != Generalized Partial Application! - post at Lambda-the-Ultimate.org