Simple Science

Scienza all'avanguardia spiegata semplicemente

# Informatica# Linguaggi di programmazione

Rivisitare Mizar: Un Approccio Moderno alle Dimostrazioni

Mizar si fa un restyling con Rust, migliora la velocità e scopre bug.

― 7 leggere min


Il Ritorno Arrugginito diIl Ritorno Arrugginito diMizarprestazioni e rivela bug critici.La trasformazione di Mizar aumenta le
Indice

Mizar è un linguaggio unico creato per scrivere e controllare dimostrazioni matematiche. Questo linguaggio esiste dal 1973 e, nel corso degli anni, ha sviluppato una enorme libreria di articoli su molti argomenti matematici. Mizar ha un modo di funzionare distintivo, che lo rende sia potente che un po' complesso. Recentemente, sono stati fatti sforzi per riscrivere Mizar in Rust, un linguaggio di programmazione moderno noto per essere efficiente e sicuro.

L'obiettivo di questa iniziativa non è solo creare una versione di Mizar che giri più veloce, ma anche trovare e correggere errori nascosti nel sistema originale. Pensala come dare a un'auto d'epoca un motore nuovo mentre ripulisci le vecchie cose che potrebbero farla fermare.

Che cos'è Mizar?

Mizar è principalmente un linguaggio di dimostrazione progettato per matematici e logici. Permette agli utenti di scrivere dimostrazioni in un modo che assomiglia al linguaggio naturale ma con una struttura rigida. Questo linguaggio fornisce un modo formalizzato per assicurarsi che i passi logici intrapresi in una dimostrazione siano corretti. Nel corso degli anni, Mizar ha costruito una grande libreria nota come Mizar Mathematical Library (MML), che contiene migliaia di articoli e migliaia di teoremi.

L'utente tipico di Mizar scrive un documento che delinea la propria dimostrazione, e gli strumenti di Mizar controllano la logica di queste dimostrazioni per assicurarsi che abbiano senso. È come avere un insegnante di matematica che non solo controlla i tuoi compiti, ma ti aiuta anche a capire dove hai sbagliato se commetti un errore.

La transizione a Rust

Rust è noto per la sua capacità di gestire la memoria in modo sicuro ed efficiente. Riscrivendo Mizar in Rust, gli sviluppatori mirano a migliorare le prestazioni dello strumento di verifica delle dimostrazioni mantenendo la stessa logica.

La nuova versione si chiama "mizar-rs." Il team dietro a questo progetto si è posto un paio di obiettivi: accelerare il processo di verifica e scoprire eventuali bug o problemi che potrebbero essere presenti nella versione originale. Sono persino riusciti a rendere la verifica delle dimostrazioni più veloce - circa cinque volte più rapida in alcuni compiti!

Perché riscrivere Mizar?

Un nuovo inizio

Sebbene Mizar abbia svolto bene il suo compito per molti anni, il suo codice originale è piuttosto vecchio, scritto in Pascal, che oggi non è così popolare. Nel corso dei decenni, lo stile e le pratiche di codifica sono cambiati significativamente, portando a quella che i programmatori chiamano spesso "debito tecnico." È come possedere una casa in cui continui ad aggiungere nuovi mobili senza mai pulire le vecchie cose.

Riscrivendo Mizar in Rust, gli sviluppatori non solo mirano a modernizzare il codice, ma anche a renderlo più comprensibile e accessibile agli sviluppatori nuovi al progetto. Immagina di dover leggere una vecchia ricetta che continua ad aggiungere nuovi ingredienti senza mai riscriverla; diventa difficile da seguire.

Miglioramento delle prestazioni

Un motivo chiave per la riscrittura è il miglioramento delle prestazioni. Con il sistema originale, controllare grandi librerie di dimostrazioni poteva richiedere molto tempo. Usando le capacità moderne di Rust, la nuova versione svolge lo stesso lavoro molto più velocemente.

Ad esempio, utilizzando otto core di computer, il nuovo verificatore di dimostrazioni è riuscito a controllare l'intera MML in poco più di 11 minuti. Questo è un miglioramento significativo rispetto alla versione originale.

Struttura interna di Mizar

Mizar è composto da diversi componenti, ognuno con un ruolo cruciale nel processo di dimostrazione. Ecco una semplice suddivisione:

Parser

Il primo passo è il "parser," che legge il file Mizar (il documento in cui vengono scritte le dimostrazioni) e lo converte in un formato più gestibile conosciuto come albero di sintassi astratta (AST). Puoi pensare al parser come a un traduttore, che trasforma il testo originale in una versione strutturata che un computer può capire facilmente.

Analizzatore

Poi c'è l'"analizzatore." Questo componente controlla la struttura logica della dimostrazione. Cerca eventuali incoerenze o errori nell'uso dei termini e dei simboli. È come avere un amico che capisce bene la matematica e rivede il tuo lavoro per assicurarsi che non hai fatto errori stupidi.

Verificatore

Infine, abbiamo il "verificatore," che verifica ogni passo di una dimostrazione. Questa è la parte che conferma effettivamente se i passi intrapresi nella dimostrazione sono logicamente coerenti. Se vuoi pensare a un verificatore come a un giudice in un gioco, allora il verificatore si assicura che le regole vengano seguite e assegna punti (o scarta passi) di conseguenza.

Sfide nella ricreazione di Mizar

Nessuna specifica ufficiale

