Wolfram से
:
एक monoid एक सेट है कि एक साहचर्य द्विआधारी आपरेशन के तहत बंद कर दिया और एस में एक पहचान तत्व मैं ऐसे एस में सभी एक के लिए, आईए = ऐ एक = कि है है।
विकी से
:
सार बीजगणित में, गणित की एक शाखा, एक monoid एक भी साहचर्य द्विआधारी संचालन और एक पहचान तत्व के साथ एक बीजीय संरचना है।
इसलिए आपकी अंतर्ज्ञान कम या ज्यादा सही है।
आपको केवल यह ध्यान रखना चाहिए कि इसे हास्केल में "कस्टम सेट" के लिए परिभाषित नहीं किया गया है लेकिन एक प्रकार है। भेद छोटा है (क्योंकि टाइप सिद्धांत में प्रकार सेट सिद्धांत में सेट के समान होते हैं) लेकिन जिन प्रकारों के लिए आप एक मोनॉयड इंस्टेंस को परिभाषित कर सकते हैं, उन प्रकारों की आवश्यकता नहीं होती है जो गणितीय सेट का प्रतिनिधित्व करते हैं।
दूसरे शब्दों में: एक प्रकार उस प्रकार के सभी मानों के सेट का वर्णन करता है।मोनॉयड एक "इंटरफ़ेस" है जो बताता है कि उस इंटरफ़ेस का पालन करने का दावा करने वाले किसी भी प्रकार को एक पहचान मान प्रदान करना चाहिए, उस प्रकार के दो मानों को जोड़कर एक बाइनरी ऑपरेशन प्रदान करना चाहिए, और कुछ समीकरण हैं जो इन सभी सामान्य मोनोइड ऑपरेशंस के लिए संतुष्ट होना चाहिए इरादे के रूप में कार्य करें (जैसे मोनोइड मूल्यों की सूची का सामान्य सारांश) और अजीब/असंगत नतीजे उत्पन्न नहीं करते हैं।
साथ ही, ध्यान दें कि उस सेट (प्रकार) में पहचान तत्व का अस्तित्व किसी प्रकार के लिए मोनॉयड क्लास का उदाहरण होना आवश्यक है। (पहचान = 0
)
उदाहरण के लिए, प्राकृतिक संख्या दोनों इसके तहत एक monoid फार्म:
0 + n = n
n + 0 = n
के साथ-साथ गुणा (पहचान = 1
):
1 * n = n
n * 1 = n
भी सूचियों एक monoid फार्म ++
के तहत (पहचान = []
):
[] ++ xs = xs
xs ++ [] = xs
भी प्रकार a -> a
के कार्यों रचना के तहत एक monoid (पहचान = id
) फार्म
id . f = f
f . id = f
इसलिए यह महत्वपूर्ण है ध्यान रखें कि monoid प्रकार है कि सेट का प्रतिनिधित्व करता है के बारे में है, लेकिन प्रकार के बारे में जब सेट के रूप में देखा नहीं है में रखने के लिए, बोलूं तो।
एक malconstructed monoid उदाहरण के उदाहरण के रूप
, पर विचार करें:
import Data.Monoid
newtype MyInt = MyInt Int deriving Show
instance Monoid MyInt where
mempty = MyInt 0
mappend (MyInt a) (MyInt b) = MyInt (a * b)
अगर आप अब mconcat
को MyInt
मानों की सूची की कोशिश, तो आप हमेशा परिणाम के रूप में MyInt 0
मिलेगा क्योंकि पहचान मूल्य 0
और बाइनरी आपरेशन *
अच्छी तरह से एक साथ नहीं खेलते हैं:
λ> mconcat [MyInt 1, MyInt 2]
MyInt 0
एक मोनोइड एक बीजगणितीय संरचना (एस) है जिसमें एक सहयोगी बाइनरी ऑपरेशन ((।): एस * एस -> एस) और एक पहचान तत्व (आईडी: एस) उस ऑपरेशन के लिए। इसे सहयोगीता के नियमों को पूरा करना होगा (यानी ए। (बी। सी) = (ए। बी) सी) और पहचान (आईडी। X = x। Id = x)। –