Teoria dei tipi intuizionista

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

La teoria dei tipi intuizionista (nota anche come teoria dei tipi costruttiva o teoria dei tipi di Martin-Löf) è una teoria dei tipi e una fondazione della matematica alternativa. Fu creata da Per Martin-Löf, matematico e filosofo svedese, che la pubblicò per la prima volta nel 1972. Esistono diverse versioni della teoria: Martin-Löf ha proposto varianti intensionali, estensionali e inizialmente impredicative, delle quali il paradosso di Girard ha mostrato l'incoerenza, dando il via alle versioni predicative. Tuttavia, tutte le versioni mantengono il design centrale della logica costruttiva, utilizzando tipi dipendenti.

Design[modifica | modifica wikitesto]

Martin-Löf progettò la teoria dei tipi basandosi sui principi del costruttivismo matematico. Il costruttivismo richiede a una qualunque dimostrazione di esistenza di esibire un "testimone". Ad esempio, qualsiasi prova che esista un numero primo maggiore di 1000 deve identificare un numero specifico che è sia primo che maggiore di 1000. La teoria dei tipi intuizionista ha raggiunto quest'obiettivo interiorizzando l'interpretazione BHK. Una conseguenza interessante è che le dimostrazioni diventano oggetti matematici che possono essere esaminati, confrontati e manipolati.

I costruttori dei tipi sono stati strutturati in modo che seguissero una corrispondenza uno a uno con i connettivi logici. Ad esempio, l'implicazione logica () corrisponde al tipo funzione (). Questa corrispondenza si chiama isomorfismo di Curry-Howard. Anche le precedenti teorie dei tipi avevano seguito questo isomorfismo, ma quelle di Martin-Löf furono le prime ad estenderlo alla logica predicativa, introducendo i tipi dipendenti.

Teoria dei tipi[modifica | modifica wikitesto]

La teoria dei tipi intuizionista ha 3 tipi finiti, che sono composti usando 5 diversi costruttori. A differenza delle teorie degli insiemi, le teorie dei tipi non sono costruite sulla logica del primo ordine. Quindi, ogni aspetto della teoria dei tipi ha una doppia interpretazione: sia come oggetto matematico che come componente logico.

Se non hai familiarità con la teoria dei tipi e conosci la teoria degli insiemi, un breve riepilogo è: i tipi contengono termini proprio come gli insiemi contengono elementi. I termini appartengono a un solo tipo. Termini come e calcolano ("si riducono a") termini canonici come 4. Per approfondire, vedi l'articolo sulla teoria dei tipi .

Tipo 0, tipo 1 e tipo 2[modifica | modifica wikitesto]

Ci sono tre tipi finiti: il tipo 0 contiene 0 termini, il tipo 1 contiene un termine canonico e il tipo 2 contiene 2 termini canonici.

Poiché il tipo 0 contiene 0 termini, viene anche chiamato tipo vuoto. È usato per rappresentare tutto ciò che non può esistere. È anche scritto e rappresenta proposizioni refutabili (ovvero, per le quali non può esistere una dimostrazione). Di conseguenza, la negazione è definita come una funzione in : .

Allo stesso modo, il tipo 1 contiene 1 termine canonico e rappresenta l'esistenza. Viene anche chiamato tipo unità. Spesso rappresenta proposizioni che possono essere dimostrate, pertanto, a volte è scritto .

Infine, il tipo 2 contiene 2 termini canonici. Rappresenta una scelta definita tra due valori. È usato per valori booleani, ma non per proposizioni. Le proposizioni sono considerate essere il tipo 1 e possono essere refutabili (di tipo 0), oppure possono non essere dimostrabili né refutabili (la legge del terzo escluso non vale nella teoria dei tipi intuizionista).

Costruttore Σ[modifica | modifica wikitesto]

I Σ-tipi contengono coppie ordinate. Come per i tipici insiemi di coppie ordinate, un Σ-tipo descrive il prodotto cartesiano () di altri due tipi, e . Logicamente, una tale coppia ordinata avrebbe una prova di e una prova di , quindi si può vedere un Σ-tipo scritto come .