Una delle principali sfide affrontate dagli sviluppatori in questo progetto è stata la mancanza di una specifica ufficiale per il linguaggio Mizar. Tipicamente, i linguaggi di programmazione hanno specifiche dettagliate che delineano come dovrebbero funzionare. Mizar, invece, aveva solo il suo codice originale come riferimento. Questo era come cercare di imparare una nuova lingua ascoltando solo conversazioni senza alcuna regola grammaticale scritta!

Accesso al codice

Inoltre, il codice sorgente originale non era disponibile pubblicamente per molti anni. Era accessibile solo ai membri di un particolare gruppo, rendendo difficile per gli sviluppatori al di fuori di quel cerchio partecipare. Fortunatamente, grazie agli sforzi del team dietro al progetto mizar-rs, il codice originale è stato ora reso disponibile a tutti.

Mancanza di un piccolo kernel fidato

Mizar non ha nemmeno un "piccolo kernel fidato," il che significa che i componenti responsabili della logica critica erano strettamente interconnessi. Per garantire la correttezza, la nuova implementazione doveva rimanere vicina a come funzionava Mizar originale, complicando ulteriormente il processo di sviluppo.

Bug e scoperte

Mentre il team implementava di nuovo Mizar, ha scoperto diversi bug nel codice originale. Potevano scrivere dimostrazioni che portavano a contraddizioni a causa di problemi nella logica del sistema originale. Questo dimostra come riscrivere il codice possa dare una nuova prospettiva su problemi esistenti, proprio come quando disordini il tuo armadio e scopri vecchi vestiti di cui avevi dimenticato l'esistenza!

Esempi di bug

Diamo un'occhiata a qualche esempio di bug trovati durante il processo:

  1. Overflow aritmetico polinomiale: Il codice originale non controllava l'overflow nell'aritmetica polinomiale. Questo significa che se i numeri diventavano troppo grandi, il sistema poteva produrre risultati errati, proprio come una lezione di matematica in cui si insegna che 2 + 2 può essere uguale a 5 in una giornata storta.

  2. Problemi di negazione: In alcuni casi, il sistema di verifica delle dimostrazioni poteva fraintendere la negazione delle affermazioni, portando a conclusioni assurde. È come sostenere che se non hai fame, allora devi essere pieno solo perché hai fatto uno spuntino prima!

  3. Flessibilità e malintesi: C'erano problemi relativi a espressioni logiche complesse chiamate affermazioni "flex-and" che portavano a conclusioni errate. Questo è un po' come un puzzle che sembra incastrarsi, ma in realtà ha un pezzo messo male.

Guadagni di prestazione

Il passaggio a Rust ha portato a miglioramenti delle prestazioni notevoli. Il Mizar originale impiegava molto più tempo per elaborare articoli a causa della sua architettura e delle vecchie tecniche di programmazione. La nuova implementazione è più veloce perché il design di Rust consente schemi di programmazione efficienti che riducono il tempo sprecato.

Lavori futuri

Sebbene la nuova versione di Mizar sia già impressionante, c'è sempre spazio per miglioramenti. Il team spera di continuare ad espandere mizar-rs, esplorando il suo potenziale e affinando le sue capacità.

Ad esempio, potrebbero rimuovere alcune restrizioni imposte dall'originale Mizar, come la lunghezza del nome degli articoli. Immagina di dover dare un nome lungo e complesso al tuo pesciolino rosso - non funziona con le limitazioni!

Conclusione

Riscrivere Mizar in Rust ha prodotto uno strumento di verifica delle dimostrazioni più veloce ed efficiente che non solo mantiene le capacità originali, ma migliora anche il processo di debug. Scoprendo bug e migliorando le prestazioni, gli sviluppatori sperano di dare nuova vita a Mizar.

Questo progetto evidenzia come strumenti moderni possano portare chiarezza a sistemi più vecchi e aprire la strada a future innovazioni nella verifica matematica. Chi avrebbe mai pensato che controllare dimostrazioni matematiche potesse essere così emozionante? È come passare da una vecchia bicicletta a una nuova e lucida bicicletta elettrica - il viaggio diventa molto più fluido!

Fonte originale

Titolo: Reimplementing Mizar in Rust

Estratto: This paper describes a new open-source proof processing tool, mizar-rs, a wholesale reimplementation of core parts of the Mizar proof system, written in Rust. In particular, the "checker" and "analyzer" of Mizar are implemented, which together form the trusted core of Mizar. This is to our knowledge the first and only external implementation of these components. Thanks to the loose coupling of Mizar's passes, it is possible to use the checker as a drop-in replacement for the original, and we have used this to verify the entire MML in 11.8 minutes on 8 cores, a 4.8x speedup over the original Pascal implementation. Since Mizar is not designed to have a small trusted core, checking Mizar proofs entails following Mizar closely, so our ability to detect bugs is limited. Nevertheless, we were able to find multiple memory errors, four soundness bugs in the original (which were not being exploited in MML), in addition to one non-critical bug which was being exploited in 46 different MML articles. We hope to use this checker as a base for proof export tooling, as well as revitalizing development of the language.

Autori: Mario Carneiro

Ultimo aggiornamento: 2024-12-23 00:00:00

Lingua: English

URL di origine: https://arxiv.org/abs/2304.08391

Fonte PDF: https://arxiv.org/pdf/2304.08391

Licenza: https://creativecommons.org/licenses/by/4.0/

Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.

Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.

Altro dall'autore

Articoli simili