Questo è un argomento di ricerca molto attivo, molto promettente, sebbene la piena automazione della generazione del programma abbia probabilmente dei limiti intrinseci (ma gli esseri umani sono migliori?). Ma l'idea è ancora molto utile per aiutare notevolmente la creazione di programmi meccanizzando molti passaggi e controllando automaticamente la correttezza della generazione del programma.
È fortemente correlato a un risultato logico, chiamato corrispondenza Curry-Howard (o isomorfismo), che mostra che i programmi per computer e le prove matematiche sono molto simili.
Quindi l'idea è che il sistema prenderà le specifiche del programma come teorema da provare. Nel caso del tuo esempio, sarebbe qualcosa di simile (informalmente): "esiste un insieme di tutti i numeri primi inferiori a 10".
Quindi, proverai a dimostrare che il teorema e i sistemi esistenti ti aiuteranno a fare la prova, automatizzando alcune parti, forse l'intera prova, e assicurandoti di non commettere errori.
Da quella prova si può quindi estrarre un programma che in realtà calcola l'elenco desiderato di numeri primi che era stato inizialmente specificato.
Diversi sistemi sono stati sviluppati in passato per chiarire queste idee. Uno dei più noti è stato LCF di Robin Milner , che ha creato il linguaggio
ML a tale scopo. Uno dei sistemi attualmente più avanzati è
Coq .
Ci sono esempi completamente elaborati, alcuni piuttosto complessi. Potresti trovarne alcuni nel seguente articolo , anche se non è in alcun modo una lettura semplice e richiede una conoscenza avanzata della logica.