I Σ-tipi sono più potenti dei tipici insiemi di coppie ordinate, a causa della tipizzazione dipendente. Nella coppia ordinata, il tipo del secondo termine può dipendere dal valore del primo termine. Ad esempio, il primo termine della coppia potrebbe essere un numero naturale e il tipo del secondo termine potrebbe essere un vettore di lunghezza pari al primo termine. Un tale tipo si scriverebbe così:

Usando la terminologia della teoria degli insiemi, ciò è simile ad unioni disgiunte indicizzate di insiemi. Nel caso delle normali coppie ordinate, il tipo del secondo termine non dipende dal valore del primo termine. Quindi, l'insieme che descrive il prodotto cartesiano è scritto come:

È importante notare che il valore del primo termine, , non dipende dal tipo del secondo termine, .

Ovviamente, i Σ-tipi possono essere usati per costruire ennuple più lunghe dipendentemente tipizzate, usate in matematica, e i record o structs, usati nella maggior parte dei linguaggi di programmazione. Un esempio di tripla dipendentemente tipizzata è composto da due numeri interi e da una dimostrazione che il primo è più piccolo del secondo, descritta dal tipo:

La tipizzazione dipendente consente ai Σ-tipi di svolgere il ruolo di quantificatore esistenziale. L'affermazione "esiste un di tipo , tale che è dimostrato" diventa il tipo di coppie ordinate in cui il primo termine è il valore e il secondo è una dimostrazione di . Si noti che il tipo del secondo termine (dimostrazioni di ) dipende dal valore del primo elemento (). Il suo tipo è:

Costruttore Π[modifica | modifica wikitesto]

I Π-tipi rappresentano funzioni. Come con le normali funzioni, sono costituiti da un tipo di input e un tipo di output. Sono tuttavia più potenti delle normali funzioni, in quanto il tipo di valori restituiti può dipendere dal valore in input. Le funzioni della teoria dei tipi sono diverse da quelle della teoria degli insiemi. Nella teoria degli insiemi, cerchi il valore dell'argomento in un insieme di coppie ordinate. Nella teoria dei tipi, l'argomento viene inserito in un termine e quindi il calcolo ("riduzione") viene applicato al termine.

Ad esempio, un tipo di funzione che, dato un numero naturale , restituisce un vettore contenente numeri reali, è scritto come:

Quando il tipo di output non dipende dal valore in input, la funzione viene spesso scritta semplicemente con un . Così, è il tipo di funzioni dai numeri naturali ai numeri reali. I Π-tipi corrispondono all'implicazione logica. La proposizione corrisponde al tipo , contenente funzioni che accettano dimostrazioni di A e restituiscono dimostrazioni di B. Questo tipo potrebbe essere scritto in modo più coerente come:

I Π-tipi sono anche usati in logica per la quantificazione universale. L'affermazione "per ogni di tipo , è dimostrato" diventa una funzione da alle dimostrazioni di . Quindi, dato un valore ad , la funzione genera una prova che vale per quel valore. Il tipo si scrive come:

Costruttore =[modifica | modifica wikitesto]

Gli =-tipi vengono creati con due termini. Dati due termini come e , si può creare un nuovo tipo . I termini del nuovo tipo dimostrano che la coppia si riduce allo stesso termine canonico. Quindi, dal momento che entrambi e si riducono al termine canonico , ci sarà un termine del tipo . Nella teoria dei tipi intuizionista, c'è un solo modo per creare termini di =-tipo, ovvero attraverso la riflessività:

È possibile creare =-tipi come , in cui i termini non si riducono allo stesso termine canonico, ma non sarà possibile creare termini di quel tipo. Infatti, se si potesse creare un termine del tipo , si potrebbe anche creare un termine del tipo che, se inserito in una funzione, genererebbe una funzione del tipo . Dal momento che è il modo in cui è definita la negazione, abbiamo che , ovvero .

L'equivalenza delle dimostrazioni è un'area di ricerca attiva in teoria della dimostrazione, e ha portato allo sviluppo della teoria dei tipi omotopica e di altre teorie dei tipi.

Tipi induttivi[modifica | modifica wikitesto]

I tipi induttivi consentono la creazione di tipi complessi e autoreferenziali. Ad esempio, una lista concatenata di numeri naturali è una lista vuota oppure una coppia formata da un numero naturale e un'altra lista concatenata. I tipi induttivi possono essere utilizzati per definire strutture matematiche illimitate come alberi, grafici, ecc. In effetti, il tipo dei numeri naturali può essere definito induttivamente, essendo ogni numero naturale oppure il successore di un altro numero naturale.

