Linguaggio dei valori di una funzione affine


10

Scrivi per l'espansione decimale di (senza inizio ). Lasciate e interi, con . Considera la lingua delle espansioni decimali dei multipli di più una costante:ˉ nn¯ nn0aabba>0a>0aa

M = { ¯ ax + bxN}

M={ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯xN}

è regolare? context-free?MM

(Contrasto con la lingua del grafico di una funzione affine )

Penso che questo farebbe una buona domanda a casa, quindi le risposte che iniziano con un suggerimento o due e spiegano non solo come risolvere la domanda, ma anche come decidere quali tecniche utilizzare sarebbero apprezzate.


Proprio ora mi rendo conto di aver risposto a un caso specifico, seguendo l'idea di @vonbrand. DFA che accetta rappresentazioni decimali di un numero naturale divisibile per 43
Hendrik

Risposte:


9

Molto semplice: supponiamo che i numeri siano scritti in decimali (altre basi sono gestite da una banale modifica). Costruire un DFA, con States 0, 1, ..., . Lo stato iniziale è 0 e dallo stato all'ingresso la cifra passa allo stato . Lo stato di accettazione è (potrebbe essere necessario modificare se ).aa1qd( 10 q + d ) mod a b mod a b > a(10q+d)modabmodab>a


1
Molto bello - molto meglio del mio!
David Lewis,

8

È regolare. Lavoriamo prima in binario, che generalizzerà a qualsiasi base> 1. Sia la lingua in questione. Per a = 1, b = 0 otteniamoM a , bMa,b

M 1 , 0 = { 1 , 10 , 11 , 100 , 101 , . . . }M1,0={1,10,11,100,101,...}

