4.6.9 · HinglishTheory of Computation

Chomsky Normal Form (CNF) — conversion

2,420 words11 min readRead in English

4.6.9 · Coding › Theory of Computation


CNF KYA hai?


Convert KAISE karein — 5-step pipeline (Sipser order!)

Sipser ki textbook mein order hai START → DEL → UNIT → TERM → BIN. Messy ε aur unit rules ko pehle hatao, phir terminals ko clean karo aur binarize karo baad mein.

  1. START — ek fresh start symbol add karo (taaki start kabhi right-hand side par na aaye).
  2. DEL — ==-productions== (nullable variables) eliminate karo.
  3. UNITunit productions () eliminate karo.
  4. TERM — lambe rules mein terminals ko naye variables se replace karo.
  5. BIN — 2 se lambi right-hand sides ko length-2 rules ki chains mein todo.

Step 0 (START): naya start symbol

WHY: CNF mein start symbol ko rakhne ki allowed hai. Agar bhi kisi rule ke right side par aata hai, to deleting/transforming ulajh jaata hai. Ek fresh jo sirf purane ki taraf point kare, start ko "clean" rakhta hai.

Step 1 (DEL): -productions hatao

WHY: (non-start ke liye) illegal hai. HOW: saare nullable variables dhundho (jinse derive ho sakta hai), phir har rule ke liye, nullable occurrences ke har subset ko chhodne wale versions add karo (lekin kabhi bhi poora RHS empty tak mat delete karo — woh dobara ε-rule bana dega).

Step 2 (UNIT): renames hatao

WHY: koi terminal produce nahi karta aur koi branching nahi — bas rename karta hai. HOW: har unit pair ke liye (matlab sirf unit rules use karke), aur har non-unit rule ke liye, add karo. Phir saari unit rules drop karo.

Step 3 (TERM): terminals ko isolate karo

WHY: mein, terminal illegally variable ke saath mix hai. introduce karo aur likhao. (Ek standalone pehle se theek hai.)

Step 4 (BIN): lambe rules chop karo

WHY: bahut lamba hai. Isko replace karo Har naya ek fresh variable hai jo "chain ka baaki hissa" rakhta hai.

Figure — Chomsky Normal Form (CNF) — conversion

Worked Example 1 — poori conversion (Sipser order)

Grammar:

START. add karo. Yeh step kyun? Taaki start kabhi right side par na baithe. Rules: ; ; ; .

DEL. Nullable set: nullable. jahan nullable nullable. Koi aur all-nullable RHS nahi. To . Har rule ko nullable positions ke saare subsets par patch karo (kabhi empty tak nahi):

  • : nullable positions dono 's hain. Drop subsets ⟹ add karo. To .
  • : nullable ⟹ add karo. To .
  • : nullable ⟹ add hota — drop karo (yeh nahi hai). rakho.
  • : rakho (koi nullable symbol nahi).
  • : rakho. delete karo.

DEL ke baad: ; ; ; .

UNIT. Unit pairs dhundho (reflexive + transitive closure unit rules , , , par):

  • , aur ke through kuch aur nahi ( ka sirf unit rule hai). ek trivial self-unit hai, hata diya.
  • , .

Ab har variable ke liye, un saare variables ke non-unit bodies collect karo jahan tak woh pahunch sakta hai:

  • Non-unit bodies of : .
  • Non-unit bodies of : se ; se .
  • Non-unit bodies of : .

Result (unit rules drop kiye):

Yeh step kyun? Har rename ko asli productive bodies se replace kar diya jaata hai jinhe woh reach kar sakta tha.

TERM. Terminal mein mixed appear karta hai: add karo, likhao. (Standalone aur waise hi rahenge.)

BIN. Sirf (length 3) bahut lamba hai. add karo, likhao:

Yeh step kyun? Ab har rule ya hai — CNF achieve ho gaya.


Worked Example 2 — chhota aur clean

Grammar: . (Koi ε nahi, koi unit rules nahi — DEL aur UNIT kuch nahi karte.)

TERM: , . Rules: . Kyun? ko isolate karo.

BIN: (length 3): , . Kyun? Length-3 ko do length-2 rules mein kato.

Final CNF: Language , unchanged. ✓


Forecast-then-Verify


Common mistakes


Flashcards

CNF mein kaun se do production forms allowed hain (start-ε chhodkar)?
(do variables) aur (ek terminal).
CNF mein ε legally kaun sa ek rule produce kar sakta hai?
Sirf start symbol: , aur tabhi jab ε language mein ho.
Sipser ke 5 CNF conversion steps ka order kya hai?
START, DEL, UNIT, TERM, BIN.
Sipser mein DEL/UNIT, TERM/BIN se pehle kyun aata hai?
ε- aur unit-removal sirf RHSs ko chhoTa/rename karta hai, to pehle karne se TERM/BIN kabhi undo nahi hota.
Nullable variable define karo.
Ek variable jiske liye (empty string derive ho sake).
DEL mein jahan nullable hain, ko kaise patch karte hain?
ke har subset ko chhodte hue ek rule add karo: (kabhi empty nahi).
Unit production kya hoti hai aur use kaise hatate hain?
Ek rule (B ek variable); hatao har non-unit body ke liye add karke jo unit pair ke roop mein reachable ho.
CNF useful kyun hai?
Parse trees binary ban jaate hain ⟹ CYK membership aur CFL pumping lemma enable hota hai.
BIN mein convert karne par kya milta hai?
, (ek fresh variable).
Pehle naya start symbol kyun add karte hain?
Taaki start symbol kisi bhi right-hand side par na aaye, baad ke steps clean rahein.

Recall Feynman: 12-saal ke bache ko explain karo

Socho LEGO instructions jahan har step mein sirf EK cheez ho sakti hai: ya to do bade blocks snap karo, ya ek single colored tile lagao. Koi giant complicated steps allowed nahi. CNF ek messy building manual ko is baby-simple style mein rewrite karta hai. Bana hua tower bilkul wahi rahega — lekin ab ek robot steps bahut fast follow kar sakta hai aur yeh bhi check kar sakta hai ki koi diya hua tower bana sakta hai ya nahi. Hum clean karte hain: ek fresh "start" block deke, "kuch mat banao" steps hatake, "is block ko doosra naam se bolo" lazy steps hatake, phir loose colored tiles ko named blocks se badal ke, aur aakhir mein lambe steps ko pairs mein chop karke.

Concept Map

tidied into

rule form

rule form

start only

yields

enables

enables

built by

1

2

3

4

5

must precede

Messy CFG

CNF grammar

A to BC two variables

A to a one terminal

S to empty

Binary parse tree 2n-1 nodes

CYK membership O of n cubed

CFL pumping lemma

5-step pipeline

START new S0

DEL remove empty rules

UNIT remove renames

TERM isolate terminals

BIN split long rules