পাঠ ৩০ · ৫৬-এর মধ্যে · মডিউল ৭
Home / Courses / Formal Language & Automata Theory / Theory of Computation / আনরেস্ট্রিক্টেড গ্রামার

আনরেস্ট্রিক্টেড গ্রামার ও টাইপ-০ ল্যাঙ্গুয়েজ

Unrestricted grammars & type-0 languages
৭ মিনিট পড়া উচ্চ · Advanced Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • আনরেস্ট্রিক্টেড গ্রামারের সংজ্ঞা — CSG-র নন-কন্ট্রাক্টিং শর্ত থেকে সম্পূর্ণ মুক্তি
  • Type 0 = টুরিং-রিকগনাইজেবল থিওরেম, ও কেন এটি হায়ারার্কির শেষ ইকুইভ্যালেন্স
  • কন্ট্রাক্টিং রুল কীভাবে non-termination সম্ভব করে — M9-এর জন্য সরাসরি সেটআপ
  • চারটি চমস্কি টাইপের সম্পূর্ণ, পাশাপাশি তুলনা টেবিল — L04-এর রোডম্যাপের প্রথম সম্পূর্ণ ভরাট রূপ

১ · আনরেস্ট্রিক্টেড গ্রামার — চমস্কি হায়ারার্কির সর্বাধিক সাধারণ স্তর

আনরেস্ট্রিক্টেড গ্রামারUnrestricted Grammar (Type 0)চমস্কি হায়ারার্কির সবচেয়ে সাধারণ স্তর -- রুলের ওপর কোনো দৈর্ঘ্য বা কনটেক্সট সীমাবদ্ধতা নেই। (Type 0) হলো — L29-এর CSG-র নন-কন্ট্রাক্টিং শর্ত সম্পূর্ণ সরিয়ে নেওয়ার ফলাফল। এর রুল এই আকৃতির:

$$\alpha \to \beta \quad \text{যেখানে } \alpha \in (V\cup\Sigma)^* V (V\cup\Sigma)^*, \ \ \beta \in (V\cup\Sigma)^*$$

অর্থাৎ $\alpha$-তে অন্তত একটি ভেরিয়েবল থাকতেই হবে (তাই একটি রুল প্রযোজ্য হওয়ার সুযোগ থাকে), কিন্তু $\beta$ সম্পূর্ণ অবাধ — L29-এর CSG-র বিপরীতে, এখানে $\beta$, $\alpha$-এর চেয়ে ছোটও হতে পারে, এমনকি $\varepsilon$-ও হতে পারে — কোনো দৈর্ঘ্য বা কনটেক্সট সীমাবদ্ধতা নেই।

২ · থিওরেম — Type 0 = টুরিং-রিকগনাইজেবল

এটাই এই হায়ারার্কি-অফ-হায়ারার্কির শেষ, সবচেয়ে গুরুত্বপূর্ণ ইকুইভ্যালেন্স —

থিওরেম

একটি ভাষা Type 0 (কোনো আনরেস্ট্রিক্টেড গ্রামার দিয়ে জেনারেটেড) হয় যদি এবং শুধুমাত্র যদি এটি টুরিং-রিকগনাইজেবল (কোনো টুরিং মেশিন দিয়ে রিকগনাইজড, সম্পূর্ণ ফরমাল সংজ্ঞা M8/L32-L33-এ)।

সরাসরি, গুরুত্বপূর্ণ একটি পরিণতি এখনই preview করা যাক (forward-reference M9): যেহেতু Type 0 = টুরিং-রিকগনাইজেবল, এবং M9 দেখাবে যে কিছু ভাষা টুরিং-রিকগনাইজেবলও নয় (হল্টিং প্রবলেম বা তার চেয়েও কঠিন), তার মানে সরাসরি অনুসরণ করে — কিছু ভাষা কোনো গ্রামার দিয়েই, কোনো টাইপেরই, জেনারেট করা যায় না — computability-র একটি genuinely fundamental সীমাবদ্ধতার একটি striking, প্রথমদিকের আভাস।

৩ · কেন Type 0, Type 1-এর চেয়ে বেশি শক্তিশালী হতে পারে