I tipi induttivi definiscono nuove costanti, come zero e la funzione successore . Dato che non ha una definizione e non può essere valutata usando la sostituzione, termini come e diventano i termini canonici per i numeri naturali.

Le dimostrazioni sui tipi induttivi sono rese possibili dall'induzione. Ogni tipo induttivo ha una propria regola induttiva. Per dimostrare un predicato per ogni numero naturale , si usa la seguente regola:

I tipi induttivi sono definiti in termini di W-tipi, ovvero gli alberi ben fondati. Successivi lavori nella teoria dei tipi hanno generato i tipi coinduttivi, induzione-ricorsione e induzione-induzione per lavorare su tipi autoreferenziali di natura più oscura. Tipi induttivi di ordine superiore consentono di definire l'uguaglianza tra termini.

Tipi universo[modifica | modifica wikitesto]

I tipi universo consentono di costruire dimostrazioni riguardanti tutti i tipi creati con gli altri costruttori di tipi. Ogni termine nel tipo universo può essere mappato su un tipo creato con qualsiasi combinazione di e il costruttore induttivo. Tuttavia, per evitare paradossi, non vi è alcun termine in che mappa in .

Per costruire dimostrazioni riguardo tutti i "tipi piccoli" e , devi usare , che contiene un termine per , ma non per sé stesso. In maniera simile, per . Esiste una gerarchia predicativa sugli universi, quindi per quantificare una dimostrazione su una costante fissata di universi, si deve usare .

I tipi universo sono un aspetto complicato delle teorie dei tipi. Infatti, fu necessario modificare la prima versione della teoria per tenere conto del paradosso di Girard. Ricerche successive hanno toccato argomenti come "super-universi", "universi Mahlo" e universi impredicativi.

Giudizi[modifica | modifica wikitesto]

La definizione formale della teoria dei tipi intuizionista è scritta usando giudizi. Ad esempio, nell'affermazione "se è un tipo e è un tipo, allora è un tipo" ci sono i giudizi "è un tipo ", "e" e " se ... allora...". L'espressione non è un giudizio, ma è il tipo che viene definito.

Questo secondo livello della teoria dei tipi può essere fonte di confusione, in particolare per quanto riguarda l'uguaglianza. C'è un giudizio sull'uguaglianza di termini, che potrebbe affermare , ovvero che due termini si riducono allo stesso termine canonico. C'è anche un giudizio sull'uguaglianza di tipi, , stante a significare che ogni elemento di tipo è un elemento di tipo e viceversa. A livello di tipo, esiste un tipo , che contiene termini se esiste una dimostrazione che e si riducono allo stesso valore (ovviamente, termini di questo tipo sono generati usando il giudizio sull'uguaglianza di termini). Infine, esiste un livello di uguaglianza metalinguistico, poiché usiamo la parola "quattro" e il simbolo "" per riferirci al termine canonico . Sinonimi come questi sono chiamati "uguali per definizione" da Martin-Löf.

La descrizione dei giudizi che segue si basa sulla trattazione in Nordström, Petersson e Smith.

La teoria formale lavora con tipi e oggetti.

Un tipo è dichiarato da:

Un oggetto esiste ed è di un tipo se:

Gli oggetti possono essere uguali

e i tipi possono essere uguali

un tipo che dipende da un oggetto di un altro tipo viene dichiarato

e rimosso per sostituzione

  • , sostituendo la variabile con l'oggetto in .

Un oggetto che dipende da un oggetto di un altro tipo può essere scritto in due modi. Se l'oggetto è "astratto", allora è scritto

e rimosso per sostituzione

  • , sostituendo la variabile con l'oggetto in .

Un oggetto dipendente da un oggetto può anche essere dichiarato come una costante parte di un tipo ricorsivo. Un esempio di tipo ricorsivo è:

Qui, è un oggetto dipendente da un oggetto costante. Non è associato a un'astrazione. Le costanti come possono essere rimosse definendo delle uguaglianze. Qui, la relazione con l'addizione è definita usando l'uguaglianza e il pattern matching per gestire la natura ricorsiva di :

