Betrachte die Sprache
(wobei # 0 ( x ) die Anzahl der Nullen in x angibt ).
L×2={x⊥y⊥z∣x,y,z∈{0,1},#0(x)=#0(y) and |x|+|y|=z}
#0( x )x
Mit einer HAL-Maschine ist es einfach, zu bestimmen. Beachten Sie , dass die Maschine zwei Eigenschaften verfolgen muss: die Anzahl der Nullen in x vs y und die Länge von x , y (vs z ). Es kann a für jede in x angezeigte Null in den Heap schieben (und später für jede in y angezeigte Null popen ). Zusätzlich wird für jedes Bit in x , y gedrückt (und später für jedes Bit in z ). Da alle s den Haufen runtergeschoben werden, stören sie die Zählung nicht. Die ⊥L× 2xyx , yz0
x0
y1
x , y1
z1
0
⊥ dient als Begrenzer und kann praktisch ignoriert werden.
Sei nun , die umgekehrte Sprache. Das heißt,
L = { z ⊥ y y x ∣ x , y , z ∈ { 0 , 1 } , # 0 ( x ) = # 0 ( y ) und | x | + | y | = z }
Wir werden zeigen, dass keine HAL-Maschine L entscheiden kann .L = LR× 2
L = { z⊥ y⊥ x ∣ x , y, z∈ { 0 , 1 } , #0( x ) = #0( y) und | x | + | y| =z}
L
Die Intuition ist die folgende. Wie oben muss die Maschine sowohl die Länge von als auch die Anzahl der Nullen in x , y verfolgen . In diesem Fall müssen sie jedoch gleichzeitig verfolgt werden . Dies kann nicht über einen Heap erfolgen. Im Detail enthält der Heap nach dem Lesen von z Informationen über die Länge von | x | + | y | . Beim Lesen von y muss die Maschine auch die Anzahl der Nullen in y auf dem Haufen halten . Diese Informationen können jedoch nicht mit den Informationen interferieren, die der Heap bereits über die erwartete Länge von x verfügtzx , yz| x | + | y|yyxsein. Sehr intuitiv ist entweder die Information über die Anzahl der Nullen "unter" der Information über die Länge von , und dann können wir nicht darauf zugreifen, während wir x lesen , oder es ist "über" dieser Information, wodurch letzterer unzugänglich wird, oder Zwei Informationen werden "gemischt" und werden bedeutungslos.xx
Formal werden wir eine Art "Pumping" -Argument verwenden. Das heißt, wir nehmen eine sehr lange Eingabe und zeigen, dass sich der "Zustand" der Maschine während der Verarbeitung dieser Eingabe wiederholen muss, wodurch wir die Eingabe "ersetzen" können, sobald die Maschine ihren "Zustand" wiederholt.
ε1cc
HL4 n|x|=|y|=n|z|=2n⊥z,y#0(y)=n/2(nn/2)xz⊥y⊥x∈L
z⊥y3ncΓ(nn/2)x′sx1,x2
- n/2x1x2
- n/2xx1x2x1,x2n20.8n2x1,x2(3.5cn)|Γ||Q|3
z⊥y⊥xp1xs2xp1xn/2xs2x2xp1xs2x1x2#0(y)x1x2
1
2 x1n/2n/4log(nk)≈nH(k/n)H()H(1/4)≈0.81(nn/4)>20.8nn
3 Γ|Γ|nnn(n+1|Γ|−1)≈n|Γ||Γ|