একটি মোনাড হ'ল এন্ডোফান্টেক্টরগুলির ক্যাটাগরিতে কেবল একটি মনোড, সমস্যা কী?


722

নিচের কথাটি প্রথম কে বলেছে?

একটি মোনাড হ'ল এন্ডোফান্টেক্টরগুলির ক্যাটাগরিতে কেবল একটি মনোড, সমস্যা কী?

এবং একটি কম গুরুত্বপূর্ণ নোটের উপর, এটি কি সত্য এবং যদি আপনি কোনও ব্যাখ্যা দিতে পারতেন (আশা করি এমন একটি যা বুঝতে পারে যে যার সাথে বেশি হাস্কেলের অভিজ্ঞতা নেই)?


14
"ওয়ার্কিং ম্যাথমেটিশিয়ানদের বিভাগগুলি" দেখুন
ডন স্টুয়ার্ট

18
হাস্কেল-এ monad ব্যবহার করার জন্য আপনাকে এটি বোঝার দরকার নেই। ব্যবহারিক দৃষ্টিকোণ থেকে তারা কিছু ভূগর্ভস্থ নদীর গভীরতানির্ণয় মাধ্যমে "রাষ্ট্র" কাছাকাছি যাওয়ার কেবল একটি চতুর উপায়।
তারাবল ব্লু

1
আমি এখানেও এই দুর্দান্ত ব্লগ পোস্টটি যুক্ত করতে চাই: stepshendiehl.com/posts/monads.html এটি সরাসরি প্রশ্নের উত্তর দেয় না, তবে আমার মতে স্টিফেন হাস্কেলের একসাথে বিভাগ এবং মনডে বেঁধে রাখার দুর্দান্ত কাজ করেছেন। যদি আপনি উপরের উত্তরগুলি পড়ে থাকেন - এটি এটিকে দেখার দুটি উপায়কে একীভূত করতে সহায়তা করবে।
বেন ফোর্ড

3
আরও সুনির্দিষ্টভাবে "যে কোনও বিভাগ সি এর জন্য, এর এন্ডোফান্টেক্টরগুলির [সি, সি] বিভাগটির রচনাটি দ্বারা নির্ধারিত একঘেয়ে কাঠামো রয়েছে [[সি, সি] এর একটি মনোয়েড অবজেক্টটি সি এর উপর একটি মনড" " - এন.ইউইকিপিডিয়া.আর.উইকি / মনয়েড_৯২২ ক্যাটাগরি_থোরি ১০৯৯ থেকে। বিভাগ তত্ত্বে মোনাডের সংজ্ঞার জন্য en.wikedia.org/wiki/Monad_%28category_theory%29 দেখুন।

1
@Dmitry একটি functor সঙ্গে কিছু সীমাবদ্ধতা ভালভাবে ভদ্র হতে, শ্রেণীর মধ্যে একটি ফাংশন। সি বিভাগে একটি এন্ডোফান্টর সি থেকে শুরু করে কেবল নিজের কাছে ফান্টেক্টর। Data.Functor উপর endofunctors জন্য typeclass হয় Hask বিভাগ । যেহেতু কোনও বিভাগে অবজেক্টস এবং মরফিজমগুলি রয়েছে, তাই একটি ফান্টারের উভয়কেই ম্যাপ করা দরকার। ডেটা.ফান্টাক্টরের উদাহরণস্বরূপ, অবজেক্টের মানচিত্র (হ্যাশেল প্রকারের) নিজেই চ এবং মরফিজমে মানচিত্র (হ্যাশেল ফাংশন) এফএমএপি।
ম্যাথিজগুলি

উত্তর:


794

সেই বিশেষ বাক্যটি হ'ল জেমস আইরি তাঁর অত্যন্ত মজাদার সংক্ষিপ্ত, অসম্পূর্ণ এবং প্রোগ্রামিং ল্যাঙ্গুয়েজের বেশিরভাগ ভুল ইতিহাস থেকে , যেখানে তিনি কাল্পনিকভাবে এটি ফিলিপ ওয়াডলারের কাছে দায়ী করেছেন।

মূল উক্তিটি ওয়ার্ডিং ম্যাথমেটিশিয়ান ফর ক্যাটাগরি বিভাগে স্যান্ডার্স ম্যাক লেনের , যা বিভাগ তত্ত্বের অন্যতম মূল পাঠ্য। এখানে এটি প্রসঙ্গে রয়েছে , এটির অর্থ কী তা বোঝার জন্য সম্ভবত সবচেয়ে ভাল জায়গা।

তবে, আমি ছুরিকাঘাত করব। মূল বাক্যটি হ'ল:

সবকটিই বলেছিলেন, এক্স এর একটি মোনাদ এক্স এর এন্ডোফান্টেক্টর বিভাগে কেবল একটি মনোড, পণ্যটির সাথে এন্ডোফান্টরগুলির সমন্বয় এবং আইডেন্টিটি এন্ডোফান্টর দ্বারা সেট ইউনিট দ্বারা প্রতিস্থাপিত হয়।

এক্স এখানে একটি বিভাগ। এন্ডোফান্টেক্টরগুলি নিজের কাছে একটি বিভাগ থেকে ফান্ট্যাক্টর (যা সাধারণত সমস্ত Functor কার্যক্রমে ক্রিয়াকলাপী প্রোগ্রামারদের হিসাবে বিবেচনা করা হয়, যেহেতু তারা বেশিরভাগ ক্ষেত্রে কেবল একটি বিভাগের সাথে সম্পর্কিত; ধরণের বিভাগ - তবে আমি ডিগ্রিরি)। তবে আপনি অন্য বিভাগটি কল্পনা করতে পারেন যা " এক্স এন্ডোফান্টেক্টর" এর বিভাগ । এটি এমন একটি বিভাগ যার মধ্যে অবজেক্টগুলি এন্ডোফান্টর এবং রূপগুলি হ'ল প্রাকৃতিক রূপান্তর।

এবং এই endofunctors এর মধ্যে তাদের মধ্যে কিছু মনড হতে পারে। কোনটি মনদেব? ঠিক যার দ্বারা monoidal একটি নির্দিষ্ট অর্থে। মনড থেকে মনোয়েডগুলিতে হুবহু ম্যাপিংয়ের বানানের পরিবর্তে (যেহেতু ম্যাক লেন আমার প্রত্যাশার চেয়ে এটি আরও ভাল করে), আমি কেবল তাদের সম্পর্কিত সংজ্ঞা পাশাপাশি রেখে দেব এবং আপনাকে তুলনা করতে দিন:

একটি মনোড হ'ল ...

  • একটি সেট, এস
  • একটি অপারেশন, •: এস × এস → এস
  • এস এর একটি উপাদান , ই: 1 → এস

... এই আইন সন্তুষ্ট:

  • (ক • খ) • গ = একটি • (খ • গ) , সব জন্য একটি , এবং মধ্যে এস
  • ই • একটি = একটি • E = একটি , সব জন্য একটি মধ্যে এস

একটি মোনাড হ'ল ...

  • একটি endofunctor, টি: এক্স → এক্স (মধ্যে Haskell, ধরনের একটি টাইপ কন্সট্রাকটর * -> *একটি সঙ্গে Functorউদাহরণস্বরূপ)
  • একটি প্রাকৃতিক রূপান্তর, μ: টি × টি → টি , যেখানে × এর অর্থ ফান্টকার রচনা ( Hasjoin হাস্কেল হিসাবে পরিচিত )
  • প্রাকৃতিক রূপান্তর, η: আমি → টি , যেখানে আমি পরিচয় endofunctor হয় এক্স ( η হিসাবে পরিচিত হয় returnমধ্যে Haskell)