L29-এর CSG-তে নন-কন্ট্রাক্টিং শর্ত ($|\beta| \geq |\alpha|$) ছিল ঠিক সেই কারণে যে LBA-এর টেপ ইনপুট দৈর্ঘ্যে বাউন্ডেড থাকতে পারে — এবং তার ফলাফল ছিল CSG মেম্বারশিপ সবসময় ডিসাইডেবল (L29/§৩)। Type 0-তে রুল সংকুচিত (contract) হতে পারে — এই একটিমাত্র পার্থক্য গণনার প্রকৃতি বদলে দেয় —

  • একটি স্ট্রিং সংকুচিত হতে পারার মানে হলো ডেরিভেশন প্রক্রিয়াটি "সামনে-পিছনে" যেতে পারে (বড় হয়ে আবার ছোট হতে পারে) — এই নমনীয়তা টুরিং-মেশিনের মতো সাধারণ গণনা সিমুলেট করতে দরকারি, কিন্তু একই সাথে গ্যারান্টি করে না যে একটি কম্পিউটেশন কখনো টার্মিনেট করবে।
  • এটাই সরাসরি সংযুক্ত M9-এর মূল থিমের সাথে — Type 0 মেম্বারশিপ (একটি স্ট্রিং কোনো Type 0 গ্রামার জেনারেট করতে পারে কি না, বা সমতুল্যভাবে, একটি টুরিং মেশিন একটি ইনপুট accept করে কি না) সাধারণভাবে আনডিসাইডেবল — যেখানে L29-এর বাউন্ডেড-টেপ (নন-কন্ট্রাক্টিং) Type 1 ডিসাইডেবলই থেকে যায়।

৪ · চারটি টাইপের সম্পূর্ণ তুলনা — L04-এর রোডম্যাপ এখন সম্পূর্ণ ভরাট

নিচের কোডে চারটি চমস্কি টাইপ পাশাপাশি তুলনা করে একটি সম্পূর্ণ রেফারেন্স টেবিল বানানো হয়েছে (L04-এর রোডম্যাপের payoff, এখন সম্পূর্ণ ভরাট), এবং একটি ছোট্ট Type-0 গ্রামারে একটি জেনুইন কন্ট্রাক্টিং রুল ব্যবহার করে দেখানো হয়েছে — একটি রুল যা CSG-তে নিষিদ্ধ কিন্তু Type 0-তে সম্পূর্ণ বৈধ।

Python
# চারটি চমস্কি টাইপের সম্পূর্ণ, পাশাপাশি তুলনা (L04-এর রোডম্যাপ এখন সম্পূর্ণ ভরাট)
chomsky_types = {
    'Type 3 (Regular)': {
        'rule_restriction': 'A -> aB অথবা A -> a  (right-linear)',
        'recognizing_automaton': 'DFA / NFA (M2)',
        'closure_under_complement': 'হ্যাঁ (L12)',
        'membership_decidable': 'হ্যাঁ, দ্রুত (L06/L16)',
    },
    'Type 2 (Context-Free)': {
        'rule_restriction': 'A -> alpha  (একক ভেরিয়েবল, alpha অবাধ)',
        'recognizing_automaton': 'PDA (M5)',
        'closure_under_complement': 'না (L27)',
        'membership_decidable': 'হ্যাঁ, CYK দিয়ে পলিনমিয়াল টাইম (L28)',
    },
    'Type 1 (Context-Sensitive)': {
        'rule_restriction': 'alpha A beta -> alpha gamma beta, gamma != eps',
        'recognizing_automaton': 'Linear Bounded Automaton (এই মডিউল, L29)',
        'closure_under_complement': 'হ্যাঁ (উন্নত ফলাফল, mention only)',
        'membership_decidable': 'হ্যাঁ, কিন্তু সম্ভাব্য ধীর (L29)',
    },
    'Type 0 (Unrestricted)': {
        'rule_restriction': 'alpha -> beta, alpha-তে >=1 ভেরিয়েবল, beta সম্পূর্ণ অবাধ',
        'recognizing_automaton': 'টুরিং মেশিন (M8)',
        'closure_under_complement': 'না (টুরিং-রিকগনাইজেবল কমপ্লিমেন্টের নিচে ক্লোজড নয়, M9)',
        'membership_decidable': 'না -- সাধারণভাবে আনডিসাইডেবল (forward-ref M9/L38-L39)',
    },
}
for type_name, features in chomsky_types.items():
    print(type_name)
    for key, value in features.items():
        print("   ", key, ":", value)
    print()

# একটি তুলনামূলকভাবে ছোট Type-0 গ্রামার {a^n b^n : n >= 0}-এর জন্য, ইচ্ছাকৃতভাবে
# একটি CONTRACTING রুল ব্যবহার করছে (XY -> eps, RHS দৈর্ঘ্য LHS-এর চেয়ে ছোট) --
# এটি CSG-তে (L29) সম্পূর্ণ নিষিদ্ধ, কিন্তু Type 0-তে সম্পূর্ণ বৈধ
RULES = [
    (('S',), ('a', 'S', 'b')),
    (('S',), ('X', 'Y')),
    (('X', 'Y'), ()),          # <-- কন্ট্রাক্টিং রুল: LHS দৈর্ঘ্য ২, RHS দৈর্ঘ্য ০
]
START = ('S',)

