نظرية التشغيل الذاتي
نظرية التشغيل الذاتي أو نظرية الآلات ذاتية التشغيل أو نظرية الآلات المجرّدة (الإنجليزية: Automata Theory) هي نظرية تهتم بتعريف ودراسة خواص الآلات الحاسوبية المجرّدة.[1][2][3] تاريخيّا دُرست قضايا هذه النظرية كتصوّر للحساب الإلكتروني قبل ظهور الحواسيب الحديثة لكنّها أثبتت قدرتها على تمثيل العديد من العمليات الحاسوبيّة في وقتنا الحالي، وتستخدم بكثرة كأداة للبرهان الرياضي الحاسوبي، لذلك فهي تعتبر من أهمّ ركائز علوم الحاسوب النظرية والأنظمة المنهجية.
تعتبر الآلة ذاتية التشغيل نموذجاً رياضياً للآلات المجرّدة؛ وهي آلات لها حالات مختلفة، تبدأ في حالة معيّنة ثم تنتقل من حالة إلى أخرى تبعاً لعوامل خارجيّة، تُمثَّل كسلسلة من الرموز الداخلة. يُقرأ الدخل رمزاً فرمزاً حتى تتوقف الآلة عند الانتهاء، أو عند حصول خطأ.
تستعمل نظرية الآلات الذاتية التشغيل في علوم الحاسوب في حلول كثيرة منها:
تطوير برامج للتّحقق من صحة وسلامة الدّارات الرقمية. المحلّل المفرداتي (التركيبي) لمعظم مصرّفات لغات البرمجة؛ أي المكوّن الذي يهتمّ بتحليل وقطع النصّ الدّاخل (مصدر البرنامج) إلى وحدات منطقية؛ كأسماء المتغيرات، والأعداد والتنقيط. برامج لتحليل صفحات كثيرة من الإنترنت، والبحث عن كلمات معينة أو نماذج نصّية. برامج للتحقّق من صحّة برامج أخرى، فيما يعرف بالتحقق من النماذج (Model Checking).
لنفرض مثلا أننا نريد تمثيل مصباح كهربائي بسيط يمكن إطفاؤه وتشغيله بالضغط على زر إلكتروني. يمكن تمثيل حالتي المصباح المنطفئة والمشتغلة بالحالتين "منطفئ" و"مشتغل" على التّرتيب. يبقى المصباح في إحدى الحالتين حتى يقوم أحدهم بالضغط على الزر ليتحوّل المصباح إلى الحالة الأخرى.
يبين هذا الشكل الأول آلة المصباح السّابق وصفها:
تبدأ الآلة في حالة "منطفئ" ولذلك هناك السهم "ابدأ" الذي يشير لهذه الحالة. تسمّى الدوائر المرسومة حالات، جمع "حالة"، كلّ حالة تصف وضع المصباح في وقت ما. تمثل الأسهم الظاهرة ما يسمّى بالدّخل، وهذا بدوره يمثّل التأثيرات الخارجية على الآلة، فلدينا هنا رمز دخْل واحد يسمى "اضغط"، يقوم بنقل الآلة بين حالتي الانطفاء والاشتغال.
في بعض الآلات يمكن أيضا تحديد الحالات التي تنتهي عندها الآلة بنجاح، فيمكن إذن تسميتها الحالات القابلة أو النهائية. لنفرض مثلا أن لنا مصباحا آخر متطوّرا له ثلاث حالات للتشغيل: "ضعيف"، "متوسّط" و"قويّ"، ولدينا أيضا زرين: أحدهما يقوم بإطفاء المصباح دائما فنسمي هذه العملية "أطفئ"، والآخر يزيد من شدّة المصباح فنسمّي تأثيره "اضغط". ينتقل المصباح بين حالات شدّة الضوء المختلفة بإرسال عمليّة "اضغط".
إذا أردنا جعل هدفنا هو تشغيل المصباح إلى أقصى قوة يمكن تمثيله بالشّكل التّالي:
تمثّل الدائرة المضاعفة الحالة النهائية للآلة. تقبل هذه الآلة سلاسل الدّخل الآتية:
اضغط-اضغط-اضغط أطفئ-اضغط-اضغط-اضغط-اضغط اضغط-اضغط-اضغط-أطفئ-اضغط-اضغط-اضغط
لأنها تنتهي كلها عند الحالة النهائية. لكنها لا تقبل السلاسل التالية:
اضغط-اضغط-اضغط-أطفئ اضغط-أطفئ-اضغط-اضغط
لأنها تنتهي عند حالات غير نهائية.
أولا سنقوم بتعريف الآلة الذاتية التشغيل المحدّدة، وهي الآلة التي تكون دائما في حالة واحدة بعد قراءة أي رمز دخْل معيّن، وذلك لأنه عند كل حالة لا يوجد سوى نقلة واحدة لكل رمز دخْل. هناك أيضا الآلات غير المحدّدة، سيتم التفصيل في الفرق بين الإثنين في الأقسام التالية.
تعرّف الآلة الذاتية التشغيل المحدّدة A {\displaystyle A} رياضيات بأنها خماسية ⟨ Q , Σ , δ , q 0 , F ⟩ {\displaystyle \langle Q,\Sigma ,\delta ,q_{0},F\rangle } بحيث أن:
Q {\displaystyle Q} هي مجموعة محدودة من الحالات. Σ {\displaystyle \Sigma } هي مجموعة محدودة من رموز الدخْل. δ {\displaystyle \delta } هي دالة للنقل (أو التحول) معرفة بـ δ : Q × Σ → Q {\displaystyle \delta :Q\times \Sigma \rightarrow Q} ، يكون مدخلها ثنائية من حالة ( q {\displaystyle q} ) ورمز دخل ( a {\displaystyle a} )، ومخرجها حالة ( q ′ {\displaystyle q\prime } )، أي δ ( q , a ) = q ′ {\displaystyle \delta (q,a)=q\prime } . q 0 {\displaystyle q_{0}} هي حالة البدأ التي يبدأ منها التشغيل، وهي تنتمي إلى المجموعة Q {\displaystyle Q} . F {\displaystyle F} هي مجموعة من الحالات النهائية، وهي مجموعة محتواة في Q {\displaystyle Q} .
في مثال المصباح المتقدّم السابق لدينا:
مجموعة الحالات Q {\displaystyle Q} هي {منطفئ، ضعيف، متوسط، قوي}. مجموع رموز الدخل Σ {\displaystyle \Sigma } هي {أطفئ، اضغط}. تم تمثيل الدالة δ {\displaystyle \delta } في الشكل السابق بالأسهم التي تنتقل من حالة إلى أخرى، ويمكن تعداد هذه الدالّة: (منطفئ، أطفئ) ← {\displaystyle \leftarrow } منطفئ (منطفئ، اضغط) ← {\displaystyle \leftarrow } ضعيف (ضعيف، أطفئ) ← {\displaystyle \leftarrow } منطفئ (ضعيف، اضغط) ← {\displaystyle \leftarrow } متوسط (متوسط، أطفئ) ← {\displaystyle \leftarrow } منطفئ (متوسط، اضغط) ← {\displaystyle \leftarrow } قوي (قوي، أطفئ) ← {\displaystyle \leftarrow } منطفئ (قوي، اضغط) ← {\displaystyle \leftarrow } قوي حالة البدء q 0 {\displaystyle q_{0}} هي منطفئ. مجموعة الحالات النهائية F {\displaystyle F} هي مجموعة وحيدة العنصر وهي: {قوي}.
هناك ثلاث أنواع للآلات الذاتية التشغيل:
كما ذكرنا سابقا فإن الآلات الذاتية التشغيل الحتمية (بالإنجليزية Determinisic Finite State Automaton أو باختصار DFA) تكون دائما في حالة واحدة فقط مهما كانت سلسلة الدخل التي قامت بتصريفها، وذلك لأنه لا توجد سوى نقلة واحدة لكل رمز دخل عند كل حالة.
كل الأمثلة السابقة هي آلات محدّدة.
الآلات غير المحدّدة (بالإنجليزية Nondeterminisic Finite State Automaton أو باختصار NFA) هي آلات يمكن أن تكون في حالات محتملة عدّة عند كل لحظة، حيث يمكن لها أن تشتغل في جهات عدّة عند كلّ رمز دخل. يتم تحديد الاتجاه المناسب خطوة بعد خطوة عند كل رمز كلما رفض اتجاه ما هذا الرمز.
تكون الآلة غير المحدّدة في حالة نهائية (أي حالة قبول) إذا كانت أي من الحالات المحتملة الحالية حالة قبول.
مثال آلة غير محدّدة "لا حتمية"
الشكل التالي يوضح آلة غبر محدّدة. لاحظ أن هذه الآلة تقبل كل السلاسل المتكونة من الأرقام 0 و 1 والمنتهية بالسلسلة 1-0 (تُقرأ السلسلة من اليمين إلى اليسار). لاحظ انه في الحالة ح0، عند إدخال الرمز 1 هناك حالتين محتملتين هما ح0 نفسها و<i data-parsoid='{"dsr":[7042,7048,2,2]}'>ح1.
رياضياً التعريف هو نفس تعريف الآلة المحددة مع اختلاف وحيد في الدالة. الدالة δ {\displaystyle \delta } للآلة المحددة تنتج حالة واحدة فقط عند كل ثنائية حالة ورمز، أما دالة الآلة غير المحددة فتنتج مجموعة من الحالات. يمكن استبدال العنصر الثالث في قائمة التعريف السابقة بالتعريف:
δ {\displaystyle \delta } هي دالّة للنقل (أو التحول) معرفة بـ δ : Q × Σ → P ( Q ) {\displaystyle \delta :Q\times \Sigma \rightarrow {\mathcal {P}}(Q)} ، يكون مدخلها ثنائية من حالة ( q {\displaystyle q} ) ورمز دخل ( a {\displaystyle a} )، ومخرجها مجموعة حالات ( Q ′ {\displaystyle Q\prime } ) تنتمي إلى المجموعة ( Q {\displaystyle Q} )، أي δ ( q , a ) = Q ′ {\displaystyle \delta (q,a)=Q\prime } .
يرمز P ( Q ) {\displaystyle {\mathcal {P}}(Q)} إلى مجموعة كل المجموعات التي يمكن تكوينها من عناصر المجموعة Q {\displaystyle Q} .
مثال الآلة غير المحددة السابق
مجموعة الحالات Q {\displaystyle Q} هي { ح0، ح1، ح2}. مجموع رموز الدخل Σ {\displaystyle \Sigma } هي {0، 1}. الدالة δ {\displaystyle \delta } : (ح0، 0) ← {\displaystyle \leftarrow } {ح0} (ح0، 1) ← {\displaystyle \leftarrow } {ح0, ح1} (ح1، 0) ← {\displaystyle \leftarrow } {ح2} حالة البدأ q 0 {\displaystyle q_{0}} هي ح0. مجموعة الحالات النهائية F {\displaystyle F} هي مجموعة وحيدة العنصر وهي: {ح2}.
بالإنجليزية Nondeterministic finite automata with ε transitions أو ε-NFA.
هذه الآلات مشابهة للآلات غير المحددة مع إمكانية تنقلها من حالة إلى أخرى من دون إدخال أي رمز. يرمز للتنقل المعدوم بـ ε. وهذا يعني أن الآلة يمكن أن تكون في مجموعة الحالات التي يمكن التنقل إليها من الحالة الحالية باستعمال هذا الرمز.
مع أن ذلك قد لا يكون واضحا للوهلة الأولى، إلا أن جميع أنواع الآلات الذاتية التشغيل السابقة لها نفس القوة الرياضية. أي يمكن تحويل أي آلة غير محددة مثلاً إلى آلة محدّدة تقبل نفس السلاسل والعكس صحيح. إلا أنه عادة تكون الآلة المحدّدة أكثر تعقيداً من الأنواع الأخرى.
فمثلاً، الآلة التالية لها نفس قوة الآلة غير المحدّدة السابقة. يمكن التحقق من ذلك بسهولة بتجريب مجموعة من السلاسل.
نظرية التشغيل الذاتي علم الحاسوب