Nel formalismo Lean, l’azione di un gruppo GG su un tipo XX è codificata attraverso la classe di tipo MulAction G X\text{MulAction} \ G \ X, che permette a Lean di inferire automaticamente la morfismo di azione, evitando di doverlo portare esplicitamente ad ogni passo. Questa struttura definisce l’azione di un elemento gGg \in G su un elemento xXx \in X, indicata sinteticamente come gxg \cdot x. Analogamente, esiste la versione additiva, AddAction\text{AddAction}, con la notazione +v+_v, utile ad esempio nella definizione degli spazi affini.

La nozione fondamentale che emerge è che l’azione di gruppo induce una partizione di XX in orbite, ovvero insiemi di elementi che si trasformano l’uno nell’altro tramite l’azione di GG. Formalmente, questa partizione è descritta tramite la relazione di equivalenza MulAction.orbitRel\text{MulAction.orbitRel} e la corrispondente quotiente orbitRel.Quotient\text{orbitRel.Quotient}. Si ottiene così una corrispondenza biunivoca tra XX e il prodotto dipendente {ω:orbitRel.Quotient}×orbit(G,Quotient.out(ω))\{ \omega : \text{orbitRel.Quotient} \} \times \text{orbit}(G, \text{Quotient.out}(\omega)), che riflette la decomposizione di XX in orbite.

Quando XX è finito, questa struttura si traduce in un’equazione chiara per la cardinalità di XX: essa è la somma delle cardinalità delle orbite. Inoltre, ogni orbita può essere identificata con il quoziente del gruppo GG rispetto allo stabilizzatore dell’elemento xx, cioè G/stabilizer(G,x)G / \text{stabilizer}(G, x), stabilendo così un legame stretto tra la struttura delle orbite e quella dei sottogruppi di GG.

Un caso di rilievo particolare è quello in cui XX coincide con GG stesso, e l’azione è data dalla traslazione a sinistra da parte di un sottogruppo HH. In questo contesto, tutti gli stabilizzatori sono banali, e si ottiene un’isomorfismo tra GG e il prodotto (G/H)×H(G / H) \times H, che rappresenta una versione concettuale del teorema di Lagrange senza necessità di ipotesi di finitezza.

Si può inoltre costruire un’azione di coniugio di un gruppo sui suoi sottogruppi, che gioca un ruolo cruciale nella teoria dei gruppi normali e nella definizione di quozienti.

Proprio la costruzione dei gruppi quoziente G/HG / H, dove HH è un sottogruppo normale, è centrale per la teoria. Solo in questo caso G/HG / H può essere dotato in modo univoco di una struttura di gruppo tale che la proiezione GG/HG \to G / H sia un morfismo di gruppi. Questa condizione è codificata nel tipo H.NormalH.\text{Normal}, che consente a Lean di inferire la struttura di gruppo sul quoziente. L’importanza di questa costruzione emerge nella proprietà universale dei gruppi quoziente, che consente di fattorizzare ogni morfismo di gruppi φ:GM\varphi : G \to M la cui nucleo contiene NN attraverso il gruppo quoziente G/NG / N.

La generalizzazione di queste idee conduce al primo teorema di isomorfismo, che stabilisce un isomorfismo tra il gruppo quoziente G/kerφG / \ker \varphi e l’immagine Im(φ)\mathrm{Im}(\varphi). Inoltre, si può definire un morfismo indotto tra quozienti di gruppi G/NG/NG / N \to G' / N' quando φ:GG\varphi : G \to G' manda NN in NN', utilizzando la nozione di controimmagine dei sottogruppi.

Una sottigliezza tecnica importante è che, sebbene due sottogruppi normali MM e NN siano uguali, i corrispondenti gruppi quoziente G/MG / M e G/NG / N sono uguali solo fino a isomorfismo, non in senso strettamente definizionale. Tuttavia, la proprietà universale garantisce l’esistenza di un isomorfismo naturale.

Infine, nel caso di gruppi finiti, se HH e KK sono sottogruppi normali disgiunti tali che il prodotto delle loro cardinalità è uguale a quella di GG, allora GG è isomorfo al prodotto diretto H×KH \times K. Questo risultato si fonda su un utilizzo raffinato del teorema di Lagrange e delle proprietà delle azioni di gruppo.

È cruciale comprendere che l’intero impianto si basa sull’interazione tra l’azione di un gruppo su un insieme e la struttura interna del gruppo stesso. L’uso delle classi di tipo in Lean consente una gestione elegante e automatizzata delle strutture coinvolte, ma la loro interpretazione richiede una visione profonda delle connessioni tra gruppi, azioni, orbite, stabilizzatori e sottogruppi normali. In particolare, il passo dalla semplice azione alla costruzione dei gruppi quoziente e delle proprietà universali corrispondenti riflette un’armoniosa sintesi tra teoria astratta e formalizzazione computazionale.

Come si definisce e si comprende l’invertibilità delle matrici e la struttura delle basi negli spazi vettoriali