che è tutte le stringhe sopra senza zeri iniziali, che è regolare (costruisci un'espressione regolare per essa).{ 0 , 1 }{0,1}

Ora per ogni , con b ancora 0 otteniamo da moltiplicando numericamente per a, cioè eseguendo la trasformazione su ogni stringa di . Ciò può essere fatto bit per bit da una sequenza di spostamenti e aggiunte di che dipendono dai bit della stringa fissa . Le due trasformazioni di cui abbiamo bisogno sono:a M a , 0 M 1 , 0 ˉ x¯ a x MaMa,0M1,0x¯ax¯¯¯¯¯¯ a , 0 x ˉ aMa,0xa¯

ˉ x ¯ 2 xx¯2x¯¯¯¯¯ che è ˉ x ˉ x 0x¯x¯0

e

ˉ x ¯ 2 x + xx¯2x+x¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Concatenare uno 0 a destra preserva chiaramente la regolarità. Dobbiamo quindi solo provare che la seconda operazione preserva la regolarità. Il modo per farlo è con un trasduttore a stato finito che lavora su da destra a sinistra. Questo è il passo più difficile. Suggerisco di farlo con un programma pseudo-codice e una certa memoria ausiliaria finita (come alcune variabili bit) piuttosto che usare gli stati. Fintanto che la memoria ha una dimensione fissa su tutti gli input e si esegue la scansione da destra a sinistra, è una trasduzione a stati finiti e mantiene la regolarità.ˉ xx¯

Infine, per ottenere da dobbiamo aggiungere numericamente a ciascuna stringa, ma ciò viene fatto con un trasduttore simile che dipende dal numero fisso b.M a , bMa,b M a , 0 b T bMa,0bTb

Per fare lo stesso in qualsiasi base, mostra inoltre come eseguire la moltiplicazione per una singola cifra in quella base, usando un trasduttore che dipende da d. Con ciò, possiamo moltiplicare per numeri a più cifre e rimanere ancora nelle lingue normali. Oppure, possiamo affinare ciò dicendo che la moltiplicazione per è solo un'aggiunta ripetuta.d S d ddSdd

Volevi solo suggerimenti. Ognuno di questi passaggi dipende da un teorema / una tecnica abbastanza complessi, quindi provare a ottenere una prova completa sarà il lavoro extra.


La tua FA non riceve come input, quindi non vedo come ciò che scrivi dimostri che la lingua a portata di mano è regolare. Si noti che non tutti i programmi che utilizzano la memoria finita corrispondono a FA: è importante che possa passare solo una volta e da sinistra a destra sull'input, considerando ogni simbolo di input esattamente una volta. ˉ xx¯
Raffaello

@Raphael Puoi andare da destra a sinistra se vuoi, ciò che conta è essere coerenti. Non riesco a trovare un difetto nello schizzo di prova di David; invocare i trasduttori è un po 'meno elementare di quanto immaginassi, ma sembra valido.
Gilles 'SO- smetti di essere malvagio' il

@Gilles: Prima di tutto, non spiega come intercalare la moltiplicazione con e aggiungendo al risultato in un passaggio ; riduce anche la moltiplicazione da a "una sequenza di turni e aggiunte di ". Ogni singolo turno e aggiunta va bene, ma come si fa la sequenza? In secondo luogo, e ancora più importante, mostra come costruire un trasduttore che calcoli ; ciò non immediatamente darvi una FA che accetta . Ad esempio, moltiplicare i numeri è facile ma il factoring non lo è (presumibilmente). Quindi è necessario almeno un argomento aggiuntivo. un b una x ˉ x¯ una x + b Mabax x¯ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯ M
Raffaello

Non sto costruendo un FSA. Sto iniziando con un set facilmente indicato come normale ( ) e poi trasformando tutte le stringhe in esso con una serie finita di operazioni, ognuna delle quali preserva la regolarità. Ciò richiede un numero di passaggi (trasduttori). Ma va bene, poiché la sequenza dei trasduttori e la struttura di ciascuno è fissata in anticipo basata solo su e . Ogni passaggio (trasduttore) preserva la regolarità, quindi non è necessario collegarli in un passaggio. Sì, non "elementare". Ma costruire una FSA in una volta sola, con una sola passata, sarebbe terribilmente complesso. M 1 , 0 a bM1,0ab
David Lewis,

1
@Raphael - sì, è molto potente. In effetti, molte famiglie non regolari sono anche chiuse con trasduttori a stati finiti. Inoltre, è possibile utilizzare i trasduttori come meccanismi di riduzione, ottenendo un'intera teoria della complessità "strutturale" dei linguaggi non regolari.
David Lewis,

8

Suggerimento n. 1 : risolvere innanzitutto il problema più popolare "scrivere un automa che riconosca le rappresentazioni decimali / binarie dei numeri divisibili per 3" quando appare per primo il bit meno significativo .

Domanda intermedia: prova che è regolare.{ ¯ ax + bax + b 0x Z }{ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯ax+b0xZ}

Suggerimento n. 2 : il grafico della funzione "modulo " è finito. Puoi calcolarlo per ogni in che è sia l'insieme delle cifre che la lingua dell'automa.( n 10 n + d ) a d { 0 , , 9 }(n10n+d)ad{0,,9}

Suggerimento # 3 : ora, sostituire con . Che cosa cambia? Cerca di usare il fatto che le lingue normali sono stabili per intersezione invece di costruire un automa ad hoc .x Z x NxZxN

Hint 4 # : ormai per scontato che è un numero primo (in modo che è un campo) e che siamo ancora nel caso in cui . Ora usiamo una rappresentazione in cui il primo bit è il bit più significativo . Puoi costruire l'automa allo stesso modo?a Z / a Z x ZaZ/aZxZ

Suggerimento n. 5 : non è sempre necessario creare un automa per dimostrare che una lingua è regolare. Come puoi utilizzare i risultati precedenti per dimostrare che è regolare? (prima con il bit più significativo)MM


Sentiti libero di commentare se ritieni che ciò non sia appropriato.
jmad

Il suggerimento n. 1 è un grande passo. Nel suggerimento n. 4, è importante rendersi conto che un { 2 , 5 } e un 10 sono diversi. Passare da Z sembra una deviazione, devi gestire il personaggio dei segni: perché non rimanere in N ? a{2,5}a10ZN
Gilles 'SO-smetti di essere cattivo' il

@Gilles: volevo dire ¯ a x + b quando a x + b 0 e x Z , perché 3 x + 1234 è noioso da riconoscere. ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯ax+b0xZ3x+1234
jmad

@Gilles: Penso che il suggerimento n. 1 sia troppo bello per essere viziato. Probabilmente hai ragione su Suggerimento n. 4.
martedì

5

Sto seguendo l'idea di @vonbrand:

Suggerimento 1:

Risolvi prima per b = 0 . Potresti usare il Teorema di Myhill-Nerode .b=0

Definiamo la seguente relazione . Questa è ovviamente una relazione di equivalenza. Inoltre è giusto congruente, poiché se aggiungiamo una cifra otteniamo . Infine satura , poiché è la classe di equivalenza . Dal momento che ha un numero finito di classi, secondo il Teorema di Myhill-Nerode, è regolare. La FSA associata è minima e ha stato.ˉ x ˉ y :x ymoda d ˉ xˉ yx¯y¯:xymodad10 x + d 10 y + dmodun'ˉ x d ˉ y dLL[0]aX¯y¯10 x + d10 anni+ dmodun'X¯dy¯dLL[ 0 ]un'

Suggerimento 2:

Risolvi il caso generale, riutilizza l'automa indotto dal caso .b = 0b = 0

Sappiamo che la lingua è regolare per . Quindi semplicemente prendere stato FSA per il linguaggio. Ora costruiamo un FSA per . Supponiamo che abbia cifre. Quindi la FSA si ramifica come un albero di 10 arri di profondità e contiene tutti i percorsi verso i numeri con cifre. Tutti gli stati che possono essere raggiunti con un numero non nella forma rifiutano altrimenti. Infine colleghiamo la parte ad albero dell'FSA con l'automa , secondo il resto dalla divisione per .b = 0 a M b = 0 L b k k k a x + b M ab = 0un'Mb = 0LBKKKax+bMa


Capisco la tecnica, ma non i dettagli. Il suggerimento 1 non riguarda anche il caso ? Inoltre, per la mod 10 mi aspetterei 10 stati (non )? a = 1 aa=1a
Hendrik Jan

3

La lingua è regolare

Suggerimento: scartare nove


Idea di prova

Per un = 9 e b < 9 ,a=9b<9

costruire un automa con 9 stati etichettati da 0 a 8 . 0 è lo stato iniziale e l'unico stato finale è b . Dallo stato s , sulla cifra d , transizione allo stato ( s + d )9080bsdm o d9 .(s+d)mod9

Per gestire altri valori di a che sono coprime con 10 ,a10

raggruppare le cifre in pacchetti per trovare alcuni k tali che a divida 10 k - 1 (ad esempio prendere k = 3 se a = 37 perché 999 = 27 × 37 ).ka10k1k=3a=37999=27×37

Per gestire i valori di a i cui unici fattori primi sono 2 e 5 ,a25

nota che si tratta di un numero finito di cifre alla fine.

Per generalizzare a tutti i valori di un e B ,ab

utilizzare il fatto che l'unione e intersezione di linguaggi regolari sono regolari, che le lingue finite sono regolari, e che i multipli di un 1un 2 sono esattamente i multipli di sia quando un 1 e un 2 sono coprimi.a1a2a1a2

Si noti che utilizziamo qualsiasi tecnica sia conveniente; le tre principali tecniche elementari (espressioni regolari, automi finiti, proprietà set-teoriche) sono tutte rappresentate in questa dimostrazione.


Prova dettagliata

Lascia a = 2 p 5 q a con a coprime con 10 . Sia M = { ¯ a a=2p5qaa10x + bxZax + b 0 } e M = { ¯ 2 p 5 qM={ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯xZax+b0}x + bxZ2p5qx + b 0 } . Per aritmetica elementare, i numeri uguali a b modulo a sono esattamente i numeri uguali a b modulo a e b modulo 2 p 5 q , quindi M { ¯ xx b } = M M { ¯ xx b } . Poiché l'intersezione delle lingue normali è regolare eM′′={2p5qx+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯xZ2p5qx+b0}babab2p5qM{x¯¯¯xb}=MM′′{x¯¯¯xb}{ ¯ xx b } è regolare perché è il complemento di una lingua finita (quindi regolare), se anche M e M sono regolari, allora M { ¯ xx b } è regolare; e M è quindi regolare poiché è l'unione di quella lingua con un insieme finito. Quindi per concludere la prova è sufficiente dimostrare che M e M sono regolari.{x¯¯¯xb}MM′′M{x¯¯¯xb}MMM′′

Cominciamo con M , cioè numeri modulo 2 p 5 q . Gli interi la cui espansione decimale è in M sono caratterizzati dalle loro ultime cifre m a x ( p , q ) , poiché cambiare le cifre più a sinistra significa aggiungere un multiplo di 10 m a x ( p , q ) che è un multiplo di 2 p 5 q . Quindi 0 M = F doveM′′2p5qM′′max(p,q)10max(p,q)2p5q0M′′=F è l'alfabeto di tutte le cifre e F è un insieme finito di parole di lunghezza m a x ( p , q ) e M = ( F ) ( ( { 0 } ) ) è un normale linguaggio.Fmax(p,q)M′′=(F)(({0}))

Passiamo ora a M , ovvero numeri modulo a dove a è coprime con 10 . Se a = 1, allora M è l'insieme delle espansioni decimali di tutti i naturali, ovvero M = { 0 } ( ( { 0 } ) ) , che è un linguaggio regolare. Ora assumiamo un > 1 . Sia k = a -Maa10a=1MM={0}(({0}))a>11 . Secondo il piccolo teorema di Fermat, 10 a - 11k=a1moda , vale a dire che a divide 10 k - 1 . Costruiamo un automa finito deterministico che riconoscerà 0 M come segue:10a11modaa10k10M

  • Gli stati sono [ 0 , k - 1 ] × [ 0 , 10 k - 2 ] . La prima parte rappresenta una posizione della cifra e la seconda parte rappresenta un numero modulo 10 k - 1 .[0,k1]×[0,10k2]10k1
  • Lo stato iniziale è ( 0 , 0 ) .(0,0)
  • Esiste una transizione etichettata d da ( i , u ) a ( j , v ) iff v d 10 i + umod10 k - 1 e j i + 1modk .
  • Uno stato ( i , u ) è definitiva se e solo se u bmoda (nota che a divide 10 k - 1 ).

Lo stato ( i , u ) raggiunto da una parola ¯ x soddisfa i | ¯ x |modk ed u xmod10 k - 1 . Ciò può essere dimostrato dall'induzione sulla parola, seguendo le transizioni sull'automa; le transizioni sono calcolate per questo, usando il fatto che 10 k1mod10 k - 1 . Pertanto l'automa riconosce le espansioni decimali (consentendo gli zeri iniziali) dei numeri della forma u + y 10 k con u bmoda ; da 10 k1moda , l'automa riconosce le espansioni decimali dei numeri pari a b modulo a consentendo zeri iniziali, che è 0 M . Questa lingua è quindi dimostrata regolare. Infine, M = ( 0 M ) ( ( { 0 } ) ) è una lingua normale.

Per generalizzare a basi diverse da 10 , sostituire 2 e 5 sopra con tutti i fattori primi della base.

Prova formale

Lasciato come esercizio per il lettore, nel tuo proverore teorema preferito.

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.