نظرية التشغيل الذاتي

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

## آلة ذاتية التشغيل

تعتبر الآلة ذاتية التشغيل نموذجاً رياضياً للآلات المجرّدة؛ وهي آلات لها حالات مختلفة، تبدأ في حالة معيّنة ثم تنتقل من حالة إلى أخرى تبعاً لعوامل خارجيّة، تُمثَّل كسلسلة من الرموز الأساسية المتداخلة. يُقرأ الداخل رمزاً فرمزاً حتى تتوقف الآلة عند الانتهاء، أو عند حصول خطأ.

## استعمالات النظرية
تستعمل نظرية الآلات الذاتية التشغيل في علوم الحاسوب في حلول كثيرة منها:
* تطوير برامج للتّحقق من صحة وسلامة الدّارات الرقمية.
* الانتاج (التركيبي) لمعظم مصرّفات لغات البرمجة؛ أي المكوّن الذي يهتمّ بتحليل وقطع النصّ الدّاخل (مصدر البرنامج) إلى وحدات منطقية؛ كأسماء المتغيرات، والأعداد والتنقيط.المتغيرات، والأعداد والتنقيط.
* برامج لتحليل صفحات كثيرة من الإنترنت، والبحث عن كلمات معينة أو رسم جداول المدفوعات أوهياكل النماذج الصناعية.
* برامج للتحقّق من صحّة موارد البرامج الأخرى، فيما يعرف بالتحقق من هيكلة دفع النموذج (Model Checking).
* برامج محاكي التنسيق بين المتشابهات والوحدات الرياضية لنظريات الالآت ذاتية التشغيل.

## مثال آلة بسيطة ذاتية التشغيل
* لنفرض مثلا أننا نريد تمثيل مصباح كهربائي بسيط يمكن إطفاؤه وتشغيله بالضغط على زر إلكتروني. يمكن تمثيل حالتي المصباح المنطفئة والمشتغلة بالحالتين «*منطفئ*» و«*مشتغل*» على التّرتيب. يبقى المصباح في إحدى الحالتين حتى يقوم أحدهم بالضغط على الزر ليتحوّل المصباح إلى الحالة الأخرى.

يبين هذا الشكل الأول آلة المصباح السّابق وصفها:

بدون|تصغير|300بك|آلة ذاتية التشغيل تمثّل المصباح.

تبدأ الآلة في حالة «*منطفئ*» ولذلك هناك السهم «*ابدأ*» الذي يشير لهذه الحالة. تسمّى الدوائر المرسومة حالات، جمع «**حالة**»، كلّ حالة تصف وضع المصباح في وقت ما. تمثل الأسهم الظاهرة ما يسمّى بالدّخل، وهذا بدوره يمثّل التأثيرات الخارجية على الآلة، فلدينا هنا رمز دخْل واحد يسمى «*اضغط*»، يقوم بنقل الآلة بين حالتي الانطفاء والاشتغال.

في بعض الآلات يمكن أيضا تحديد الحالات التي تنتهي عندها الآلة بنجاح، فيمكن إذن تسميتها الحالات القابلة أو النهائية. لنفرض مثلا أن لنا مصباحا آخر متطوّرا له ثلاث حالات للتشغيل: «*ضعيف*»، «*متوسّط*» و«*قويّ*»، ولدينا أيضا زران: أحدهما يقوم بإطفاء المصباح دائما فنسمي هذه العملية «*أطفئ*»، والآخر يزيد من شدّة المصباح فنسمّي تأثيره «*اضغط*». ينتقل المصباح بين حالات شدّة الضوء المختلفة بإرسال عمليّة «اضغط».

إذا أردنا جعل هدفنا هو تشغيل المصباح إلى أقصى قوة يمكن تمثيله بالشّكل التّالي:

بدون|تصغير|500بك|آلة ذاتية التشغيل تمثّل مصباحا متطورا.

