it-swarm.asia

ماذا يعني "جبر الفحم" في سياق البرمجة؟

لقد سمعت مصطلح "جبر الفحم" عدة مرات في دوائر البرمجة الوظيفية ودوائر PLT ، خاصةً عندما يكون النقاش يدور حول كائنات ، كوموناد ، عدسات ، وما شابه. غوغلينغ هذا المصطلح يعطي الصفحات التي تعطي وصفا رياضيا لهذه الهياكل التي هي غير مفهومة إلى حد كبير بالنسبة لي. هل يمكن لأي شخص أن يوضح ما الذي تعنيه كلمة جبر الفحم في سياق البرمجة ، وما هي أهميتها ، وكيف ترتبط بالأشياء والمكونات؟

328
missingfaktor

من خلال الاطلاع على ورقة البرنامج التعليمي A تعليمي حول الجبر (المشترك) و (co)) يجب أن يمنحك نظرة ثاقبة حول الجبر المشترك في علوم الكمبيوتر.

أدناه هو الاقتباس منه لإقناعك ،

بعبارات عامة ، يقوم برنامج في بعض لغات البرمجة بمعالجة البيانات. أثناء تطور علم الكمبيوتر على مدى العقود القليلة الماضية ، أصبح من الواضح أن الوصف التجريدي لهذه البيانات أمر مرغوب فيه ، على سبيل المثال للتأكد من أن برنامج الشخص لا يعتمد على التمثيل المعين للبيانات التي يعمل عليها. أيضا ، مثل هذا التجريد يسهل صحة البراهين.
أدت هذه الرغبة إلى استخدام الأساليب الجبرية في علوم الكمبيوتر ، في فرع يسمى المواصفات الجبرية أو نظرية نوع البيانات المجردة. الهدف من الدراسة هو أنواع البيانات في حد ذاتها ، وذلك باستخدام مفاهيم التقنيات التي هي مألوفة من الجبر. غالبًا ما يتم إنشاء أنواع البيانات المستخدمة من قبل علماء الكمبيوتر من مجموعة معينة من عمليات (المُنشئ) ، ولهذا السبب تلعب "بدائية" الجبر دورًا مهمًا.
أثبتت تقنيات الجبر القياسية أنها مفيدة في التقاط مختلف الجوانب الأساسية لهياكل البيانات المستخدمة في علوم الكمبيوتر. ولكن تبين أنه من الصعب وصف بعض الهياكل الديناميكية بطبيعتها التي تحدث في الحوسبة جبريًا. مثل هذه الهياكل عادة ما تنطوي على فكرة الدولة ، والتي يمكن أن تتحول بطرق مختلفة. تستفيد المقاربات الرسمية لهذه الأنظمة الديناميكية القائمة على الدولة بشكل عام من أنظمة الأتمتة أو الانتقالية ، كمراجع مبكرة كلاسيكية.
خلال العقد الماضي ، نمت بصيرة تدريجية مفادها أن مثل هذه الأنظمة القائمة على الدولة لا ينبغي أن توصف بأنها جبر ، ولكن ما يسمى بالجبر المشترك. هذه هي ثنائية الجبر الرسمية ، بطريقة ستصبح دقيقة في هذا البرنامج التعليمي. الخاصية المزدوجة لـ "البدائية" للجبر ، وتحديدا النهاية تبين أنها حاسمة لمثل هذه الجبر المشترك. ومبدأ التفكير المنطقي المطلوب لمثل هذه الجبر المشترك النهائي ليس الحث بل المشاركة في الحث.


مقدمة ، حول نظرية الفئة. يجب أن تكون نظرية الفئة هي إعادة تسمية نظرية الدالات. كما الفئات هي ما يجب على المرء أن يحدد من أجل تحديد functor. (علاوة على ذلك ، فإن الدوافع هي ما يجب تحديده من أجل تحديد التحولات الطبيعية.)

ما هو functor؟ إنه تحول من مجموعة إلى أخرى والتي تحافظ على بنيتها. (لمزيد من التفاصيل هناك الكثير من الوصف الجيد على الشبكة).

ما هو F- الجبر؟ إنها جبر functor. انها مجرد دراسة لصلاحية functor العالمية.

كيف يمكن أن يكون رابط لعلوم الكمبيوتر؟ يمكن عرض البرنامج كمجموعة منظمة من المعلومات. يتوافق تنفيذ البرنامج مع تعديل هذه المجموعة المنظمة من المعلومات. من الجيد أن التنفيذ يجب أن يحافظ على هيكل البرنامج. بعد ذلك ، يمكن أن يكون التنفيذ بمثابة تطبيق للناقل على هذه المجموعة من المعلومات. (الشخص الذي يحدد البرنامج).