è manipolato come una costante opaca, non ha una struttura interna per la sostituzione.

Quindi, oggetti, tipi e relazioni sono usati per esprimere formule della teoria. Per creare nuovi oggetti, tipi e relazioni da quelli esistenti vengono utilizzati i seguenti stili di giudizi:

σ è un tipo ben formato nel contesto Γ.
t è un termine ben formato di tipo σ nel contesto Γ.
σ e τ sono tipi uguali nel contesto Γ.
't e u' sono termini uguali di tipo σ nel contesto Γ.
Γ è un contesto ben formato dei presupposti di tipizzazione.

Per convenzione, esiste un tipo che rappresenta tutti gli altri tipi. È chiamato (o ). Dato che è un tipo, i suoi membri sono oggetti. C'è un tipo dipendente che associa ciascun oggetto al tipo corrispondente. Nella maggior parte dei testi non è mai scritto. Dal contesto, un lettore può quasi sempre distinguere se si riferisce a un tipo o se si riferisce all'oggetto in che corrisponde al tipo.

Questa è la base completa della teoria. Tutto il resto è derivato.

Per implementare la logica, ogni proposizione ha il suo tipo. Gli oggetti in questi tipi rappresentano i possibili modi diversi per dimostrare la proposizione. Ovviamente, se non ci sono dimostrazioni per la proposizione, allora il tipo non contiene oggetti. Operatori come "e" e "o", lavorando su proposizioni, introducono nuovi tipi e nuovi oggetti. Così, è un tipo che dipende dal tipo e dal tipo . Gli oggetti di quel tipo dipendente sono definiti per esistere per ogni coppia di oggetti di e di . Ovviamente, se o sono tipi vuoti, allora il nuovo tipo che rappresenta è anch'esso vuoto.

Ciò può essere fatto per altri tipi (booleani, numeri naturali, ecc.) e per i loro operatori.

Modelli categorici della teoria dei tipi[modifica | modifica wikitesto]

Utilizzando il linguaggio della teoria delle categorie, R. A. G. Seely ha introdotto la nozione di categoria locale cartesiana chiusa (CLCC) come modello base della teoria dei tipi. Questo è stato perfezionato da Hofmann e Dybjer in Categorie con Famiglie o Categorie con Attributi basati su precedenti lavori di Cartmell.[1]

Una categoria con famiglie è una categoria C di contesti (in cui gli oggetti sono contesti e i morfismi di contesto sono sostituzioni), insieme a un funtore .

è la categoria delle famiglie di insiemi, in cui gli oggetti sono coppie formate da un "insieme indice" e da una funzione , e i morfismi sono coppie di funzioni e , tali che — in altre parole, mappa in .

Il funtore assegna a un contesto un insieme di tipi e, per ogni , un insieme di termini . Gli assiomi di un funtore richiedono che questi siano in sinergia con la sostituzione. La sostituzione è solitamente scritta nella forma o , dove è un tipo in , è un termine in e è una sostituzione da a . Qui e .

La categoria deve contenere un oggetto terminale (il contesto vuoto) e un oggetto finale per una forma di prodotto chiamata comprensione, o estensione del contesto, in cui l'elemento destro è un tipo nel contesto dell'elemento sinistro. Se è un contesto e , allora dovrebbe esserci un oggetto finale tra contesti con mappature , .

Una struttura logica come quella di Martin-Löf assume la forma di condizioni di chiusura su insiemi di tipi e termini dipendenti dal contesto: dovrebbe esistere un tipo per ogni insieme e uno chiamato , inoltre i tipi dovrebbero essere chiusi rispetto a forme di somma e prodotto dipendenti, e così via.

Una teoria come quella degli insiemi predicativa esprime le condizioni di chiusura sui tipi di insiemi e sui loro elementi: dovrebbero essere chiusi rispetto a operazioni che riflettono la somma e il prodotto dipendenti e rispetto a varie forme di definizione induttiva.

Estensionale versus intensionale[modifica | modifica wikitesto]