... এই আইন সন্তুষ্ট:

  • ∘ ∘ Tμ = μ ∘ μT
  • ∘ η Tη = μ ∘ ηT = 1 (পরিচয় প্রাকৃতিক রূপান্তর)

কিছুটা বাদ দিয়ে আপনি দেখতে পাবেন যে এই দুটি সংজ্ঞা একই বিমূর্ত ধারণার উদাহরণ ।


21
প্রোগ্রামিং ভাষার নিবন্ধের সংক্ষিপ্ত, অসম্পূর্ণ এবং বেশিরভাগ ভুল ইতিহাসের জন্য ব্যাখ্যাটির জন্য ধন্যবাদ এবং ধন্যবাদ। আমি ভেবেছিলাম এটি সেখান থেকে হতে পারে। প্রকৃতপক্ষে প্রোগ্রামিং হিউমার একটি দুর্দান্ত অংশ।
রোমান এ। টায়চার

6
@ জোনাথন: একটি মনোয়েডের শাস্ত্রীয় গঠনে, × মানে সেটগুলির কার্তেসিয়ান পণ্য। আপনি এখানে সে সম্পর্কে আরও পড়তে পারেন: en.wik વિક.org / উইকি / কার্টেসিয়ান_প্রডাক্ট , তবে মূল ধারণাটি হ'ল এস × টি এর একটি উপাদান একটি জুড়ি (গুলি, টি) , যেখানে এস and এস এবং টি ∈ টি । Monoidal পণ্যের স্বাক্ষর সুতরাং •: এস × এস -> এস এই প্রেক্ষাপটে কেবল একটি ফাংশন যা 2 উপাদান লাগে মানে এস ইনপুট হিসাবে এবং আরেকটি উপাদান উত্পাদন করে এস একটি আউটপুট হিসাবে।
টম ক্রকেট

12
@ তাহিরহসান - বিভাগের তত্ত্বের সাধারণতায় আমরা সেটগুলির পরিবর্তে অস্বচ্ছ "অবজেক্টস" নিয়ে কাজ করি এবং সুতরাং "উপাদানগুলি" এর কোনও অগ্রাধিকার নেই। তবে আপনি যদি বিভাগটি সেট সম্পর্কে চিন্তা করেন যেখানে বস্তুগুলি সেট করা হয় এবং তীরগুলি ফাংশন হয় তবে যে কোনও সেট এস এর উপাদানগুলি এস-তে যে কোনও এক-এলিমেন্ট সেট থেকে ফাংশনগুলির সাথে এক থেকে এক চিঠিপত্রের মধ্যে রয়েছে, এটি কোনওর জন্য এস এর এলিমেন্ট এর ঠিক একটি ফাংশন রয়েছে f: 1 -> এস , যেখানে 1 টি কোনও এক-এলিমেন্ট সেট ... (বিরাম)
টম ক্রকেট

12
@ তাহিরহসান ১-উপাদান সেটগুলি "টার্মিনাল অবজেক্টস" এর আরও সাধারণ বিভাগ-তাত্ত্বিক ধারণার বিশেষত্ব: টার্মিনাল অবজেক্ট এমন কোনও বিভাগের যে কোনও বস্তুর জন্য এটির অন্য কোনও বস্তুর থেকে ঠিক একটি তীর রয়েছে (আপনি এটি পরীক্ষা করতে পারেন এই 1-উপাদান সেট সত্য সেট )। বিভাগে তত্ত্বের টার্মিনাল অবজেক্টগুলিকে কেবল 1 হিসাবে উল্লেখ করা হয় ; তারা isomorphism অবধি অনন্য তাই তাদের পার্থক্য করার কোন মানে নেই। সুতরাং এখন আমাদের কাছে যে কোনও এস এর জন্য " এস এর উপাদানসমূহ" এর বিশুদ্ধরূপে বিভাগ-তাত্ত্বিক বিবরণ রয়েছে : এগুলি কেবল 1 থেকে এস পর্যন্ত তীরগুলি !
টম ক্রকেট

7
@ তাহিরহসান - হাস্কেল পদগুলিতে এটি Sলেখার জন্য, এই বিষয়টি সম্পর্কে চিন্তা করুন যে যদি কোনও প্রকার হয় তবে কোনও ফাংশন লেখার সময় আপনি যা কিছু করতে পারেন তা f :: () -> Sকিছু নির্দিষ্ট শব্দ S(এটির একটি "উপাদান", যদি আপনি চান) বাছাই করে ফিরে আসুন এটি ... আপনাকে আর্গুমেন্টের সাথে কোনও আসল তথ্য দেওয়া হয়নি, সুতরাং ফাংশনটির আচরণের পরিবর্তনের কোনও উপায় নেই। সুতরাং fঅবশ্যই একটি ধ্রুবক ফাংশন হতে হবে যা প্রতিবার একই জিনিসটি ফেরত দেয়। ()("ইউনিট") হ্যাস্ক বিভাগের টার্মিনাল অবজেক্ট এবং এটি কোনও সংশ্লেষ নয় যে এর মধ্যে 1 টি (অ-বিবিধ) মান রয়েছে exactly
টম ক্রকেট

532

স্বজ্ঞাতভাবে, আমি মনে করি যে অভিনব গণিতের শব্দভাণ্ডার যা বলছে তা হ'ল:

Monoid

একজন monoid অবজেক্টের একটি সেট, এবং তাদের মিশ্রন একটি পদ্ধতি। সুপরিচিত মনোয়েডগুলি হ'ল:

  • আপনি যোগ করতে পারেন নম্বর
  • আপনি একত্রিত করতে পারেন তালিকা
  • আপনি ইউনিয়ন করতে পারেন সেট করে

আরও জটিল উদাহরণ রয়েছে।

