Il comportamento delle successioni rispetto alla convergenza è un punto cardine nell’analisi matematica. Se una successione di numeri reali converge, possiamo aspettarci che essa si comporti "bene" rispetto ad alcune operazioni algebriche fondamentali. Tuttavia, l’eleganza di questo comportamento va rigorosamente dimostrata.

Iniziamo da un risultato basilare ma potente: se una successione s:NRs : \mathbb{N} \rightarrow \mathbb{R} converge a aa, allora per ogni costante reale cc, la successione ottenuta moltiplicando ciascun termine per cc, cioè ncs(n)n \mapsto c \cdot s(n), converge a cac \cdot a. La dimostrazione di questo fatto, pur apparentemente semplice, si biforca naturalmente in due casi: quando c=0c = 0 e quando c0c \neq 0. Il primo caso è banale: ogni termine della successione è zero, e quindi la successione è costante, quindi converge ovviamente a zero. Nel secondo caso, si osserva che il valore assoluto di cc è strettamente positivo e che si può applicare la disuguaglianza triangolare insieme alla definizione di convergenza per ottenere il risultato desiderato.

Un’altra proprietà significativa delle successioni convergenti è che esse diventano limitate in valore assoluto a partire da un certo indice. Formalmente, se s(n)as(n) \rightarrow a, allora esistono un intero NN e un reale bb tali che per ogni nNn \geq N, si ha s(n)<b|s(n)| < b. Un modo semplice per costruire un tale bb è osservare che, per un’appropriata scelta di ε\varepsilon, i termini della successione si avvicinano a aa entro un margine specifico, e quindi il modulo di ciascun termine non può superare a+ε|a| + \varepsilon.

Una conseguenza notevole è che se una successione converge a aa, e un’altra converge a 00, allora il prodotto punto per punto di queste due successioni converge a 00. Si sfrutta il fatto che la prima successione è eventualmente limitata in valore assoluto, e quindi i prodotti dei termini possono essere resi arbitrariamente piccoli scegliendo sufficientemente avanti i termini della seconda. La prova si costruisce fissando un ε\varepsilon, utilizzando la limitatezza di ss per trovare un limite superiore BB, e quindi applicando la convergenza di t(n)0t(n) \rightarrow 0 per trovare un punto oltre il quale t(n)<ε/B|t(n)| < \varepsilon / B, il che implica s(n)t(n)<ε|s(n)t(n)| < \varepsilon.

Il risultato generale che il prodotto di due successioni convergenti converge al prodotto dei limiti, ossia s(n)as(n) \rightarrow a, t(n)bt(n) \rightarrow b implica s(n)t(n)abs(n)t(n) \rightarrow ab, si può ora derivare combinando il risultato precedente con l’osservazione che t(n)=(t(n)b)+bt(n) = (t(n) - b) + b, e quindi s(n)t(n)=s(n)(t(n)b)+s(n)bs(n)t(n) = s(n)(t(n) - b) + s(n)b. La prima parte converge a zero, come appena mostrato, e la seconda converge a abab perché s(n)as(n) \rightarrow a. Sommando, si ottiene la tesi.

Un altro risultato centrale è l’unicità del limite. Se una stessa successione converge a due limiti distinti, allora necessariamente quei due valori devono coincidere. Il ragionamento, che appare quasi tautologico, si struttura comunque rigorosamente tramite argomenti basati su contraddizione e la disuguaglianza triangolare. Se aba \neq b, allora esiste una distanza positiva tra i due. Usando la definizione di convergenza, si ottengono due intervalli attorno a aa e bb in cui la successione deve ricadere a partire da certi indici. Ma questi intervalli risultano disgiunti, il che produce un’assurdità: un elemento della successione non può essere simultaneamente vicino a due numeri distinti oltre un certo margine.

Infine, si può osservare che tutte le proprietà sin qui discusse non dipendono in maniera essenziale dal dominio delle successioni essendo N\mathbb{N}. È sufficiente che il dominio sia un ordine lineare, con una nozione di minimo, massimo e una relazione di ordinamento compatibile. Questa astrazione permette di generalizzare la nozione di convergenza oltre le successioni numeriche classiche, rendendola applicabile ad ambiti molto più ampi.

È importante che il lettore comprenda che queste proprietà non sono semplici artefatti tecnici, ma fondamenti strutturali che permettono lo sviluppo coerente dell’analisi matematica. La nozione di convergenza, la sua compatibilità con operazioni algebriche, l’unicità del limite e la possibilità di generalizzazione in contesti astratti, sono ciò che rende l’analisi uno strumento potente e preciso. Tali risultati costruiscono il ponte fra intuizione e formalismo, fra calcolo e struttura.