Una distinzione fondamentale è la teoria dei tipi estensionale rispetto a quella intensionale. In quella estensionale, l'uguaglianza per definizione (cioè computazionale) non è distinta dall'equivalenza logica, che richiede una dimostrazione. Di conseguenza, il sistema dei tipi è indecidibile nella teoria dei tipi estensionale, perché i programmi nella teoria potrebbero non terminare. Ad esempio, tale teoria consente di dare un tipo all'Y-combinatore, un esempio dettagliato di ciò può essere trovato in Programming in Martin-Löf's Type Theory di Nordstöm e Petersson.[2] Tuttavia, ciò non impedisce alla teoria dei tipi estensionale di essere una base per uno strumento pratico, ad esempio NuPRL si basa su tale teoria. Da un punto di vista pratico, non c'è differenza tra un programma che non termina e un programma che impiega un milione di anni per terminare.

Al contrario, nella teoria dei tipi intensionale il sistema dei tipi è decidibile, ma la rappresentazione di concetti matematici standard è un po' più ingombrante, poiché il ragionamento intensionale richiede l'uso di insiemi estensionali o costruzioni simili. Esistono molti oggetti matematici comuni con cui è difficile lavorare o che non possono essere rappresentati senza di essi, ad esempio numeri interi, numeri razionali e numeri reali. Numeri interi e numeri razionali possono essere rappresentati senza usare insiemi estensionali, ma questa rappresentazione non è facile da maneggiare. I numeri reali di Cauchy non possono essere rappresentati senza di essi.[3]

La teoria dei tipi omotopica si occupa di risolvere questo problema. Permette di definire tipi induttivi di ordine superiore, che non solo definiscono costruttori del primo ordine (valori o punti), ma costruttori di ordine superiore, cioè uguaglianze tra elementi (archi), uguaglianze tra uguaglianze (omotopie), all'infinito.

Implementazioni[modifica | modifica wikitesto]

Diverse forme di teoria dei tipi sono state implementate come sistemi formali alla base di numerosi assistenti alla dimostrazione. Mentre molti sono basati sulle idee di Per Martin-Löf, altri hanno aggiunto funzionalità, più assiomi o diversi background filosofici. Ad esempio, il sistema NuPRL si basa sulla teoria dei tipi computazionale[4] e Coq si basa sul calcolo delle costruzioni (co)induttive . I tipi dipendenti caratterizzano anche la progettazione di linguaggi di programmazione come ATS, Cayenne, Epigram, Agda[5] e Idris.[6]

Teorie dei tipi di Martin-Löf[modifica | modifica wikitesto]

Per Martin-Löf costruì diverse teorie dei tipi che furono pubblicate varie volte, alcune delle quali molto più tardi che le prestampe con la loro descrizione divennero accessibili agli specialisti (tra cui Jean-Yves Girard e Giovanni Sambin). Il seguente elenco tenta di elencare tutte le teorie che sono state descritte in forma stampata e di delineare le caratteristiche chiave che le hanno distinte tra loro. Tutte queste teorie avevano prodotti dipendenti, somme dipendenti, unioni disgiunte, tipi finiti e numeri naturali. Tutte le teorie avevano le stesse regole di riduzione, che non includevano la η-riduzione, né per i prodotti né per le somme dipendenti, fatta eccezione per MLTT79, in cui viene aggiunta la η-riduzione per i prodotti dipendenti.

MLTT71 è stata la prima teoria dei tipi creata da Per Martin-Löf. È apparsa in una prestampa nel 1971. Aveva un universo, ma questo universo conteneva il proprio nome al suo interno, ovvero era una teoria dei tipi con un "tipo nel tipo", come viene chiamato oggi. Jean-Yves Girard ha dimostrato che questo sistema era incoerente e la prestampa non è mai stata pubblicata.

MLTT72 è stata presentata in una prestampa del 1972, ora pubblicata.[7] Questa teoria aveva un universo V e nessun tipo identità. L'universo era "predicativo", nel senso che il prodotto dipendente di una famiglia di oggetti da V su un oggetto che non era in V, come ad esempio V stesso, non si considerava essere in V. L'universo era alla Russell, cioè, si scriveva direttamente "T∈V" e "t∈T" (Martin-Löf usa il segno "∈" invece del moderno ":"), senza il costruttore aggiuntivo "El".

