प्रोग्रामिंग के लिए श्रेणी सिद्धांत (नहीं)?


21

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

मेरे द्वारा आए कार्यक्रमों को डिजाइन करने के लिए श्रेणी सिद्धांत से संबंधित कई असफल प्रयासों को खर्च करने के बाद :

  • प्रोग्रामिंग भाषा डिजाइन करते समय श्रेणी सिद्धांत उपयोगी है ।
  • श्रेणी सिद्धांत कुछ ऐसा नहीं है जो आप कार्यक्रमों को डिजाइन करते समय उपयोग करते हैं (यहां तक ​​कि एक भाषा का उपयोग करते समय जो श्रेणी के सिद्धांतों के आधार पर डिजाइन किया गया था)। उदाहरण के लिए: जब हास्केल में प्रोग्रामिंग करते हैं, तो आप अपने प्रोग्राम को डिजाइन करने के लिए प्रकारों, प्रकारों के निर्माता, कार्यों, उच्च क्रम के कार्यों आदि का उपयोग करेंगे, न कि सिद्धांत अवधारणाओं के बारे में।

सारांश में हमारे पास लेयर सिस्टम है (ऑर्डर निम्न से उच्च है):

श्रेणी सिद्धांत -> प्रोग्रामिंग भाषा -> कार्यक्रम

किसी विशेष परत पर आप तत्काल अंतर्निहित परत की अवधारणाओं का उपयोग करते हैं ।

क्या यह समझ सही है? यदि नहीं और आप मानते हैं कि डिजाइनिंग प्रोग्राम में हम सीधे श्रेणी सिद्धांत अवधारणाओं का उपयोग कर सकते हैं, तो कृपया कुछ लेख या ब्लॉग पोस्ट देखें जहां यह प्रदर्शित किया जा रहा है।

नोट: कार्यक्रमों को डिजाइन करने से मेरा मतलब विभिन्न अवधारणाओं के आधार पर कार्यक्रमों को डिजाइन करना है, जैसे कि संगामिति, समानता, प्रतिक्रियात्मक, संदेश पासिंग आदि।


1
क्या आप साधनों को प्रोग्रामिंग भाषा या कार्यक्रमों का हिस्सा मानते हैं? तीर?
डेव क्लार्क

2
यह मुझे एक दार्शनिक प्रश्न के रूप में प्रभावित करता है, कम से कम भाग में। मुझे यकीन नहीं है कि एक एकल सही उत्तर है। श्रेणी के सिद्धांत का एक आदर्श प्रोग्रामिंग करते समय इससे प्राप्त अंतर्ज्ञान को लागू करेगा, दूसरा सोचने के विभिन्न तरीकों का समर्थन करेगा।
राफेल

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

1
@YuvalFilmus: मेरा प्रश्न कार्यात्मक प्रोग्रामिंग भाषाओं की ओर लक्षित है
अंकुर

1
इस सवाल को कुछ
सीएसओ मोनोडॉइड के

जवाबों:


13

खैर, यह निश्चित रूप से इस बात पर निर्भर करता है कि आप किस तरह के कार्यक्रम को डिजाइन करने की कोशिश कर रहे हैं।

यदि आप अपनी चाची की चॉकलेट की दुकान के लिए एक लेखांकन कार्यक्रम डिजाइन कर रहे हैं, तो मुझे बहुत संदेह श्रेणी सिद्धांत बहुत काम आएगा।

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

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

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

एम। एस्कार्डो और पी। ओलिवा: व्हाट सेक्शनल गेम्स, टाइकोनॉफ थ्योरम और डबल-नेगेशन शिफ्ट कॉमन , मैथमैटिकली स्ट्रक्चर्ड फंक्शनल प्रोग्रामिंग 2010, एसीएम प्रेस। (साथी हास्केल और एजडा फाइलों के साथ )