Come si costruiscono e si verificano le dimostrazioni matematiche in Lean?

Lean è uno strumento progettato per costruire espressioni complesse all’interno di un linguaggio formale noto come teoria dei tipi dipendenti. Ogni espressione ha un tipo, che può rappresentare un oggetto matematico, una proposizione o una dimostrazione. Per esempio, un’espressione può avere tipo N\mathbb{N} (numeri naturali) o NN\mathbb{N} \to \mathbb{N} (funzioni da numeri naturali a numeri naturali), ma può anche avere tipo Prop\mathrm{Prop}, che rappresenta affermazioni matematiche. Infine, un’espressione con tipo PP, dove PP è una proposizione, costituisce una dimostrazione di PP.

Il processo di costruzione di dimostrazioni in Lean è fortemente interattivo e si svolge solitamente attraverso l’utilizzo di tattiche, che sono istruzioni passo dopo passo per costruire la prova. Questo approccio si differenzia dall’inserimento diretto di termini di prova, poiché permette di procedere in modo incrementale, ricevendo feedback immediato dallo strumento. Ad esempio, la dimostrazione che se nn è pari allora m×nm \times n è pari può essere sviluppata sia scrivendo un termine di prova esplicito, sia impiegando una sequenza di tattiche che scompongono il problema in passi più semplici, facilitando l’automazione e la gestione di ragionamenti più complessi.

Nel corso della costruzione della dimostrazione, l’editor integrato di Lean, come Visual Studio Code, mostra in tempo reale lo stato corrente della prova: quali ipotesi sono state assunte, quali obiettivi rimangono da dimostrare, e come le tattiche applicate modificano lo stato. Questo flusso di lavoro è fondamentale per approcciarsi alla dimostrazione formale in modo strutturato e consapevole. Non è solo un esercizio di scrittura, ma un’interazione dinamica che richiede di comprendere la logica sottostante e la natura dei tipi coinvolti.

Lean si basa su una libreria matematica estesa, Mathlib, che fornisce un vasto repertorio di teoremi, definizioni e tattiche predefinite, facilitando la formalizzazione di argomenti matematici complessi. Anche se questo libro non offre una panoramica esaustiva di Mathlib, insegna a orientarsi nella libreria e a sfruttarne le risorse. L’apprendimento di Lean implica un impegno significativo, poiché richiede di ripensare il modo di formulare e giustificare le affermazioni matematiche, passando da una lettura passiva a un’attività interattiva e costruttiva.

L’approccio adottato enfatizza la pratica: la lettura del testo deve essere accompagnata dall’esecuzione degli esercizi, dalla modifica dei file di Lean e dall’esplorazione delle soluzioni fornite. L’interazione continua con lo strumento, la sperimentazione e la risoluzione di problemi concreti costituiscono la chiave per acquisire familiarità con il linguaggio formale e con il paradigma della dimostrazione assistita da computer.

È importante comprendere che Lean non è solo un software per scrivere matematiche, ma un ambiente di ragionamento rigoroso e interattivo che sfida il modo tradizionale di fare matematica. La precisione richiesta e il rigore delle dimostrazioni formali contribuiscono a sviluppare una nuova sensibilità nei confronti della logica e della struttura degli argomenti matematici, abilità preziose anche al di fuori del contesto informatico.

Per chi si avvicina a Lean, la comunità di utenti è un elemento prezioso: gruppi di supporto come la chat Zulip offrono assistenza continua, favorendo uno scambio dinamico di conoscenze. Il percorso di apprendimento è lungo e impegnativo, ma la capacità di costruire dimostrazioni formali e di collaborare allo sviluppo di librerie matematiche avanzate rappresenta una competenza di grande valore e un’esperienza intellettuale stimolante.

La pratica costante, la pazienza nel superare difficoltà iniziali e la volontà di interagire con la comunità sono elementi fondamentali per padroneggiare Lean. Solo così si potrà sfruttare appieno il potenziale di questo strumento, in grado di trasformare radicalmente il modo di concepire e sviluppare la matematica.

Come si utilizzano teoremi e lemmi per dimostrare disuguaglianze in Lean?

Nel contesto della formalizzazione matematica in Lean, l'uso di teoremi e lemmi è cruciale non solo per la dimostrazione di equazioni, ma anche per affermare disuguaglianze. Ad esempio, per dimostrare che a+eba+eca + eb \leq a + ec ogni volta che bcb \leq c, Lean offre una serie di strumenti e teoremi già presenti nella sua libreria standard. Tra questi, i teoremi fondamentali sono le_reflle\_refl e le_transle\_trans, che esprimono rispettivamente la riflessività e la transitività della relazione di ordine \leq.

