Qualcuno ha effettivamente creato un sistema che scrive i programmi per computer dalle specifiche?


17

Qualcuno ha mai effettivamente scritto un sistema (software o spiegazione dettagliata su carta con semplici esempi) che genera programmi per computer? Inserisco e crea un programma che elenca i numeri primi inferiori a 10. P r i m e ( x ) è semplicemente definito come 1 < x APrime(x)x<10Prime(x) professori dicono che possono ma nessuno fornisce esempi completi reali.

1<xAs.t.1<AA<xx=A×B, with A,BN

13
Intendi come un compilatore per un linguaggio di programmazione generico?
Sasho Nikolov

1
Ciao, benvenuto su cstheory! Sfortunatamente la tua domanda non è una domanda di livello di ricerca in informatica teorica ed è fuori tema su questo sito.

In realtà, questa è una buona domanda, al vertice della ricerca attuale, e molto promettente. Tuttavia, spesso è molto difficile specificare esattamente ciò che si desidera. Se riesci a specificarlo, allora hai bisogno di un sistema che dimostrerà che ha senso, che è fattibile e che richiederà una prova matematica. Da quella prova può essere estratto un programma che lo sta facendo. Ma la ricerca per automatizzare la prova e l'estrazione del programma è ancora agli inizi, anche se sta facendo buoni progressi. Si può cercare per esempio a Coq su wikipedia.- - - cc @LevReyzin
Babou

2
Ecco un libro corrispondente alla tua domanda. Ce ne sono altri E ' non è semplice da capire. La folla di Coq e Isabelle (un altro di questi sistemi) include utenti SE che potrebbero fornire maggiori informazioni ed esempi se la domanda non fosse chiusa. L'ho trovato cercando sul web: sintesi del programma di esempio coq.
babou,

2
L'area dell'informatica che cattura ciò di cui mi stai chiedendo si chiama sintesi del programma ed è un'area attiva di ricerca.
Huck Bennett

Risposte:


11

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.


9

La risposta del wag: Sì, ma al momento della stesura, per la maggior parte dei programmi non banali le specifiche sembrano essere difficili da scrivere ed eseguire il debug come lo sarebbero i programmi.

Più seriamente, la risposta di Babou è buona, ma suggerirò anche di controllare l'area dei tipi dipendenti. C'è un libro piuttosto buono che usa Coq (disclaimer completo: scritto da un mio amico), ma c'è anche Epigram, Agda e Idris. Anche Isabelle / HOL merita una visita.

Questi sono tutti basati sul calcolo delle costruzioni. Se vuoi conoscere le basi teoriche, cerca la teoria dei tipi di Martin-Löf. Ci sono alcune fantastiche presentazioni in giro.


Concordo pienamente sulle specifiche (e anche sul resto della tua risposta, ma tu lo sai meglio di me). Ogni vero programmatore sa quanto sia difficile specificare a fondo cosa dovrebbe fare un programma. È un grosso problema nell'ingegneria del software. E questo si traduce anche qui, anche se i problemi affrontati sono più matematici in generale. Tuttavia, non volevo sembrare troppo scoraggiante (specialmente vista la storia di questa domanda, illustrata dal primo commento).
babou

4

Scomponendosi qui in modo tangente, i generatori di programmi (ovvero i sistemi che hanno fornito una descrizione di alto livello di qualcosa in un linguaggio speciale) sono in circolazione da sempre. Qualsiasi compilatore è uno di quelli, così come uno dei molti generatori di parser. Ai giorni nostri i sistemi chiamati "linguaggi di terza generazione", che generavano (la maggior parte) del codice di una tipica applicazione aziendale data una descrizione di alto livello e un catalogo di dati disponibili erano popolari.


1

Programmazione logica e, più in generale, programmazione dichiarativa prendono come premessa esattamente ciò che proponete: vale a dire, da una specifica logica, restituire un risultato che soddisfi tale specifica.

Un'area che sembra indirizzare in modo specifico l'esempio "primi meno di 10" che dai è la Programmazione dei vincoli che cerca di trovare soluzioni ai problemi che coinvolgono determinati vincoli, compresi i vincoli interi come quelli che hai dato.

Potresti provare ECLiPSe per un'implementazione specifica (open source) di un tale sistema.


Sarebbe corretto dire che il paradigma della logica / vincolo è più quello di specificare le risposte che di specificare i programmi. Naturalmente, potresti dire che una specifica incompleta è un programma. Ma in qualche modo, non sono sicuro che sia lo stesso gioco della sintesi del programma. È vero, tuttavia, che risponde all'esempio, perché l'esempio era molto semplice. Non intendo dire che la programmazione dei vincoli è solo per problemi semplici.
babou
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.