from collections import deque

def type0_derive_search(rules, start, target_string, max_steps=200000, max_form_len=12):
    """সাধারণ BFS স্ট্রিং-রিরাইটিং সার্চ -- এখন কন্ট্রাক্টিং রুলও থাকতে পারে,
    তাই L29-এর মতো দৈর্ঘ্য-ভিত্তিক pruning নিরাপদ নয় -- একটি সাধারণ max_form_len ক্যাপ ব্যবহার করা হচ্ছে।"""
    target = tuple(target_string)
    queue = deque([(start, [])])
    seen = {start}
    steps = 0
    while queue and steps < max_steps:
        steps += 1
        form, path = queue.popleft()
        if form == target:
            return path
        if len(form) > max_form_len:
            continue
        for lhs, rhs in rules:
            L = len(lhs)
            for i in range(0, len(form) - L + 1):
                if form[i:i + L] == lhs:
                    new_form = form[:i] + rhs + form[i + L:]
                    if new_form not in seen:
                        seen.add(new_form)
                        queue.append((new_form, path + [(form, lhs, rhs, new_form)]))
    return None

for w in ["", "ab", "aabb", "aaabbb"]:
    path = type0_derive_search(RULES, START, w)
    print(f"ডেরাইভ '{w}':", "পাওয়া গেছে" if path else "পাওয়া যায়নি", f"({len(path)} ধাপে)" if path else "")
    if path:
        for (form, lhs, rhs, new_form) in path:
            print("    ", ''.join(form), "--[", ''.join(lhs), "->", ''.join(rhs) or 'eps', "]-->", ''.join(new_form))

    
লক্ষ্য করুন XY -> () রুলটি — এখানে RHS একটি খালি টাপল, অর্থাৎ $\varepsilon$ — দুটো সিম্বলকে সম্পূর্ণ "মুছে" দিচ্ছে। এই ধরনের multi-symbol erasing রুল CSG-তে (L29) নন-কন্ট্রাক্টিং শর্ত ভঙ্গ করার কারণে সম্পূর্ণ নিষিদ্ধ ছিল, কিন্তু এখানে Type 0-তে সম্পূর্ণ স্বাভাবিক — এবং কোডের আউটপুট দেখায় ডেরিভেশন সার্চ সত্যিই এই কন্ট্রাক্টিং রুল ব্যবহার করে $S$ থেকে $\{a^nb^n\}$-এর প্রতিটি টার্গেট স্ট্রিং-এ পৌঁছাচ্ছে।
মূল কথা · Key takeaway

Type 0 আনরেস্ট্রিক্টেড গ্রামার = টুরিং-রিকগনাইজেবল ভাষা — চমস্কি হায়ারার্কির শেষ ইকুইভ্যালেন্স থিওরেম। CSG-র নন-কন্ট্রাক্টিং শর্ত সরিয়ে নেওয়া (কন্ট্রাক্টিং রুল অনুমতি দেওয়া) হলো ঠিক সেই পরিবর্তন যা Type 0-কে Type 1-এর চেয়ে বেশি শক্তিশালী করে তোলে — এবং একই সাথে মেম্বারশিপকে সম্ভাব্যভাবে আনডিসাইডেবল করে তোলে, M9-এর মূল থিমের সরাসরি সেটআপ।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ উপরের কোডে type0_derive_search কেন L29-এর মতো দৈর্ঘ্য-ভিত্তিক pruning ব্যবহার করতে পারে না?

L29-এর CSG সার্চে সব রুল নন-কন্ট্রাক্টিং ছিল ($|\beta|\geq|\alpha|$), তাই সেন্টেনশিয়াল ফর্মের দৈর্ঘ্য কখনো কমতে পারত না — তাই "দৈর্ঘ্য target-এর চেয়ে বড় হয়ে গেলে prune করো" নিরাপদ ছিল, কারণ সেটি আর কখনো target-এর দৈর্ঘ্যে ফিরে আসতে পারত না। কিন্তু এই পাঠের Type-0 গ্রামারে XY -> eps-এর মতো কন্ট্রাক্টিং রুল আছে — একটি ফর্ম সাময়িকভাবে target-এর চেয়ে বড় হয়ে পরে ছোট হয়ে target-এ পৌঁছাতে পারে (ঠিক যেমন কোডের উদাহরণে "aSb" প্রথমে বড় হয়ে "aXYb"-এ যায়, তারপর সংকুচিত হয়ে "ab"-এ আসে) — তাই দৈর্ঘ্য-ভিত্তিক pruning এখানে ভুল ফলাফল দিতে পারত।

