En informatique, la synthèse de programmes consiste à construire automatiquement un programme à partir d'une spécification. La spécification est décrite dans un langage logique, par exemple en logique temporelle linéaire. La synthèse de programmes s'appuie sur des techniques de vérification formelle de programmes. Le problème de synthèse de programmes remonte aux travaux d'Alonzo Church.
Manna et Waldinger ont proposé une méthode déductive pour synthétiser un programme à partir d'une spécification en logique du premier ordre.

Le programme de synthèse de programmes consiste à générer un plan pour un agent (par exemple un robot) qui réussit face à toutes les éventualités de l'environnement. Par exemple, la synthèse de programme réactif avec une spécification en logique temporelle linéaire a été appliqué en robotique. En 2015, à la compétition DARPA Robotics en 2015, la synthèse de programmes a été implémentée dans un robot Atlas.
Plusieurs méthodes ont été proposés, par Büchi et Landweber et par Rabin. Le problème de synthèse se réduit à tester si le langage d'un automate d'arbre est vide et de voir la solution comme un jeu à deux joueurs. Dans ces travaux préliminaires, la spécification du système était donnée par une formule de S1S (logique monadique du second ordre avec un successeur).
Le problème de synthèse et réalisabilité en logique temporelle linéaire (LTL) a été introduit par Pnueli et Rosner et indépendamment par Abadi, Lamport et Wolper, en 1989. Les travaux de Pnueli et Rosner font suite aux travaux préliminaires de Clarke et Emerson et ceux de Manna et Wolper, qui réduisent le problème de synthèse à un problème de satisfiabilité, en ignorant le fait que l'environnement doit être considéré comme un adversaire.
Pnueli et Rosner montre que des stratégies à mémoire finie suffisent pour gagner le jeu de réalisabilité et propose une méthode pour la synthèse à partir d'une spécification LTL φ :
Pnueli et Rosner ont démontré que ce problème est 2EXPTIME-complet. Comme le souligne Piterman, Pnueli et Sa'ar, cette complexité est très haute et elle a découragé le développement d'outils pratiques de synthèse. A débuté alors une quête où le problème de synthèse peut être résolu plus efficacement.
En 1998, Asarin, Maler, Pnueli et Sifakis présente un algorithme de synthèse d'automates temporisés, mais surtout, montre que le problème de synthèse peut être résolu en temps polynomial. Alur et La Torre montre que le problème de synthèse est entre PSPACE et EXPSPACE pour un fragment de LTL. En 2006, Piterman, Pnueli et Sa'ar propose un fragment de LTL, appelé GR(1) pour Generalized reactivity(1), pour lequel le problème de synthèse est en temps O((mn|Σ|)3), où m et n sont le nombre de clauses dans la formule GR(1) et Σ est l'ensemble des valuations. L'élaboration de GR(1) fait partie d'un projet appelé Prosyd.
Le problème de synthèse a aussi été étudié en 2015 par De Giacomo et Vardi pour des spécifications LTL et LDL (linear dynamic logic) sur des traces finies. Aussi, le problème de planification conditionnelle avec observation totale peut être vu comme un cas particulier du problème de synthèse sur les traces finies. En 2016, le problème de synthèse a été étendu sous observation partielle, toujours sur les traces finies. Là, c'est le problème de planification conditionnelle avec observation partielle qui peut être vu comme un cas particulier du problème de synthèse. En 2017, le problème de synthèse avec traces finis a été résolu avec une représentation symbolique de l'automate fini déterministe.
Plusieurs outils existent : Acacia+, Unbeast, Ratsy.
« Theorem 1, p. 372 »