Comunicazione, stringhe e interi naturali

Transcript

Comunicazione, stringhe e interi naturali
MATeXp – Nozioni di base
Capitolo B10:
Comunicazione, stringhe e interi naturali
Contenuti delle sezioni
a. Stringhe e loro prime manipolazioni p.1 b. Altre semplici operazioni e relazioni su stringhe p.11
c. Stringhe: equivalenze, sostituzioni, elenchi p.18 d. Interi naturali p.23 e. Sequenze di stringhe
p.28
B10:0.01 Iniziamo la definizione dell’apparato che caratterizza la matematica e le sue applicazioni,
apparato spinto da obiettivi di vasta portata e di forte incisività nel quale si collocano molteplici
motivazioni, tematiche, sistemi formali e strumenti operativi.
Questo apparato per le sue esigenze di rigore e coerenza deve essere costruito con gradualità attraverso
successive aggiunte costruttive che si avvalgono di elementi formali e di schemi operativi estremamente
semplici.
Non sorprende constatare che la sua descrizione attraverso tutti i dettagli risulterebbe estremamente
prolissa; si renderà quindi necessario presentare i vari sviluppi servendosi di semplificazioni e abbreviazioni che possono avvalersi dell’intuito, ma che è opportuno anche individuare con cura.
Qui si inizia con le esigenze basilari e con gli elementi più semplici; essi riguardano le caratteristiche
peculiari delle comunicazioni, dalle nozioni di caratteri e stringhe, alle loro manipolazioni fino alla
deerivazione degli interi naturali e delle sequenze di stringhe.
B10:a. Stringhe e loro prime manipolazioni
B10:a.01 In tutte le comunità umane si è sentita come esigenza primaria la memorizzazione delle
informazioni e delle conoscenze ritenute importanti. Si può immaginare una prima fase evolutiva
che condusse alla definizione di strumenti di registrazione che consentivano di ricordare con maggiore
sicurezza le conoscenze più importanti e di meglio trasmetterle a sodali ed a successori. Le conoscenze
da conservare sono state registrate e talora rielaborate, (vuoi per arricchirle, vuoi per spettacolarizzarle,
vuoi per distorcerle, vuoi per censurarle) in conseguenza di motivazioni di molteplici generi.
Tra le motivazioni di natura pratica vengono in mente la gestione delle scorte alimentari, la delimitazione dei terreni, le registrazioni e i calcoli commerciali e fiscali, gli adempimenti amministrativi, le
costruzioni, le cronache di eventi civili, politici, bellici, ambientali e astronomici.
Altre motivazioni appartenengono alla sfera delle emozioni e dei sentimenti suscitati da rapporti umani,
da esigenze identitarie, da impulsi etici, da aspirazioni spirituali, da convinzioni religiose, ... .
Queste molteplici motivazioni ad operare con informazioni hanno portano a descrivere situazioni ed
eventi, ad organizzare attività articolate, a regolare comportamenti, ... . Tutti questi moventi si possono ricondurre a una diffusa necessità di risolvere problemi; questi possono presentare tante caratteristiche, e possono risultare diversamente impegnativi. questi possono interessare vuoi i singoli individui,
vuoi categorie di persone, vuoi ampie collettività.
2016-02-06
B10: Comunicazione, stringhe e interi naturali
1
Alberto Marini
Per affrontare in modo sistematico vari generi di problemi risulta significativo e chiarificatore porre i
caratteri fondamentali dei soggetti che si pongono i problemi e dei rispettivi moventi in relazione con
le attività di registrazione ed elaborazione delle conoscenze.
B10:a.02 Come dovremo documentare nel seguito, una grande varietà di problemi può essere affrontata
in modo sistematico solo impegnandosi nell’arricchimento delle conoscenze pertinenti e in qualche
loro efficace organizzazione. Alla base di questo impegno sistematico stanno definizioni di strumenti
informativi come raffigurazioni, simbologie, notazioni, codifiche e terminologie.
Inoltre si delinea la necessità di sviluppare strumenti per le osservazioni di fenomeni ed eventi in relazione agli strumenti informativi per la loro registrazione. Più oltre si delinea la necessità di sviluppare
tecniche e metodi che consentano di strutturare le argomentazioni giustifictive, di precisare procedimenti dimostrativi, di mettere a punto dispositivi e metodi per l’elaborazione delle informazioni.
Per portare avanti tutte le attività accennate si è fatto ricorso a strumenti e processi culturali di
molteplici generi.
Tra gli strumenti culturali si possono distinguere, a livello di tendenza, quelli riconducibili a processi
semplici che in qualche misura sono condivisibili e riproducibili, da quelli sostenuti da spiegazioni
controverse e riconducibili a congetture per le quali si fatica a trovare fondamenti obiettivi o almeno
condivisibili al di là dei confini ambientali.
Per lo sviluppo degli svariati strumenti culturali si sono seguiti percorsi diversi, talora contrastanti e
conflittuali; questi sono stati determinati, oltre che da fattori interni, da esigenze spesso pressanti, sia
pratiche (ossia economiche, burocratiche, militari, ...), che intellettuali ed emotive (cioè ideologiche,
estetiche, retoriche, identitarie, religiose, ...) e da inevitabili condizionamenti ambientali (che vanno
dai tabù agli ostacoli alla comunicazione, dalle poca disponibilità di materiali alla scarsa padronanza
delle tecnologie).
B10:a.03 Nella maggior parte delle circostanze (che chiamiamo casi U) si sono imposti modi di comunicare ed elaborare dati e conoscenze che si servono prevalentemente di elementi intuitivi, metaforici,
retorici, emozionali e che si avvalgono ampiamente di componenti visuali, sonore e gestuali. Tipicamente questi atteggiamenti sono stati assunti sotto la spinta di problemi pressanti (in particolare
per la necessità / convenienza di coinvolgere / influenzare interlocutori numerosi e poco propensi ad
approfondire).
In altre circostanze (casi L), tendenzialmente nell’ambito di iniziative che richiedevano di coinvolgere attivamente gruppi circoscritti di persone e in condizioni che imponevano esigenze di precisione
e di lungimiranza, sono invece prevalsi approcci che si preoccupano primariamente della ampia riproducibilità delle informazioni e delle loro rielaborazioni, e che curano dettagli e distinzioni sostanzialmente al fine di fornire valide credibili assicurazioni di riutilizzabilità dei dati registrati e dei procedimenti per il loro trattamento. Le informazioni trattate in questi casi devono poter essere rielaborate
da operatori umani e, più recentemente, da apparecchiature che procedono automaticamente. Questi
operatori umani e queste apparecchiature le chiameremo collettivamente esecutori di procedure, in breve
EP. In linea di massima nelle circostanze Lcl (imposte dalla lungimiranza) si affrontano problemi di
minore urgenza e che possono essere risolti coinvolgendo ristretti gruppi di persone.
Queste pagine aderiscono all’atteggiamento L e sviluppano nozioni che intendono costituire una base
per procedimenti di calcolo e di elaborazione dei dati con ampia portata conoscitiva e applicativa.
Le nozioni esposte in MATeXp afferiscono prevalentemente alla matematica, ma toccano spesso
l’informatica (la cui pervasività e le cui prospettive oggi la matematica non può ignorare) ed in alcuni
2
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
punti riguardano la fisica e altre discipline scientifiche e tecnologiche; inoltre ci sforzeremo di porre in
luce che le nozioni esaminate sono utilizzabili in attività produttive ed organizzative.
B10:a.04 Per costruire un sistema di strumenti riproducibili e di portata generale che consentano
la soluzione di problemi mediante procedure è opportuno (forse necessario) iniziare dalle entità che
consentono le più semplici comunicazioni tra i candidati al ruolo di EP, di esecutori delle procedure
stesse. Cominciamo quindi a definire quelli per i quali useremo il termine caratteri nell’accezione di
segni elementari.
Per definire i caratteri iniziamo dicendo che sono disponibili loro rappresentazioni materiali. Queste
devono esere costituite da oggetti percepibili dagli EP (in particolare dagli EP umani attraverso la vista
e degli EP elettronici attraverso sensori elettromagnetici), devono presentare peculiarità distinguibili
dagli EP (in particolare forme distinguibili dagli EP umani) e devono potersi registrare sui vari tipi di
supporti disponibili per gli EP.
Nel passato le più importanti rappresentazioni dei segni elementari sono raffigurazioni tracciate in
areole bidimensionali su papiro, pergamena e successivamente carta. Vanno tuttavia ricordate incisioni
su legno, pelli, pietre e metalli, nonché rappresentazioni con oggetti più elaborati come i [[quipu]].
Per un certo periodo i caratteri sono state registrati anche su nastri e schede perforate. Tuttavia
attualmente presentano la maggiore importanza le registrazioni su supporti magneto-ottici e mediante
circuiti elettronici.
Si chiede che le registrazioni dei caratteri destinate a determinati EP siano tanto ben definite da rendere
trascurabile che gli EP destinatari li interpretino incoerentemente. Due EP in grado di cooperare
per essere coerenti innanzi tutto devono poter stabilire quando due registrazioni di caratteri vanno
considerati intercambiabili o meno. Intercambiabili per due EP vuol dire equivalenti per rappresentare
oggetti semplici ai quali dedicare le loro elaborazioni.
Due oggetti elementari da sottoporre ad elaborazioni devono potersi considerare aut equivalenti aut
non equivalenti nell’ambito del modello che porta alla loro rappresentazione mediante segni elementari
per gli EP in grado di trattarli.
Si assume quindi che si possono individuare svariati caratteri per ciascuno dei quali possono essere
prodotte quante si vogliono registrazioni materiali che gli EP possono maneggiare. In particolare si
chiede che ogni EP in grado di trattare una rappresentazione di segno elementare sia in grado di
riprodurne senza possibilità di confusione tante repliche quante gli possono servire.
B10:a.05 In molte attività si riconoscono rappresentazioni di informazioni, ciascuna dalle quali si
basa su un raggruppamento di caratteri i quali servono a rappresentare informazioni da considerare
elementari nell’ambito di un modello che contempla anche oggetti più tangibili concernenti qualche
determinato problema.
Disponendo di due caratteri, tipicamente di “0” e di “1”, si possono distinguere due situazioni che si
escludono: ad esempio per un intero positivo l’essere primo o all’opposto possedere divisori; oppure il
verificarsi di un evento o il suo non verificarsi; o ancora il verificarsi di un evento vantaggioso o di uno
santaggioso, il vincere o il perdere un incontro, il trovare o meno un oggetto in un contenitore... .
Servendosi di più segni, ad esempio dei dieci segni “0”, “1”,“2”,“3”, ..., “9”, si possono distinguere
altrettante situazioni mutuamente escludentesi. Esempi: il trovarsi di un certo oggetto in uno di 10
contenitori disposti in fila; il disporre di nessuna mela, di una mela, ..., di nove mele .
Già da questi esempi si vede come anche i caratteri elementari per essere adottati per le informazioni
sopra un problema di qualche interesse devono essere precisamente collegati ad entità aventi valenze
applicative mediante determinate convenzioni. Con tali collegamenti ci si avvia a determinare un
2016-02-06
B10: Comunicazione, stringhe e interi naturali
3
Alberto Marini
sistema di rappresentazioni degli oggetti o delle situazioni reali che si vogliono tenere sotto controllo o che
si vogliono meramente distinguere con una opportuna precisione. Un tale sistema di rappresentazioni
deve essere riconoscibile da tutti gli EP incaricati di trattare gli oggetti o le situazioni da esaminare.
Questo sistema costituisce la base di un modello.
I soli caratteri che gli umani sanno trattare (alcune decine) non permettonoi di manipolare agevolmente
oggetti articolati o situazioni elaborate: in molte pratiche si si devono rappresentare molte più oggetti
o situazioni. Per il livello 100 si pensi alle specie atomiche, per le migliaia alle molecole inorganiche
usuali, per i milioni alle molecole organiche, per i miliardi alle stelle di una galassia.
Per esprimere informazioni più composite è sostanzialmente inevitabile servirsi di “composizioni di
caratteri”. Le composizioni più utilizzate, soprattutto per essere le più praticabili, sono gli affiancamenti di repliche di caratteri che si possono immaginare allineati, ossia registrate unaødietro l’altra (o
al fianco dell’altra). Tali configurazioni sono chiamate stringhe o parole. Esempi di stringhe
aabccdee
,
grandezze incommensurabili
,
Guo Shoujing (1231-1316)
E naufragar m’è dolce in questo mare.
Si possono utilizzare anche configurazioni di caratteri più elaborate, delle stringhe, in particolare disposizioni bidimensionali di caratteri e sistemi di caratteri con connessioni determinate da collegamenti
anche di più tipi. Va però osservato che tutte le configurazioni di caratteri più complesse dalle stringhe
che sono state finora utilizzate si possono esprimere mediante stringhe e possono essere ignorate in
questi discorsi iniziali dell’esposizione.
B10:a.06 Le richieste precedenti vanno viste anche come richieste per gli EP. Per procedere con gradualità conviene iniziare con esecutori che si dedicano a determinate problematiche nell’ambito di scenari
circoscritti entro i quali vengono sviluppate attività collaborative. Un tale ambito di attività lo chiamiamo ambito cooperativo e gli EP che agiscono in un tale ambito verranno chiamati esecutori di procedure
cooperanti.
Un ambito cooperativo dovrà basarsi su accordi e convenzioni specifiche riguardanti i collegamenti tra
gli EP cooperanti e le modalità secondo le quali rappresentare gli oggetti degli scenari applicativi per
i quali effettuare le elaborazioni; a più alto livello si parla di sviluppare medodi e visioni strategiche
che consentano di gestire auspicabilmente in modo sistematico e organico le elaborazioni stesse.
La prima cosa che si richiede agli EP di un ambito cooperativo è la capacità di identificare, distiguere
e riprodurre senza ambiguità i caratteri di una certa gamma.
Ad un secondo livello poniamo le richieste che seguono; gli EP devono essere in grado di effettuare
azioni semplici sulle stringhe quali:
-
scorrimenti alla ricerca di occorrenze di determinate configurazioni di caratteri (sottostringhe);
riproduzioni su supporti simili a quello di lettura;
riproduzioni con sostituzioni di sottostringhe, in particolare di loro cancellazioni;
affiancamento di due o più stringhe disponibili;
organizzazione di operazioni composite ottenute combinando operazioni semplici come le precedenti
ed operazioni precedentemente riscontrate come realizzabili; tra queste operazioni composite poniamo l’esecuzione di due o più operazioni in una data successione e l’esecuzione di una tra diverse
operazioni proposte come possibili in seguito di una scelta riconducibile ad azioni semplici
- ripetizioni di azioni riscontrate come realizzabili.
Le scelte menzionate si chiede seguano schemi tendenzialmente semplici che procederemo a precisare
con gradualità.
4
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
Le richieste precedenti presumono che gli EP dispongano di appropriati dispositivi e anche per questi
è opportuno chiedere strutture tendenzialmente semplici.
A tutte queste richieste vanno associati requisiti di affidabilità degli EP.
B10:a.07 Attraverso le accennate operazioni composite (per le quali sarebbe talora preferibile il termine attività) gli esecutori di procedure, come dice l’esperienza, si rivelano capaci di portare avanti
procedimenti complessi o, in altre parole, di effettuare elaborazioni complesse che, per gli ambienti che
li accolgono, consentono di risolvere problemi anche molto impegnativi.
Per confermare queste enunciazioni sarà necessario procedere per gradi attraverso la introduzione di
entità via via più articolate consistenti in:
- procedimenti per i quali ci proponiamo di garantire che siano riconducibili ad operazioni e scelte
elementari su stringhe;
- strutture formali, entità che ci proponiamo di ricondurre a sistemi strutturati di stringhe che soddisfano regole verificabili con manovre ampiamente sperimentate e condivisibili.
B10:a.08 Nella esposizione di questi sviluppi, per riuscire a fornire agli studiosi presentazioni efficaci delle strutture e dei procedimenti, si riscontra la necessità di introdurre svariate convenzioni
semplificative; solo adottando opportune semplificazioni di linguaggio (necessariamente articolate) si
possono avere presentazioni che, a confronto con quelle che si avrebbero esponendo tutti i dettagli
delle costruzioni formali risultano notevolmente più concise ed immaginifiche (e quindi più agevoli da
registrare, da comunicare meccanicamente o mentalmente e più facili da padroneggiare e da discutere
per fini applicativi da parte degli EP umani e degli interessati alle applicazioni).
Con queste convenzioni semplificative l’esposizione tende ad allontanarsi dalle presentazioni che si
basano esclusivamente sulle stringhe da cui si è partiti e sulle loro manipolazioni. Tuttavia si ha una
buona garanzia che alle rappresentazioni ed alle elaborazioni di stringhe ci si possa sempre ricondurre.
La precisione che effettivamente si può riscontrare negli odierni EP materiali, l’accennata riconducibilità
alle entità formali, e la possibilità, chiara in linea di principio, della falsificazione delle costruzioni
formali forniscono buone garanzie di riproducibilità delle informazioni e di affidabilità delle procedure
per la loro elaborazione.
Le informazioni e le procedure, soprattutto grazie alla qualità degli odierni strumenti informatici
e telematici, conseguono anche la loro conservabilità, la loro comunicabilità, la loro condivisibilità
operativa e la loro ampia possibilità di riutilizzo.
A questo punto possiamo affermare che le suddette prospettive aprono la possibilità di organizzare e
realizzare sistemi per l’elaborazione dei dati e per la gestione delle conoscenze (sistemi matematici,
informatici, scientifici, tecnologici, di standardizzazione, produttivi, organizzativi, ...) di elevata affidabilità, di ampia portata e di incisivo impatto economico, sociale e culturale.
B10:a.09 Nelle pagine che seguono i caratteri verranno rappresentati da caratteri tipografici di uso
comune e oggetti di standardizzazioni: lettere come a, b, c, ... , V, Z, cifre decimali, parentesi,
operatori aritmetici ed altri simboli matematici, segni di interpunzione e segni convenzionali suggeriti
da varie esigenze.
Per molte attività risulta conveniente procedere attraverso sviluppi formali ed elaborativi con obiettivi
circoscritti concerenti oggetti di interesse settoriale e solo in fasi successive cercare di organizzare i
risultati ed i metodi settoriali concertati ed aggregati in relazione a scopi di maggiore portata.
All’interno di ciascuno sviluppo settoriale risulta più agevole conseguire un buon livello di coerenza tra
i costrutti formali e le procedure utilizzate. Le scelte formali per ogni settore si definiscono fissando
2016-02-06
B10: Comunicazione, stringhe e interi naturali
5
Alberto Marini
un certo numero di convenzioni.
La prima convenzione per ogni sviluppo basato su stringhe riguarda i caratteri che costituiscono le
stringhe da trattare e che chiameremo caratteri primari; le stringhe che si costruiscono su tali caratteri
le diciamo stringhe primarie.
Si devono inoltre stabilire regole per le manipolazioni formali attuabili in relazione ai fini dello sviluppo;
in particolare nell’ambito di ogni ben definita teoria matematica (ad es. v. T65:) si devono precisare
assiomi e schemi dimostrativi.
Accade tuttavia che nella pratica dell’esposizione molte convenzioni e molte regole possono essere
sottintese confidando che i lettori possano evitare le ambiguità e con il vantaggio di evitare lungaggini
che risulterebbero assai tediose.
B10:a.10 L’esposizione della matematica e delle elaborazioni è opportuno si dipani attraverso sviluppi
specifici e relativamente circoscritti entro i quali vengono rispettate convenzioni e semplificazioni specifiche e sono utilizzati termini e simboli dipendenti dal contesto.
Nell’esposizione hanno ruolo centrale le cosiddette espressioni, stringhe che, come vedremo, soddisfano
regole formali (lessicali, sintattiche, ...) piuttosto precise e che portano significati molto rilevanti.
Vi sono sviluppi dell’esposizione piuttosto circoscritti e che non richiedono risultati precedenti che si
servono di pochi caratteri primari. Per alcuni sviluppi basta un solo carattere e qui lo rappresentiamo
con “ ”, segno che chiameremo tacca, termine che ricorda un oggetto utilizzato per calcoli primitivi.
Vi sono poi molti sviluppi che possono essere portati avanti con espressioni costituite da due soli
caratteri; questi conviene rappresentarli con le due cosiddette cifre binarie, “0” e “”1, che chiameremo
preferibilmente bits, contrazione di binary digits.
Altri sviluppi richiedono più segni omogenei, come quelli dell’elenco “0”, “1”, “2”, ..., “9”. Gli sviluppi
riguardanti i cosiddetti calcoli algebrici elementari richiedono l’uso di segni un po’ meno omogenei:
“0”, “1”, “2”, ..., “9”, “+”, “−”, “·”, “*”, “(”, “)”, “=”.
Passando a discorsi più elaborati in genere cresce sensibilmente la necessità di segni con ruoli differenziati e spesso si rende opportuno servirsi di caratteri tipografici di diverse fonti e di caratteri più
∫
specifici (A, b, C, d, E, F, g, ∀, ∩, =⇒, , ∂, ∇, ̸ , ...).
In uno specifico contesto espositivo (in particolare in due espressioni) due rappresentazioni di caratteri
che non presentano elementi distinguibili per gli EP sono detti occorrenze di carattere uguali, mentre in
caso contrario si parla di occorrenze di carattere diverse.
A questo proposito va segnalata una terminologia alternativa: invece di occorrenze di caratteri uguali,
si parla anche di repliche indistinguibili di una stessa entità simbolica convenzionale (se si vuole idealizzabile).
Queste ultime, quando ci impadroniremo della nozione di classe di equivalenza, potrebbero definirsi
caratteri astratti, entità che individuano le classi di caratteri concreti i quali per gli EP presentano caratteristiche indistinguibili: per gli esecutori umani hanno lo stesso aspetto, per gli esecutori di un certo
tipo artificiale hanno le stesse caratteristiche vuoi meccaniche, vuoi elettromagnetiche, vuoi magnetoottiche, vuoi circuitali.
Si constata senza difficoltà che queste varianti terminologiche per la pratica non comportano alcuna
differenza di rilievo.
Per queste nozioni in genere conviene adottare semplificazioni secondo le quali “occorrenze di carattere
uguali” viene sostituita da “caratteri uguali” o da “caratteri dello stesso tipo”, mentre “occorrenze di
carattere diversi” viene sostituita, “caratteri diversi” o da “caratteri di tipi diversi”.
6
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
Possiamo anche concludere che agli EP cooperanti si chiede, innanzi tutto, di saper confrontare due
caratteri primari per decidere senza incertezze se sono uguali o diversi.
B10:a.11 Considerando gli esecutori di procedure come esecutori effettivi e tangibili, ovvero come
produttori di azioni, si chiede innanzi tutto che siano in grado di operare sopra supporti per la registrazione dei caratteri che chiamiamo nastri sui quali si possono disporre affiancati dei caratteri primari
per costituire quelle che chiamiamo stringhe primarie.
Esempi di stringhe primarie sono
ab ,
ba ,
abaa ,
Gadda , x + 2 a , (x2 + b x + c)/sqrt(x2 + 5) , 0 = 1 + exp(i π) .
Chiediamo che anche i caratteri singoli siano considerati stringhe; questa scelta, forse a prima vista
bizzarra, costituisce una generalizzazione che si rivela assai conveniente per l’esposizione.
Le stringhe costituite da un solo carattere sono dette monogrammi, quelle di due caratteri digrammi,
quelle di tre trigrammi e cosı̀ via.
Ad ogni EP si chiede inoltre che sappia affiancare sopra un unico nastro due stringhe che siano sotto
il suo controllo, in particolare che siano registrete sopra due suoi nastri: ad esempio accostando abaa
ed abb si ottiene abaaabb. le stringhe sotto il suo controllo vengono dette stringhe date e la stringa
ottenuta viene chiamata giustapposizione delle stringhe date.
L’ottenimento di una stringa giustapposizione va considerato un tipo fondamentale di costruzione
formale ed una stringa non ridotta ad un solo carattere va considerato un primo tipo di entità formale
composita.
Dunque in uno sviluppo informativo-elaborativo nel quale si è convenuto di operare su determinati
caratteri primari, questi sono da trattare come entità atomiche: di essi non si vuole considerare alcuna
componente più elementare (come invece accade in tipografia quando si studiano le composizioni
bidimensionali dei caratteri di stampa e nelle procedure [[OCR]]).
Applicazioni nelle quali la giustapposizione è necessaria sono le costruzioni di stringhe importanti per
molte attività amministrative come il codice fiscale di una persona e il codice bancario IBAN. Un
esempio di codice fiscale è BNDLCN65E12F205V: questa stringa si ottiene giustapponendo la stringa
BND ottenuta dal cognome della persona, la stringa LCN ricavata dal suo nome, la stringa tt 65E12 che
rappresenta fedelmente la sua data di nascita, la F205 codice del suo comune di nascita ed il carattere V
ottenuto elaborando i 15 caratteri precedenti per consentire un controllo della correttezza della stringa
complessiva.
Un esempio di codice IBAN è IT12Y030690949800007998118, stringa ottenuta da codici che identificano entità bancarie e un conto corrente.
Si osserva che giustapponendo le due precedenti stringhe nell’ordine opposto si ottiene abbabaa, una
stringa diversa dalla precedente. In genere quindi le due possibili giustapposizioni di due stringhe sono
stringhe diverse.
Questa proprietà si dice noncommutatività della giustapposizione delle stringhe.
Le due giustapposizioni però, evidentemente, coincidono quando si accostano due stringhe uguali. Un
altro caso in cui si ha la coincidenza si ha con due stringhe come abbabb ed abbabbabb. In effetti
dimostreremo (v. C10:) che le due giustapposizioni di due stringhe coincidono se e solo se entrambe
le stringhe sono ottenibili giustapponendo più volte una unica stringa (nel caso precedente la stringa
abb).
B10:a.12 Una stringa costituita da più di due caratteri primari potrebbe essere ottenuta mediante
processi di giustapposizione differenti; si ottiene abaaabb anche giustapponendo ab ed aaabb.
2016-02-06
B10: Comunicazione, stringhe e interi naturali
7
Alberto Marini
Per segnalare che due diversi processi conducono alla stessa stringa primaria si usa una scrittura come
(abaa) (abb) = (ab) (aaabb) .
[∗]
In questa scrittura compaiono i segni “(”, “)” e “ ” che, per evitare ogni possibile confusione, sono
stati scelti diversi dai caratteri primari. I segni “(” e “)” costituiscono una cosiddetta coppia di
parentesi coniugate: tali segni si incontrano disposti a coppie con ogni occorrenza del primo che precede
una occorrenza del secondo a lui associata; questa associazione risulta biunivoca e le due parentesi si
dicono coniugate.
Si osserva che la precedente scrittura [∗] costituisce anch’essa una stringa che è costituitivamente più
composita dalle stringhe primarie in discussione. Essa costituisce un primo esempio di metastringa,
stringa che ha lo scopo di descrivere stringhe primarie semplici e processi che le coinvolgono (nel caso
precedente si hanno i due processi di giustapposizione). I caratteri non primari di una metastringa si
dicono metacaratteri.
La distinzione fra caratteri e metacaratteri spesso viene lasciata implicita. Questa semplificazione
costituisce un esempio dell’atteggiamento volto alla abbreviazione semplificativa delle esposizioni.
Mentre nelle situazioni precedenti si hanno due livelli di caratteri, i primari ed i metacaratteri, in seguito incontreremo situazioni più articolate. In esse intervengono quelle che possono chiamarsi stringhe
ausiliarie, stringhe che servono a descrivere stringhe primarie, metastringhe ed eventualmente altre
stringhe ausiliarie di consistenza più ridotta: in effetti vedremo molte altre costruzioni che consentono
di ottenere nuove stringhe mediante stringhe di livelli inferiori e nuovi caratteri ausiliari con ruoli specifici, come i precedenti caratteri “(”, “)” e “ ” utilizzati per descrivere costruzioni mediante stringhe
primarie.
B10:a.13 Riprendiamo le caratteristiche dei nastri, i dispositivi che in :a.11 abbiamo messo a disposizione degli EP. Un nastro conviene descriverlo come un dispositivo formato da caselle affiancate,
contenitori in ciascuno dei quali si può registrare una copia di uno dei caratteri che si possono incontrare nelle stringhe da trattare. Un nastro dunque è un supporto per la registrazione sequenziale delle
informazioni elementari.
p
a
r
o
l
e
s
u
n
a
s
t
r
o
Osserviamo che il termine nastro ricorda le apparecchiature elettromeccaniche ed elettromagnetiche utilizzate per la registrazione delle informazioni nei primi tempi dello sviluppo delle tecnologie
dell’informazione.
I precedenti storici sono molteplici: corde con annodamenti (v. [[Quipu]]), tavolette d’argilla, rotoli di
[[papiro]], [[pergamena]], nastri perforati (per le macchine tessili di [[Jacquard]], per il telegrafo, per le
telescriventi), ... .
Osserviamo esplicitamente che un nastro come modello fisico di registratore di dati da elaborare non
può che essere finito. Sulla possibilità di servirsi di “nastri infiniti” torneremo però in B16 .
Per un nastro di uscita chiediamo genericamente che abbia una estensione sufficiente a contenere una
stringa che ci si aspetta in risposta, rinunciando ora ad affrontare il problema di risposte molto estese.
Presenteremo svariate elaborazioni formali nelle quali un EP opera su stringhe che gli sono fornite su
uno o più nastri, detti nastri di input, e produce una o più stringhe registrate su uno o più nastri, detti
nastri di output. In particolare la giustapposizione di due stringhe si può ottenere facilmente servendosi
8
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
di tre nastri, due di ingresso (dotati di una testina di scrittura) e uno di uscita (dotato di una testina
di lettura).
a
...
...
...
b
...
...
...
a
...
...
...
a
...
...
...
a
...
...
...
b
...
...
...
b
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
.
...........
. .
. .
. .. .
........................................................................................................................................................................................................................................................................................................................................................................................................................................................................
...
..
.. ...
....
....
.... ....
.
. .
.
............................
..............
..............
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
a
a
b
a
a
b
b
Consentiamo anche che un nastro venga scritto in caselle a sinistra della prima occupata all’inizio della
elaborazione.
Ammettiamo anche la possibilità di avere un segno particolare (ad es. ⊢) come primo carattere registrato e similmente un segno particolare (ad es. ⊣) come ultimo carattere registrato.
B10:a.14 Vedremo che si rivela importante che due stringhe ottenute con processi differenti possano
essere confrontate per stabilire se sono uguali o diverse. Supponiamo che esse siano fornite ad un
EP su due diversi nastri. Risultano uguali se, procedendo simultaneamente da sinistra verso destra
sui successivi caratteri delle due stringhe, cioè procedendo sulle successive caselle dei due nastri, l’EP
trova in ogni coppia di celle corrispondenti caratteri uguali e giunge contemporaneamente alla fine dei
due affiancamenti di segni. Le stringhe sono diverse se e solo se due caratteri corrispondenti risultano
diversi o se si conclude lo scorrimento di una stringa prima dell’esaurimento dell’altra.
Potrebbe risultare pratico far seguire le registrazioni delle stringhe da un segno specifico, ad
esempio“⊣”, avente il compito di segnalare in ogni fase operativa la conclusione della zona registrata
di ogni nastro e avente l’effetto di facilitare alcune decisioni dell’EP e in particolare la conclusione
del suo operare; con tale accorgimento l’uguaglianza delle stringhe si avrebbe con l’arresto dell’EP su
due caratteri conclusivi, la diversità con l’arresto dell’EP su due caratteri diversi che possono essere
caratteri primari diversi oppure un carattere conclusivo su un nastro e sopra un carattere primario
sull’altro.
La stringa ottenuta accostando nell’ordine a, b, a ed a non risulta distinguibile da quella ottenuta
affiancando le stringhe ab ed aa; sono invece tutte mutuamente distinguibili abaa, abca ed abaaa.
B10:a.15 Il confronto di due stringhe si può effettuare servendosi di tre nastri, due per le due stringhe
da esaminare ed il terzo destinato alla registrazione di un solo carattere che stabilisca se le due stringhe
sono uguali o diverse: sul terzo nastro dunque si possono avere due possibili segni corrispondenti ai due
possibili risultati; come per ogni altra procedura chiamata a dare una sola risposta positiva o negativa,
si potrebbero usare i segni t e f (per true e false), oppure 1 e 0, oppure S ed N (per si e no), oppure Y
ed N.
..
..
..
..
..
..
..
..
.
.
.
.
.
.
.
.
.
.
..
. . ..........
.
.............
. .. .
.............
..
...
...
...
...
...
.
.
.
.
.................................................................................................................................................................................
.
...
...
...
.....
.....
.....
...........
...........
...........
.
.
.
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
a
a
b
b
c
a
a
a
⊢
a
f
...
...
..
⊢
⊢
L’uso di un carattere terminatore per le porzioni usate dal nastro in varie elaborazioni riesce a facilitare alcume operazioni dell’EP. Esso costituisce una variante facoltativa, in quanto consente risultati
equivalenti.
2016-02-06
B10: Comunicazione, stringhe e interi naturali
9
Alberto Marini
Osserviamo che per confrontare due stringhe avremmo potuto procedere da destra a sinistra; si è
preferito il modo precedente in relazione al prevalere in ambito scientifico e produttivo delle lingue
occidentali; nel mondo arabo si potrebbe preferire di procedere da destra a sinistra e nel Giappone
tradizionale si dovrebbero disporre i nastri verticalmente e procedere su di essi dall’alto in basso.
B10:a.16 Facendo riferimento ai nastri dimostriamo la proprietà chiamata associatività della giustapposizione di stringhe.
Siano date tre stringhe; per considerare la questione in generale identifichiamo le tre stringhe con tre
metacaratteri, u, v e w; per fare un esempio specifico siano u =aabca, v =bcac e w =cab.
Con una prima manovra affianchiamo la u e la v ottenendo la stringa che servendoci dei metacaratteri
parentesi denotiamo con (u v); successvamente affianchiamo questo risultato intermedio alla terza w
ottenendo la stringa che denotiamo con ((u v) w).
Con una manovra alternativa otteniamo prima la (v w) e poi affiancando questa alla destra della u
otteniamo la (u (v w)).
Si tratta di dimostrare che ((u v) w) = (u (v w)). Va osservato che questa uguaglianza riguarda due
stringhe esprimendo anche le due diverse manovre che le hanno ottenute.
Per l’uguaglianza pensiamo di far scorrere i due nastri che registrano le due stringhe: in una prima
fase si incontrano su entrambi i nastri due repliche della u, poi due repliche della v e infine due repliche
della w e non si può che constatare l’effettiva coincidenza.
B10:a.17 Si incontrano gruppi di elaborazioni mediante stringhe che interessano gruppi di persone o
organismi con interessi condivisi (commercianti e clienti, astronomi, proprietari di terreni contigui,
fisco e tributari, ...). Gli interessati a un determinato gruppo di elaborazioni sono portati ad attribuire
alle stringhe elaborate dei significati, associando a ciascuna di esse una entità che si colloca in un
“mondo” che conviene venga definito con elevata precisione secondo criteri condivisi.
Il collegamento fra queste stringhe e i loro significati costituisce un primo genere di modellizzazione,
di definizione di un modello. Le stringhe si presentano come oggetti fondamentalmente semplici e per
questo sono proposte come base per informazioni da comunicare per essere condivise e da elaborare.
per la loro comunicazione e per la loro elaborazione. Gli esempi di modelli mediante stringhe sono
assai numerosi e riguardano una gran varietà di situazioni.
I modelli ai quali si pensa per primi riguardano la rappresentazione del parlato. Mediante le lettere
usate nella lingua italiana si esprimono suoni con una corrispondenza fra lettere e suoni relativamente
semplice, migliore di quanto accade per altre lingue naturali, ad esempio l’inglese. Il parlato viene
meglio rappresentato servendosi di segni come quelli costituenti l’[[Alfabeto fonetico internazionale]];
questo tuttavia porta a stringhe più complesse da quelle usate tutti i giorni per la comunicazione scritta
e viene usato essenzialmente solo per segnalare la pronuncia di termini particolari per .
B10:a.18 Alle cifre decimali notoriamente si attribuiscono significati quantitativi ben definiti. Per
le espressioni della matematica si può usare una gamma di segni molto vasta cui vengono attribuiti
significati tendenzialmente precisi, ma in genere ottenuti con percorsi complessi e irti di convenzioni
che talora non sono universalmente accettate e possono assumere significati contrastanti (anche entro
un solo testo).
Nelle espressioni usate in fisica si introducono altre convenzioni, in particolare quelle non banali alla
base delle definizioni delle [[unità di misura]]. In tutti i settori scientifici, tecnologici o comunque
interessati a informazioni condivisibili le esigenze di precisione conducono a sviluppi elaborati. Di
conseguenza si pone il problema di introdurre sistemi di segni convenzionali con significati ben definiti.
10
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
Ad esempio mediante le note musicali si esprimono diversi suoni, ovvero diverse frequenze di fenomeni
ondulatori producibili con strumenti anche molto diversi.
Nei fatti tuttavia si incontrano collegamenti scritture - significati non coerenti, non sufficientemente
chiariti, imputabili a convenzioni poco chiare o addirittura ambigue.
Ma non è il caso di adentrarci nei complessi meandri della [[semiologia]] o della filosofia del liguaggio]].
Qui soltanto segnaliamo che le uniche caratteristiche che richiediamo ai modelli che si servono di
stringhe che tratteremo sono la distinguibilità dei caratteri primari e la assunzione di non riducibilità
dei diversi oggetti i quali si associano ai caratteri primari e alle corrispondenti stringhe.
La plausibilità di queste richieste si può far discendere dalla accettazione della validità delle elaborazioni
su stringhe.
B10:b. Altre semplici operazioni e relazioni su stringhe
B10:b.01 In ogni ambito elaborativo-espositivo concretamente utile ed interessante si deve fare ricorso
a stringhe che vengono prese in considerazione un gran numero di volte.
Alcuni esempi: una espressione matematica piuttosto elaborata, un elenco riguardante centinaia o
migliaia di persone, un elenco di coordinate geografiche di località colpite da un sisma, ... .
Evidentemente per esporre in modo conciso le attività ed i risultati conviene che ciascuna delle stringhe
da citare ripetutamente possa essere individuata da un segno elementare o da una stringa non lunga
da considerarsi una abbreviazione. Occorre che ogni nuova scrittura sia interpretabile senza ambiguità;
questo si può ottenere usando un carattere o una abbreviazione “peculiare”, cioè un carattere diverso
dai caratteri primari e dagli ausiliari già introdotti, che si stanno usando nel dato contesto, cioè se
viene usato solo come rappresentante di una specifica stringa viene evitata ogni ambiguità.
Nel seguito per denotare stringhe primarie specifiche o generiche, in accordo con molte abitudini,
saranno usate preferibilmente lettere come u, v o w.
Per individuare la stringa ottenuta giustapponendo le stringhe individuate da u e v mantenendo traccia
di come essa è stata costruita utilizzeremo la scrittura u v; tuttavia e spesso sarà possibile adottare la
sua semplificazione u v.
Se una stringa viene definita come u v e nelle fasi successive dell’esposizione deve essere richiamata
spesso conviene individuarla mediante un solo segno, ad esempio w. In tal caso si dichiara questo ruolo
per la w scrivendo
w := u v ;
in questa scrittura il segno specifico :=, detto segno di denotazione, rappresenta l’introduzione nella
esposizione del nuovo segno specifico che sta alla sua sinistra con il ruolo dell’identificatore della stringa
fornita dalla espressione che sta alla sua destra. Conviene sottolineare che u v costituisce anche la
rappresentazione di un processo che ha consentito di costruire la stringa; questo processo costruttivo
riguarda la semplice giustapposizione, ma denotazioni analoghe alla w := u v vengono adottate anche
per costruzioni assai più elaborate di nuove stringhe a partire da una, due o più stringhe note.
Come vedremo sono utili anche introduzioni di nuove stringhe della forma E := S, dove alla sinistra del
segno di denotazione non si ha un segno semplice, ma una stringa che fornisce una identificazione nella
quale compaiono elementi ausiliari (”parametri”) che compaiono anche nell’espressione alla destra;
questa S costituisce una stringa tendenzialmente più complessa, ossia più estesa ed articolata della E;
2016-02-06
B10: Comunicazione, stringhe e interi naturali
11
Alberto Marini
la scrittura E deve avere una forma tale da rendere sensato (non ambiguo e mnemonico) attribuirle
il ruolo di identificatore della espressione alla destra S. In questi casi si dice che si è introdotta una
nuova notazione o un nuovo identificatore per la costruzione S.
B10:b.02 Due segni con ruoli basilari e di uso frequente sono “=” e “̸=”: essi esprimono due relazioni
che possono intercorrere fra due stringhe ottenute con procedimenti definiti. Fra due stringhe costruite
con procedimenti definiti, oltre a quelle rappresentate da “=” e “̸=”, si possono riscontrare varie altre
relazioni: anche il riscontro di queste altre relazioni fra stringhe è vantaggioso possa ottenersi con
procedimenti effettuati da qualche EP.
Per trattare (registrare, trasmettere, elaborare) le relazioni accertate con procedimenti ben definiti
conviene introdurre metacaratteri e scritture convenzionali atti ad individuare concisamente tali procedimenti e le relazioni che stabiliscono. Anche per questi segni e notazioni è opportuno scegliere forme
il più possibile significative e facili da ricordare da parte degli EP umani e trattabili senza difficoltà da
EP artificiali. Naturalmente anche per queste notazioni innanzi tutto si richiede la non ambiguità.
Si abbiano i metacaratteri u e v per individuare due scritture che rappresentano due stringhe in modo
da segnalare i processi Pu e Pv con i quali sono state costruite; per affermare che tali stringhe sono
uguali si scrive u = v, mentre per enunciare che esse sono diverse si scrive u ̸= v. Questi enunciati
se u e v rappresentano stringhe primarie possono basarsi su una verifica (le proprietà di uguaglianza e
disuguaglianza si possono decidere per qualsiasi coppia di stringhe esplicite); in situazioni più complesse
richiedono argomentazioni concernenti i processi Pu e Pv che potrebbero richiedere studi impegnativi.
B10:b.03 Nelle presentazioni di elaborazioni formali può risultare utile introdurre segni e simboli che
rappresentino ampie gamme di possibili stringhe (oppure di altre entità alle stringhe riconducibili).
Questi sono detti simboli variabili. Per evitare ambiguità anch’essi dovrebbero essere specifici, almeno
all’interno di una determinata porzione di esposizione/elaborazione; in altre parole dovrebbero essere simboli localmente specifici. Vedremo tuttavia che in molte esposizioni a queata richiesta (per la
quale potrebbero essere utili opportuni accorgimenti tipografici) si possono ottenere deroghe quando
il contesto rende facile evitare confusioni.
I simboli variabili ricorrono sistematicamente nelle descrizioni dei procedimenti simbolici. Infatti le
esposizioni di argomenti matematici, scientifici e tecnologici si propongono di esaminare situazioni di
ampia applicabilità, secondo lo spirito delle attività delle discipline volte alla riproducibilità conoscitiva
e operativa vogliono trattare ampie gamme di situazioni e di processi.
Ai simboli variabili delle esposizioni vanno collegate le variabili che si trovano nelle procedure
scritte nei linguaggi di programmazione: come vedremo (B17:) queste sono le entità che consentono
l’implementazione delle variabili della matematica discreta e delle esposizioni afferenti alle altre discipline caratterizzate dalla richiesta della riproducibilità.
B10:b.04 Le considerazioni sulle stringhe servono per situazioni molto più impegnative e complesse di
quelle suggerite dagli esempi volutamente semplici ed essenziali forniti finora. Esempi di stringhe sono
anche i vocaboli riportati in un dizionario, i nomi delle località registrati nell’indice di un atlante, i
nomi di persone e organismi contenuti in un elenco telefonico o in altra basedati amministrativa, le
denominazioni di personaggi, località, eventi e documenti storici, l’elenco dei domini di Internet.
Anche i periodi, i paragrafi ed i capitoli di un qualsiasi testo o documento si possono considerare
stringhe (in questo caso i caratteri primari, oltre alle lettere di una o più lingue, comprendono anche
gli spazi che separano i vocaboli, tutti i segni di interpunzione usati, separatori di linee, paragrafi e
capitoli e spesso delimitatori di sottostringhe speciali).
12
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
Esempi basilari di stringhe sono anche le sequenze di bits; queste esprimono, secondo determinati schemi
di codifica, informazioni concernenti numeri, caratteri visualizzabili, elementi grafici, sonori, cinematografici, istruzioni ed altre entità che possono essere trattate con strumenti della ICT, ossia della
Information and Communication Technology. Sopra sequenze di pochi bits (in genere 8, 16, 32, 64 o
128) agiscono le istruzioni elementari di un processore e su quelle più estese, quelle costituenti files,
operano i programmi e i pacchetti software.
B10:b.05 I files sono contenitori sequenziali di informazioni esprimibili come sequenze di bits o di
caratteri visualizzabili che dalla seconda metà del XX secolo rivestono grandissima importanza. Essi
possono essere registrati su dispositivi di memoria (dischi, nastri, dispositivi di memoria magnetici,
ottici, microcircuitali, ...) gestibili dal computer o da sue varianti (tablet, e-book, smart phone, smart
clock, ...) ed in tal modo consentono di costituire archivi di dati e conoscenze fondamentali per la
società odierna.
Osserviamo che l’operazione di confronto fra due stringhe, quando riguarda semplici stringhe come
abac ed abaaa ha il tono del giochino, mentre quando riguarda due lunghi elenchi o due lunghi testi
di programma registrati su supporti magnetici costituisce una operazione di interesse produttivo che,
per essere eseguita in modo preciso ed efficiente, può richiedere studi attenti e anche adeguati specifici
supporti tecnologici. Nella elaborazione dei dati accade spesso di avere coppie di files originariamente
uguali ma che si sospetta abbiano subite modifiche incontrollate o corruzioni imputabili ad eventi
sconosciuti e che è cruciale riportare sotto controllo.
Anche l’esame delle differenze fra due files di estensione raggurdevole può richiedere apposite procedure
non banali.
B10:b.06 Mediante stringhe si riesce a dare risposta a molteplici esigenze; si studiano quindi sistematicamente manovre sulle stringhe che possano servire a trovare queste risposte; l’esigenza di affidabilità
e riproducibilità implica che vadano trattate solo manovre che si possano ricondurre ad operazioni
elementari sui caratteri che le compongono.
Oltre alle manovre su stringhe a carattere elementare come la giustapposizione e il confronto, se ne devono studiare molte assai complesse e la definizione di alcune di esse (di natura combinatoria, algebrica,
numerica, geometrica, statistica, ...) costituisce un argomento che tratteremo con cura. Ciascuna di
queste manovre può collegarsi ad una costruzione formale atta a risolvere un determinato problema;
essa parte da stringhe date che definiscono una cosiddetta istanza del problema e cerca di individuare
stringhe che possano costituire il risultato dell’esecuzione attuale della manovra; questo risultato si propone di rappresentare la soluzione della istanza del problema.
Primi esempi di stringhe risultato sono la stringa ottenuta per giustapposizione di alcune stringhe date,
la stringa che registra l’uguaglianza o meno di due stringhe date per essere confrontate, cioè la stringa
u = v o il suo opposto la stringa u ̸= v.
Un altro esempio di manovra: stabilire, date due stringhe su due nastri, qual’è la più lunga: basta
scorrere i due nastri in sincronia e segnalare (1) se lo scorrimento della prima stringa termina quando
la seconda non è ancora stata scorsa interamente, (2) se lo scorrimento di entrambe si conclude nello
stesso momento oppure (3) se la seconda finisce prima della prima.
Osserviamo che la precedente descrizione di procedura sostanzialmente definisce le due relazioni fra
stringhe dell’essere l’una lunga almeno quanto l’altra.
Diciamo inoltre che due stringhe date u e v hanno la stessa lunghezza sse si trova che u è lunga almeno
quanto la v e la v è lunga almeno quanto la u.
2016-02-06
B10: Comunicazione, stringhe e interi naturali
13
Alberto Marini
Si trova facilmente che due stringhe presentano la stessa lunghezza sse possono essere regiatrate su due
nastri che possono essere sottoposti a due scorrimenti in sincrono che si concludono con entrambe le
testine nelle posizioni successive alle stringhe stesse (o sopra il segno terminatore).
B10:b.07 Come si è detto, un modo canonico per descrivere queste manovre fa riferimento ai nastri
contenenti le stringhe da elaborare e ai nastri disponibili per registrare le stringhe esprimenti il risultato;
inoltre per quasi tutte le manovre utili si rendono necessari nastri ausiliari sui quali vanno registrate
informazioni di interesse temporaneo. Ricordiamo che questi nastri possono essere letti e scritti da
esecutori umani o da dispositivi di esecutori automatici che chiamiamo testine di lettura e scrittura. Si
può chiedere che una testina si possa spostare sulle caselle del proprio nastro in una sola o in entrambe
le direzioni.
Conviene considerare come particolari nastri ausiliari dispositivi che costituiscono singoli registri con
compiti specifici. Ogni registro che possa memorizzare un singolo carattere o una piccola stringa
binaria, numerica o di caratteri leggibili viene detto genericamente registro di variabili semplici.
Un esecutore artificiale effettua le manovre di sua spettanza servendosi di una apparecchiatura di
controllo che in ogni fase di una elaborazione è in grado di gestire le testine di lettura e scrittura e,
sulla base di quanto fornito dalle testine e da altri suoi registri interni che caratterizzano la gamma delle
sue possibili prestazioni, di effettuare trasformazioni delle informazioni a lei disponibili per modificare
contenuti dei suoi registri interni e dei nastri. Per ora rinunciamo a precisare i dettagli di questi
dispositivi di controllo (li riprenderemo in particolare in B16: e C21:) e ci limitiamo a chiedere che
vengano realizzati concretamente o almeno vengano fornite indicazioni sufficienti a convincere della
loro effettiva realizzabilità.
In una società evoluta dal punto di vista del trattamento delle informazioni e della disponibilità di
automatismi come l’attuale (o come una implicitamente auspicata da alcuni studiosi del passato,
ad esempio da [[Ctesibio]] e da [[Leibniz]]) è possibile pensare che queste operazioni possano essere
effettuate sia da uomini che da macchine con una elevata fiducia di poter essere ripetute fornendo gli
stessi risultati.
Questa richiesta può suscitare obiezioni: ”si stanno introducendo nozioni elementari, ma si fa riferimento ad attività umane ed a manovre effettuate da sistemi complessi come le apparecchiature meccaniche, elettromeccaniche o elettroniche; per completezza si dovrebbero definire questi operatori!”
In effetti a questo punto ci limitiamo a ribadire che per le operazioni che introduciamo si richiede che
possano essere effettuate da esecutori di procedure, questi potendo essere persone capaci di eseguire
in modo preciso istruzioni espresse in modo sufficientemente chiaro, oppure meccanismi esistenti e
collaudati, o anche definizioni di meccanismi ragionevolmente realizzabili.
B10:b.08 Per lo studio delle stringhe risulta determinante introdurre una entità detta stringa muta,
parola muta o parola vuota; qui la denotiamo con “ ” e la definiam come la stringa che giustapposta ad
ogni altra stringa costruita con qualsivoglia scelta di caratteri la lascia invariata.
A prima vista la stringa muta può sembrare una bizzarria inespressiva: in realtà essa risulta essenziale
nello studio e nelle elaborazioni delle stringhe, in quanto consente di presentare con precisione ed
elevata generalità una ampia gamma di situazioni e di operazioni che riguardano stringhe alle quali si
consente possano essere mute.
Formalmente per la stringa muta
si chiede:
v=v
(1)
per ogni stringa trattabile v si ha
14
B10: Comunicazione, stringhe e interi naturali
=v .
2016-02-06
MATeXp – Nozioni di base
Di conseguenza per la giustapposizione di due, tre, ... repliche della stringa muta si ha
=
, (
)
=
(
)=
=
, (
) (
)=
, ...
Prospettiamo ora alcuni esempi di elaborazioni di elenchi che possono coinvolgere elenchi vuoti.
Molte costruzioni di elenchi iniziano con un elenco vuoto che successivamente cercano di arricchire fino
ad un opportuno completamento. Altre manovre, viceversa, affrontano un elenco dato di configurazioni
che cercano di svuotare fino a decidere che non risulta accettabile alcuna delle situazioni che si vogliono
dimostrare inaccettabili. Si possono poi immaginare manovre che si servono di elenchi ausiliari i quali
nel corso di una elaborazione potrebbero crescere, poi svuotarsi e successivamente tornare a riempirsi
e cosı̀ via.
Un particolare elenco ausiliario potrebbe registrare le carrozze che si vengono a trovare su un binario
morto e che successivamente possono essere estratte o viceversa ivi depositate. Un’altra monovra
potrebbe invece riguardare la fila dei libri che si vengono a trovare sopra uno scaffale i quali vengono
via via asportati per essere consultati, ricollocati ed eventualmente riordinati secondo un opportuno
criterio di accessibilità.
B10:b.09 Si dice stringa riflessa di una stringa w registrata sopra un nastro la stringa ottenibile con
una elaborazione molto semplice: si tratta di trascrivere da sinistra a destra su un secondo nastro i
caratteri letti scorrendo la w sul nastro di entrata da destra a sinistra. Questa stringa si denota con
l’espressione w← .
In particolare la riflessa della stringa ROMA è AMOR, la riflessa della stringa riflessa è asselfir.
Si osserva che la riflessa di una stringa monogramma, cioè di un carattere, è il carattere stesso. Inoltre
per generalità conviene assumere che la riflessa della stringa muta sia ancora la stringa muta.
Si osservi anche che riflettendo la riflessa di una qualsiasi stringa si riottiene la stringa stessa: in
formula (w← )← = w.
Per la riflessa di una stringa individuata da una notazione che evidenzia la sua genericità si ha
(1)
(a1 a2 a3 · · · as−1 as )← = as as−a · · · a3 a2 a1 .
Questa uguaglianza si può assumere come definizione della riflessione di una stringa.
Una trasformazione che applicata due volte ad uno qualsiasi degli oggetti sui quali può agire lo riproduce
viene detta involuzione. A partire da B13: tratteremo molte involuzioni e la riflessione delle stringhe è
tra le più semplici involuzioni; più semplice è soltanto la cosiddetta trasformazione identità, modifica che
non cambia niente della stringa alla quale si applica.
Si osservi che qualora si abbia una collezione T di trasformazioni che si possono rappresentare come
applicazioni successive di date trasformazioni fondamentali, ciascuna delle trasformazioni di T si può
individuare con una stringa di caratteri associati alle trasformazioni fondamentali; la trasformazione
identità si può inserire in quesa collezione T ed è lecito rappresentarla con la stringa muta.
Si constata che per la riflessione di una giustapposizione di stringhe vale la formula
(2)
per stringhe arbitrarie u e v abbiamo
(u v)← = (v ← ) (u← ) .
Ad esempio (abc de)← = ed cba .
Osserviamo che si può evidentemente assumere come definizione della riflessione di stringhe anche
l’uguaglianza 2): infatti applicandola ripetutamente a stringhe ottenute giustapponendo caratteri,
tenuto conto che ogni carattere è palindromo, si giunge alla (1).
2016-02-06
B10: Comunicazione, stringhe e interi naturali
15
Alberto Marini
Osserviamo di avere introdotto un segno, ←, che esprime una trasformazione attraverso la descrizione
del modo di attuarla. Questo segno può considerarsi un metacarattere rispetto ai caratteri usati per
comporre le stringhe alle quali si applica.
Esso va scritto ad esponente di una scrittura esprimente una stringa ed indica il risultato della trasformazione sulla stringa.
B10:b.10 Una stringa si dice [[palindromo]] (o stringa bifronte) quando coincide con la propria riflessa.
Sono palindromi ANNA, radar, ottetto e anilina; sono palindromi anche i caratteri e la stringa muta.
Sono palindromi anche tutte le potenze di stringhe palindromi; infatti se p è un palindromo, cioè se
p← = p, allora per ogni m intero positivo si ha
(pm )← = (p← )m = (pm ) ← .
Com’è facile rendersi conto, sono palindromi tutte e sole le stringhe della forma u u← e della forma
u a u← , dove u denota una stringa qualsiasi e a un carattere arbitrario. Questa u potrebbe coincidere
con la ; con questa scelta per la u l’affermazione precedente si riduce alle affermazioni che stringa
muta e caratteri singoli sono palindromi.
La frase antiprecedente fornisce un primo esempio di utilizzo della
per un enunciato di una certa
generalità. Si comincia quindi a giustificare il fatto che la stringa muta sia utile alla organizzazione di
conoscenze e alla elaborazione di dati.
B10:b.11 Date due stringhe u e v, è facile stabilire se v si può ottenere giustapponendo ad u una
opportuna stringa x: basta registrarle su due nastri, scorrerle in sincrono da sinistra a destra e verificare
che ad ogni carattere di u corrisponda uguale carattere di v. In questo caso si dice che u è prefisso di
v. Ad esempio aba è prefisso di abaacb e tergi è prefisso di tergicristallo. Questa situazione si
verifica anche quando u = v : in questo caso v si può ottenere giustapponendo ad u la stringa muta.
Abbiamo un’altra situazione che può essere presentata in modo conciso mediante la stringa muta.
Similmente è facile stabilire se v si può ottenere giustapponendo ad una opportuna stringa y la u:
registrate le due stringhe su due nastri, basta scorrere in parallelo u e v da destra verso sinistra e
verificare che a ciascuno dei successivi caratteri di u corrisponda uguale carattere su v. In questo
caso si dice che u è suffisso di v. Si dice questo anche quando u = v. Ad esempio cani è suffisso di
Dominicani ed arum è suffisso di rosarum.
B10:b.12 Ogni stringa non muta possiede più prefissi e più suffissi. Sono prefissi della stringa nome le
seguenti stringhe: , n, no, nom e nome. Sono invece suoi suffissi , e, me, ome e nome.
Inoltre è facile individuare una procedura che da una qualsiasi stringa ricava tutti i suoi prefissi. Essa
organizza uno scorrimento della stringa data da sinistra a destra e su ogni carattere della stringa data
esegue una emissione su un nastro di uscita di un nuovo prefisso. Basta considerare l’esempio dei
prefissi di nome: preliminarmente emette una indicazione della stringa muta; letta la lettera n emette
tale iniziale; letta o emette no; letta m emette nom, letta l’ultima lettera emette l’intera stringa data. In
generale l’emissione dopo la lettura di una nuova lettera della stringa data richiede la rilettura con una
testina ausiliaria della stringa dall’inizio fino all’ultima lettera immessa e la sua graduale emissione.
Abbiamo quindi una procedura che emette più stringhe e si pone il problema di registrarle in modo
utile. Un modo di fare consiste nel servirsi di un metacarattere con il ruolo di separatore: scegliamo
per questo la “,”. Dopo l’emissione su un unuco nastro di uscita di un prefisso lo si fa seguire da una
copia del separatore. Nel caso dei prefissi della stringa nome si ottiene sul nastro di uscita la stringa
,n,no,nom,nome,
16
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
Servendosi di un altro modo per individuare la stringa muta e del carattere terminatore si avrebbe la
stringa sostanzialmente equivalente
,n,no,nom,nome,⊣
Talora serve registrare su di un nastro la stringa muta come alternativa di altre stringhe, spesso assieme
ad altre stringhe. Questo può effettuarsi in vari modi, secondo definite convenzioni: si potrebbbe
collocare “ ” su un registro per stringhe e metastringhe; si potrebbe dedicare un nastro alla sola
stringa muta registrando nella sua prima casella il segno terminatore; si potrebbe registrare la stringa
muta come componente di un elenco gestito con separatori (v.o.) facendovi comparire due separatori
consecutivi; si potrebbe rappresentare insieme a stringhe rappresentate tra delimitatori accoppiati con
scritture come () o come <span></span> .
B10:b.13 Le due nozioni di prefisso e suffisso sono riconducibili l’una all’altra attraverso la operazione
di riflessione. Infatti si vede facilmente che la stringa u è prefisso della v se u← è suffisso di v ← e solo
in questa evenienza. Ad esempio abc è prefisso di abcde e cba è suffisso di edcba.
Una stringa può essere sia prefisso che suffisso di un’altra: abra è prefisso e suffisso di abracadabra.
B10:b.14 Una stringa u si dice infisso della stringa v quando questa si può ottenere giustapponendo
a sinistra ed a destra della u due opportune stringhe x ed y, cioè quando può scriversi v = x u y.
Ancora potrebbe essere u = v, caso in cui x = y = ; potrebbe anche essere u prefisso di v (y = )
ed u suffisso di v (x = ). Ad esempio gli infissi di abcde sono: , a, b, c, d, e, ab, bc, cd, de, abc,
bcd, cde, abcd, bcde, abcde; gli infissi di aababa sono invece: , a, b, aa, ab, ba, aab, aba, bab, aaba,
abab, baba, aabab, ababa e aababa.
Si osserva anche che gli infissi di una stringa si possono ottenere individuando prima i suoi suffissi
e successivamente i prefissi di questi; si osserva anche che tali infissi sono i suffissi dei prefissi della
stringa data; dunque gli infissi di una stringa sono tutti e soli i prefissi dei suoi suffissi. Inoltre (per
simmetria di riflessione) gli infissi di una stringa sono tutti e soli i suffissi dei suoi prefissi.
B10:b.15 Potrebbe accadere di individuare due costruzioni di stringhe tali che la prima conduca ad un
prefisso della stringa fornita dalla seconda, senza avere chiaro se le due stringhe siano uguali o diverse.
Stabilire se vale l’uguaglianza o meno corrisponde a una precisazione di una conoscenza. È comunque
opportuno disporre di termini che consentano di esprimere le due distinte conoscenze. Diciamo quindi
che u è prefisso in senso stretto di v se u è prefisso di v e non coincide con essa. Quando accade di parlare
di prefisso in senso stretto può essere preferibile enunciare ”w è prefisso in senso stretto di x” piuttosto
che limitarsi a dire ”w è prefisso di x”. Il primo enunciato è un esempio di espressione poco concisa
ma atta ad evitare una oscurità. La precisazione ”in senso stretto” si rende utile in varie locuzioni. In
particolare si dice che u è suffisso in senso stretto di v se u è suffisso di v e non coincide con essa.
Si possono rendere opportune altre sottigliezze per distinguere gli infissi di una stringa. Relativamente
ad una data stringa v una stringa u:
si dice infisso in senso stretto a sinistra di v sse u è infisso e non prefisso di v;
si dice infisso in senso stretto a destra di v sse u è infisso e non suffisso di v;
si dice infisso in senso stretto a sinistra e a destra di v sse u è infisso, non prefisso e non suffisso di v.
Si dice invece genericamente infisso in senso stretto della v sse u è infisso di v e non coincide con essa.
B10:b.16 A questo punto ci si può rendere conto che nello studio delle stringhe sono spesso necessarie
molte precisazioni: quindi è opportuno disporre di notazioni differenziate ed accurate.
Si amplia dunque l’opportunità di studiare elaborazioni su stringhe.
2016-02-06
B10: Comunicazione, stringhe e interi naturali
17
Alberto Marini
Abbiamo individuate alcuni tipi di collegamenti fra stringhe verificabili attraverso manovre basate
su stringhe: essere uguale a, diversa da, prefisso di, infisso di, ... : questi sono primi esempi delle
cosiddette relazioni decidibili fra stringhe.
B10:c. Stringhe: equivalenze, sostituzioni, elenchi
B10:c.01 Diciamo stringa iniettiva o stringa nonripetitiva una stringa che non presenta caratteri ripetuti.
Descriviamo una semplice procedura in grado di stabilire se una qualsiasi stringa data u è iniettiva
o meno. Sul nastro sul quale è fornita la u facciamo operare due testine di lettura che individuiamo,
risp., con i e j: con la prima si organizza uno scorrimento primario dei caratteri della u dal primo al
penultimo; con la seconda uno scorrimento subordinato dei caratteri dal successivo di quello puntato
da i fino all’ultimo. Ad ogni passo dello scorrimento secondario si confrontano i due caratteri puntati
da i e j: se tutti i confronti danno caratteri diversi, resta stabilito che la u è iniettiva, mentre al
primo confronto che segnala due caratteri coincidenti si può concludere che la u non è iniettiva, ossia
è ripetitiva.
Una procedura che sostanzialmente costituisce un arricchimento della precedente, data una stringa u,
elimina i suoi eventuali caratteri ripetuti: ad esempio dalla ababcbacc ricava abc.
Essa si serve di due nastri, Ti e Tj : sul primo viene fornita la stringa u da trasformare e sul secondo,
inizialmente vuoto (ovvero con il carattere terminatore nella prima casella), si intendono inserire i
successivi caratteri che si trovano su Ti e che non risultano ripetuti. La manovra si sviluppa attraverso
fasi successive, in ciascuna delle quali mediante la testina i si esamina uno dei successivi caratteri della
u. In ogni fase si scorre il secondo nastro mediante la testina j fino a giungere al terminatore per
verificare se il carattere trovato sul primo, chiamiamolo x, si trova tra quelli già inseriti nel secondo;
in caso affermativo si passa alla fase successiva facendo avanzare i, mentre in caso negativo si accoda
x su Tj spostando di una casella il terminatore. Osserviamo che in ogni caso il primo carattere della
u viene riprodotto sul nastro Tj .
Un problema vicino al precedente riguarda una stringa iniettiva u, cioè con un elenco di caratteri senza
ripetizioni, come quello ottenuto dalla manovra sopra descritta, e la decisione se una qualsiasi stringa
data w è costituita solo da caratteri della u o se, viceversa, ne contiene qualcuno non occorrente nella
u.
Il procedimento risolutivo prevede fasi successive riguardanti i successivi caratteri b1 , b2 , ..., bn della w
e per ciascuno di essi, chiamiamolo bj lo scorrimento della u =: a1 a2 ... am per decidere se per qualche
i si ha bj = ai .
In una applicazione pratica i caratteri della u potrebbero svolgere il ruolo dei soli caratteri “consentiti”;
in tale situazione se uno dei bj non coincide con alcuno degli ai si avrebbe il rifiuto della w, mentre
quasta stringa sarebbe accettata se ciascuno dei caratteri della w si ritrova nella u.
In una applicazione nella quale, viceversa, i caratteri della u svolgono il ruolo dei caratteri “proibiti”
si avrebbe il rifiuto della w con il reperimento del primo carattere bj coincidente con un ai . Questa
ultima procedura si può considerare complementare della precedente.
B10:c.02 Presentiamo ora una procedura che permette di decidere se due stringhe date, u e v, contengono gli stessi caratteri. Essa quindi affronta un problema di decisione e ci proponiamo di darle
una tipica conclusione emettendo il carattere t quando non presentano caratteri diversi ed il carattere
f nel caso opposto.
18
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
Operiamo con 4 nastri: su T1 si presenta u e su T2 si immette v; T3 fa da nastro ausiliario ed inizialmente
è vuoto; T4 serve per il risultato e consiste in una sola casella che potrà contenere solo aut t aut f, cioè
si limita a fornire una semplice informazione risultato con due possibili valori.
Si inizia con la seconda manovra descritta in :c.01 per ottenere su T3 la stringa u′ trasformata iniettiva
della u.
Si sviluppano poi fasi successive concernenti i successivi caratteri x della u′ trovati scorrendo T3 . In
ciascuna fase si scorre T2 e si cancellano tutte le occorrenze di x.
Se in una di queste fasi non si cancella alcuna occorrenza del carattere x, si conclude che v non contiene
questo x e si emette f su T4 . Se si giunge al termine dello scorrimento di T3 , due le possibilità: se da T2
la v originale non è stata cancellata interamente, si conclude che v contiene caratteri (quelli leggibili
su T2 ) che non occorrono nella di u e si emette f; solo in caso contrario si emette t.
Si osserva che di questa pur semplice procedura si possono considerare alcune varianti: ad esempio
si potrebbero scambiare i ruoli della u e della v, oppure si potrebbero ottenere preliminarmente le
corrispndenti stringhe iniettive sia della u che della v, per concludere con una fase conclusiva nella
quale si stabilisce se presentano gli stessi caratteri due stringhe sicuramente iniettive.
Cogliamo l’occasione per segnalare che ogni problema risolvibile con una procedura P può essere
trattato con risultati equivalenti anche con qualche sua variante. Queste varianti della P possono
presentare differenze variamente rilevanti, ciascuna delle quali potrebbe presentare qualche vantaggio:
ad esempio se ne potrebbero individuare una prima semplice da organizzare e da descrivere ma poco
efficiente ed una seconda più efficiente ma che richiede una organizzazione più complessa.
Questi vantaggi nelle applicazioni particolari possono essere importanti e meritevoli di studio, ma qui
non aprofondiamo: ci basta presentare in modo convincente una prima gamma di problemi su stringhe
con loro soluzioni algoritmiche e contemporaneamente introdurre delle nozioni associate alle soluzioni,
confidando che queste soluzioni effettive rendano le nozioni stesse più chiare, e tangibili.
B10:c.03 Due stringhe u e v si dicono equivalenti per caratteri contenuti sse ogni carattere contenuto
nell’una occorre anche nell’altra. Una tale situazione, che abbiamo trovato decidibile algoritmicamente,
la vogliamo esprimere con la notazione specifica u ∼contch v .
Più particolarmente, con procedure che richiedono qualche manovra in più facilmente definibile, si può
stabilire se due stringhe date u e v sono iniettive e contengono gli stessi caratteri. In caso affermativo
esse si dicono equivalenti per occorrenze di caratteri permutate; anche per enunciare questo fatto usiamo
una notazione specifica scrivendo u ∼permch v .
Più in generale, date due stringhe u e v, si può stabilire se le rispettive trasformate iniettive u′ e v ′
hanno la stessa lunghezza e in tal caso la prima può essere trasformata nella seconda sostituendo ogni
suo carattere in quello che gli corrisponde passando dalla u′ alla v ′ . In caso affermativo le due stringhe
u′ e v ′ si dicono equivalenti per biiezione dei caratteri, fatto che denotiamo scrivendo u′ ∼bijch v ′ .
B10:c.04 I precedenti simboli ∼contch e ∼permch e ∼bijch esprimono relazioni che possono sussistere fra
stringhe. Su tali entità vogliamo fare tre osservazioni nelle quali useremo la scrittura ∼x per indicare
vuoi la ∼contch , vuoi la ∼permch , vuoi la ∼bijch .
Innanzi tutto si osserva che (1) se le due stringhe date coincidono, esse risultano equivalenti sia per
caratteri contenuti,che per caratteri permutati, che per biiezione dei caratteri: dunque u ∼x u .
Si ha poi che (2) due esecuzioni di ciascuna delle tre procedure presentate sulle due stringhe u e v,
esecuzioni che differiscono soltanto in quanto la prima inizia con la u registrata sul nastro T1 e la v
su T2 e la seconda trova la u registrata su T2 e la v su T1 devono fornire lo stesso risultato: questa
considerazione si esprime scrivendo u ∼x v ⇐⇒ v ∼x u .
2016-02-06
B10: Comunicazione, stringhe e interi naturali
19
Alberto Marini
Infine si osserva che (3) considerando tre stringhe u, v e w, se accade che u ∼x v e v ∼x w, allora
necessariamente si trova che u ∼x w; quest’ultima considerazione si esprime scrivendo u ∼x v ∧ v ∼x
w =⇒ u ∼x w .
I tre fatti osservati sono caratteristici delle relazioni di equivalenza, entità che riprenderemo in B14:b.10.
Qui si tratta di relazioni fra stringhe, ma in seguito ne incontreremo molte altre che riguardano molti
generi di entità: i numeri, le funzioni, le figure geometriche e tante altre; in particolare considereremo
relazioni tra date relazioni. Vedremo anche che le relazioni di equivalenza spesso sono assai utili per
porre ordine in molti risultati matematici.
B10:c.05 In precedenza si sono usati tre nuovi segni che assegnamo al genere dei connettivi logici, oggetti
che pongono in collegamento due enunciati (v.a. B60:). Il primo, ∧, è detto congiunzione, può essere
espresso anche dalla congiunzione “e” e richiede la validità dei due enunciati che collega. Il terzo ,
=⇒, è detto connettivo di implicazione e collega due enunciati per esprimere che il secondo di essi è
conseguenza del primo. Il secondo, ⇐⇒, è detto connettivo di equivalenza e collega due enunciati per
esprimere che ciascuno dei due è conseguenza dell’altro.
Questi connettivi saranno trattati più adeguatamente in B60: .
L’osservazione :c.04(3) può essere interpretata come possibilità di risparmio di eleborazioni: essa permette di limitarsi alle elaborazioni che stabiliscono se u ∼x v e v ∼x w, evitando l’inutile lavoro di
stabilire se u ∼x w: siamo di fronte ad una considerazione deduttiva riguardante considerazioni generali sulle procedure e va rilevato che essa può risparmiare un’attività elaborativa. Questo è un esempio
elementarissimo di una situazione vantaggiosa che si può individuare negli sviluppi della scienza e della
tecnologia.
Un’altra considerazione merita l’altro termine che compare nell’espressione equivalenti per biiezione di
caratteri. Per permutazione associata alla coppia formata dalle stringhe iniettive u e v tali che u ∼p v
si può intendere la trasformazione che dalla u ricava la v. Formalmente definiamo questa permutazione
come la stringa “u ↔ v”, dove il segno “↔” svolge il ruolo di composizione delle due stringhe tra le
quali viene interposto, cioè viene inserito come infisso.
La metastringa precedente consente di individuare la trasformazione suddetta e quindi si può considerare una sua rappresentazione. Come ogni altra rappresentazione mediante stringhe viene detta
codifica.
Osserviamo anche che la biiezione fra caratteri (che si può individuare mediante due stringhe iniettive
della stessa lunghezza) si può estendere a biiezione fra stringhe iniettive e, come vedremo, anche a
biiezione fra collezioni di stringhe iniettive.
B10:c.06 Un importante tipo di operazione sulle stringhe riguarda la trasformazione di una stringa in
un’altra mediante una cosiddetta sostituzione acontestuale alfabetica. Essa si può ottenere con quattro
nastri, T1 , T2 , T3 e T4 . Su T1 è data la stringa iniettiva p dei caratteri che si vogliono sostituire in
ciascuna delle stringhe da trasformare. T2 è un nastro da scorrere in sincrono con il primo e contiene
nell’ordine i caratteri che devono sostituire quelli su T1 ; in T2 si possono avere ripetizioni e non si
esclude che si abbia una sequenza di caratteri uguali. Su T3 va registrata la stringa u che si vuole
trasformare; per la generalità ammettiamo che la u possa essere costituita da caratteri che compongono
la u e da altri caratteri.
Su T4 si costruisce gradualmente la stringa modificata che diciamo trasformata per sostituzione della u.
La trasformazione in fasi successive corrispondenti ai successivi caratteri che si trovano scorrendo la u
su T3 ; per ciascuna tale componente ai si aggiunge un carattere bi in coda a T4 , nastro che inizialmente
è vuoto. Il carattere ai viene cercato scorrendo dall’inizio T1 , mentre si scorre in sincrono anche T2 ; se
20
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
lo si trova si accoda su T4 il carattere bi presente nella stessa posizione su T2 ; se ai non si trova su T1 ,
si accoda su T4 lo stesso ai
Ad esempio si consideri la sostituzione che modifica a in d, b in e e c in f; questa trasforma la stringa
aabcbba nella ddefeed e la stringa abaacb nella deddfe.
La sostituzione governata dai contenuti p e q dei nastri T1 e T2 si può denotare Sost[p, q]; la trasformata
della stringa u si indica allora Sost[p, q](u).
Al variare di p e q queste trasformazioni Sost[p, q] si possono considerare varianti di una unica operazione.
Possiamo anche dire che Sost è la sostituzione acontestuale parametrica, entità che si concretizza in una
sostituzione acontestuale specifica, trasformazione del tipo introdotto. all’inizio del paragrafo, quando
si attribuiscono ai suoi due parametri due valori specifici p e q costituiti da due stringhe della stessa
lunghezza la prima delle quali iniettiva. In questa ottica, T1 e T2 servono a specificare la sostituzione
parametrica, mentre a T3 si associa il ruolo di nastro di input ed a T4 quello di nastro di output del
. All’inizio di ogni esecuzione su T3 si ha il dato che caratterizza la attuale istanza del problema da
risolvere, mentre su T4 alla fine di ogni esecuzione si ha il risultato dell’elaborazione attuale.
Come esempio di sostituzione acontestuale specifica consideriamo la modifica di espressioni algebriche
consistente nella modifica delle variabili x, y e z, risp., nelle variabili ξ, η e ζ. Abbiamo allora
Sost[xyz, ξηζ(a x2 + b y 2 + c z 2 ) = a ξ 2 + b η 2 + c ζ 2 .
Chi si occupa di programmazione osserva che i contenuti di T1 e T2 hanno un ruolo simile a quello del
programma per un computer specializzato nella effettuazione delle sostituzioni acontestuali alfabetiche.
Per la soatituzione acontestuale invece dei due nastri T3 e T4 si potrebbe usare un unico nastro dotato
di due tracce e di una sola testina ma che vogliamo più versatile delle due che servono a T1 e T2 , in
quanto in grado di operare diversamente sulle due tracce.
B10:c.07 Se la stringa parametro q è costituita, come la p, da caratteri tutti diversi, Sost[p, q] si dice
sostituzione acontestuale invertibile ed accanto ad essa si può considerare quella che diciamo essere la sua
sostituzione inversa Sost[q, p]. Applicando successivamente due tali sostituzioni ad una qualsiasi stringa
data si riottiene la stringa stessa: questo fatto facilmente verificabile si esprime con la formula
(1)
Sost[q, p] (Sost[p, q](u)) = u per ogni stringa u .
Se più in particolare i due elenchi che determinano la sostituzione riguardano lo stesso insieme di
caratteri presentati secondo due ordini diversi, caratteristica verificabile con una semplice manovra, si
parla di sostituzione permutativa o biiettiva.
Un esempio di tale sostituzione: Sost[abc, cab](abaacb) = caccba .
Le definizioni comportano che ogni sostituzione biiettiva è una sostituzione invertibile.
B10:c.08 Fin da questi primi discorsi ci siamo serviti di scritture nelle quali intervengono caratteri
di base sui quali si è convenuto di operare (a, b, ...), caratteri rappresentanti stringhe generiche (u,
v, w, ...), segni di operazioni e relazioni (“ ”, “:=”, “=”, “̸=”, “← ”, “∼contch ”, “∼permch ”, “∼bijch ”,
“=⇒”, ...), un separatore come “;” , il terminatore “⊣” e identificatori finora solo letterali (Sost)
che individuano operazioni e costruzioni determinate e parentesi (tonde e quadrate) con funzioni di
delimitatori di stringhe infisse aventi lo scopo di dare una struttura alle scritture come dovrà essere
chiarito più avanti.
Queste scritture sono i primi esempi di quelle che sono dette espressioni matematiche o formule matematiche, scritture che risultano estremamente utili per tutte le esposizioni riguardanti matematica,
2016-02-06
B10: Comunicazione, stringhe e interi naturali
21
Alberto Marini
procedimenti di calcolo, elaborazioni delle informazioni, nozioni scientifiche e tecnologiche e in generale
considerazioni quantitativo procedurali. Queste espressioni a loro volta si possono considerare stringhe
formate da caratteri dei diversi generi, come quelli accennati in precedenza; come vedremo, si trova
che queste espressioni seguono regole formali piuttosto stringenti.
Anche a queste stringhe si possono applicare la considerazioni sviluppate per le stringhe ottenute come
affiancamenti di caratteri di base: ad esempio su di esse risulta utile effettuare manovre come giustapposizione e sostituzione. Si osserva la possibilità di sviluppare diversi ordini di considerazioni attraverso
stringhe formate mediante diverse scelte di caratteri. Talora per chiarezza conviene distinguere fra
caratteri e stringhe relative al primo ordine di considerazioni e metacaratteri e metastringhe relative agli
ordini superiori: le più semplici fra queste consentono di esprimere sinteticamente insiemi di situazioni
e processi riguardanti caratteri e stringhe; altre riguardano enunciati in cui entrano metastringhe e
segni convenzionali dei vari generi, enunciati sopra altri enunciati, ... .
B10:d. Interi naturali
B10:d.01 Stringhe molto particolari sono quelle costruite con un solo carattere; per tali stringhe ci
serviremo preferibilmente del segno ; avremo quindi da trattare stringhe come , ,
e
.
Diciamo rappresentazione unadica mediante di un intero positivo ogni stringa costruita replicando questo
solo carattere.
Inoltre alla stringa muta assegnamo la qualifica di rappresentazione unadica del numero zero. Considerando
insieme la stringa muta e le stringhe date da repliche di , chiameremo tali oggetti rappresentazioni
unadiche mediante degli interi naturali; questo termine lo abbreviamo con la sigla unr.
B10:d.02 Queste stringhe, nonostante il loro aspetto piuttosto noioso, consentono di esprimere importanti nozioni (misure) come la lunghezza delle stringhe, la lunghezza delle liste e la cardinalità degli
insiemi espliciti e permettono di introdurre operazioni come le tradizionali operazioni aritmetiche, fondamentali per lo sviluppo di tutte le cosiddette discipline quantitative. Inoltre lo studio delle proprietà
che riguardano queste sole stringhe, la cosiddetta [[teoria dei numeri]], presenta grande interesse e
costituisce una parte fondamentale della matematica.
Le unr risultano però poco efficienti: un numero naturale molto elevato viene fornito da una stringa
molto lunga; quindi un EP umano per coglierne il significato deve leggerla con grande attenzione
mentre un EP artificiale può operare su di essa solo con scarsa efficienza.
Vedremo però più avanti ( c) che si possono introdurre altre scritture meno semplici che consentono di
esprimere tutto quello che esprimono le unr ma in modo più maneggevole, sia da parte degli EP umani
che dagli artificiali. Si potrà anche slegarsi dalle rappresentazioni ed introdurre la nozione di numero
intero conseguendo rilevanti semplificazioni terminologiche.
Per ora ci limitiamo ad aggiungere le rappresentazioni mediante parole della lingua italiana e mediante
le cosiddette cifre indo-arabe per i primi fra i “numeri interi naturali”:
Rappresentazione unadica
22
Termine italiano
Cifra decimale
zero
uno
due
0
1
2
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
tre
quattro
cinque
sei
sette
otto
nove
3
4
5
6
7
8
9
B10:d.03 La giustapposizione di due unr H e K è un’altra unr che viene detta unr della somma degli
interi rappresentati da H e K; questa evidentemente coincide con la giustapposizione della K con la
H, fatto che si esprime affermando la commutatività della giustapposizione delle stringhe su un solo
carattere.
Si vede anche che la unr della somma di un intero rappresentato da H con zero è uguale ad H; questo
discende dalla proprietà :b.08(1).
Risulta inoltre evidente che la unr della somma dell’intero somma degli interi rappresentati da H e
K e dell’intero rappresentato dalla stringa di tacche J risulta uguale alla unr della somma dell’intero
rappresentato da H con la somma degli interi rappresentati da K e J; questo fatto si esprime affermando
l’associatività della giustapposizione di stringhe su un solo carattere.
Si osserva che queste proprietà associate al termine “somma” discendono dalle proprietà richieste per
le elaborazioni sulle stringhe. L’unica difficoltà alla comprensione di questi discorsi sta nella loro
prolissità.
B10:d.04 Consideriamo la sostituzione alfabetica Sost[p, ] che modifica ciascuno dei caratteri con i
quali si opera nel segno . Essa trasforma una qualsiasi stringa w nella unr detta rappresentazione
unadica della lunghezza della w. Ad esempio la rappresentazione unadica della lunghezza della stringa
e, secondo la tabella in d.02, si parla di lunghezza “sette”.
“unadica” è
Se denotiamo con UnlS (w) la unr della lunghezza della unr di una stringa w, si trova facilmente che
(1) .
per u e v stringhe qualsiasi : UnlS (u v) = UnlS (u) UnlS (v)
e
UnlS ( ) =
Consideriamo ora un elenco di almeno una stringa presentato con le stringhe registrate sopra un nastro
separate da un ben definito separatore, ad esempio “,” e se vogliamo delimitate da ⟨” ed “⟩” . Diciamo
rappresentazione unadica della lunghezza di una tale lista la unr ottenuta scorrendo il nastro dell’elenco dato
ed emettendo sopra un nastro di uscita una tacca in corrispondenza di ogni occorrenza del separatore,
nonché una tacca aggiuntiva. Questo procedimento si può adattare per emettere la stringa muta,
cioè la unr dello 0, in corrispondenza di un elenco muto. Stabiliamo inoltre di denotare RulL (E) tale
rappresentazione per la lista E. Possiamo dunque avere enunciati come i seguenti
(2)
RulL (⟨Hamlet, Romeo and Juliet⟩) =
RulL (⟨⟩) =
RulL (⟨Atalante⟩) =
.
Le unr delle lunghezze di stringhe e di elenchi forniscono indicazioni, risp., sulla quantità dei caratteri
componenti le stringhe e sulla quantità di oggetti espressi mediante elenchi e si intuisce come esse
possono fornire indicazioni di importanza pratica.
B10:d.05 Osserviamo che le affermazioni sulle rappresentazioni unadiche di naturali hanno richiesto
giri di frase molto pesanti. Inoltre la rappresentazione unadica della lunghezza di una stringa molto
estesa, ad esempiodel testo della Divina Commedia o dell’elenco telefonico di una grande città, consiste
2016-02-06
B10: Comunicazione, stringhe e interi naturali
23
Alberto Marini
in una lunghissima sequenza di segni
per una elaborazione automatica.
insignificante ed inutilizzabile per gli umani e molto onerosa
Per un pratico sviluppo dello studio riguardante le unr si impone quindi la necessità di introdurre una
terminologia più concisa e significativa per rappresentazioni unadiche di naturali, stringhe ed elenchi
e la necessità di introdurre notazioni che consentano a umani e macchine di manipolarle agevolmente.
Questo porta (B12:c) ad introdurre i numeri naturali come entità alle quali riferire le unr e, dopo
l’introduzione delle nozioni di prodotto cartesiano e di prodotto di naturali, la definizione di scritture
dei naturali significative ed utilizzabili nella pratica come la decimale e la binaria.
B10:d.06 Conveniamo ora che nella trattazione delle elaborazioni si possa fare riferimento ai numeri
naturali, entità trattabili operativamente attraverso le rispettive unr ed altre rappresentazioni che
vedremo in seguito e che risultano equivalenti alle stesse unr. Per equivalenza di due rappresentazioni
intendiamo esprimere il fatto che operando separatamente su di esse per costruire nuovi numeri a
partire da numeri dati si ottengono risultati equivalenti, cioè rappresentazioni equivalenti degli stessi
numeri risultanti. Vedremo inoltre che si tratta di rappresentazioni fedeli, cioè tali che ogni proprietà
degli interi naturali può essere rispecchiata in esse.
Queste equivalenze consentiranno di considerare i numeri naturali come classi di rappresentazioni
equivalenti di numeri naturali. Al di là dell’apparente bizzarria di questo modo di procedere, facendo
riferimento ai numeri naturali come entità dotate di una loro “esistenza autonoma”. saremo in grado
di formulare discorsi più chiari e concisi
In altre parole useremo espressioni come “esiste un naturale n che gode la proprietà P” per esprimere
il fatto che si può costruire una unr (o altra rappresentazuione equivalente) la quale gode di una
proprietà P ′ ottenuta dalla P previa sostituzione delle espressioni riguardante l’esistenza di naturali
con espressioni riguardanti la costruibilità dei corrispondenti naturali.
B10:d.07 L’introduzione dell’esistenza dei naturali costituisce un primo esempio di “entificazione espositiva”, introduzione di termini, costrutti discorsivi e notazioni concernenti un nuovo genere di entità
motivata dalla prospettiva che tali strumenti di presentazione consentano una esposizione sensibilmente più concisa e leggibile, cioè una semplificazione dei discorsi e quindi una migliore organizzazione
delle conoscenze. Tra poco (B11:a), con argomentazioni simili alle attuali introdurremo la nozione di
insieme finito.
Procedendo in modo più semplice si potrebbe parlare degli interi naturali identificandoli con le loro
unr. Questa identificazione però non consente di mantenere la distinzione, talora utile, fra unr e numeri
individuati da queste rappresentazioni.
Secondo il punto di vista adottato l’identificazione fra naturali e loro unr costituisce un esempio di
abuso di linguaggio; questo è un accorgimento adottato spesso in matematica al fine di semplificare
terminologia e notazioni reso opportuno dalla necessità di presentare in forma non eccessivamente
pedante nozioni, costruzioni e proprietà di largo uso.
B10:d.08 Per collegare le unr con i numeri naturali useremo anche un altro genere di scrittura. Con
l’enunciato della forma K = Unr(k) intendiamo segnalare che la stringa K è la urn dell’intero naturale
k. Per esprimere il collegamento di un intero naturale k con la sua unr K potrebbe anche essere utile
servirsi congiuntamente delle due scritture
(1)
24
k = abstr (K)
K = Unr(k) .
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
Possiamo allora definire somma di due numeri naturali h e k e indicare con h + k l’intero naturale che ha
come unr la giustapposizione delle unr H = Unr(h) e K = Unr(k):
(2)
Unr(h + k) = Unr(h) Unr(k) .
Per la somma degli interi naturali valgono le proprietà espresse dalle seguenti uguaglianze valide per
h, k e j naturali arbitrari:
h+0=0+h=h
h+k =k+h
h + (k + j) = (h + k) + j
(3)
(numero 0: elemento neutro per la somma)
(commutatività della somma)
(associatività della somma).
In queste relazioni si sono introdotte le parentesi coniugate “(” e “)” per delimitare sottoespressioni che
riguardano operazioni da effettuare prima delle altre indicate. Osserviamo che il loro ruolo è diverso
da quello svolto da questi due segni quando delimitano l’argomento o gli argomenti delle costruzioni
come Sost e Unr.
B10:d.09 Dati due naturali h e k si dice che h è minore o uguale di k, e si scrive h ≤ k, sse Unr(h) è
prefisso di Unr(k). Più in particolare si dice che h è minore di k, e si scrive h < k, sse Unr(h) è prefisso
in senso stretto di Unr(k), ovvero sse h ≤ k e h ̸= k.
Oltre a queste relazioni spesso conviene considerare le cosiddette relazioni trasposte corrispondenti.
Dati due interi h e k si dice che h è maggiore o uguale di k, e si scrive h ≥ k, sse la rappresentazione
unadica di h è suffisso di quella di k. Si dice invece che h è maggiore di k, e si scrive h > k sse la
rappresentazione unadica di h è suffisso in senso stretto di quella di k, ovvero sse h ≤ k e h ̸= k.
Si dimostrano facilmente le seguenti affermazioni, valide per h, k e j interi naturali arbitrari:
h < k ⇐⇒ k > h
(1)
h ≤ k ⇐⇒ k ≥ h
h < k =⇒ h + j < k + j .
In queste espressioni si è usata un’altra entità da porre in rilievo, la doppia implicazione o equivalenza
logica ⇐⇒, segno che collega due enunciati che risultano equivalenti.
B10:d.10 Per denotare la trasformazione di una stringa w nell’intero naturale che costituisce la sua
lunghezza introduciamo le scritture equivalenti |w|, len(w) e w⊢⊣ . Possiamo quindi avere enunciati
quali len(abaacb) = 6, |aaabbbccc| = 9, e ⊢⊣ = 0. Possiamo scrivere anche
|w| := len(w) := w⊢⊣ := abstr1 (Sost[ab...,
(1)
...](w)) .
Questo ed altri simboli che abbiamo introdotti consentono di esprimere in formule proprietà generali
come le seguenti, valide per u e v stringhe arbitrarie:
(2)
|u| = 0 ⇐⇒ u =
,
len(u v) = len(u) + len(v)
,
,
(u← )⊢⊣ = u⊢⊣ .
In termini discorsivi, la prima afferma che la stringa muta è l’unica stringa avente lunghezza 0, la
seconda che la lunghezza della giustapposizione di due stringhe è la somma delle rispettive lunghezze,
la terza che la lunghezza di ogni stringa non cambia quando essa viene riflessa.
Osserviamo quanto le formule precedenti siano più concise delle equivalenti espressioni verbali e segnaliamo che questa differenza risulta ancor più marcata quando si trattano entità più complesse delle
stringhe. In linea di massima le formulazioni discorsive possono essere molto utili per la prima presentazione di singole nozioni; le formule consentono invece di sintetizzare vantaggiosamente nozioni e
proprietà quando occorre averne presenti parecchie. Le formule si possono considerare uno strumento
professionale per le attività matematiche e per l’elaborazione delle informazioni. Spesso esse non sono
facili da usare ed un loro uso poco consapevole può far sbiadire il loro significato; peraltro esse si
2016-02-06
B10: Comunicazione, stringhe e interi naturali
25
Alberto Marini
dimostrano indispensabili per trattare in modo efficace nozioni e processi di elevata complessità, in
particolare per registrare, trasmettere, archiviare e rielaborare con qualcuno degli automatismi oggi
disponibili le affermazioni che esse rappresentano.
B10:d.11 Nelle scritture precedenti compare il segno “+”: esso si può considerare il contrassegno di
un meccanismo che a due numeri interi naturali fa corrispondere la loro somma. Questo meccanismo è
riconducibile a quello corrispondente al segno “ ” che a due stringhe fa corrispondere la relativa giustapposizione; in effetti, quando per i naturali si adotta la rappresentazione unadica, “+” corrisponde ad
un caso particolare di “ ”.
Giustapposizione di stringhe e somma di interi naturali sono due esempi di operazioni binarie: queste
sono entità che a due oggetti di una certa natura (stringhe, interi naturali, enunciati, ...), chiamati
operandi dell’operazione, fanno corrispondere un altro oggetto della stessa natura. Al termine “oggetti
della stessa natura” ora possiamo attribuire solo un significato tendenziale di oggetti individuati con
procedimenti simili e caratterizzati dalle stesse proprietà.
Nel seguito incontreremo molte altre operazioni binarie. Osserviamo che le operazioni binarie finora
incontrate si possono considerare presentazioni concise di macchine formali, meccanismi che preciseremo
meglio in seguito e che sono finalizzati alla elaborazioni di stringhe dei vari generi. Va però segnalato
che in seguito incontreremo anche operazioni binarie (e non) alle quali non corrisponde un procedimento
algoritmico ben definito come accade per i semplici ambiti di queste pagine iniziali.
B10:d.12 Consideriamo due naturali h e k con h ≤ k. Mostriamo che esiste un solo naturale d t.c.
h + d = k. Esso si trova scorrendo in sincrono i nastri sui quali sono disposte Ru(h) ed Ru(k) fino alla
conclusione della prima stringa e quindi riproducendo su un nastro di uscita i caratteri che rimangono
sul secondo nastro. Il naturale cosı̀ individuato si dice differenza fra k ed h e si denota con k − h.
La differenza è una operazione binaria fra interi naturali che non è definita per tutte le scelte dei due
operandi. Per essa si trovano le seguenti proprietà, valide per h, k e j interi naturali arbitrari:
(1)
(2)
h ≤ k =⇒ h + (k − h) = k;
h<k<j
=⇒ j − h > j − k;
h + k ≤ m =⇒ m − (h + k) = (m − h) − k = (m − k) − h.
Alla scrittura h−k se h > k non sappiamo ancora attribuire un significato. Ora limitiamoci ad osservare
che una espressione come la precedente potrebbe rivelarsi utile: quando si trattano con numeri naturali
quantità di denaro risulta utile riuscire ad effettuare calcoli che possono condurre sia a debiti che a
crediti. Cercheremo quindi di estendere la nozione di intero naturale in modo che le operazioni di
somma e differenza siano definite per ogni coppia delle entità utilizzabili e quindi possano contribuire
a strumenti di calcolo di maggiore portata.
A questo punto si comincia ad essere consapevoli della opportunità di costruire apparecchiature che
permettano di effettuare calcoli automatici sugli interi naturali e su loro estensioni.
26
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
B10:e. Sequenze di stringhe
B10:e.01 Le stringhe di maggior interesse, che accadrà di chiamare stringhe complessive, sono quelle
entro le quali si possono distinguere sottostringhe significative, cioè sottostringhe ciascuna delle quali
presenta una forma in qualche modo riconoscibile e può assumere qualche tipo di significato. Le
stringhe complessive di maggiore utilità sono quelle alle quali le sottostringhe significative forniscono
una struttura formale di qualche evidenza e che possa essere la base della attribuzione di un significato.
queste stringhe le chiameremo stringhe composite o stringhe strutturate.
In effetti si trattano stringhe composite con aspetti molto diversi e in particolare di lunghezze molto
diverse: se ne incontrano talune di pochi caratteri (CaCO3, , r2 = x2 + y 2 , (17 altre di migliaia di
caratteri (le nazioni con le loro capitali, i solidi di Johnson, ...) e altre di milioni e miliardi di caratteri
(cataloghi di composti organici, cataloghi stellari, ...).
Nella pratica mediante stringhe strutturate si riescono ad esprimere grandi varietà di informazioni e
di conoscenze.
Anzi possiamo affermare che tutte le nozioni che si vogliono trattare razionalmente devono potersi
rappresentare mediante stringhe strutturate.
Un primo tipo di struttura riguarda stringhe che si possono interpretare come sequenze di sottostringhe
dotate di una certa omogeneità e che singolarmente possono essere dotate di un proprio significato.
Queste stringhe complessive si possono chiamare stringhe composite di livello 1, mentre le sottostringhe
distinguibili si possono chiamare items.
Per organizzare una tale stringa composita si possono utilizzare diversi tipi di accorgimenti formali.
Una prima forma prevede un carattere speciale, cioè ben distinto dai rimanenti, avente il ruolo di
separatore. Tutti i caratteri rimanenti (con le eventuali eccezioni di un carattere inizializzatore e di un
carattere terminatore) servono per le sottostringhe significative.
Si consideri ad esempio la stringa
⊢ Torino, Bologna, Firenze, Roma, Bari, Palermo ⊣ .
Qui il carattere “,” fa da separatore, mentre ⊢ e ⊣ fanno, risp., da inizializzatore e da terminatore per la
stringa complessiva; la coppia dei caratteri ⊢ e ⊣ va considerata una coppia di delimitatori acccoppiati.
Una forma alternativa per le stringhe composite di livello 1 si serve di una coppia di delimitatori che
servono a delimitare le sottostringhe significative. Una variante di questo tipo del precedente elenco
di città è la seguente:
⊢ ⟨ Torino ⟩ ⟨ Bologna ⟩ ⟨ Firenze ⟩ ⟨ Roma ⟩ ⟨ Bari ⟩ ⟨ Palermo ⟩ ⊣ .
Per informazoni da veicolare sul Web, e quindi da poter sottoporre a controlli della correttezza della
trasmissione, viene utilizzato un altro tipo di accorgimento: ciascuna delle sottostringhe significative
viene delimitata da due combinazioni di caratteri che hanno il ruolo, risp., di delimitatore iniziale e
finale. Questo accorgimento ha anche il vantaggio di otersi estendere a delimitatori che permettono di
distinguere diversi tipi di sottostringhe significative.
Una stringa composita di livello 1 può essere utilizzata in varie applicazioni ad esempio per presentare
un ventaglio di cose o di azioni tra le quali scegliere, oppure una successione di azioni che dovranno o
potranno essere eseguite. Essa viene chiamata lista o elenco.
In seguito incontreremo varie altre liste sensibilmente più complesse.
B10:e.02 Caratteristica basilare di una lista è la possibilità di individuare le successive occorrenze delle
componenti significative.
2016-02-06
B10: Comunicazione, stringhe e interi naturali
27
Alberto Marini
Un semplice algoritmo consente di stabilire se una lista presenta componenti ripetute oppure non ne
presenta, ciè se è una lista iniettiva per quanto riguarda le sottostringhe sinificative.
Un altro semplice algoritmo facilmente immaginabile consente di associare ad una lista una sequenza
di un segno diverso da quelli che si incontrano nella L (ad esempio del segno ). Vedremo che tale
sequenza è lecito chiamarla numero delle occorrenze della lista L o anche lunghezza della lista; essa viene
denotata con len(L).
Una sostituzione in generale viene caratterizzata da una sequenza di caratteri iniettiva p e da un elenco
di stringhe L che può contenere componenti ripetute e occorrenze della stringa muta e che ha lunghezza
uguale alla lunghezza di p.
B10:e.03 Consideriamo più stringhe, ad esempio a, aba, abaac, e tre altri segni particolari, “,”, “⟨”
ed “⟩”. Giustapponendo tali stringhe con interposte occorrenze del segno “,” e racchiudendo quanto
ottenuto tra i due delimitatori “⟨” ed “⟩”, si ottiene la stringa ⟨a,aba,abaac⟩; essa si può considerare
come una presentazione dei tre oggetti espressi mediante stringhe letterali che utilizza come separatore
“,” , come delimitatore iniziale “⟨” e come delimitatore finale “⟩” coniugato del precedente. La precedente
stringa si chiama lista o elenco o sequenza di stringhe e le tre stringhe letterali che compaiono in essa
sono dette le sue componenti o i suoi identificatori.
In molte circostanze si incontrano elenchi costituiti da nomi di personaggi, località, prodotti e nozioni
specifiche di ogni genere come ⟨Bohr, Heisemberg, Schrödinger, Dirac⟩, ⟨Torino, Firenze, Roma⟩,
⟨semianello, anello, corpo, campo⟩. Casi come questi giustificano l’uso del termine identificatori.
Incontreremo anche molti casi di sequenze numeriche, come ad esempio ⟨1, 1, 2, 3, 5, 8, 13, 21⟩.
B10:e.04 Mediante stringhe composite come le precedenti si possono redigere elenchi di stringhe utili
per moltissime applicazioni pratiche: sequenze di grandezze fisiche o economiche, elenchi di nomi,
elenchi di acronimi di organismi, indici, cataloghi, repertori, ... . Spesso è importante distinguere gli
elenchi costituiti da stringhe che possono presentare ripetizioni (l’elenco dei vincitori del Giro d’Italia,
l’elenco dei nomi dei Papi privati degli ordinali) e gli elenchi che non possono presentarne (i numeri
estratti sulla ruota di Cagliari la scorsa settimana, gli identificatori introdotti in una frase dichiarativa
di un modulo di programma Java, l’elenco degli elementi chimici per numero atomico, l’elenco dei Dogi
della Serenissima). Conviene distinguere gli elenchi ripetitivi dagli elenchi non ripetitivi, detti anche elenchi
iniettivi: infatti i due tipi di elenchi possono essere sottoposti a trattamenti diversi.
Le componenti di una lista potrebbero essere a loro volta stringhe composite, in particolare liste.
Ora però trascuriamo questa possibilità che richiederebbe distinzioni formali (come la introduzione di
varianti dei segni “,”, “⟨” ed “⟩” riguardanti diversi livelli di organizzazione delle stringhe) alle quali
qui diamo poca importanza. In un elenco si potrebbero avere componenti omogenee o disomogenee.
Ad esempio le voci di un elenco telefonico sono piuttosto disomogenee (compaiono persone e organismi
dei generi più disparati) e ciascuna voce si può considerare un sottoelenco di stringhe disomogenee
(cognome, nome, titolo, ragione sociale, via, ..., numero telefonico).
Alcune componenti di un elenco potrebbero ridursi alla stringa muta (questo si verifica ad esempioin
un catalogo in corso di completamento e in molti elenchi che si incontrano in archeologia).
B10:e.05 Ad ogni componente di una lista si può associare un intero positivo (o naturale) che individua
la sua posizione: prima, seconda, terza, ... . Qui i naturali svolgono la cosiddetta funzione di ordinali,
cioè consentono di stabilire se una componente si incontra prima o dopo di un’altra: se due componenti
sono nelle posizioni date, risp., dagli interi h e k con h < k, la componente h-esima si incontra prima
della k-esima e si dice componente che precede nella sequenza; si dice invece che la k-esima è la componente
28
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
che segue la h-esima. Le componenti di un elenco quindi si dicono ordinate sequenzialmente per segnalare
che, data una componente c si può stabilire quale sia quella che la precede immediatamente (se la c
non è la prima della lista) e quale sia quella che la segue immediatamente (se la c non è l’ultima).
Le indicazioni che riguardano una stringa componente di un elenco e la sua posizione costituiscono una
cosiddetta occorrenza nell’elenco: nella precedente sequenza numerica compaiono due occorrenze della
componente “1”.
Spesso accade di considerare elenchi dalla cui individualità si vuole prescindere; in particolare anche il
numero dei componenti, scriviamolo n, non lo si vuole individuare in modo specifico. Per individuare
un tale elenco generico si utilizzano scritture del tipo ⟨c1 , c2 , ..., cn ⟩ nelle quali i pedici caratterizzano
le posizioni delle componenti ed i puntini esprimono il fatto che si vogliono sviluppare argomentazioni
slegare da una specifica scelta delle componenti e/o del loro numero. I puntini possono anche venire
usati per esprimere il fatto che si considera un valore elevato di n e si vuole evitare la specificazione di
tutte le componenti.
B10:e.06 Due elenchi di stringhe che presentino le stesse componenti in ordine diverso sono da considerare diversi. Per decidere l’uguaglianza o meno di due elenchi ottenuti con diverse considerazioni
costruttive, quindi, va stabilita l’uguaglianza delle successive rispettive stringhe. Questo rispecchia
il fatto che in molte applicazioni l’ordine delle componenti di una sequenza ha importanza determinante: questo accade per tutti gli elenchi che forniscono oggetti (nomi, quantità, ...) riferiti a qualche
“scala di ordinamento” (dei tempi, delle posizioni, dei valori di una grandezza, dell’importanza di una
persona, del numero progressivo di una pratica protocollata, ...) rispecchiata dall’indice di posizione
progressivo.
Sugli elenchi si possono impostare elaborazioni che hanno grande importanza in attività come quelle
organizzative, amministrative o riguardanti comunicazioni. Agli elenchi di interesse pratico oggi sono
dedicate notevoli risorse, vengono registrati su files su supporti elettronici (nastri,dischi magnetici, dischi ottici, microcircuiti, ...) e la loro manipolazione riguarda attività di elevato interesse organizzativo,
economico e sociale e richiede tecniche specifiche.
B10:e.07 Vediamo alcune manovre effettuabili su elenchi.
Stabilire se una data stringa u compare o meno in un elenco: basta un meccanismo semplice di confronto
di u con le porzioni dell’elenco che seguono un delimitatore iniziale o un separatore.
Estrarre da una sequenza σ la stringa componente in una data posizione h. Si può operare con tre
nastri, T1 , T2 e T3 : sul primo si ha Ru(h), sul secondo l’elenco σ e sul terzo si intende porre il risultato.
Si inizia con le testine agli inizi dei nastri e si opera in fasi successive ben definite; ogni fase inizia con
l’avanzamento di una posizione su T1 e con il controllo se Ru(h) sia finita; se no si avanza su T2 fino
all’inizio della successiva componente; se Ru(h) è finita si copia da T2 su T3 la componente sul cui
inizio si trovava la testina di T2 .
Eliminare da un elenco una stringa data, qualora presente. Nel caso di elenco non necessariamente
iniettivo si può chiedere di eliminare tutte le occorrenze di una stringa data.
B10:e.08 Si dice lunghezza -s di una lista σ il numero delle sue stringhe componenti: questo intero
naturale si denota lens (σ). Questa quantità si individua operando con due nastri, il primo che fornisce
la sequenza, il secondo, inizialmente vuoto, destinato alla registrazione della rappresentazione unadica
della lunghezza. Basta scorrere il primo nastro ed emettere sul secondo un segno in corrispondenza
di ogni occorrenza di “⟨” e di ‘,” (o, equivalentemente, in corrispondenza di ogni occorrenza di “,” e
di “⟩”).
2016-02-06
B10: Comunicazione, stringhe e interi naturali
29
Alberto Marini
Le sequenze di lunghezza 2 si dicono coppie, quelle di lunghezza 3 terne o triple, quelle di lunghezza 4
quaterne o quadruple, quelle di lunghezza 5 quintuple e via ricorrendo alla lingua naturale.
Si noti che, mentre lens (σ) fornisce il numero delle stringhe componenti l’elenco σ, lenc (σ) fornisce
il numero dei caratteri della stringa ottenuta giustapponendo le stringhe aumentato del numero dei
delimitatori e dei separatori presenti nella scrittura, numero non inferiore a lens (σ) − 1 .
Ad esempio lens (⟨Papageno, Papagena⟩) = 2, mentre lenc (⟨Papageno, Papagena⟩) = 18
B10:e.09 Si dice giustapposizione di due elenchi σ e τ l’elenco ottenuto giustapponendo s privata del
delimitatore “⟩”, il separatore “,” e τ privata del suo delimitatore iniziale “⟨”. Evidentemente la
lunghezza della sequenza giustapposizione è la somma delle lunghezze delle due sequenze date.
Nella pratica potrebbe essere utile effettuare manovre di riordinamento delle componenti di un elenco,
fondere due elenchi o viceversa suddividere un elenco in più parti ed effettuare qualche tipo di confronti
fra due elenchi dati. Con molti elenchi di interesse pratico queste manovre potrebbero risultare onerose
e risulta opportuno organizzarle con tecniche specifiche che vengono precisate con studi tutt’altro che
banali.
Osserviamo che i delimitatori che abbiamo usato per esprimere gli elenchi non sono sempre indispensabili. Essi consentono di isolare chiaramente un elenco dal contesto e ogni sua comonente dalle altre; si
danno invece contesti in grado di evitare ogni commistione anche in mancanza di delimitatori appositi
e stringhe componenti aventi forme in grado di evitare ogtni loro confusione.
Un elenco potrebbe essere dato anche in una forma come “Ctesibio, Erofilo, Archimede;” , scrittura nella quale compaiono il separatore “,” e il terminatore “,”.
B10:e.10 Un elenco consente di definire una sostituzione acontestuale più generale della acontestuale
alfabetica vista in :c.06: La acontestuale differisce dalla alfabetica in quanto caratterizzata, oltre che
da un semplice elenco di k caratteri diversi, da una sequenza di k stringhe che richiede un secondo
nastro di definizione T2 . Con una tale sostituzione ogni carattere della stringa da modificare viene
rimpiazzato dalla stringa associata a tale carattere mediante lo scorrimento in sincrono dell’elenco dei
caratteri e della sequenza di stringhe su T2 .
Ad esempio la sostituzione acontestuale che si serve dell’elenco di caratteri abcdefghi e dell’elenco
di stringhe ⟨a,bi,ci,di,effe,gi,acca,i⟩ trasforma la stringa faccia nella effeaciciia. Con pari
facilità si individua una sostituzione che trasforma 8424 nella “”otto quattro due quattro”.
B10:e.11 Si può definire una sostituzione ancor più generale che si serve di quattro nastri: su T1
presenta un elenco di stringhe privo di ripetizioni, su T2 un secondo elenco con lo stesso numero di
stringhe componenti che può presentare ripetizioni, su T3 viene immessa una sequenza di stringhe da
sottoporre a sostituzione e su T4 ci si aspetta l’emissione della stringa risultato.
Questa si ottiene individuando le sue successive componenti e modificando ogni stringa trovata su T1
con la corrispondente su T2 . Per le stringhe in T3 non trovate si potrebbe decidere, in relazione ad
esigenze applicative, di trascurarle, di riprodurle oppure di effettuare una segnalazione di errore.
Questa trasformazione potrebbe realizzare una transcodifica di stringhe convenzionali, potrebbe costituire una traduzione rudimentale, oppure potrebbe servire per aggiornare degli identificatori in un
testo artificiale (ad esempio gli identificatori di variabili in un testo di programma).
Osserviamo che se definissimo una sostituzione che trasforma stringhe arbitrarie individuate come
sottostringhe di una stringa data in altre stringhe senza limitarci alle stringhe evidenziate da separatori
e delimitatori, si corre il rischio di incorrere in ambiguità. Ad esempio una sostituzione che pretende di
modificare aba in ABA e bab in bab, applicata alla abab potrebbe portare alla ABAb oppure alla abab.
30
B10: Comunicazione, stringhe e interi naturali
2016-02-06
MATeXp – Nozioni di base
Queste situazioni sono oggetto di studi specifici nell’ambito della teoria dei codici a lunghezza variabile
(v.o.).
B10:e.12 Si osserva che molte costruzioni relative a sequenze di stringhe presentano caratteri comuni alle
costruzioni riguardanti stringhe e sono state chiamate nello stesso modo (giustapposizione, lunghezza,
sostituzioni, ...). In effetti questi due tipi di oggetti si possono porre in stretta corrispondenza, ovvero
si possono considerare “sostanzialmente” equivalenti.
Una sequenza di stringhe come ⟨alfa, beta, gamma, beta⟩, introducendo i simboli α, β e γ, può essere
sottoposta alla sostituzione associata alle sequenze ⟨alfa, beta, gamma⟩ ed ⟨α, β, γ⟩ e trasformata nella
sequenza di stringhe di un carattere ⟨α, β, γ, β⟩. Queste ultime sequenze si possono considerare rappresentazioni fedeli delle precedenti formate da nuovi simboli specifici che le rendono più concise. Esse
inoltre sono rappresentate fedelmente dalle stringhe ottenute cancellando i segni speciali “⟨”, “,” e “⟩”:
in particolare la ⟨α, β, γ, β⟩ è rappresentata fedelmente dalla αβγβ. Tutto quanto può costruirsi con
sequenze di stringhe quindi si può costruire mediante stringhe, pur di adottare opportuni accorgimenti
formali (servirsi di opportuni caratteri, trascurare segni speciali, effettuare scansioni opportunamente
definite, ...).
La possibilità di procedere con sviluppi equivalenti solo in parte formalmente diversi consente e suggerisce la possibilità di servirsi, in diverse circostanze, di notazioni diverse che si rivelino più adatte
alle esigenze espositive o elaborative dei vari contesti.
B10:e.13 Per le sequenze di stringhe si può definire anche una riflessione per la quale, ad esempio, la
riflessa della coppia ⟨piano, forte⟩ è ⟨forte, piano⟩. Certi elenchi classificatori, come la scala delle
durezze di Mohs, e certi elenchi temporali, in diverse circostanze può risultare vantaggioso presentarli
o per indici crescenti o per indici decrescenti.
Le varie componenti di questo testo sono accessibili in http://www.mi.imati.cnr.it/∼alberto
2016-02-06
B10: Comunicazione, stringhe e interi naturali
31