প্র ০২ "Type 0 = টুরিং-রিকগনাইজেবল" আর "Type 0 মেম্বারশিপ সাধারণভাবে আনডিসাইডেবল" — এই দুটো বাক্য কি একে অপরের বিরোধী?

না, বরং একে অপরের সাথে সামঞ্জস্যপূর্ণ — টুরিং-রিকগনাইজেবল (M9/L33-এ বিস্তারিত সংজ্ঞায়িত) মানে একটি টুরিং মেশিন প্রতিটি ভাষা-সদস্যকে accept করবে, কিন্তু non-member ইনপুটে সেই মেশিন reject করতে বাধ্য নয় — সেটি চিরকাল লুপ করতেও পারে। তাই "সদস্য কি না" প্রশ্নের একটি নিশ্চিত, সবসময়-থামা উত্তরদাতা (একটি decider) সাধারণভাবে থাকে না — এটাই ঠিক recognizable বনাম decidable-এর পার্থক্য, যা M9/L38-এ পুরোপুরি ফরমালাইজ করা হবে।

প্র ০৩ যদি M9 দেখায় কিছু ভাষা টুরিং-রিকগনাইজেবলও নয়, তার মানে সেই ভাষাগুলোর জন্য কী true হবে চমস্কি হায়ারার্কি অনুযায়ী?

যেহেতু Type 0 = টুরিং-রিকগনাইজেবল (§২-এর থিওরেম), আর সেই ভাষাগুলো টুরিং-রিকগনাইজেবলও নয়, তার মানে সেগুলো Type 0-ও হতে পারে না — অর্থাৎ কোনো গ্রামার, কোনো টাইপেরই, সেই ভাষাগুলো জেনারেট করতে পারে না। যেহেতু Type 3 ⊊ Type 2 ⊊ Type 1 ⊊ Type 0 (একটি নেস্টেড সাবসেট সম্পর্ক), এই ভাষাগুলো বাকি তিনটি টাইপেরও বাইরে থাকবে — তারা "চমস্কি হায়ারার্কির সম্পূর্ণ বাইরে" পড়ে যায়, কোনো ফরমাল গ্রামার দিয়েই কখনো বর্ণনাযোগ্য নয়।

অনুশীলন

  1. পরীক্ষা করুন: উপরের কোডে RULES-এ (('X','Y'), ()) রুলটি সরিয়ে দিন এবং type0_derive_search আবার চালান — "ab", "aabb" ডেরাইভ করা যায় কি?

    সেই রুল ছাড়া, S -> XY প্রয়োগ করার পর X ও Y সিম্বল স্ট্রিং-এ চিরকাল থেকে যাবে — কোনো রুল তাদের টার্মিনালে রূপান্তরিত করে না। ফলাফল: type0_derive_search কখনোই টার্গেট স্ট্রিং-এ (যেগুলোতে শুধু 'a' আর 'b' আছে) পৌঁছাতে পারবে না, None রিটার্ন করবে। এটাই দেখায় কন্ট্রাক্টিং রুল (এখানে erasure) ঠিক কী কাজ করছিল — সাময়িক "হেল্পার" সিম্বল সরিয়ে ফেলা।

  2. চিন্তা করুন: এই পাঠের গ্রামারটি $\{a^nb^n\}$ জেনারেট করে — একটি ভাষা যা আসলে ইতিমধ্যেই CFG (M4) দিয়ে সহজে জেনারেট করা যায়, Type 0 লাগে না। তাহলে এই উদাহরণটির শিক্ষণীয় মূল্য কী?

    এই উদাহরণের উদ্দেশ্য নির্দিষ্ট ভাষাটি নয় — বরং কন্ট্রাক্টিং রুল ব্যবহার করার মেকানিজমটি দেখানো, যেটি CSG-তে (L29) সম্পূর্ণ নিষিদ্ধ কিন্তু Type 0-তে বৈধ। বাস্তবে Type 0-এর সম্পূর্ণ শক্তি দরকার হয় এমন ভাষার উদাহরণ (যেমন হল্টিং প্রবলেমের এনকোডিং) M9-এ আসবে — এখানে ছোট, সহজে-hand-trace-করা যায় এমন একটি উদাহরণে শুধু নতুন মেকানিজমটাই বিচ্ছিন্নভাবে (isolate করে) দেখানো হয়েছে।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
L29 · কনটেক্সট-সেনসিটিভ গ্রামার ও লিনিয়ার বাউন্ডেড অটোমাটা