4.6.5 · Coding › Theory of Computation
Intuition Badi picture (WHY yeh matter karta hai)
Ek regular expression (regex) ek pattern hota hai jo tum symbols jaise a, |, * se likhte ho.
Ek finite automaton (FA) ek machine hoti hai jisme states hote hain jo input padhti hai aur accept/reject karti hai.
Yeh dono bilkul alag lagte hain — ek text hai, ek diagram — phir bhi yeh exactly same
class of languages describe karte hain : the regular languages . Yahi hai Kleene's Theorem . Yeh woh bridge
hai jo tumhe "main ek pattern describe kar sakta hoon" se "main ek machine bana sakta hoon jo isse recognize kare"
tak aur wapas jaane deta hai. Isliye grep, lexers, aur search engines kaam karte hain.
Definition Kleene's Theorem
Ek language L kisi regular expression se describe hoti hai if and only if L kisi
finite automaton (DFA ya NFA) se accept hoti hai. Symbolically:
L = L ( R ) for some regex R ⟺ L = L ( M ) for some FA M .
Yeh ek iff hai, isliye humein do directions chahiye:
Regex → NFA (har pattern ek machine ki tarah banaya ja sakta hai) — Thompson's construction .
FA → Regex (har machine ka behavior ek pattern ki tarah express kiya ja sakta hai) — state elimination .
Kyunki NFA ≡ DFA (subset construction, alag jagah prove kiya gaya), regex ↔ NFA prove karna kaafi hai.
Intuition Exactly yahi operators kyun?
Yeh teen tareekon se mirror karte hain jaise NFAs combine hote hain : ek machine chalao phir doosri (concatenation),
machines ke beech choose karo (ε -branch = union), aur loop back karo (ε -loop = star).
Operators design kiye gaye the taaki match karein jo ε -transitions kar sakte hain — yahi woh secret hai
jis se equivalence itni clean hai.
Intuition HUM KYA BANATE HAIN
Har regex ke liye hum ek chhota NFA banate hain jisme exactly ek start state aur ek accept state hota hai,
aur hum in chhotey machines ko ==ε -transitions== use karke jodte hain. Ek single
start/accept rakhna gluing ko trivial banata hai.
Common mistake Steel-man: "Main jagah bachane ke liye start/accept states merge kar dunga."
Kyun sahi lagta hai: kam states simple dikhta hai, aur yeh chote cases mein aksar lagta hai kaam karta hai.
Kyun galat hai: star gadget mein, agar tum fresh accept ke bina N R ke start ko hi naya start bana do,
ek partial loop ek aisa accepting path leak kar sakta hai jo tumne kabhi intended nahi kiya tha (jaise koi ऐसी
string accept karna jo clean repetition nahi hai). Fix: union aur star ke liye hamesha fresh start/accept states add karo. Clean invariant (1 start, 1 accept, start mein koi incoming edge nahi, accept se koi outgoing nahi)
wahi hai jo induction ko correct banata hai.
Intuition GNFA KYA HOTA HAI AUR HUM ISSE KYU USE KARTE HAIN
Normal NFA edges single symbols se labeled hoti hain. Ek Generalized NFA (GNFA) mein edges
poore regexes se labeled ho sakti hain. Hum states ko ek-ek karke hataate hain; har baar jab hum ek state delete karte hain toh
hum surviving edges ko bade regexes se re-label karte hain jo "deleted paths ko yaad rakhte hain." Jab sirf
start aur accept bacha rehta hai, unke beech ki single edge hi answer hoti hai.
Worked example FA → Regex, chhoti machine — har step kyun?
States { 1 , 2 } , start 1 , accept 2 . Edges: 1 a 2 , 2 b 2 (self-loop).
s ε 1 aur 2 ε f add karo. Kyun: normalize karo taaki start mein
koi incoming na ho, accept mein koi outgoing na ho.
State 1 eliminate karo: sirf path s → 1 → 2 labels ε , a ke saath, 1 pe koi self-loop nahi, toh
naya edge s ε a 2 = s a 2 . Kyun: R q q ∗ = ∅ ∗ = ε .
State 2 eliminate karo: path s → 2 → f , 2 ka self-loop b ke saath. Naya edge
s a b ∗ ε f = a b ∗ . Kyun: rule R i q R q q ∗ R q j = a ⋅ b ∗ ⋅ ε .
Answer: a b ∗ — "ek a phir koi bhi number of bs." Check: "a" ✓, "abbb" ✓, "b" ✗.
Common mistake Steel-man: "Elimination ka order language change karta hai."
Kyun sahi lagta hai: alag elimination orders alag dikhne wale regexes dete hain, toh lagta hai
result order pe depend karta hai. Kyun galat hai: yeh equivalent regexes hote hain (same language),
bas alag tarike se likhe gaye hain — jaise 2 + 3 vs 3 + 2 . Fix: koi bhi order sahi hai; woh order chuno jo
regexes ko chhota rakhe. Kuch strings test karke verify karo, regex text ko string-match karke nahi.
Intuition "Iff" kaam kyun karta hai
Direction 1 dikhata hai regex ⊆ FA-languages . Direction 2 dikhata hai FA-languages ⊆ regex . Do
containments = equality. Plus NFA ≡ DFA matlab hum freely "FA" bol sakte hain bina yeh soche ki kaun sa type hai.
Toh regex, NFA, DFA sabhi ek hi same set ko carve out karte hain: the regular languages.
Recall Feynman: 12 saal ke bacche ko explain karo
Socho ek regex ek recipe likhi in words hai ("pehle ek apple, phir koi bhi number of bananas").
Ek finite automaton ek chhota robot hai jo rooms mein chalta hai jaise woh har fruit khata hai aur
green light karta hai agar meal match kare. Kleene's theorem kehta hai: koi bhi recipe jo tum likh sako, uske liye ek robot banaya ja sakta hai jo ise check kare — aur kisi bhi robot ka behavior wapas ek recipe ki tarah likha ja sakta hai. Yeh dono ek hi idea ki do
languages hain, toh tum hamesha ek ko doosre mein translate kar sakte ho.
Mnemonic Do directions yaad karo
"Thompson Builds, Elimination Reads."
T hompson = regex se machine B anao (ε se glue karo).
E limination = machine ko regex ki tarah R eado (states ripo, R i q R q q ∗ R q j ).
Answers cover karo. (1) Kleene's theorem prove karne ke liye kaun si do constructions hain? (2) State elimination mein R q q ∗ ka matlab kya hai? (3) Star gadget mein fresh states kyun? (4) Kya ∅ ∗ equal hai ε ke?
Kleene's Theorem kehta hai Ek language regular (regex-describable) hai iff woh ek finite automaton (DFA/NFA) se accept hoti hai.
Equivalence prove karne wali do constructions Regex→NFA via Thompson's construction; FA→Regex via state elimination (GNFA).
Union R ∣ S ka Thompson gadget Naya start ε-branches N R aur N S mein; naya accept dono purane accepts se ε ke through reach hota hai.
Concatenation R S ka Thompson gadget N R ke accept se N S ke start tak ε-edge; accept = N S ka accept.
Star R ∗ ka Thompson gadget Naya start ε se naye accept tak (zero) aur N R ke start tak; N R ka accept ε se wapas uske start pe (loop) aur naye accept pe (stop).
State-elimination relabeling rule R ij n e w = R ij ∣ R i q R q q ∗ R q j .
Elimination mein R q q ∗ ka matlab Jis state ko delete kiya ja raha hai us pe zero ya zyada baar loop karo jaane se pehle.
Elimination se pehle fresh start/accept kyun add karo Taaki start mein koi incoming aur accept mein koi outgoing edges na hon, jisse rip rule hamesha applicable ho.
∅ ∗ ki valueε — "kuch bhi nahi ka zero ya zyada baar" empty string hai.
NFA proof kaafi kyun hai (directly DFA nahi) NFA ≡ DFA by subset construction, toh regex↔NFA se regex↔DFA free mein mil jaata hai.
Kya elimination order language change karta hai Nahi — alag orders equivalent regexes dete hain (same language), sirf form mein alag.
FA ka Regex: 1 a 2 , 2 b 2 loop, accept 2 a b ∗ .
Regular expression pattern
Operators union concat star