Può un FSA contare?


11

Questa potrebbe essere una domanda sciocca. Sembra chiaro che un FSA, dato che è finito, può contare solo il numero di simboli nella sua stringa di input fino a un numero limitato dal numero dei suoi stati. Ma ora supponiamo di dotare l'FSA di funzionalità di output (ad es. Stampa). Sarebbe quindi molto semplice costruire una macchina in grado di stampare un simbolo per ogni simbolo che legge. Conterrebbe come contare? In caso contrario, perché no?

Per dirla in termini di FST: suppongo che non sia possibile costruire un FST in grado di mappare una stringa di lunghezza arbitraria su una rappresentazione binaria (cioè un numero nel sistema numerico base-2) della sua lunghezza. Ma è ovviamente banale costruire un FST in grado di mappare una stringa di lunghezza arbitraria su una stringa di detti zero (o uno) della stessa lunghezza. Ma ciò potrebbe contare come conteggio, no, perché ciò che sta facendo l'FST è costruire una rappresentazione della lunghezza del suo input. Una rappresentazione un po 'strana, ma comunque una rappresentazione, non è vero?


1
Quindi stai davvero ponendo la domanda "cosa conta?" Per me non sembra l'informatica. Sarebbe informatica se la tua domanda fosse "per questa definizione di conteggio, può contare un FSA?".
Sasho Nikolov,

Risposte:


8

Questa domanda è un po 'vaga, quindi ecco una vaga risposta: tradurre unario in unario non conta esattamente, dal momento che la macchina in realtà non "conosce" quale fosse la dimensione dell'input "alla fine".

Ti rendi conto di questo, ovviamente, ed è per questo che metti in dubbio il fatto che stia davvero contando.

La traduzione da unario a binario, tuttavia, sembra un'operazione molto più avanzata, poiché non implica solo il conteggio, ma comporta anche l'aritmetica.

Quindi forse la nozione più precisa da guardare, invece di contare, è il confronto . Cioè, dati due numeri (in unario) e , determinare se .1 m n = m1n1mn=m

La capacità di fare questo confronto è ciò che dà origine al famoso linguaggio non regolare . E l'incapacità di un NFA di contare è ciò che rende questa lingua non regolare.{anbn:n0}

È interessante notare che questa lingua è un CFL. E in effetti, il corrispondente modello di automi - PDA, ha la capacità di fare un confronto limitato.

Quando parli di confronto, i trasduttori non ti danno più alcun potere aggiuntivo, quindi la domanda viene risolta in tal senso.

Una nota aggiuntiva: completamente informale, la possibilità di confrontare due numeri può spesso essere utilizzata per simulare una macchina Minsky a 2 contatori , che sono equivalenti alle TM.


4

No. Gli automi a stati finiti non contano. Possono fare cose che assomigliano, ma non possono contare. Possono anche fare piccoli calcoli (cablati) (come determinare se un numero binario è divisibile per tre ) ma questo non conta.

Una piccola storia Sei su una grande piazza rettangolare in una città famosa. La gente del posto ti dice che la piazza è in realtà quadrata. Se riesci a contare, controlla se i numeri orizzontali e verticali delle tessere corrispondono contando le tessere lungo i lati del quadrato. Se non riesci a contare puoi comunque verificare il reclamo: inizia da un angolo e cammina in diagonale. Se raggiungi esattamente l'angolo opposto hai un quadrato.

Nel tuo esempio, la fsa verifica se una stringa ha un numero uguale di ' e , calcolando questi numeri su due diversi nastri di output. Un altro dispositivo deve fare il confronto finale, a meno che tu non abbia un trucco per gestire le lettere e in coppia e che si sovrappongono l'una contro l'altra. Come in piazza.b a babab

Ora un modello più formale con cui confrontarlo. Secondo il teorema di Chomsky – Schützenberger ogni linguaggio senza contesto è un inverso di una trasduzione allo stato finito del linguaggio Dyck su due coppie di parentesi (non è dichiarato in questo modo su Wikipedia, ma devi credermi). Ora il trasduttore di stato finito può "accettare" il suo linguaggio senza contesto come segue (per ogni lingua il proprio trasduttore). All'ingresso trasforma la stringa nella serie (indovinata) di pop e push del pda per , quindi verifica se il risultato è un comportamento pushdown, ovvero il risultato è una stringa inT D 2 L = T - 1 ( D 2 ) T L T L D 2 w T -LTD2L=T1(D2)TLTLD2 . (Dettagli tecnici omessi, ma questo è come rivendicato dal Teorema di Ch-Sch: si ha iff )T(w) D 2wT1(D2)T(w)D2

Il mio punto qui è che un certo "calcolo" viene eseguito dal trasduttore ma molta potenza viene nascosta nel test con . Allo stesso modo il tuo esempio, in cui due lettere sono ordinate su due nastri. D2


Posso costruire un DFA che conta tra e (Per fisso ) o anche in . Questo è più di qualsiasi altro computer umano o reale. Come chiameresti contare? 2 n ! n02n!nN
Raffaello

@Raphael. Sicuro. E numeri facilmente più grandi di così. Smetti di insegnare che le lingue senza contesto sono più potenti delle lingue normali: sono le stesse (almeno per stringhe di lunghezza al massimo ). Solo scherzando. Fare riferimento a linguaggi informatici reali come quello rende nulla lo stato finito non è vero? Gli automi a stati finiti non contano! Distinguono solo un numero finito di stati, sebbene quel numero possa essere molto grande. 2n!
Hendrik Jan