তদুপরি, প্রতিটি মনোয়েডের একটি পরিচয় থাকে যা হ'ল "নো-অপশন" উপাদানটি যখন আপনি অন্য কোনও কিছুর সাথে একত্রিত করার পরে কোনও প্রভাব ফেলে না:

  • 0 + 7 == 7 + 0 == 7
  • [] ++ [1,2,3] == [1,2,3] ++ [] == [1,2,3]
  • {} ইউনিয়ন {আপেল} == {আপেল} ইউনিয়ন {= == {আপেল}

অবশেষে, একটি monoid হওয়া আবশ্যক মিশুক । (আপনি যে কোনও উপায়ে যেভাবে চান সংযোজনগুলির একটি দীর্ঘ স্ট্রিং হ্রাস করতে পারবেন, যতক্ষণ না আপনি অবজেক্টগুলির বাম থেকে ডান ক্রমটি পরিবর্তন করেন না) সংযোজন ঠিক আছে ((5 + 3) +1 == 5+ (3+ 1)), তবে বিয়োগ ((5-3) -1! = 5- (3-1)) নয়।

একসংখ্যা

এখন, আসুন একটি বিশেষ ধরণের সেট এবং সামগ্রীর সাথে মিশ্রণের একটি বিশেষ উপায় consider

অবজেক্টস

মনে করুন আপনার সেটে একটি বিশেষ ধরণের জিনিসগুলি রয়েছে: ফাংশনগুলি । এবং এই ফাংশনগুলির একটি আকর্ষণীয় স্বাক্ষর রয়েছে: তারা সংখ্যায় সংখ্যা বা স্ট্রিংগুলিতে স্ট্রিং করে না। পরিবর্তে, প্রতিটি ফাংশন একটি দ্বি-পদক্ষেপ প্রক্রিয়াতে সংখ্যার তালিকায় একটি সংখ্যা বহন করে।

  1. 0 বা ততোধিক ফলাফল গণনা করুন
  2. এই ফলাফলগুলি একরকম একক উত্তরের সাথে সংযুক্ত করুন।

উদাহরণ:

  • 1 -> [1] (কেবল ইনপুট মোড়ানো)
  • 1 -> [] (ইনপুটটি বাতিল করুন, তালিকায় কিছুই নেই)
  • 1 -> [2] (ইনপুটটিতে 1 যুক্ত করুন, এবং ফলাফলটি মোড়ানো)
  • 3 -> [4, 6] (ইনপুটটিতে 1 যুক্ত করুন, এবং 2 দ্বারা ইনপুট গুণান, এবং একাধিক ফলাফল মোড়ানো )

সম্মিলিত অবজেক্টস

এছাড়াও, ফাংশনগুলির সংমিশ্রণের আমাদের উপায়টি বিশেষ। ফাংশন একত্রিত করার একটি সহজ উপায় হ'ল রচনা : আসুন উপরে আমাদের উদাহরণগুলি নেওয়া যাক এবং প্রতিটি ফাংশনটি নিজের সাথে রচনা করুন:

  • 1 -> [1] -> [[1]] (ইনপুটটি গুটিয়ে নিন, দু'বার)
  • 1 -> [] -> [] (ইনপুটটি বাতিল করুন, দু'বার কোনও তালিকার মধ্যে আবদ্ধ করুন)
  • 1 -> [2] -> [ইউএইচ-ওহ! ] (আমরা একটি তালিকায় "1" যুক্ত করতে পারি না! ")
  • 3 -> [4, 6] -> [ইউএইচ-ওহ! ] (আমরা 1 টি তালিকা যুক্ত করতে পারি না!)

প্রকার তত্ত্বের খুব বেশি না গিয়ে, মূল কথাটি হ'ল আপনি পূর্ণসংখ্যা পেতে দুটি পূর্ণসংখ্যার সমন্বয় করতে পারেন তবে আপনি সর্বদা দুটি ফাংশন রচনা করতে এবং একই ধরণের কোনও ফাংশন পেতে পারেন না। (A -> a টাইপযুক্ত ফাংশনগুলি রচনা করবে তবে a-> [a] করবে না))

সুতরাং, আসুন ফাংশন সংমিশ্রনের একটি ভিন্ন উপায় সংজ্ঞা দিন। যখন আমরা এই দুটি ফাংশন একত্রিত করি, আমরা ফলাফলগুলি "ডাবল-মোড়ানো" করতে চাই না।

এখানে আমরা কি করি। যখন আমরা F এবং G দুটি ফাংশন একত্রিত করতে চাই, আমরা এই প্রক্রিয়াটি অনুসরণ করি (যাকে বাধ্যতামূলক বলা হয় ):

  1. এফ থেকে "ফলাফল" গণনা করুন তবে সেগুলি একত্রিত করবেন না।
  2. এফের প্রতিটি ফলাফলের পৃথকভাবে জি প্রয়োগ করে ফলাফলগুলি গণনা করুন, ফলাফল সংগ্রহের সংগ্রহ সংগ্রহ করে।
  3. 2-স্তরের সংগ্রহ সমতল করুন এবং সমস্ত ফলাফল একত্রিত করুন।

আমাদের উদাহরণগুলিতে ফিরে আসুন, "বাঁধাই করা" এই নতুন পদ্ধতিটি ব্যবহার করে নিজের সাথে একটি ফাংশন একত্রিত (বাঁধাই করা) করা যাক:

  • 1 -> [1] -> [1] (ইনপুটটি গুটিয়ে নিন, দু'বার)
  • 1 -> [] -> [] (ইনপুটটি বাতিল করুন, দু'বার কোনও তালিকার মধ্যে আবদ্ধ করুন)
  • 1 -> [2] -> [3] (1 যোগ করুন, তারপরে আবার 1 যুক্ত করুন, এবং ফলাফল মোড়ানো)
  • 3 -> [4,6] -> [5,8,7,12] (ইনপুটটিতে 1 যুক্ত করুন, এবং ইনপুট 2 দ্বারাও গুন করুন, উভয় ফলাফল রেখে, তারপর উভয় ফলাফলের সাথে আবার এটি করুন, এবং তারপরে ফাইনালটি মোড়ক করুন একটি তালিকায় ফলাফল।)

ফাংশনগুলির সংমিশ্রণের এই আরও পরিশীলিত উপায়টি হলেন সহকারী (যখন আপনি অভিনব র‌্যাপিংয়ের জিনিসগুলি না করে ফাংশন রচনাটি কীভাবে সংঘবদ্ধ হয় তা অনুসরণ করে)।

সব একসাথে বেঁধে,

  • একটি monad একটি কাঠামো যা ফাংশন একত্রিত করার উপায় সংজ্ঞায়িত করে,
  • একত্রে কীভাবে মনয়েড এমন একটি কাঠামো যা বস্তুগুলিকে একত্রিত করার উপায় নির্ধারণ করে,
  • যেখানে সংমিশ্রনের পদ্ধতিটি সহকারী,
  • এবং সেখানে একটি বিশেষ 'no-op' যে কোনো সঙ্গে মিলিত হতে পারে যেখানে কিছু ফলে কিছু অপরিবর্তিত।

মন্তব্য

ফলাফলগুলি "মোড়ানোর" জন্য প্রচুর উপায় রয়েছে। আপনি একটি তালিকা তৈরি করতে পারেন, বা একটি সেট তৈরি করতে পারেন, বা কোনও ফলাফল না থাকলে লক্ষ্য করার সময় প্রথম ফলাফল ব্যতীত সমস্ত বাতিল করতে পারেন, রাষ্ট্রের একটি সিডেকার সংযুক্ত করুন, লগ বার্তা প্রিন্ট করুন ইত্যাদি ইত্যাদি

স্বজ্ঞাতভাবে প্রয়োজনীয় ধারণাটি পাওয়ার আশায় আমি সংজ্ঞাগুলি দিয়ে কিছুটা looseিলে .ালা খেলেছি।

আমাদের মোনাড একটি -> [এ] টাইপের ফাংশনে পরিচালিত করে জোর করে এই বিষয়গুলিকে কিছুটা সরল করে তুলেছি । প্রকৃতপক্ষে মনডস টাইপ এ -> এমবি টাইপের কাজ করে তবে সাধারণীকরণ এমন এক প্রযুক্তিগত বিশদ যা মূল অন্তর্দৃষ্টি নয়।


22
প্রতিটি মনাদ কীভাবে একটি বিভাগ গঠন করে তার একটি দুর্দান্ত ব্যাখ্যা ( ক্লাইসলি বিভাগটি আপনি প্রদর্শন করছেন - সেখানে আইলেনবার্গ-মুর বিভাগও রয়েছে)। তবে আপনি যে কোনও দুটি ক্লাইসলি তীর রচনা করতে পারবেন না a -> [b]এবং এবং c -> [d](আপনি কেবল এটি b= এটি করতে পারেন যদি c) তবে এটি কোনও একরকমের বর্ণনা দেয় না। এটি প্রকৃতপক্ষে ফাংশন কম্পোজিশনের চেয়ে আপনি বর্ণিত ফ্ল্যাটিং অপারেশন যা "মনোয়েড অপারেটর"।
টম ক্রকেট

6
মঞ্জুর, যদি আপনি একটি monad কেবলমাত্র এক প্রকারের মধ্যে সীমাবদ্ধ করেন, অর্থাত্ যদি আপনি কেবল ফর্মটির ক্লাইসলি তীরগুলি মঞ্জুরি দিয়ে থাকেন a -> [a]তবে এটি একটি মনোহর হবে (কারণ আপনি ক্লাইসলি বিভাগকে একটিমাত্র অবজেক্টে এবং কেবলমাত্র একটি অবজেক্টের কোনও বিভাগকে হ্রাস করছেন) এটি সংজ্ঞায়িতভাবে একটি মনোয়েড!), তবে এটি মোনাডের পুরো সাধারণতা গ্রহণ করবে না।
টম ক্রকেট

5
শেষ নোটে, এটি মনে রাখতে সাহায্য করে যে একটি -> [এ] কেবল একটি -> [] এ। ([] কেবল টাইপ কনস্ট্রাক্টরও।) এবং তাই এটি কেবল একটি -> এমবি হিসাবে দেখা যায় না, তবে []] এটি অবশ্যই মোনাদ শ্রেণির একটি উদাহরণ।
Evi1M4chine

8
আমি আক্ষরিক কয়েক সপ্তাহের মধ্যে মনোদের ও তাদের গাণিতিক পটভূমির সর্বাধিক সংকোচযোগ্য ব্যাখ্যা। হাতের নীচে মনডের কথা উঠলেই প্রতিটি হাস্কেল বইতে এটি মুদ্রিত হওয়া উচিত। ভোট দিন! হয়তো আরও তথ্যের টুকরোটি পান, যে মোনাদগুলি প্যারামিটারাইজড টাইপক্লাসের উদাহরণগুলিতে পোস্টের মধ্যে হ্যাসকেলে যা কিছু রাখবে তা মোড়ানো হিসাবে উপলব্ধি করা যায়। (কমপক্ষে এটি আমি এখনই বুঝতে পেরেছি wrong আমি ভুল হলে আমাকে সংশোধন করুন has দেখুন haskell.org/haskellwiki/Wat_a_Monad_is_not )
sjas

1
এটি দুর্দান্ত - এটিই একমাত্র ব্যাখ্যা যা আমি অন্য কাউকে তা ব্যাখ্যা করতে সক্ষম হবার পক্ষে যথেষ্ট ভালভাবে বুঝতে পেরেছি ... তবে কেন এখনও কিছু চিন্তা করার মূল্যবান উপায় এটি আমি বুঝতে পারি না। :(
অ্যাডাম বার্নেস

84

প্রথমত, আমরা যে এক্সটেনশানগুলি এবং গ্রন্থাগারগুলি ব্যবহার করব তা:

{-# LANGUAGE RankNTypes, TypeOperators #-}

import Control.Monad (join)

এর RankNTypesমধ্যে কেবল একমাত্র যা নীচের পক্ষে একেবারে প্রয়োজনীয়। আমি একবার এর ব্যাখ্যা লিখেছিলাম RankNTypesযে কিছু লোকের মনে হয়েছে এটি দরকারী ছিল , তাই আমি এটিকে উল্লেখ করব।

টম ক্রকেটের দুর্দান্ত উত্তরটি উদ্ধৃত করে আমাদের কাছে রয়েছে:

একটি মোনাড হ'ল ...

  • একটি এন্ডোফান্টর, টি: এক্স -> এক্স
  • একটি প্রাকৃতিক রূপান্তর, μ: টি × টি -> টি , যেখানে × এর অর্থ ফান্টারের রচনা
  • একটি প্রাকৃতিক রূপান্তর, η: আমি -> টি , যেখানে আমি এক্স এর পরিচয় এন্ডোফান্টর

... এই আইন সন্তুষ্ট:

  • μ (μ (টি × টি) × টি)) = μ (টি × μ (টি × টি))
  • μ (η (টি)) = টি = μ (টি (η))

আমরা কীভাবে এটি হাসেল কোডটিতে অনুবাদ করব? ঠিক আছে, একটি প্রাকৃতিক রূপান্তর ধারণা দিয়ে শুরু করা যাক :

-- | A natural transformations between two 'Functor' instances.  Law:
--
-- > fmap f . eta g == eta g . fmap f
--
-- Neat fact: the type system actually guarantees this law.
--
newtype f :-> g =
    Natural { eta :: forall x. f x -> g x }

f :-> gএকধরণের ফর্ম একটি ফাংশনের ধরণের সাথে সমতুল্য, তবে এটিকে দুটি ধরণের (ধরণের ) মধ্যে একটি ফাংশন হিসাবে ভাবার পরিবর্তে এটিকে দুটি ফান্টারের (প্রতিটি ধরণের ) মধ্যে একটি মরফিজম হিসাবে ভাবেন । উদাহরণ:** -> *

listToMaybe :: [] :-> Maybe
listToMaybe = Natural go
    where go [] = Nothing
          go (x:_) = Just x

maybeToList :: Maybe :-> []
maybeToList = Natural go
    where go Nothing = []
          go (Just x) = [x]

reverse' :: [] :-> []
reverse' = Natural reverse

মূলত, হাস্কেলের মধ্যে প্রাকৃতিক রূপান্তরগুলি হ'ল কিছু ধরণের f xথেকে অন্য ধরণের ফাংশন g xযেমন xটাইপ ভেরিয়েবল কলারের কাছে "অ্যাক্সেসযোগ্য"। সুতরাং উদাহরণস্বরূপ, sort :: Ord a => [a] -> [a]একটি প্রাকৃতিক রূপান্তর হিসাবে তৈরি করা যায় না, কারণ আমরা "ধরণের" এটি কী ধরণের জন্য আমরা তাত্পর্যপূর্ণ করতে পারি a। আমি প্রায়শই এটি ভাবতে ব্যবহার করার জন্য একটি স্বজ্ঞাত উপায় যা নিম্নলিখিত:

  • কাঠামোগুলি স্পর্শ না করে কোনও ফন্টাকর কোনও বিষয়বস্তুতে পরিচালিত করার একটি উপায় ।
  • প্রাকৃতিক রূপান্তরটি কোনও বিষয়বস্তু স্পর্শ না করে বা তাকিয়ে না দেখে কোনও কাঠামোর উপর কাজ করার একটি উপায় ।

এখন, উপায়টি ছাড়াই, আসুন সংজ্ঞাটির ধারাগুলি সামলান।

প্রথম অনুচ্ছেদটি হ'ল "একটি অন্তঃসংশ্লিষ্ট, টি: এক্স -> এক্স "। হ্যাঁ, Functorহাস্কেলের প্রত্যেকটিই হ'ল লোককে "হাস্ক বিভাগ" বলে একটি অন্তঃসংশোধক, যার বস্তুগুলি হাস্কেল প্রকারের (ধরণের *) এবং যার আকারগুলি হাস্কেল ফাংশন। এটি জটিল বিবরণের মতো শোনাচ্ছে তবে এটি আসলে খুব তুচ্ছ। সকল এটা মানে যে একটি হল Functor f :: * -> *আপনি একটি টাইপ নির্মাণের মাধ্যমে দেয় f a :: *কোন a :: *এবং একটি ফাংশন fmap f :: f a -> f bকোন আউট f :: a -> bযে এই শুনা functor আইন, এবং।

দ্বিতীয় ধারা: Identityহাস্কেলের ফান্টার (যা প্ল্যাটফর্মের সাথে আসে, সুতরাং আপনি কেবল এটি আমদানি করতে পারেন) এইভাবে সংজ্ঞায়িত করা হয়েছে:

newtype Identity a = Identity { runIdentity :: a }

instance Functor Identity where
    fmap f (Identity a) = Identity (f a)

সুতরাং প্রাকৃতিক রূপান্তর η: টম ক্রকেটের সংজ্ঞা থেকে আমি -> টি কোনও Monadউদাহরণের জন্য এভাবে লেখা যেতে পারে t:

return' :: Monad t => Identity :-> t
return' = Natural (return . runIdentity)

তৃতীয় ধারা: হাস্কেলের দুটি ফান্টারের সমন্বয়টি এইভাবে সংজ্ঞায়িত করা যেতে পারে (এটি প্ল্যাটফর্মের সাথেও আসে):

newtype Compose f g a = Compose { getCompose :: f (g a) }

-- | The composition of two 'Functor's is also a 'Functor'.
instance (Functor f, Functor g) => Functor (Compose f g) where
    fmap f (Compose fga) = Compose (fmap (fmap f) fga)

সুতরাং প্রাকৃতিক রূপান্তর T: টি × টি -> টি টম ক্রকেটের সংজ্ঞা থেকে এইভাবে লেখা যেতে পারে:

join' :: Monad t => Compose t t :-> t
join' = Natural (join . getCompose)

এটি এন্ডোফান্টেক্টরগুলির বিভাগে একটি মাইওডের বিবৃতিটির অর্থ এই যে Compose(আংশিকভাবে কেবলমাত্র তার প্রথম দুটি পরামিতি প্রয়োগ করা হয়) এটি সংঘবদ্ধ এবং Identityএটিই এটির পরিচয় উপাদান। অর্থাৎ, নিম্নলিখিত আইসোর্ফিজমগুলি ধারণ করে:

  • Compose f (Compose g h) ~= Compose (Compose f g) h
  • Compose f Identity ~= f
  • Compose Identity g ~= g

এগুলি প্রমাণ করা খুব সহজ কারণ Composeএবং Identityউভয়ই হিসাবে সংজ্ঞায়িত করা হয়েছে newtypeএবং হাস্কেল রিপোর্টগুলি সংজ্ঞায়িত newtypeধরণের এবং newtypeডেটা কনস্ট্রাক্টরের পক্ষে যুক্তির ধরণের মধ্যে শব্দার্থবিজ্ঞানের সংজ্ঞা দেয় । উদাহরণস্বরূপ, আসুন প্রমাণ করুন Compose f Identity ~= f:

Compose f Identity a
    ~= f (Identity a)                 -- newtype Compose f g a = Compose (f (g a))
    ~= f a                            -- newtype Identity a = Identity a
Q.E.D.

নতুন Naturalটাইপে, আমি (Functor f, Functor g)সীমাবদ্ধতা কী করছে তা বুঝতে পারি না । আপনি ব্যাখ্যা করতে পারেন?
ডিফিউয়ার

@ ডিফিউয়ার এটি সত্যিই প্রয়োজনীয় কিছু করছে না।
লুইস ক্যাসিলাস

1
@ লুইস ক্যাসিলাস Functorযেহেতু প্রয়োজনীয়তা বলে মনে হচ্ছে না তাই আমি এই প্রতিবন্ধকতাগুলি সরিয়েছি । যদি আপনি দ্বিমত পোষণ করেন তবে তাদের আবার যুক্ত করতে নির্দ্বিধায়।
লাম্বদা পরী

ফ্যান্টেক্টরগুলির পণ্যটিকে রচনা হিসাবে গ্রহণ করার জন্য এটির আনুষ্ঠানিক অর্থ কী, আপনি কী তা ব্যাখ্যা করতে পারেন? বিশেষত, ফান্টর কম্পোজিশনের জন্য প্রক্ষেপণ আকারগুলি কী কী? আমার অনুমান যে পণ্যটি কেবল নিজের বিরুদ্ধে একটি ফান্টর এফ, এফ এক্স এফ এবং কেবলমাত্র joinসংজ্ঞায়িত হলেই সংজ্ঞায়িত হয়। এবং joinএটি প্রজেকশন মরফিজম। কিন্তু আমি নিশ্চিত না.
tksfz

6

দ্রষ্টব্য: না, এটি সত্য নয়। এক পর্যায়ে ড্যান পিপোনি নিজেই এই উত্তর সম্পর্কে একটি মন্তব্য করেছিলেন যে এখানে কারণ এবং প্রভাবটি একেবারেই বিপরীত ছিল, তিনি তার নিবন্ধটি জেমস আইরির প্রশ্নের জবাবে লিখেছিলেন। তবে সম্ভবত এটি কোনও বাধ্যতামূলক পরিচারক দ্বারা সরিয়ে দেওয়া হয়েছে বলে মনে হয়।

নীচে আমার মূল উত্তর দেওয়া আছে।


এটা খুবই সম্ভব যে Iry পড়া ছিল Monoids থেকে Monads করার একটি পোস্ট যা ড্যান Piponi (sigfpe) মধ্যে Haskell monoids থেকে monads আহরিত, বিষয়শ্রেণীতে তত্ত্ব ও "এ endofunctors এর বিষয়শ্রেণীতে স্পষ্ট উল্লেখ অনেক আলোচনা সঙ্গে Hask "। যা-ই হোক না কেন, যে কেউ বিস্মিত হয় যে এন্ডোফান্টেক্টরদের ক্যাটাগরিতে একটি মোনাদকে একঘেয়েমি হওয়ার অর্থ কী তা এই উপার্জনটি পড়ে উপকার পেতে পারে।


1
"সম্ভবত কিছু বাধ্যতামূলক পরিচারক দ্বারা" - বা, যেমন আমরা এই সাইটের কাছে স্নেহে তাদের উল্লেখ করি, একজন একজন মডারেটর :-)
অর্ধেক

6

আমি ওয়ার্কিং ম্যাথমেটিশিয়ানদের জন্য ম্যাক লেনের বিভাগীয় তত্ত্ব থেকে কুখ্যাত উদ্ধৃতিটির অনুধাবনকে আরও ভাল করে বুঝতে এই পোস্টে এসেছি ।

কোনটি কী তা বর্ণনা করতে গিয়ে এটি প্রায়শই সমানভাবে কার্যকর হয় যা তা নয় describe

ম্যাক লেনটি একটি মোনাডকে বর্ণনা করার জন্য বর্ণনাকে ব্যবহার করে, এটি বোঝাতে পারে যে এটি মনদেদের কাছে অনন্য কিছু বর্ণনা করে। আমার সাথে সহ্য করুন। বিবৃতিটির বিস্তৃত বোঝার বিকাশের জন্য, আমি বিশ্বাস করি যে এটি স্পষ্ট করে বলা দরকার যে তিনি মনাদের কাছে অনন্য যে কোনও কিছু বর্ণনা করছেন না ; বিবৃতিটি অন্যদের মধ্যে প্রযোজ্য এবং তীরকে সমানভাবে বর্ণনা করে। একই কারণে আমরা ইনট (সুম এবং পণ্য) এ দুটি মনোয়েড রাখতে পারি, এন্ডোফান্টেক্টরগুলির ক্যাটাগরিতে এক্সে আমরা বেশ কয়েকটি মনোয়েড রাখতে পারি। তবে এর মিলও রয়েছে আরও অনেক কিছু।

মোনাড এবং আবেদনকারী উভয়ই এই শর্ত পূরণ করে:

  • এন্ডো => যে কোনও তীর বা মোরিফিজম শুরু এবং একই জায়গায় শেষ হয়
  • ফান্টেক্টর => যে কোনও তীর বা দুটি বিভাগের মধ্যে মরফিজম

    (যেমন, দিনে দিনে Tree a -> List b, তবে বিভাগে Tree -> List)

  • monoid => একক বস্তু; উদাহরণস্বরূপ, একক প্রকার, তবে এই প্রসঙ্গে কেবল বাহ্যিক স্তরের ক্ষেত্রে; সুতরাং, আমাদের থাকতে পারে না Tree -> List, শুধুমাত্র List -> List

বিবৃতিটি "বিভাগের ..." ব্যবহার করে এটি বিবৃতিটির ক্ষেত্রকে সংজ্ঞায়িত করে। উদাহরণস্বরূপ, Functor শ্রেণী পরিধি বর্ণনা f * -> g *, অর্থাত্, Any functor -> Any functor, যেমন, Tree * -> List *বা Tree * -> Tree *

একটি শ্রেণিবদ্ধ বিবৃতি কী এবং যেখানে সমস্ত কিছুর অনুমতি রয়েছে তা বর্ণনা করে না ।

এই ক্ষেত্রে, ফান্টেক্টরের অভ্যন্তরে, * -> *ওরফে a -> bনির্দিষ্ট করা হয়নি যার অর্থ Anything -> Anything including Anything else। আমার কল্পনাটি আন্ত -> স্ট্রিংয়ে লাফিয়ে উঠার সাথে সাথে এটিও অন্তর্ভুক্ত হয় Integer -> Maybe Intবা Maybe Double -> Either String Intযেখানে a :: Maybe Double; b :: Either String Int

সুতরাং বিবৃতি নীচে একসাথে আসে:

  • ফান্টর স্কোপ :: f a -> g b(যেমন, কোনও প্যারামিটারাইজড টাইপের কোনও প্যারামিটারাইজড টাইপ)
  • এন্ডো + ফান্টেক্টর :: f a -> f b(অর্থাত্, একই প্যারামিটারাইজড টাইপের যে কোনও একটি প্যারামিটারাইজড টাইপ) ... অন্যভাবে বলেছে,
  • এন্ডোফান্টর ক্যাটাগরিতে একটি মায়োড

সুতরাং, এই নির্মাণের শক্তি কোথায়? সম্পূর্ণ গতিশীলতার প্রশংসা করার জন্য, আমাকে দেখতে হবে যে কোনও মনোয়েডের সাধারণ অঙ্কন (একটি পরিচয় তীরের মতো দেখতে একক বস্তু :: single object -> single object), এটি ব্যাখ্যা করতে ব্যর্থ হয় যে আমাকে কোনও সংখ্যক মনয়েড মানগুলির সাথে প্যারামিটারাইজড একটি তীর ব্যবহার করার অনুমতি দেওয়া হয়েছে , মনোয়েডে অনুমোদিত এক ধরণের অবজেক্ট থেকে । সমতুল্যতার এন্ডো, ~ পরিচয় তীর সংজ্ঞা ফান্টারের ধরণের মান এবং সর্বাধিক অভ্যন্তরীণ, "পেডলোড" স্তরের প্রকার এবং মান উভয়কে উপেক্ষা করে । সুতরাং, ফান্টিকোরিয়াল প্রকারগুলি মেলে এমন কোনও পরিস্থিতিতে সমতা ফেরায় (উদাহরণস্বরূপ, তারা উভয় সমতুল্য )।trueNothing -> Just * -> NothingJust * -> Just * -> Just *Maybe -> Maybe -> Maybe

সাইডবার: ~ বাহিরে ধারণাগত, তবে এটি মধ্যে বামে সবচেয়ে প্রতীক f a। এটি "হ্যাস্কেল" প্রথমে কী পড়বে তা বর্ণনা করে (বড় চিত্র); সুতরাং প্রকারের মানের সাথে প্রকারের "বাইরের" হয়। প্রোগ্রামিংয়ে স্তরগুলির (রেফারেন্সগুলির একটি শৃঙ্খলার) মধ্যে সম্পর্ক বিভাগে সম্পর্কিত হওয়া সহজ নয়। বিভাগের সেটটি টাইপগুলি (ইন্ট, স্ট্রিংস, ইনট ইত্যাদি) বর্ণনা করতে ব্যবহৃত হয় যার মধ্যে ফ্যাক্টরের বিভাগ (প্যারামিটারাইজড টাইপস) অন্তর্ভুক্ত রয়েছে। রেফারেন্স চেইন: ফান্টকারের ধরণ, ফান্টারের মানগুলি (সেই ফান্টাক্টরের সেটের উপাদানগুলি, উদাহরণস্বরূপ, কিছুই নয়, জাস্ট) এবং এর পরিবর্তে সমস্ত কিছু প্রতিটি ফান্টারের মান নির্দেশ করে। বিভাগে সম্পর্কটিকে আলাদাভাবে বর্ণনা করা হয়, যেমন, return :: a -> m aএকটি ফান্টেক্টর থেকে অন্য ফান্টারে একটি প্রাকৃতিক রূপান্তর হিসাবে বিবেচিত হয় , যা এতদূর উল্লিখিত কিছু থেকে আলাদা।

মূল থ্রেডে ফিরে যান, সর্বোপরি কোনও নির্ধারিত টেনসর পণ্য এবং একটি নিরপেক্ষ মানের জন্য, বিবৃতিটি তার বিপরীতমুখী কাঠামো থেকে জন্মগ্রহণকারী আশ্চর্যজনকভাবে শক্তিশালী গণনার কাঠামোর বর্ণনা দিয়ে শেষ করে:

  • বাইরের দিকে এটি একটি একক বস্তুর (যেমন, :: List) হিসাবে উপস্থিত হয় ; স্থির
  • তবে ভিতরে, অনেক গতিশীলতার অনুমতি দেয়
    • যে কোন ধনুর কার্যকারিতা হিসাবে ভোজন হিসাবে একই ধরণের যেকোন সংখ্যার মান (যেমন, খালি | E ননএম্পটি)। টেনসর পণ্যটি বহিরাগত স্তরের (the foldযে পে-লোড সম্পর্কে কিছুই বলে না) একক মানকে কোনও সংখ্যক ইনপুট হ্রাস করবে )
    • অভ্যন্তরীণ সর্বাধিক স্তরের জন্য প্রকার এবং মান উভয়ের অসীম পরিসর

হাস্কেল-তে বিবৃতিটির প্রয়োগযোগ্যতার বিষয়টি স্পষ্ট করা গুরুত্বপূর্ণ। এই নির্মাণের শক্তি এবং বহুমুখিতাটির প্রতি মেনডের সাথে একেবারেই করার কিছুই নেই । অন্য কথায়, কনস্ট্রাক্ট কোন মনডকে অনন্য করে তোলে তার উপর নির্ভর করে না।

একে অপরের উপর নির্ভর করে যে গণনাগুলি সমান্তরালভাবে চালানো যেতে পারে, বনাম গণনাগুলি সমর্থন করার জন্য একটি ভাগ করা প্রসঙ্গে কোড তৈরি করার চেষ্টা করার সময়, এই কুখ্যাত বিবৃতিটি যতটা বর্ণিত হয়েছে, এর পছন্দগুলির মধ্যে বিপরীত নয় প্রয়োগকারী, তীর এবং মনডস, বরং তারা কতটা একই তার একটি বিবরণ। হাতে নেওয়া সিদ্ধান্তের জন্য, বিবৃতিটি গতিময়।

এটি প্রায়শই ভুল বোঝাবুঝি হয়। বিবৃতিটি join :: m (m a) -> m aমনোয়েডাল এন্ডোফান্টরটির টেনসর পণ্য হিসাবে বর্ণনা করতে চলেছে। তবে, এই বিবৃতিটির প্রসঙ্গে (<*>)কীভাবে এটিও বেছে নেওয়া যেতে পারে তা স্পষ্ট করে বলা যায় না । এটি ছয় / অর্ধ ডজনের একটি উদাহরণ। মানগুলির সংমিশ্রণের জন্য যুক্তি হুবহু এক রকম; একই ইনপুট প্রতিটি থেকে একই আউটপুট উত্পন্ন করে (ইনট এর জন্য যোগফল এবং পণ্য মনোয়েদের বিপরীতে কারণ তারা ইনটগুলি সংযুক্ত করার সময় বিভিন্ন ফলাফল উত্পন্ন করে)।

সুতরাং, পুনরুদ্ধার করতে: এন্ডোফান্টেক্টরগুলির বিভাগে একটি মনোড বর্ণনা করে:

   ~t :: m * -> m * -> m *
   and a neutral value for m *

(<*>)এবং (>>=)উভয়ই mএকক রিটার্ন মান গণনা করার জন্য দুটি মানগুলিতে একযোগে অ্যাক্সেস সরবরাহ করে । রিটার্ন মান গণনা করতে ব্যবহৃত যুক্তিটি হুবহু এক। যদি ফাংশন তারা (parameterize বিভিন্ন আকার না থাকত f :: a -> bবনাম k :: a -> m b(অর্থাৎ,) এবং গণনার একই রিটার্ন টাইপ সঙ্গে প্যারামিটারের অবস্থান a -> b -> bবনাম b -> a -> bজন্য প্রতিটি যথাক্রমে), আমি সন্দেহ আমরা monoidal যুক্তি, স্থিতিমাপ পারতেন উভয় সংজ্ঞাতে পুনরায় ব্যবহারের জন্য সেন্সর পণ্য। একটি ব্যায়াম বক্তব্য প্রকাশ করতে হিসাবে, চেষ্টা করুন এবং বাস্তবায়ন ~t, এবং আপনি দিয়ে শেষ (<*>)এবং (>>=)কিভাবে আপনি এটা সংজ্ঞায়িত করার সিদ্ধান্ত নেন তার উপর নির্ভর করে forall a b

যদি আমার শেষ পয়েন্টটি সর্বনিম্ন ধারণাগতভাবে সত্য হয় তবে এটি প্রয়োগকারী এবং মোনাডের মধ্যে সুনির্দিষ্ট এবং কেবল গণ্যগত পার্থক্য ব্যাখ্যা করে: যে ফাংশনগুলি তারা প্যারামিটারাইজ করে। অন্য কথায়, পার্থক্যটি এই ধরণের শ্রেণীর প্রয়োগের জন্য বাহ্যিক

উপসংহারে, আমার নিজের অভিজ্ঞতায়, ম্যাক লেনের কুখ্যাত উদ্ধৃতিটি হ্যাস্কেল-এর ব্যবহৃত আইডিয়ামগুলি আরও ভালভাবে বোঝার জন্য বিভাগের মাধ্যমে আমার পথে নেভিগেট করার সময় আমার জন্য একটি দুর্দান্ত "গোটো" মেম সরবরাহ করেছিল। এটি হাস্কেলের মধ্যে দুর্দান্তভাবে অ্যাক্সেসযোগ্য একটি শক্তিশালী কম্পিউটিং ক্ষমতার সুযোগ অর্জনে সাফল্য অর্জন করে।

যাইহোক, আমি প্রথমে মনোদের বাইরের বিবৃতিটির প্রয়োগযোগ্যতাটিকে কীভাবে ভুল বুঝলাম এবং আমি এখানে কী আশাবাদ ব্যক্ত করেছি তাতে বিড়ম্বনা রয়েছে। এটি বর্ণিত সমস্ত কিছুই প্রয়োগকারী এবং মনাদাদের (এবং অন্যদের মধ্যে তীর) এর মধ্যে যা একই রকম তা হতে পারে। এটি যা বলে না তা হ'ল তাদের মধ্যে অবশ্যই ছোট তবে দরকারী পার্থক্য।

- ই


5

এখানে দেওয়া উত্তরগুলি মনো এবং মোনাদ উভয়কেই সংজ্ঞায়িত করার ক্ষেত্রে দুর্দান্ত কাজ করে, তবে তারা এখনও এই প্রশ্নের উত্তর বলে মনে হচ্ছে না:

এবং একটি কম গুরুত্বপূর্ণ নোটের উপর, এটি কি সত্য এবং যদি আপনি কোনও ব্যাখ্যা দিতে পারতেন (আশা করি এমন একটি যা বুঝতে পারে যে যার সাথে বেশি হাস্কেলের অভিজ্ঞতা নেই)?

এখানে যে বিষয়টি অনুপস্থিত তা এর ক্রুक्सটি হ'ল "মনোয়েড" এর আলাদা ধারণা, তথাকথিত শ্রেণিবদ্ধকরণ আরও স্পষ্টভাবে - একঘটিত শ্রেণিতে মনোয়েডের মধ্যে একটি। দুঃখের বিষয় ম্যাক লেনের বই নিজেই এটিকে খুব বিভ্রান্ত করেছে :

Xসবকটিই বলেছিলেন, একটি মোনাড ইন এর এন্ডোফান্টরগুলির বিভাগে কেবল একটি মনোড X, এন্ডোফান্টরগুলির সংস্থার ×দ্বারা উত্পাদিত পণ্য এবং পরিচয় এন্ডোফান্টর দ্বারা নির্ধারিত ইউনিট যুক্ত রয়েছে।

মূল বিভ্রান্তি

কেন এই বিভ্রান্তিকর? কারণ এটি "এন্ডোফান্টেক্টরগুলির ক্যাটাগরিতে মনয়েড" কী তা নির্ধারণ করে না X। পরিবর্তে, এই বাক্যটি বাইনারি অপারেশন হিসাবে ফান্টারের সংমিশ্রণ এবং একঘেয়ে একক হিসাবে পরিচয় ফ্যান্টারের সাথে একসাথে সমস্ত এন্ডোফান্টরসগুলির সেটের মধ্যে একটি মনোয়েড রাখার পরামর্শ দেয় । যা পুরোপুরি সূক্ষ্মভাবে কাজ করে এবং এন্ডোফান্টেক্টরগুলির কোনও মনিডে রূপান্তরিত করে যা পরিচয় ফান্টর ধারণ করে এবং ফান্টারের রচনার অধীনে বন্ধ থাকে।

তবুও এটি সঠিক ব্যাখ্যা নয়, যা বইটি সেই পর্যায়ে পরিষ্কার করতে ব্যর্থ হয়েছে। একটি মোনাড fএকটি স্থির এন্ডোফান্টর, রচনার অধীনে বন্ধ হওয়া এন্ডোফান্টরসগুলির একটি উপসেট নয়। একটি সাধারণ নির্মাণ ব্যবহার করা fথেকে উৎপন্ন সব সেট গ্রহণ করে একটি monoid kধা কম্পোজিশনের f^k = f(f(...))এর fনিজেই সঙ্গে সহ k=0পরিচয় যে অনুরূপ f^0 = id। এবং এখন এই Sসমস্ত ক্ষমতার সেটটি k>=0প্রকৃতপক্ষে একটি মনোড "পণ্য সহ is এন্ডোফান্টরগুলির সংস্থার দ্বারা প্রতিস্থাপন এবং আইডেন্টিটি এন্ডোফান্টর দ্বারা সেট ইউনিট"।

এবং এখনো:

  • এই মনয়েডটি Sকোনও ফান্টারের জন্য fবা এমনকি আক্ষরিক অর্থে কোনও স্ব-মানচিত্রের জন্য সংজ্ঞায়িত করা যেতে পারে X। এটি তৈরি করা মনোয়েড f
  • ফান্টর Sকম্পোজিশনের দেওয়া মোনোডিয়াল স্ট্রাকচার এবং আইডেন্টিটি ফ্যান্টারের মনোড fনা হওয়ার সাথে কিছু নেই ।

এবং বিষয়গুলিকে আরও বিভ্রান্ত করার জন্য, "মনোয়েডাল বিভাগে মনোয়েড" এর সংজ্ঞা বইয়ের পরে আসে কারণ আপনি বিষয়বস্তুর সারণী থেকে দেখতে পাচ্ছেন । এবং তবুও এই ধারণাটি বোঝা মনাদের সাথে সংযোগ বোঝার জন্য একেবারে সমালোচিত।

(কঠোর) একঘেয়েমি বিভাগ

মনোয়েডসের সপ্তম অধ্যায়ে যাচ্ছেন (যা মোনাদসে Chapter ষ্ঠ অধ্যায়ের পরে আসে), আমরা তথাকথিত কঠোর মনোঅডিয়াল বিভাগের ট্রিপল হিসাবে সংজ্ঞা পাই (B, *, e), যেখানে Bএকটি বিভাগ, *: B x B-> Bএকটি দ্বিখণ্ডক (অন্যান্য উপাদানগুলির সাথে প্রতিটি উপাদানকে সম্মানের সাথে ফান্টেক্টর সংশোধন করা হয়েছে) ) এবং মিশ্রিতকরণ এবং ইউনিট আইনগুলিকে সন্তুষ্ট করে eএকটি ইউনিট অবজেক্ট B:

(a * b) * c = a * (b * c)
a * e = e * a = a

এর যে কোনও অবজেক্টের a,b,cজন্য B, এবং কোনও পরিবর্তিত প্রতিস্থাপনের a,b,cসাথে একই পরিচয়টি চিহ্নিতকরণের রূপচর্চা । এটি এখন পর্যবেক্ষণযোগ্য যে আমাদের আগ্রহের ক্ষেত্রে, যেখানে প্রাকৃতিক রূপান্তরগুলি সহ আকারের রূপগুলি, ফান্টারের সংমিশ্রণ এবং পরিচয় ফান্টিকার হিসাবে বিভাগ রয়েছে , এই সমস্ত আইন সন্তুষ্ট, যেমন প্রত্যক্ষভাবে যাচাই করা যায়।eid_eeBX*e

বইয়ের পরে যা আসে তা হ'ল "রিলাক্সড" মনোয়েডাল ক্যাটাগরির সংজ্ঞা , যেখানে আইনগুলি কেবলমাত্র কিছু নির্দিষ্ট প্রাকৃতিক রূপান্তরকে তথাকথিত সংহতিপূর্ণ সম্পর্কের সন্তুষ্ট করে রাখে , যা এন্ডোফান্টেক্টর বিভাগগুলির ক্ষেত্রে আমাদের ক্ষেত্রে গুরুত্বপূর্ণ নয়।

মনোয়েডাল বিভাগে মনয়েডস

অবশেষে, অষ্টম অধ্যায়ের 3 "মনোয়েডস" বিভাগে, আসল সংজ্ঞা দেওয়া হয়েছে:

একজন monoid cএকটি monoidal বিষয়শ্রেণীতে অন্তর্ভুক্ত (B, *, e)হল একটি অবজেক্ট Bদুই তীর সহ (morphisms)

mu: c * c -> c
nu: e -> c

3 ডায়াগ্রাম কমিটিকেটিভ করা। মনে রাখবেন যে আমাদের ক্ষেত্রে, এগুলি হ'ল এন্ডোফান্টেক্টরগুলির বিভাগের আকারগুলি, যা প্রাকৃতিক রূপান্তরগুলি যথাযথভাবে joinএবং returnএকটি মনডের সাথে সম্পর্কিত। যখন আমরা রচনা করতে সংযোগ এমনকি পরিষ্কার হয়ে *অনেক বেশী সুনিদৃষ্ট, প্রতিস্থাপন c * cদ্বারা c^2, যেখানে cআমাদের একসংখ্যা হয়।

পরিশেষে, লক্ষ্য করুন যে 3 টি পরিবর্তনীয় ডায়াগ্রামগুলি (মোনোডাল ক্যাটাগরিতে একটি মোনয়েডের সংজ্ঞায়) সাধারণ (অ-কঠোর) একনিডিয়াল বিভাগের জন্য রচিত, যখন আমাদের ক্ষেত্রে মনোয়েডাল বিভাগের অংশ হিসাবে উদ্ভূত সমস্ত প্রাকৃতিক রূপান্তরগুলি আসলে পরিচয়। এটি চিত্রগুলি সম্পূর্ণরূপে তৈরি করে একটি মোনাডের সংজ্ঞা অনুসারে চিত্রগুলি হুবহু একই রকম করবে।

উপসংহার

সংক্ষেপে, কোনও মোনাড সংজ্ঞা অনুসারে একটি এন্ডোফান্টর হয়, সুতরাং এন্ডোফান্টেক্টর বিভাগের মধ্যে একটি বস্তু যেখানে monadic joinএবং returnঅপারেটররা নির্দিষ্ট (কঠোর) মনোয়েডাল ক্যাটাগরির কোনও মনোয়েডের সংজ্ঞা পূরণ করে । তদ্বিপরীত, এন্ডোফান্টেক্টরগুলির মোনোডাল ক্যাটাগরির যে কোনও মনোয়েড সংজ্ঞা (c, mu, nu)অনুসারে একটি বস্তু এবং দুটি তীর সমন্বিত একটি ট্রিপল হয় , যেমন আমাদের ক্ষেত্রে প্রাকৃতিক রূপান্তরকরণ, মনড হিসাবে একই আইনকে সন্তুষ্ট করে।

অবশেষে, (ক্লাসিকাল) মনোয়েড এবং মনোয়েডাল বিভাগগুলিতে আরও সাধারণ মনোয়েডের মধ্যে মূল পার্থক্যটি নোট করুন। দুই তীর muএবং nuউপরে আর একটি বাইনারি অপারেশন এবং একটি সেটের একটি ইউনিট নয়। পরিবর্তে, আপনার একটি স্থির এন্ডোফান্টর রয়েছে c*বইটিতে এই বিভ্রান্তিকর মন্তব্য সত্ত্বেও একা ফান্টর কম্পোজিশন এবং পরিচয় ফান্টার মনোদের জন্য প্রয়োজনীয় সম্পূর্ণ কাঠামো সরবরাহ করে না।

আর একটি পদ্ধতি হ'ল Cকোনও সেটের সমস্ত স্ব-মানচিত্রের স্ট্যান্ডার্ড মনোয়েডের সাথে তুলনা করা হবে A, যেখানে বাইনারি অপারেশনটি রচনা, যাতে স্ট্যান্ডার্ড কার্তেসিয়ান পণ্যটিকে মানচিত্র করতে দেখা C x Cযায় C। Categorified monoid করতে পাসিং, আমরা কার্টিজিয়ান পণ্য প্রতিস্থাপন হচ্ছে যাতে xfunctor রচনা সঙ্গে *, এবং বাইনারি অপারেশন প্রাকৃতিক রূপান্তর দিয়ে প্রতিস্থাপিত পরার muথেকে c * cথেকে c, যে একটি সংগ্রহ joinঅপারেটার

join: c(c(T))->c(T)

প্রতিটি বস্তুর জন্য T(প্রোগ্রামিং টাইপ)। এবং ক্লাসিকাল মনোয়েডগুলিতে সনাক্তকরণ উপাদানগুলি, যা একটি নির্দিষ্ট এক-পয়েন্ট-সেট থেকে মানচিত্রের চিত্রগুলির সাথে চিহ্নিত করা যায়, returnঅপারেটরগুলির সংগ্রহের সাথে প্রতিস্থাপিত হন

return: T->c(T) 

তবে এখন আর কারটিশিয়ান পণ্য নেই, সুতরাং কোনও জোড় উপাদান এবং এইভাবে বাইনারি অপারেশন নেই।


সুতরাং আপনার প্রশ্নের উত্তরটি কি "এই সত্য" প্রশ্নের অংশ? এটি কি সত্য যে একটি মোনাডটি এন্ডোফান্টেক্টরগুলির বিভাগে মোনয়েড? এবং যদি হ্যাঁ, একটি মনোয়েড এবং একটি বীজগণিত মনয়েড (একটি সহযোগী গুণ এবং একটি ইউনিটের একটি সেট) এর বিভাগীয় তত্ত্ব ধারণার মধ্যে কী সম্পর্ক?
আলেকজান্ডার বেলোপলস্কি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.