基礎:字母表、字串與語言

空語言相對於空字串的語言(empty language vs. language of the empty string)

這兩樣東西寫在紙上看起來幾乎一樣,而且經常被搞混,但它們確實不同,就像「一個空盒子」和「一個裝著單一張空白紙的盒子」不同。一個是空的集合。另一個是恰好裝著一樣東西的集合,而那一樣東西恰好是空字串。

空語言,寫作 ∅ 或 {},是完全不含任何字串的語言。它的大小是零:裡面什麼都沒有,連 ε 也沒有。問「某字串 w 在 ∅ 裡嗎?」永遠答否。空字串的語言,寫作 {ε},是恰好含一個字串(即空字串 ε)的語言。它的大小是一。問「ε 在 {ε} 裡嗎?」答是,而「a 在 {ε} 裡嗎?」答否。所以區別在於:零個成員相對於一個成員。

為什麼要在意?這個差別會改變這些語言在運算下的行為,弄錯就會毀掉證明。空語言與任何語言 L 串接仍得到 ∅(∅ . L = ∅),因為沒有字串可作為起點,像乘以零。但 {ε} 與 L 串接只會把 L 原樣交回({ε} . L = L),因為 ε 是那個什麼都不做的字串,像乘以一。簡言之,在串接下 ∅ 表現得像數字 0、{ε} 表現得像數字 1;把它們當成一樣,正是本條目存在要拆解的經典初學者陷阱。

|∅| = 0(無字串);|{ε}| = 1(一個字串,即空的那個)。在串接下:∅ . {a, b} = ∅,但 {ε} . {a, b} = {a, b}。

在語言串接下,∅ 的作用像 0,{ε} 的作用像 1。

∅ 有零個字串;{ε} 有一個字串。它們永遠不相等。最常見的錯誤是想寫 ∅ 卻寫成 {ε},或反之。

又称
∅ vs {ε}{} versus {epsilon}空語言與 {ε}