Ma il modo in cui gli FSA sono di solito presentati, sono solo "autorizzati" a dire "sì" (accettato) o "no" (non accettato). Detto questo, nessuno potrebbe costruire un FSA che conta. Se gli consentiamo di riportare (es. Stampare) lo stato (numero dello) in cui si trova quando termina, allora può contare, ma solo fino a un limite dato dal numero di stati. Ma se DO gli permettiamo di stampare, allora è banale costruire un singolo stato FSA che stampa (diciamo) 1 ogni volta che legge un simbolo dalla stringa di input, riportando così il conteggio nella rappresentazione tally. Cosa c'è di sbagliato in questa idea?
Torbjörn,

E se dimentichiamo il rapporto / la stampa e pensiamo invece in termini di rappresentazioni interne, un FSA può contare i simboli in una stringa, ma non in una lunghezza arbitraria. L'FSA a singolo stato quindi ovviamente non può contare affatto.
Torbjörn,

Hendrik, penso che stiamo "discutendo" una questione di semantica: per me, "contare" può essere "da uno a dieci", cosa che FA può fare. Quando si intersecano Büchi-automi, per esempio, contiamo quanti automi (di , fissi) hanno raggiunto uno stato finale mentre gli altri procedono. Pertanto, penso che l'affermazione "non riesco a contare" sia troppo forte. L'unica (vera) affermazione è "il non può contare più lontano di una costante". k
Raffaello

1

@Shaull: grazie per la tua risposta! Sono nuovo su StackExchange e non so come commentare una risposta, quindi scelgo invece di scrivere una risposta, nella speranza di essere perdonato.

Hmm, mi sembra che contino un pastore che conta le sue pecore scrivendo un segno su un foglietto per ogni pecora che vede, o un prigioniero che conta i giorni in cui è stato in prigione scrivendo segni sul muro. Perché n segni su un foglietto o su un muro non valgono come rappresentazione del numero n? Non è quella che viene chiamata rappresentazione tally? AFAICS non è in alcun modo inferiore a (diciamo) una rappresentazione binaria, tranne per il fatto che utilizza più spazio.

Suppongo che per te allora "sapere" significhi che alla fine ha una rappresentazione interna del conteggio. Quindi, ovviamente, è ovvio che un FSA di FST non può calcolare la lunghezza di una stringa arbitraria. Ma se non abbiamo bisogno di conoscenza in questo senso, ma chiediamo solo che FSA o FST siano in grado di comunicare il risultato a un osservatore esterno, allora mi sembra che presentare il conteggio in un formato tally dovrebbe essere ok.

Inoltre, se un FSA è dotato sia di input che di output incrementali, in linea di principio dovrebbe essere in grado di utilizzare il suo ambiente esterno come memoria di lettura / scrittura, e quindi essere potente come una macchina di Turing. Giusto?

Grazie per aver sollevato il caso del confronto. Ora, sembra essere il caso che se solleviamo il requisito di una rappresentazione interna e richiediamo solo che la macchina sia in grado di presentare il risultato a un osservatore esterno, allora potremmo facilmente costruire un FSM che potrebbe produrre una sorta di presentazione grafica del risultato. Supponiamo che il FSM, su readins "aaaaaabbbbbb" abbia scritto

000000
000000

quindi, poiché le barre sono della stessa lunghezza, l'FSM ha accettato la stringa "aaaaaabbbbbb". Due barre della stessa lunghezza significano "sì", lunghezze diverse indicano "no".

Immagino che sto piegando le regole, ma è quello che voglio dal momento che sono interessato alle ipotesi più o meno implicite che vengono fatte nel campo della linguistica matematica.


Forse il tuo "modello" può essere visto come un FSA con un numero finito (uguale alla dimensione dell'alfabeto) di contatori di sola scrittura più uno stato finale speciale in grado di confrontare due (o più) di essi e accettarli o rifiutarli se sono uguali o no. Tale " " è più potente di un FSA; ma ha alcuni problemi nel riconoscere cose come cioè facendo l'aritmetica. { a n | n  è primo  }FSAWOC{an|n is prime }
Vor

Penso che la differenza tra gli esempi che dai e l'output di FST sia che il pastore può leggere le righe dopo che sono state scritte, mentre un FSM non può. Lo stesso vale per il confronto.
Shaull

Puoi commentare facendo clic sul link "aggiungi commento" sotto qualsiasi post.
Raffaello

Qualsiasi FSA costruito per contare un gregge può contare quel gregge. Nessun FSA costruito può contare alcun gregge. La domanda di base è se il pastore sa solo contare abbastanza lontano da contare almeno il proprio gregge o se può usare l'intera gamma dei numeri naturali. Nella mia esperienza, noi umani dobbiamo esplicitamente fare la transizione tra le due capacità ad un certo punto della nostra educazione matematica.
reinierpost,

1

Gli FSM possono "contare" in un intervallo / numero di passaggi finiti indicato dalle transizioni di stato. tuttavia, non possono contare oltre un numero finito di passaggi.

c'è un senso in cui una macchina simile all'FSA può contare. una macchina strettamente correlata viene chiamata trasduttore di stato finito . il trasduttore può effettivamente contare nel senso di input e output "convogliati". un singolo trasduttore può prendere una sequenza di input (diciamo in binario) e "trasdurla" in una sequenza di output che viene incrementata. quindi uno "incatena" i (identici) trasduttori count-by-1, ciascuno incrementando il proprio input di 1 e emettendolo. è anche come un rudimentale "algoritmo di streaming" .


più in dettaglio: il trasduttore può incrementare lavorando nell'ordine da "lsb" a "msb", cioè da "bit meno sig" a "bit più sig" utilizzando una logica simile al sommatore EE completo .
vzn,

i trasduttori a stati finiti sembrano non essere stati studiati molto. c'è un'altra interessante applicazione alla congettura collatz nella creazione di una macchina che calcola iterate. chiunque sia interessato a ulteriori teorie / discussioni, contattami in chat o sul mio blog .
vzn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.