বুলিয়ান এক্সপ্রেশন সিমপ্লিফিকেশন ও De Morgan's Law
এই পাঠে যা শিখবেন
- কেন সিমপ্লিফিকেশন শুধু গাণিতিক কৌতূহল নয়, বাস্তব হার্ডওয়্যার-ডিজাইনের প্রয়োজন
- De Morgan's Law-এর দুটি রূপ, নির্ভুল বিবৃতি ও স্বজ্ঞাগত ব্যাখ্যা
- L04-এর নিয়ম ও De Morgan's ব্যবহার করে ধাপে ধাপে এক্সপ্রেশন সরলীকরণ
- কোড দিয়ে দুটি এক্সপ্রেশনের ট্রুথ টেবিল তুলনা করে সমতুল্যতা নিশ্চিতভাবে প্রমাণ করা
১ · কেন সিমপ্লিফিকেশন গুরুত্বপূর্ণ
একটি বুলিয়ান এক্সপ্রেশন যত জটিল, বাস্তবায়ন করতে তত বেশি লজিক গেট লাগে — আর প্রতিটি বাড়তি গেট মানে বাড়তি সিলিকন এরিয়া (খরচ), বাড়তি বিদ্যুৎ খরচ, এবং বাড়তি propagation delayএকটি সিগন্যাল একটি গেটের ইনপুট থেকে আউটপুটে পৌঁছাতে যে সময় লাগে — প্রতিটি অতিরিক্ত গেট এই বিলম্ব যোগ করে। (সিগন্যাল একটি গেট পার হতে যে সময় নেয়)। তাই একই সত্য-টেবিল বজায় রেখে এক্সপ্রেশনকে যতটা সম্ভব সরল রূপে আনা — এটা নিছক গাণিতিক কসরত নয়, বরং একটি সরাসরি, বাস্তব ইঞ্জিনিয়ারিং প্রয়োজন।
২ · De Morgan's Law
De Morgan's LawDe Morgan's Lawসিমপ্লিফিকেশনের সবচেয়ে গুরুত্বপূর্ণ হাতিয়ার — বলে যে NOT-কে একটি AND বা OR জাংশনের ভেতর দিয়ে "ঠেলে দিলে" জাংশনের ধরন উল্টে যায়। হলো সিমপ্লিফিকেশনের সবচেয়ে গুরুত্বপূর্ণ হাতিয়ার — দুটি নির্ভুল রূপ:
$$\overline{A \cdot B} = \bar{A} + \bar{B} \qquad \text{(AND-এর NOT = OR-এর NOT-গুলো)}$$
$$\overline{A + B} = \bar{A} \cdot \bar{B} \qquad \text{(OR-এর NOT = AND-এর NOT-গুলো)}$$
স্বজ্ঞা হিসেবে মনে রাখুন: "জাংশন পার হয়ে NOT ভাঙলে AND↔OR উল্টে যায়।" অর্থাৎ একটি বড় NOT বার যখন একটি বন্ধনী ভেদ করে ভেতরে ঢোকে, তখন ভেতরের প্রতিটি ভ্যারিয়েবল আলাদাভাবে উল্টে যায় (¬), আর মাঝের AND/OR জাংশনটাও তার বিপরীতে বদলে যায়।
৩ · বীজগাণিতিক সিমপ্লিফিকেশন টেকনিক
L04-এর সাতটি নিয়ম (Identity, Null, Idempotent, Complement, Commutative, Associative, Distributive) এবং De Morgan's Law একসাথে বার বার প্রয়োগ করে একটি জটিল এক্সপ্রেশনকে ধাপে ধাপে তার ন্যূনতম সমতুল্য রূপে আনা যায় — প্রতিটি ধাপে একটি নিয়ম প্রয়োগ করে এক্সপ্রেশনের চেহারা বদলায়, কিন্তু তার অন্তর্নিহিত সত্য (ট্রুথ টেবিল) অপরিবর্তিত থাকে।
৪ · Worked example — একটি টটোলজি যাচাই
নিচের এক্সপ্রেশনটি সরল করে দেখা যাক (হাতে-কলমে, তারপর কোড দিয়ে যাচাই): ¬(A·B) + A·B। De Morgan's প্রয়োগ করলে ¬(A·B) = ¬A + ¬B হয়ে যায়, তাই পুরো এক্সপ্রেশনটি দাঁড়ায়:
$$\overline{A \cdot B} + A \cdot B \;=\; (\bar{A} + \bar{B}) + A \cdot B$$
লক্ষ্য করুন মূল এক্সপ্রেশনটির আকার হলো X + X̄ (যেখানে X = A·B) — আর L04-এর Complement নিয়ম বলে A+A'=1। অর্থাৎ এই এক্সপ্রেশনটি A ও B যাই হোক না কেন, সবসময় 1 হবে — একে বলা হয় tautologyTautologyএমন একটি বুলিয়ান এক্সপ্রেশন যা ইনপুটের সব সম্ভাব্য কম্বিনেশনের জন্যই সবসময় 1 (True) হয়। (এমন এক্সপ্রেশন যা সবসময় সত্য)। এই দাবি স্রেফ চোখে "ঠিক মনে হওয়া" দিয়ে বিশ্বাস না করে, নিচের কোডে সম্পূর্ণ ট্রুথ টেবিল তুলনা করে যাচাই করা হলো।
# মূল ও De Morgan's দিয়ে সরলীকৃত এক্সপ্রেশনের সম্পূর্ণ ট্রুথ টেবিল তুলনা করে সমতুল্যতা যাচাই
def NOT(a): return 1 - a
def AND(a, b): return a & b
def OR(a, b): return a | b
# মূল এক্সপ্রেশন: NOT(A AND B) OR (A AND B)
def original_expr(a, b):
return OR(NOT(AND(a, b)), AND(a, b))
# De Morgan's প্রয়োগ করে দাবিকৃত সরলীকৃত রূপ: (NOT A) OR (NOT B) OR (A AND B)
def claimed_simplified(a, b):
return OR(OR(NOT(a), NOT(b)), AND(a, b))
def verify_equivalence(expr1, expr2):
"""দুটি ২-ভ্যারিয়েবল এক্সপ্রেশনের সম্পূর্ণ ট্রুথ টেবিল সারি-বাই-সারি তুলনা করে সমতুল্যতা যাচাই করে"""
identical = True
print("A B | মূল-এক্সপ্রেশন | সরলীকৃত-এক্সপ্রেশন | মিলেছে?")
print("-" * 52)
for a in (0, 1):
for b in (0, 1):
v1, v2 = expr1(a, b), expr2(a, b)
if v1 != v2:
identical = False
print(f"{a} {b} | {v1} | {v2} | {'হ্যাঁ' if v1 == v2 else 'না!'}")
print()
print(f"দুটি ট্রুথ টেবিল সম্পূর্ণ অভিন্ন (সমতুল্যতা প্রমাণিত)? {'হ্যাঁ' if identical else 'না'}")
print(f"এক্সপ্রেশনটি কি টটোলজি (সবসময় 1)? {'হ্যাঁ' if all(expr1(a, b) == 1 for a in (0,1) for b in (0,1)) else 'না'}")
return identical
verify_equivalence(original_expr, claimed_simplified)
original_expr চারটি সারিতেই 1 প্রিন্ট করে, আর
claimed_simplified-ও ঠিক একই চারটি সারিতে 1 প্রিন্ট করে। এই সারি-বাই-সারি মিল-ই De Morgan's
প্রয়োগ করে করা সরলীকরণটি সত্যিই সঠিক, তার নিশ্চিত প্রমাণ — শুধু বীজগণিত দেখে "ঠিক মনে হওয়া" নয়।
De Morgan's Law এক্সপ্রেশন সরল করার সবচেয়ে শক্তিশালী হাতিয়ার, কিন্তু যেকোনো দাবিকৃত সরলীকরণের চূড়ান্ত পরীক্ষা সবসময় একই — মূল ও সরলীকৃত এক্সপ্রেশনের সম্পূর্ণ ট্রুথ টেবিল বানিয়ে সারি-বাই-সারি তুলনা করা। এই কোড-ভিত্তিক যাচাই পদ্ধতি L06-এ K-map সিমপ্লিফিকেশনের ফলাফল প্রমাণেও ঠিক একইভাবে ব্যবহৃত হবে।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ "জাংশন পার হয়ে NOT ভাঙলে AND↔OR উল্টে যায়" — এই স্বজ্ঞাটা আসলে কী বোঝায়?
এর মানে হলো, যখন একটি বড় NOT বার (¯) একটি বন্ধনীর ভেতরে "ঠেলে" ঢুকানো হয় — অর্থাৎ ¬(A·B)-কে ভেঙে পৃথক ¬A ও ¬B বানানো হয় — তখন শুধু ভ্যারিয়েবলগুলোই আলাদাভাবে উল্টে যায় না, মাঝখানের অপারেটরও (· বা +) তার বিপরীতে বদলে যায়। এটা অনেকটা গণিতের বণ্টন-বিধির (distribution) মতো, শুধু এখানে "উল্টানো" একটি বাড়তি প্রভাব হিসেবে যুক্ত হয় — এই কারণেই মনে রাখার সহজ উপায় হলো "ভাঙলে উল্টে যায়।"
প্র ০২ দুটি বুলিয়ান এক্সপ্রেশন সত্যিই সমতুল্য কিনা নিশ্চিতভাবে জানার একমাত্র উপায় কী — শুধু বীজগণিত দেখে "ঠিক মনে হওয়া" কি যথেষ্ট নয়?
না, যথেষ্ট নয় — বীজগাণিতিক ধাপে ভুল হওয়া সম্পূর্ণ সম্ভব (একটি নিয়ম ভুল জায়গায় প্রয়োগ করা, একটি চিহ্ন ভুলে যাওয়া)। নিশ্চিতভাবে জানার একমাত্র উপায় হলো এই পাঠের কোডে দেখানো পদ্ধতি — দুটি এক্সপ্রেশনের সম্পূর্ণ ট্রুথ টেবিল আলাদাভাবে বানিয়ে সারি-বাই-সারি তুলনা করা। যদি প্রতিটি সম্ভাব্য ইনপুট কম্বিনেশনে দুটোর আউটপুট মিলে যায়, তবেই সমতুল্যতা নিঃসন্দেহে প্রমাণিত — এটাই কোড-ভিত্তিক যাচাইয়ের আসল শক্তি।
প্র ০৩ এই পাঠের উদাহরণ ¬(A·B) + A·B সবসময় 1 (টটোলজি) হয় — এটা কি নিছক কাকতালীয়, নাকি এর পেছনে একটি সাধারণ নিয়ম কাজ করছে?
কাকতালীয় নয় — এটি L04-এর Complement নিয়মের (A + A' = 1) একটি প্রত্যক্ষ প্রয়োগ। যদি X = A·B ধরা হয়, তাহলে মূল এক্সপ্রেশনটি ঠিক X + X̄ আকারে — আর Complement নিয়ম বলে যেকোনো X-এর জন্যই X+X̄ সবসময় 1। তাই A ও B যাই হোক না কেন, এই নির্দিষ্ট গঠনের যেকোনো এক্সপ্রেশন স্বয়ংক্রিয়ভাবেই টটোলজি হবে — এটি একটি সাধারণ, পূর্বানুমানযোগ্য নিয়মের ফল, দুর্ঘটনা নয়।
অনুশীলন
-
চিন্তা করুন: De Morgan's Law-এর দ্বিতীয় রূপ প্রয়োগ করে ¬(A+B)-কে হাতে-কলমে সরল করুন, তারপর উত্তর মিলিয়ে দেখুন।
¬(A+B) = ¬A · ¬B — De Morgan's-এর দ্বিতীয় রূপ অনুযায়ী "OR-এর NOT" ভাঙলে ভেতরের ভ্যারিয়েবলগুলো আলাদাভাবে উল্টে যায় (¬A, ¬B) আর জাংশন OR থেকে AND-এ বদলে যায়। এই স্বজ্ঞাটাই এই পাঠের ধাপ ২-এ বলা "ভাঙলে উল্টে যায়" নিয়মের সরাসরি প্রয়োগ।
-
পরীক্ষা করুন: উপরের কোডের
verify_equivalenceফাংশনটিকে ৩-ভ্যারিয়েবল (A,B,C) এক্সপ্রেশনের জন্য ব্যবহার করতে চাইলে (এখনো কোড পরিবর্তন করবেন না) কী কী বদলাতে হবে?দুটি জিনিস বদলাতে হবে — প্রথমত,
expr1/expr2ফাংশনগুলোকে তিনটি প্যারামিটার (a, b, c) নিতে হবে দুটির বদলে। দ্বিতীয়ত, লুপে একটি তৃতীয়for c in (0, 1):যোগ করতে হবে, যার ফলে মোট 2³=৮টি সারি পরীক্ষা হবে ৪টির বদলে — ঠিক L04-এর অনুশীলনে আলোচিত এক্সপোনেনশিয়াল বৃদ্ধির নিয়ম অনুযায়ী।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ সিমপ্লিফিকেশন থেকে K-map, ইউনিভার্সাল গেট ও সম্পূর্ণ CPU ডিজাইন পর্যন্ত — সম্পূর্ণ সিলেবাস দেখুন।
- পূর্ববর্তী পাঠ L04 বুলিয়ান অ্যালজেব্রা ও লজিক গেট — এই পাঠের সাতটি নিয়মের উৎস, আগে না পড়ে থাকলে দেখে নিন।
- পরবর্তী পাঠ L06 কারনো ম্যাপ (K-map) সিমপ্লিফিকেশন — বীজগাণিতিক ধাপ ছাড়াই গ্রাফিক্যালি এক্সপ্রেশন সরল করার পদ্ধতি।
- সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps, Computer Networks, Operating Systems ও Computer Architecture — সব এক জায়গায়।