I counter automata sono stati molto studiati nell'antico passato del linguaggio formale, nel contesto della teoria AFA e AFL (famiglie astratte di automi e lingue) da parte di team statunitensi e francesi (Ginsberg, Greibach, ..., Nivat, Berstel, ...)
Gli automi contatore sono in genere definiti automi a stati finiti dotati di memoria esterna, costituiti da un numero naturale (o più se si dispone di più di un contatore). Questo numero può essere incrementato, decrementato e (di solito) testato per zero. Un calcolo inizia con zero ed è accettato solo quando il contatore è zero alla fine, paragonabile all'accettazione dello stack vuoto pushdown.
Se tale macchina ha almeno due di questi contatori, allora è equivalente a una macchina di Turing, anche nel caso deterministico. La prova di questo fatto è di Minsky e può essere trovata nell'articolo di Wikipedia che hai collegato. Il modello è ovviamente correlato alla macchina del registro menzionata nella stessa pagina di Wikipedia. I problemi di codifica menzionati nell'articolo di Wikipedia non sono importanti in questa impostazione qui poiché consideriamo gli automi con un nastro di input (dopotutto dobbiamo leggere una stringa di input) mentre wikipedia in questa pagina presuppone solo contatori.
Questo automa del contatore può essere visto come un tipo speciale di pda, con un solo simbolo di pila e un fondo di pila (che non viene mai spostato). Ciò consente all'automa di verificare se il contatore / stack è zero e di agire di conseguenza.
Esistono infatti tre tipi di contatori automatici. Quindi combina i risultati con saggezza o finisci con contraddizioni (come è successo a me in passato). Tutti e tre i tipi sono (rigorosamente) inclusi nelle lingue senza contesto per un contatore.
Il tipo sopra memorizza un numero intero (o un numero naturale, che non ha importanza) e può testare il suo contenuto su zero.
Gli automi del contatore cieco memorizzano un numero intero ma non possono verificare lo zero. Tuttavia, possono contare esplicitamente sotto lo zero.
Gli automi di contatore parzialmente ciechi non possono verificare lo zero, ma memorizzare un numero naturale. Se la macchina cerca di andare sotto lo zero, si ferma senza accettare. Questo è un tipo di archiviazione naturale per modellare le reti di Petri. Viene anche ricalcolato al PDA, ora con un singolo simbolo dello stack senza lo speciale marker inferiore (e quindi il problema del test per zero: ci si blocca quando si fa scattare l'ultimo elemento dello stack). A volte i nomi delle famiglie definite dai modelli di contatore respattivo sono OCL, ROCL e 1-BLIND.
Tutte queste famiglie sono state studiate, sono tutte (ma io sono arrugginito nella mia teoria AFA / AFL) principali trii completi (= coni razionali) il che significa che sono chiusi sotto morfismi (inversi) e intersezione con linguaggi regolari, e possono essere ottenuti usando queste operazioni iniziando con una sola lingua. Per la famiglia OCL più grande (con zero test) puoi iniziare con la lingua( D c )* dove D = { w ∈ { a , b }*| #un'( w ) = #B( w ) }è il "linguaggio Dyck su due lati su una coppia di parentesi" (nella terminologia che si adatta all'argomento). C'è un'intuizione importante relativa a questa lingua. simboliun' e B riflettere scoppiare e spingere, c è il test zero.
Come esempio di ricerca pertinente, Latteux etal ha un articolo non banale "La famiglia delle lingue a un contatore è chiusa tra quoziente" (che in realtà riguarda ROCL).