Si può dimostrare che DSPACE DSPACE se cresce almeno linearmente usando una semplice variante dell'argomento di riempimento standard. Per una lingua , lascia .( f ( 32 n))≠(f(32n))≠ (f(n))fLL′={x0| x| /2∣x∈L}(f(n))fLL′={x0|x|/2∣x∈L}
Richiesta. DSPACE se e solo se DSPACE se .L ∈ L∈( f ( n ) ) L ′ ∈ ( f ( 2(f(n))L′∈3 n))(f(23n))f(n)≥32 nf(n)≥32n
(La mia prima risposta aveva diverse affermazioni errate, grazie a Emil per averlo individuato.)
Mostrerò innanzitutto come utilizzare l'affermazione per dimostrare la gerarchia. Poiché cresce almeno in modo lineare, abbiamo DSPACE DSPACE . Prendi una lingua DSPACE DSPACE . Usando la rivendicazione, DSPACE DSPACE , dove l'ultima uguaglianza è l'assunzione indiretta. Ma poi DSPACE DSPACE , dove l'ultima uguaglianza è di nuovo assunta indirettamente, dando una contraddizione.f f( 2 f ( n ) ) ⊂ ( f ( 2 n ) ) L ∈ ( f ( 2 n ) ) ∖ ( f ( n ) ) L ′ ∈ ( f ( 4(2f(n))⊂(f(2n))L∈(f(2n))∖ (f(n))L′∈3 n))=(f(43n))= (f(n))L∈(f(3(f(n))L∈2 n))=(f(32n))= (f(n))(f(n))
Prova del reclamo.
Se DSPACE , quindi per dimostrare DSPACE , dobbiamo solo scrivere 0 alla fine dell'input e simulare la macchina che ha accettato . Poiché , ciò non aumenta lo spazio che utilizziamo. (In effetti, sapere quanti 0 scrivere non è affatto chiaro se è piccolo e non possiamo aumentare la dimensione dell'alfabeto - invece, possiamo usare un altro nastro e scrivere su tutto ciò che verrebbe dopo la fine di .)L ′ ∈ L′∈( f ( 23 n))(f(23n))L∈L ∈(f( n ) ) ( f( n ) )| x | / 2 | x | / 2x XL ′L' f ( n ) ≥ 32 nf( n ) ≥ 32nffxX
L'altra direzione è proprio così semplice sostituendo gli 0 con *, se ci è permesso scrivere *. (Vedi i problemi con questo nel mio commento alla domanda.) Se non ci è permesso scrivere stelle, modifichiamo leggermente la definizione di come . Ora, invece di scrivere le stelle, manteniamo l'input originaleL ′ L'L ′ = { x 10 | x | / 2 ∣ x ∈ L } L'= { x 10| x | / 2∣x∈L}x 10 | x | / 2x10|x|/2e lavorare con quello. Ma ogni volta che raggiungiamo un 1, andiamo a destra fino a quando non colpiamo un altro 1 per verificare se era la fine della parola 1 o meno. Se ne abbiamo trovato un altro 1, torniamo al nostro 1. Se non l'abbiamo fatto, torniamo ancora indietro, ma sapremo che dovrebbe essere trattato come una stella - se dovessimo scrivere su di esso, allora scriviamo anche un 10 dopo di esso per avere un nuovo marcatore di parole di fine corrente. (In effetti, c'è anche un piccolo problema in questa parte se è piccolo - come possiamo verificare se l'input è nel formato ? Senza distruggere l'input, posso risolverlo solo usando teste multiple per piccoli .) f fx 10 | x | / 2x10|x|/2 ff