Il teorema le_transle\_trans è formalizzato come abbcaca \leq b \to b \leq c \to a \leq c, con parentesi implicite che associando a destra indicano una struttura di tipo funzione che prende due premesse. Lean è progettato per inferire automaticamente gli argomenti impliciti aa, bb, e cc dal contesto, evitando la necessità di specificarli esplicitamente. Ciò facilita la scrittura di dimostrazioni più concise e meno verbose.

La tattica applyapply si rivela particolarmente utile: prende come input una prova generale o un'implicazione e tenta di abbinarne la conclusione all'obiettivo corrente, trasformando eventuali premesse in nuovi sottobersagli da dimostrare. Se la prova corrisponde esattamente all'obiettivo (fino all'uguaglianza definizionale), si può utilizzare la tattica exactexact, che conferma immediatamente la validità della dimostrazione senza ulteriori passaggi.

Un esempio pratico mostra come combinare queste tecniche per dimostrare che se xyx \leq y e yzy \leq z, allora xzx \leq z. Utilizzando applyapply su le_transle\_trans, si creano due nuovi obiettivi corrispondenti alle ipotesi iniziali, che vengono risolti applicando a loro volta h0:xyh0: x \leq y e h1:yzh1: y \leq z. Alternativamente, la prova può essere condensata in una singola linea di codice usando la forma funzionale le_trans h0 h1le\_trans\ h0\ h1.

Lean mette a disposizione un vasto insieme di teoremi utili per lavorare con disuguaglianze reali, tra cui lt_of_le_of_ltlt\_of\_le\_of\_lt, lt_translt\_trans, e vari lemmi sull'addizione di disuguaglianze. Questi possono essere combinati in modo strategico tramite applyapply e exactexact per affrontare catene di disuguaglianze più complesse.

Un'importante innovazione è la tattica linarithlinarith, che automatizza la gestione di disuguaglianze lineari. Data una collezione di ipotesi su disuguaglianze, linarithlinarith riesce a dedurre conclusioni lineari senza necessità di esplicite manipolazioni manuali, semplificando notevolmente la formalizzazione di argomentazioni aritmetiche lineari.

In Lean, l'applicazione di funzioni e teoremi segue una notazione uniforme: fxf x indica l'applicazione della funzione ff all'argomento xx, identica a hxh x per una prova o un fatto hh. Le parentesi sono necessarie solo per argomenti composti, altrimenti si applicano le regole standard di associazione per la valutazione.

Alcuni teoremi, come exp_le_expexp\_le\_exp e exp_lt_expexp\_lt\_exp, sono espressi tramite una doppia implicazione (bi-implicazione), che rappresenta una equivalenza logica. Questi possono essere usati per riscrivere obiettivi equivalenti usando la tattica rwrw o per passare da una proposizione all'altra usando i metodi mpmp (modus ponens diretto) e mprmpr (modus ponens inverso), ovvero i due sensi dell'equivalenza.

L'esplorazione della libreria matematica è essenziale per un'efficace formalizzazione: il repository GitHub di Mathlib, la documentazione API, e strumenti di ricerca come Loogle offrono modi per trovare teoremi e definizioni utili. Lean stesso supporta il completamento automatico tramite tastiere, che permette di scoprire nomi di teoremi basandosi sulle convenzioni di denominazione (ad esempio, teoremi relativi a somme con disuguaglianze iniziano spesso con add_leadd\_le).

Inoltre, il codice può essere navigato facilmente in editor come VS Code, consentendo di saltare rapidamente alla definizione di un teorema, favorendo così l'apprendimento contestuale e la scoperta di risultati correlati.

La tattica apply?apply? può suggerire automaticamente teoremi rilevanti dalla libreria per l'obiettivo corrente, facilitando ulteriormente il processo di formalizzazione. Questo insieme di tecniche, teoremi e strumenti rende possibile una dimostrazione sistematica e rigorosa delle disuguaglianze, elemento fondamentale per la matematica formale in Lean.

È fondamentale comprendere come la struttura delle dimostrazioni in Lean si basi sul principio di trasformare obiettivi in sottobersagli più semplici tramite l'uso intelligente di teoremi già dimostrati. Questa decomposizione riflette il metodo matematico tradizionale, ma viene potenziata dall'automazione e dall'inferenza contestuale di Lean. La padronanza di questi meccanismi permette di formalizzare argomentazioni complesse in modo più chiaro, efficiente e affidabile rispetto alla dimostrazione manuale.