لماذا F- الجبر المشترك؟ البرنامج مزدوج من حيث الجوهر لأنه يصف بالمعلومات ويعمل على ذلك. ثم بشكل رئيسي المعلومات التي يؤلف البرنامج وجعلها تتغير يمكن عرضها في اتجاهين.

  • البيانات التي يمكن تعريفها على أنها المعلومات التي تتم معالجتها بواسطة البرنامج.
  • حدد الحالة التي يمكن تعريفها على أنها المعلومات التي يشاركها البرنامج.

ثم في هذه المرحلة ، أود أن أقول ذلك ،

  • F-algebra هي دراسة التحول الحركي الذي يعمل على عالم البيانات (كما تم تعريفه هنا).
  • F-co-algebras هي دراسة التحول functorial التي تعمل على كون الدولة (كما تم تعريفها هنا).

خلال عمر البرنامج ، تتعايش البيانات والحالة ، ويكمل كل منهما الآخر. هم مزدوج.

37
zurgl

سأبدأ بأشياء ذات صلة بالبرمجة ومن ثم أضف بعضًا من مواد الرياضيات ، لإبقائها ملموسة قدر الإمكان.


دعنا نقتبس من بعض علماء الكمبيوتر على التزاوج ...

http://www.cs.umd.edu/~micinski/posts/2012-09-04-on-understanding-coinduction.html

الحث يدور حول البيانات المحدودة ، الحث المشترك يدور حول البيانات غير المحدودة.

المثال النموذجي للبيانات لانهائية هو نوع قائمة كسول (دفق). على سبيل المثال ، دعنا نقول أن لدينا الكائن التالي في الذاكرة:

 let (pi : int list) = (* some function which computes the digits of
 π. *)

لا يمكن لجهاز الكمبيوتر الاحتفاظ بكامله because ، لأنه يحتوي فقط على كمية محدودة من الذاكرة! ولكن ما يمكن القيام به هو عقد برنامج محدود ، والذي سيؤدي إلى أي توسع طويل بشكل تعسفي π تريده. طالما أنك تستخدم قطعًا محدودة من القائمة ، يمكنك حساب تلك القائمة غير المحدودة بقدر ما تحتاج.

ومع ذلك ، خذ بعين الاعتبار البرنامج التالي:

let print_third_element (k : int list) =   match k with
     | _ :: _ :: thd :: tl -> print thd


 print_third_element pi

يجب أن يطبع هذا البرنامج الرقم الثالث من pi. لكن في بعض اللغات ، يتم تقييم أي وسيطة لوظيفة ما قبل نقلها إلى دالة (تقييم صارم وليس كسول). إذا استخدمنا ترتيب التخفيض هذا ، فسيتم تشغيل برنامجنا أعلاه لحساب أرقام pi قبل أن يتم نقله إلى وظيفة الطابعة لدينا (وهو ما لا يحدث أبدًا). نظرًا لأن الجهاز لا يحتوي على ذاكرة لا نهائية ، فسوف ينفد البرنامج في النهاية من الذاكرة ويعطل. قد لا يكون هذا هو أفضل ترتيب للتقييم.

http://adam.chlipala.net/cpdt/html/Coinductive.html

في لغات البرمجة الوظيفية البطيئة مثل Haskell ، توجد هياكل بيانات لا حصر لها في كل مكان. توفر القوائم اللانهائية وأنواع البيانات الأكثر غرابة التجريدات الملائمة للتواصل بين أجزاء البرنامج. يتطلب تحقيق راحة مماثلة دون وجود هياكل كسول لا حصر له ، في كثير من الحالات ، انقلابات بهلوانية لتدفق التحكم.

http://www.alexandrasilva.org/#/talks.html examples of coalgebras by Alexandra Silva


ربط السياق الرياضي المحيط بمهام البرمجة المعتادة

ما هو "الجبر"؟

تبدو الهياكل الجبرية بشكل عام:

  1. Stuff
  2. ما الاشياء يمكن القيام به

هذا يجب أن يبدو مثل الكائنات مع 1. الخصائص و 2. الأساليب. أو حتى أفضل ، يجب أن يبدو مثل توقيعات الكتابة.