تمثّل الدائرة المضاعفة الحالة النهائية للآلة. تقبل هذه الآلة سلاسل الدّخل الآتية:
* *اضغط-اضغط-اضغط*
* *أطفئ-اضغط-اضغط-اضغط-اضغط*
* *اضغط-اضغط-اضغط-أطفئ-اضغط-اضغط-اضغط*

لأنها تنتهي كلها عند الحالة النهائية. لكنها لا تقبل السلاسل التالية:
* *اضغط-اضغط-اضغط-أطفئ*
* *اضغط-أطفئ-اضغط-اضغط*

لأنها تنتهي عند حالات غير نهائية.

## التعريف الرياضي للآلات الذاتية التشغيل
أولا سنقوم بتعريف الآلة الذاتية التشغيل المحدّدة، وهي الآلة التي تكون دائما في حالة واحدة بعد قراءة أي رمز دخْل معيّن، وذلك لأنه عند كل حالة لا يوجد سوى نقلة واحدة لكل رمز دخْل. هناك أيضا الآلات غير المحدّدة، سيتم التفصيل في الفرق بين الإثنين في الأقسام التالية.

تعرّف الآلة الذاتية التشغيل المحدّدة A رياضيات بأنها خماسية \langle Q, \Sigma, \delta, q_0, F\rangle بحيث أن:

# Q هي مجموعة محدودة من الحالات.
# \Sigma هي مجموعة محدودة من رموز الدخْل.
# \delta هي دالة للنقل (أو التحول) معرفة بـ \delta:Q \times \Sigma \rightarrow Q، يكون مدخلها ثنائية من حالة (q) ورمز دخل (a)، ومخرجها حالة (q\prime)، أي \delta(q,a)=q\prime.
# q_0 هي حالة البدأ التي يبدأ منها التشغيل، وهي تنتمي إلى المجموعة Q.
# F هي مجموعة من الحالات النهائية، وهي مجموعة محتواة في Q.

### مثال المصباح المتقدم

في مثال المصباح المتقدّم السابق لدينا:
# مجموعة الحالات Q هي {*منطفئ*، *ضعيف*، *متوسط*، *قوي*}.
# مجموع رموز الدخل \Sigma هي {*أطفئ*، *اضغط*}.
# تم تمثيل الدالة \delta في الشكل السابق بالأسهم التي تنتقل من حالة إلى أخرى، ويمكن تعداد هذه الدالّة:
#* (*منطفئ*، *أطفئ*) \leftarrow *منطفئ*
#* (*منطفئ*، *اضغط*) \leftarrow *ضعيف*
#* (*ضعيف*، *أطفئ*) \leftarrow *منطفئ*
#* (*ضعيف*، *اضغط*) \leftarrow *متوسط*
#* (*متوسط*، *أطفئ*) \leftarrow *منطفئ*
#* (*متوسط*، *اضغط*) \leftarrow *قوي*
#* (*قوي*، *أطفئ*) \leftarrow *منطفئ*
#* (*قوي*، *اضغط*) \leftarrow *قوي*
# حالة البدء q_0 هي *منطفئ*.
# مجموعة الحالات النهائية F هي مجموعة وحيدة العنصر وهي: {*قوي*}.

## أنواع الآلات الذاتية التشغيل
هناك ثلاث أنواع للآلات الذاتية التشغيل:
### 1- آلات ذاتية التشغيل (حتمية)
كما ذكرنا سابقا فإن الآلات الذاتية التشغيل الحتمية (بالإنجليزية Determinisic Finite State Automaton أو باختصار DFA) تكون دائما في حالة واحدة فقط مهما كانت سلسلة الدخل التي قامت بتصريفها، وذلك لأنه لا توجد سوى نقلة واحدة لكل رمز دخل عند كل حالة.

كل الأمثلة السابقة هي آلات محدّدة.