आप शिकायत कर सकते हैं कि यह केवल श्रेणी सिद्धांत नहीं है, बल्कि तर्क और टोपोलॉजी भी है। ऐसी शिकायतों को गंभीर रूप से गलत माना जाएगा। सर्वश्रेष्ठ श्रेणी का सिद्धांत हमेशा अन्य चीजों के साथ मिलाया जाता है।

अंत में, मैं थोड़ा स्व-निर्दिष्ट रीडिंग के आधार पर चीजों की प्रकृति के बारे में भव्य निष्कर्ष निकालने के खिलाफ सलाह दूंगा।


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

1
यह एक हास्यास्पद बयान है। मुझे लगता है कि इस तरह से व्यापक बयान देने से पहले आपको कुछ और सीखना चाहिए। शायद आप अस्तित्ववादी टाइप के
Bauer

मैं एक शोधकर्ता, पीएचडी आदमी, वैज्ञानिक, गणितज्ञ या श्रेणी सिद्धांतवादी नहीं हूं, इसलिए मेरे बयानों के बारे में परेशान न हों, वे कुछ वैज्ञानिक पत्रिका या शोध पत्रों में प्रकाशित नहीं होने जा रहे हैं। मैं सिर्फ एक प्रोग्रामर हूं जो सिक्के के दूसरे पहलू को समझने की कोशिश कर रहा हूं। वैसे, लिंक के लिए धन्यवाद।
अंकुर

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

उदाहरण के लिए आपने कहा था कि "प्रकार सिद्धांत श्रेणी सिद्धांत की तुलना में अधिक सामान्य अमूर्तता है"। यह एक कथन का एक उदाहरण है जिसे आपको अल्प ज्ञान के आधार पर नहीं बनाना चाहिए। मैं इस क्षेत्र में पेशेवर रूप से काम करता हूं और यहां तक ​​कि मैं इस तरह के निष्कर्ष, या इसके विपरीत बनाने के लिए बहुत सावधान रहूंगा।
एंड्रेज बॉयर

6

लोग डेटा प्रकारों का वर्णन करने के लिए सीटी का उपयोग करते थे।

  1. डेटा प्रकार को एक विशेष श्रेणी द्वारा परिभाषित किया गया था, जिसकी वस्तुएं (विनिर्देश भाषा) प्रकारों के परिमित अनुक्रम हैं, और जिनके तीर डेटा प्रकार के संचालन के अनुमान या अन्य रचनाएं थीं। उदाहरण के लिए, ऑब्जेक्ट डोमेन है और स्टैक के पुश ऑपरेशन का कोडोमैन है। यह आपको वाक्यविन्यास देता है, लेकिन आपके पास अभी भी शब्दार्थ की धारणा नहीं है।
  2. एक बीजगणित, जो कहना है, एक प्रकार का उदाहरण, सिद्धांत से सुनिश्चित करने के लिए एक फ़नकार है, (छोटे (सेट) की श्रेणी)। (हम रसेल के विरोधाभास से बचने के लिए "छोटे" का उपयोग करते हैं, लेकिन यह ज्यादातर मायने नहीं रखता है।)
  3. यह पता चला है कि श्रेणियों के बंद होने के गुण तार्किक सिद्धांतों के परिवारों के अनुरूप हैं। उदाहरण के लिए, यदि उत्पादों के तहत सिद्धांत श्रेणी को बंद कर दिया जाता है, तो डेटा प्रकार को समीकरणों द्वारा स्वयंसिद्ध किया जा सकता है। यदि सिद्धांत श्रेणी को पुलबैक लेते हुए बंद कर दिया जाता है, तो हॉर्न वाक्यों द्वारा डेटा प्रकार को स्वयंसिद्ध किया जा सकता है।

मुझे पूरा यकीन नहीं है कि कोई भी इस और ध्यान देता है। मुझे लगता है कि यह और वहां के लिंक इसे और अधिक विस्तार से समझाएंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.