تتضمن الأمثلة الرياضية القياسية "مجموعة أحادية الاتجاه" و "متجه الفضاء" و "جبر". تشبه الأحاديات الأوتوماتيكية: تسلسل الأفعال (على سبيل المثال ، f.g.h.h.nothing.f.g.f). سجل git الذي يضيف دائمًا السجل ولا يحذفه أبدًا سيكون أحاديًا ولكن ليس مجموعة. إذا قمت بإضافة مقلوب (على سبيل المثال ، الأرقام السالبة ، الكسور ، الجذور ، حذف السجل المتراكم ، إلغاء تحطيم نسخة متطابقة) ، فستحصل على مجموعة.

تحتوي المجموعات على أشياء يمكن إضافتها أو طرحها معًا. على سبيل المثال ، يمكن إضافة Durations معًا. (لكن Dates لا تستطيع). تعيش فترات زمنية في فضاء متجه (وليس مجرد مجموعة) لأنه يمكن أيضًا تحجيمها بواسطة أرقام خارجية. (توقيع نوع scaling :: (Number,Duration) → Duration.)

يمكن للجبر-المساحات المتجهة أن تفعل شيئًا آخر: هناك بعض m :: (T,T) → T. اطلق على هذا "الضرب" أو لا ، لأنه بمجرد مغادرتك Integers يصبح أقل وضوحًا ما "الضرب" (أو "الأس" ).

(وهذا هو السبب في أن الناس ينظرون إلى الخصائص العالمية (نظرية الفئة): لإخبارهم بما يجب أن يكون الضرب فعل أو يكون مثل:

universal property of product )


الجبر → جبر الفحم

يعد التكرار أسهل في التعريف بطريقة غير تعسفية ، بدلاً من الضرب ، لأن الانتقال من T → (T,T) يمكنك فقط تكرار نفس العنصر. ("الخريطة القطرية" - مثل المصفوفات/العوامل القطرية في النظرية الطيفية)

عادةً ما يكون Counit هو التتبع (مجموع الإدخالات القطرية) ، على الرغم من أن المهم هو مرة أخرى ما هو counit does؛ trace هي مجرد إجابة جيدة للمصفوفات.

سبب إلقاء نظرة على مساحة مزدوجة بشكل عام ، هو لأنه من الأسهل التفكير في هذا الفضاء. على سبيل المثال ، من الأسهل في بعض الأحيان التفكير في ناقل عادي عن المستوى العادي ، ولكن يمكنك التحكم في الطائرات (بما في ذلك الطائرات الفائقة) باستخدام المتجهات (والآن أتحدث عن المتجه الهندسي المألوف ، كما هو الحال في جهاز تتبع الأشعة) .


ترويض البيانات غير المنظمة

قد يصمم علماء الرياضيات نموذجًا ممتعًا مثل TQFT's ، بينما يتعين على المبرمجين أن يتصارعوا مع

  • التواريخ/الأوقات (+ :: (Date,Duration) → Date) ،
  • الأماكن (Paris(+48.8567,+2.3508)! إنه شكل وليس نقطة.) ،
  • jSON غير منظم والذي من المفترض أن يكون ثابتًا بشكل ما ،
  • xML خاطئ ولكن وثيق ،
  • بيانات نظم المعلومات الجغرافية المعقدة بشكل لا يصدق والتي ينبغي أن تلبي الكثير من العلاقات المعقولة ،
  • التعبيرات العادية التي {يعني شيئًا لك ، ولكنها تعني أقل بكثير بالنسبة لبيرل.
  • إدارة علاقات العملاء (CRM) التي يجب أن تحتوي على جميع أرقام هواتف السلطة التنفيذية ومواقع الفلل وأسماء زوجته وأطفاله (السابقين الآن) وميلادهم وجميع الهدايا السابقة ، والتي يجب أن ترضي كل واحدة منها العلاقات "الواضحة" (الواضحة للعملاء) والتي لا تصدق من الصعب ترميز ،
  • .....

عند التحدث عن علماء الفحم ، عادة ما يضع علماء الحاسوب عمليات ضبط ، مثل المنتج الديكارتي. وأعتقد أن هذا هو ما يعنيه الناس عندما يقولون مثل "الجبر هي جبر الفحم في هاسكل". ولكن إلى الحد الذي يتعين على المبرمجين فيه أن يصمموا أنواع البيانات المعقدة مثل Place و Date/Time و Customer - وجعلوا هذه النماذج تبدو مثل العالم الحقيقي (أو على الأقل رؤية المستخدم النهائي للعالم الحقيقي) قدر الإمكان — أنا نعتقد الثنائيات ، يمكن أن تكون مفيدة وراء مجموعة العالم فقط.

4
isomorphismes