### 2- آلات ذاتية التشغيل (غير محددة)
الآلات غير المحدّدة (بالإنجليزية Nondeterminisic Finite State Automaton أو باختصار NFA) هي آلات يمكن أن تكون في حالات محتملة عدّة عند كل لحظة، حيث يمكن لها أن تشتغل في جهات عدّة عند كلّ رمز دخل. يتم تحديد الاتجاه المناسب خطوة بعد خطوة عند كل رمز كلما رفض اتجاه ما هذا الرمز.

تكون الآلة غير المحدّدة في حالة نهائية (أي حالة قبول) إذا كانت أي من الحالات المحتملة الحالية حالة قبول.

**مثال آلة غير محدّدة «لا حتمية»**

الشكل التالي يوضح آلة غير محدّدة. لاحظ أن هذه الآلة تقبل كل السلاسل المتكونة من الأرقام 0 و1 والمنتهية بالسلسلة 1-0 (تُقرأ السلسلة من اليمين إلى اليسار). لاحظ انه في الحالة *ح0*، عند إدخال الرمز *1* هناك حالتان محتملتان هما *ح0* نفسها و*ح1*.

بدون|تصغير|400px|آلة ذاتية التشغيل غير محددة.

**التعريف الرياضي**

رياضياً التعريف هو نفس تعريف الآلة المحددة مع اختلاف وحيد في الدالة. الدالة \delta للآلة المحددة تنتج حالة واحدة فقط عند كل ثنائية حالة ورمز، أما دالة الآلة غير المحددة فتنتج مجموعة من الحالات. يمكن استبدال العنصر الثالث في قائمة التعريف السابقة بالتعريف:

* \delta هي دالّة للنقل (أو التحول) معرفة بـ \delta:Q \times \Sigma \rightarrow \mathcal{P}(Q)، يكون مدخلها ثنائية من حالة (q) ورمز دخل (a)، ومخرجها مجموعة حالات (Q\prime) تنتمي إلى المجموعة (Q)، أي \delta(q,a)=Q\prime.

يرمز \mathcal{P}(Q) إلى ناتج كل المجموعات التي يمكن تكوينها من عناصر المجموعة Q.

**مثال الآلة غير المحددة السابق**

# مجموعة الحالات Q هي { *ح0*، *ح1*، *ح2*}.
# مجموع رموز الدخل \Sigma هي {*0*، *1*}.
# الدالة \delta:
#* (*ح0*، *0*) \leftarrow {*ح0*}
#* (*ح0*، *1*) \leftarrow {*ح0*, *ح1*}
#* (*ح1*، *0*) \leftarrow {*ح2*}
# حالة البدأ q_0 هي *ح0*.
# مجموعة الحالات النهائية F هي مجموعة وحيدة العنصر وهي: {*ح2*}.

### 3- آلات ذاتية التشغيل غير محددة بنقلات معدومة الرمز
بالإنجليزية Nondeterministic finite automata with ε transitions أو ε-NFA.

هذه الآلات مشابهة للآلات غير المحددة مع إمكانية تنقلها من حالة إلى أخرى من دون إدخال أي رمز. يرمز للتنقل المعدوم بـ ε. وهذا يعني أن الآلة يمكن أن تكون في مجموعة الحالات التي يمكن التنقل إليها من الحالة الحالية باستعمال هذا الرمز.

## تساوي الآلات
مع أن ذلك قد لا يكون واضحا للوهلة الأولى، إلا أن جميع أنواع الآلات الذاتية التشغيل السابقة لها نفس القوة الرياضية. أي يمكن تحويل أي آلة غير محددة مثلاً إلى آلة محدّدة تقبل نفس السلاسل والعكس صحيح. إلا أنه عادة تكون الآلة المحدّدة أكثر تعقيداً من الأنواع الأخرى.

فمثلاً، الآلة التالية لها نفس قوة الآلة غير المحدّدة السابقة. يمكن التحقق من ذلك بسهولة بتجريب مجموعة من السلاسل.

بدون|تصغير|400px|آلة ذاتية التشغيل محددة مساوية للآلة السابقة.

## مراجع

## وصلات خارجية

* Exorciser (بالألمانية)

*
علم الحاسوب