In algebra lineare, la nozione di invertibilità di una matrice è strettamente legata al concetto di determinante. Più precisamente, esiste una funzione generale, chiamata Ring.inverse, che definisce l'inverso in un anello qualsiasi. Nel caso di una matrice AA, l’inverso A1A^{ -1} è dato da Ring.inverse(detA)adjugate(A)\text{Ring.inverse} \, ( \det A ) \cdot \text{adjugate}(A). Secondo la regola di Cramer, questa è proprio la definizione dell'inverso di AA quando il determinante di AA è diverso da zero, ovvero quando AA è invertibile. Questa definizione è di fatto utile solo per matrici invertibili, ed esiste una classe di tipo generale, chiamata Invertible, che consente di rappresentare questa proprietà nel sistema formale.

Nell’ambito della formalizzazione matematica, come in Lean, la presenza della classe Invertible permette di automatizzare ragionamenti e dimostrazioni riguardanti matrici invertibili, facilitando l’uso di lemmi come inv_mul_of_invertible. Questo approccio è essenziale non solo per gestire matrici concrete ma anche per lavorare con matrici definite su indici arbitrari, non necessariamente numerici. Ad esempio, per matrici di adiacenza di grafi finiti, le righe e le colonne sono indicizzate dai vertici del grafo stesso, consentendo così una rappresentazione più naturale e flessibile.

Inoltre, la definizione generale di matrice può estendersi oltre i soli anelli o campi: si possono considerare matrici come funzioni da due tipi arbitrari mm e nn verso un insieme di coefficienti α\alpha, senza richiedere che questi insiemi abbiano una struttura algebrica. Tuttavia, per definire operazioni algebriche come la moltiplicazione matriciale, sono necessarie ulteriori assunzioni, ad esempio che α\alpha sia un anello e che m,nm, n siano insiemi finiti o dotati di una struttura che consenta di definire la moltiplicazione corretta. È importante distinguere tra la moltiplicazione punto a punto di funzioni mnαm \to n \to \alpha e la moltiplicazione matriciale vera e propria, che coinvolge somme su indici intermedi.

Per non perdere i benefici del sistema di classi di tipo, si usa una corrispondenza (equivalenza) tra funzioni e matrici, come nel caso di Matrix.of, che permette di definire matrici in modo funzionale ma mantenendo la struttura algebrica necessaria. Ad esempio, le matrici di Vandermonde possono essere definite tramite funzioni che elevano a potenza i componenti di un vettore, mostrando la flessibilità di questa definizione.

Passando agli spazi vettoriali, la nozione di base è fondamentale. Una base è intuitivamente una famiglia di vettori linearmente indipendenti che generano tutto lo spazio vettoriale, oppure, equivalentemente, una famiglia tale che ogni vettore dello spazio può essere espresso in modo unico come combinazione lineare di vettori della base. Una definizione più astratta e potente, utilizzata nei sistemi formali come Mathlib, vede la base come un’isomorfismo lineare tra lo spazio vettoriale VV e una somma diretta di copie del campo base KK, indicizzate da un insieme ι\iota.

Questa somma diretta è necessaria soprattutto nel caso di basi infinite, poiché in algebra si considerano solo combinazioni lineari finite. Le funzioni a supporto finito ι0K\iota \to_0 K sono dunque la forma corretta per rappresentare queste combinazioni, garantendo che ogni vettore abbia coordinate non nulle solo su un insieme finito di indici. La funzione di rappresentazione della base, Basis.repr\text{Basis.repr}, associa a ogni vettore le sue coordinate in questa base.

Se la base è finita, la rappresentazione si riduce al caso più familiare delle somme finite di combinazioni lineari. Se la base è infinita, invece, la somma diventa una somma finita implicita a causa del supporto finito. In entrambi i casi, la struttura delle basi permette di definire isomorfismi lineari e di sviluppare una teoria coerente e generale.

In particolare, la base canonica dello spazio ι0K\iota \to_0 K è formata dalle funzioni singole Finsupp.singlei1\text{Finsupp.single} \, i \, 1, che sono nulle ovunque eccetto che nell'indice ii, dove assumono valore uno. Questa costruzione assicura una corrispondenza naturale tra vettori e loro coordinate, semplificando molto la teoria degli spazi vettoriali.

Quando l’insieme degli indici ι\iota è finito, si può usare la base funzionale Pi.basisFun\text{Pi.basisFun}, che rappresenta la base completa dello spazio delle funzioni ιK\iota \to K. In tal caso, la distinzione tra somme finite e infinite non si pone, e la rappresentazione è particolarmente semplice.

Oltre a queste definizioni formali, è essenziale comprendere il ruolo di questi concetti nella costruzione di strutture matematiche più complesse e nel loro utilizzo nei sistemi di dimostrazione automatica. La definizione astratta di base tramite isomorfismi lineari consente di trasferire proprietà e operazioni da spazi vettoriali più semplici o ben compresi (come KnK^n) a spazi più generali, mantenendo coerenza e chiarezza.

Un punto cruciale per il lettore è riconoscere che la struttura delle matrici e delle basi non è solo una questione di notazione o di definizione, ma incide profondamente sulla capacità di formalizzare e automatizzare ragionamenti matematici, specialmente in ambienti come Lean. L’interazione tra le classi di tipo per la definizione di invertibilità, la distinzione tra diversi modi di rappresentare matrici come funzioni o oggetti strutturati, e la cura nella definizione delle basi con supporto finito sono tutti elementi essenziali per garantire la robustezza delle costruzioni e la possibilità di ragionare correttamente su spazi di dimensione arbitraria, finita o infinita.