MLTT73 fu la prima definizione di teoria dei tipi pubblicata da Per Martin-Löf (fu presentata al Logic Colloquium 73 e pubblicata nel 1975[8]). Esistono tipi identità che egli chiama "proposizioni", ma poiché non viene introdotta alcuna reale distinzione tra proposizioni e il resto dei tipi, il significato di ciò non è chiaro. È presente ciò che in seguito acquisisce il nome di J-eliminatore, ma ancora senza un nome (vedi pp. 94–95). C'è inoltre una sequenza infinita di universi V0, ..., Vn, ... . Gli universi sono predicativi, alla Russell e non cumulativi! Infatti, il corollario 3.10 a pag. 115 dice che se A∈Vm e B∈Vn sono tali che A e B sono convertibili, allora m = n. Ciò significa, ad esempio, che sarebbe difficile formulare l'univalenza in questa teoria - ci sono tipi riducibili in ciascuno dei Vi, ma non è chiaro come dichiararli uguali, poiché non ci sono tipi identità che collegano Vi e Vj per i ≠ j.

MLTT79 fu presentata nel 1979 e pubblicata nel 1982.[9] In questo articolo, Martin-Löf ha introdotto i quattro tipi base di giudizi per la teoria dei tipi dipendenti, che da allora è diventata fondamentale nello studio della meta-teoria di tali sistemi. Ha anche introdotto i contesti come un concetto separato (vedi p. 161). Ci sono tipi identità con il J-eliminatore (che era già apparso in MLTT73, ma senza avere questo nome), ma anche con la regola che rende la teoria "estensionale" (p. 169). Sono presenti anche i W-tipi e una sequenza infinita di universi predicativi che sono cumulativi.

Bibliopolis C'è una discussione su una teoria dei tipi nel libro Bibliopolis del 1984[10], ma è in qualche modo non ben specificata e non sembra rappresentare un particolare insieme di scelte, quindi non vi è alcuna specifica teoria dei tipi ad essa associata.

Note[modifica | modifica wikitesto]

  1. ^ (EN) Pierre Clairambault e Peter Dybjer, The biequivalence of locally cartesian closed categories and Martin-Löf type theories, in Mathematical Structures in Computer Science, vol. 24, n. 6, 2014, DOI:10.1017/S0960129513000881, ISSN 0960-1295 (WC · ACNP), arXiv:1112.3456.
  2. ^ Bengt Nordström; Kent Petersson; Jan M. Smith (1990). Programming in Martin-Löf's Type Theory. Oxford University Press, p. 90.
  3. ^ Altenkirch, Thorsten, Thomas Anberrée, and Nuo Li. "Definable Quotients in Type Theory."
  4. ^ S.F. Allen, M. Bickford e R.L. Constable, Innovations in computational type theory using Nuprl, in Journal of Applied Logic, vol. 4, n. 4, 2006, pp. 428–469, DOI:10.1016/j.jal.2005.10.005.
  5. ^ Ulf Norell, Dependently Typed Programming in Agda, in Proceedings of the 4th International Workshop on Types in Language Design and Implementation, New York, NY, USA, ACM, 2009, pp. 1–2, DOI:10.1145/1481861.1481862, ISBN 978-1-60558-420-1.
  6. ^ Edwin Brady, Idris, a general-purpose dependently typed programming language: Design and implementation, in Journal of Functional Programming, vol. 23, n. 5, 2013, pp. 552–593, DOI:10.1017/S095679681300018X, ISSN 0956-7968 (WC · ACNP).
  7. ^ Per Martin-Löf, An intuitionistic theory of types, Twenty-five years of constructive type theory (Venice,1995), Oxford Logic Guides, v. 36, pp. 127--172, Oxford Univ. Press, New York, 1998
  8. ^ Per Martin-Löf, An intuitionistic theory of types: predicative part, Logic Colloquium '73 (Bristol, 1973), 73--118. Studies in Logic and the Foundations of Mathematics, Vol. 80, North-Holland, Amsterdam,1975
  9. ^ Per Martin-Löf, Constructive mathematics and computer programming, Logic, methodology and philosophy of science, VI (Hannover, 1979), Stud. Logic Found. Math., v. 104, pp. 153--175, North-Holland, Amsterdam, 1982
  10. ^ Per Martin-Löf, Intuitionistic type theory, Studies in Proof Theory. Lecture Notes, v. 1, Notes by Giovanni Sambin, pp. iv+91, 1984

Bibliografia[modifica | modifica wikitesto]

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]