Syntéza programu - Program synthesis

v počítačová věda, syntéza programu je úkol postavit a program které prokazatelně uspokojí danou vysokou úroveň formální specifikace. Na rozdíl od ověření programu, program má být spíše konstruován než dán; obě pole však využívají formální důkazní techniky a obě zahrnují přístupy různého stupně automatizace. Na rozdíl od automatické programování techniky, specifikace v syntéze programu obvykle nejsoualgoritmické prohlášení v příslušném logický počet.[1]

Původ

Během letního institutu symbolické logiky na Cornellově univerzitě v roce 1957 Alonzo Church definoval problém syntetizovat obvod z matematických požadavků.[2] Přestože se práce týká pouze obvodů, nikoli programů, je považována za jeden z prvních popisů syntézy programů a někteří badatelé syntézu programů označují jako „církevní problém“. V 60. letech podobnou myšlenku „automatického programátoru“ zkoumali vědci v oblasti umělé inteligence.[Citace je zapotřebí ]

Od té doby různé výzkumné komunity zvažovaly problém syntézy programů. Pozoruhodné práce zahrnují 1969 automaty-teoretický přístup od Buči a Landweber,[3] a díla od Manno a Waldinger (kolem 1980). Vývoj moderního programovací jazyky na vysoké úrovni lze také chápat jako formu syntézy programu.

Vývoj 21. století

Na počátku 21. století došlo k nárůstu praktického zájmu o myšlenku syntézy programů v EU formální ověření komunita a související pole. Armando Solar-Lezama ukázal, že je možné zakódovat problémy se syntézou programů Logická logika a použít algoritmy pro Booleovský problém uspokojivosti automaticky vyhledávat programy.[4] V roce 2013 navrhli vědci na jednotném rámci pro problémy syntézy programů UPenn, UC Berkeley, a MIT.[5] Od roku 2014 probíhá každoroční soutěž v syntéze programů, která porovnává různé algoritmy pro syntézu programů v soutěžním případě, Syntax-Guided Synthesis Competition nebo SyGuS-Comp.[6] Dostupné algoritmy jsou přesto schopné syntetizovat pouze malé programy.

Článek z roku 2015 demonstroval syntézu PHP programy axiomaticky prokázáno, že splňují danou specifikaci, pro účely, jako je kontrola čísla za prvočíslo nebo výpis faktorů čísla.[7]

Rámec Manny a Waldingera

Pravidla neuzavření řešení (sjednocující náhrady nejsou zobrazeny)
ČTvrzeníCíleProgramPůvod
51
52
53s
54t
55Vyřešit (51,52)
56sVyřešit (52,53)
57sVyřešit (53,52)
58p ? s : tVyřešit (53,54)

Rámec Manno a Waldinger, publikováno v roce 1980,[8][9] začíná od uživatele vzorec specifikace prvního řádu. Pro tento vzorec je vytvořen důkaz, čímž se také syntetizuje a funkční program z sjednocující substituce.

Rámec je prezentován v rozložení tabulky, sloupce obsahující:

  • Číslo řádku („Nr“) pro referenční účely
  • Vzorce které již byly stanoveny, včetně axiomů a předpokladů, („tvrzení“)
  • Vzorce, které je třeba ještě ověřit, včetně dodatečných podmínek („Cíle“),[poznámka 1]
  • Podmínky označující platnou výstupní hodnotu ("Program")[poznámka 2]
  • Odůvodnění aktuálního řádku („Původ“)

Zpočátku se do tabulky zadávají základní znalosti, předběžné podmínky a následné podmínky. Poté se příslušná pravidla ověřování použijí ručně. Rámec byl navržen tak, aby zlepšil lidskou čitelnost přechodných vzorců: na rozdíl od klasické rozlišení, to nevyžaduje doložená normální forma, ale umožňuje uvažovat pomocí vzorců libovolné struktury a obsahujících libovolné spojky ("nelogické řešení "). Důkaz je kompletní, když byl odvozen v Cíle sloupec nebo ekvivalentně v Tvrzení sloupec. U programů získaných tímto přístupem je zaručeno, že splňují specifikační vzorec, který byl spuštěn; v tomto smyslu jsou správná podle konstrukce.[10] Zatím jen minimalistický Turing-kompletní, funkční programovací jazyk, skládající se z podmíněných, rekurzivních a aritmetických a dalších operátorů[Poznámka 3] Případové studie prováděné v tomto rámci syntetizují algoritmy pro výpočet např. divize, zbytek,[11] odmocnina,[12] sjednocení termínu,[13] odpovědi na relační databáze dotazy[14] a několik třídicí algoritmy.[15][16]

Důkazní pravidla

Pravidla pro ověřování zahrnují:

Například řádek 55 se získá vyřešením vzorců Assertion od 51 a z 52, které oba sdílejí některé společné podformule . Rozpouštědlo se tvoří jako disjunkce , s nahrazen , a , s nahrazen . Toto řešení logicky vyplývá ze spojení a . Obecněji, a potřebujete pouze dva unifiable podformule a , v uvedeném pořadí; jejich rozpouštědlo se poté vytvoří z a jako předtím, kde je nejobecnější unifikátor z a . Toto pravidlo se zobecňuje řešení doložek.[17]
Podmínky programu nadřazených vzorců jsou kombinovány, jak je znázorněno v řádku 58, aby vytvořily výstup rezolvence. V obecném případě se vztahuje i na druhé. Od podformule objeví se ve výstupu, je třeba věnovat pozornost řešení pouze u podformulí odpovídajících vypočitatelný vlastnosti.
  • Logické transformace.
Například, lze transformovat na ) v tvrzeních i v cílech, protože obě jsou rovnocenná.
  • Rozdělení spojovacích tvrzení a disjunktivních cílů.
Příklad je uveden v řádcích 11 až 13 níže uvedeného příkladu hračky.
Toto pravidlo umožňuje syntézu rekurzivní funkce. Pro danou pre- a postcondition „Dáno takhle , najít takhle "a příslušný uživatel dobře objednávající domény , je vždy zvukové přidat tvrzení “".[18] Řešení pomocí tohoto tvrzení může zavést rekurzivní volání v termínu programu.
Příklad je uveden v Manně, Waldinger (1980), s. 108-111, kde je syntetizován algoritmus pro výpočet kvocientu a zbytku dvou daných celých čísel pomocí pořadí definován (str. 110).

Murray ukázal, že tato pravidla jsou kompletní pro logika prvního řádu.[19]V roce 1986 Manna a Waldinger přidali zobecněné E-rozlišení a paramodulace pravidla pro řešení rovnosti;[20] později se tato pravidla ukázala jako neúplná (ale přesto zvuk ).[21]

Příklad

Příklad syntézy maximální funkce
ČTvrzeníCíleProgramPůvod
1Axiom
2Axiom
3Axiom
10MSpecifikace
11MDistr (10)
12MSplit (11)
13MSplit (11)
14XVyřešit (12,1)
15XVyřešit (14,2)
16XVyřešit (15,3)
17yVyřešit (13,1)
18yVyřešit (17,2)
19x ? y : XVyřešit (18,16)

Jako příklad hračky je funkční program pro výpočet maxima dvou čísel a lze odvodit následovně.[Citace je zapotřebí ]

Počínaje popisem požadavku "Maximum je větší nebo rovno jakémukoli danému číslu a je jedním z daných čísel", vzorec prvního řádu je získán jako jeho formální překlad. Tento vzorec je třeba prokázat. Zpětně Skolemizace,[poznámka 4] získá se specifikace v řádku 10, velká a malá písmena označující proměnnou a Skolemova konstanta, resp.

Po použití pravidla transformace pro distribuční právo v řádku 11 je cílem důkazu disjunkce, a proto jej lze rozdělit na dva případy, viz. linky 12 a 13.

Pokud jde o první případ, řešení řádku 12 s axiomem v řádku 1 vede k instance proměnné programu v řádku 14. Intuitivně poslední spojka řádku 12 předepisuje hodnotu, která musí v tomto případě vzít. Formálně se na řádky 12 a 1 použije pravidlo nečlenské rezoluce zobrazené na řádku 57 výše

  • p je běžnou instancí x = x z A = A a x = M, získané syntakticky sjednocující druhé vzorce,
  • F[p] bytost skutečnýx = x, získané od instance řádek 1 (vhodně polstrovaný, aby se vytvořil kontext F [⋅] kolem p viditelné) a
  • G[p] bytost x ≤ x ∧ y ≤ x ∧ x = x, získané z instančního řádku 12,

poddajnýskutečnýNepravdivé) ∧ (x ≤ x ∧ y ≤ x ∧ skutečný, což zjednodušuje na .

Podobným způsobem získá řádek 14 řádek 15 a poté řádek 16 podle rozlišení. Také druhý případ, v řádku 13, je zpracováno podobně, čímž se nakonec získá řádek 18.

V posledním kroku jsou oba případy (tj. Řádky 16 a 18) spojeny pomocí pravidla rozlišení z řádku 58; aby bylo toto pravidlo použitelné, byl nutný přípravný krok 15 → 16. Řádek 18 lze intuitivně číst jako „pro případ , výstup je platný (s ohledem na původní specifikaci), zatímco řádek 15 říká „pro případ , výstup je platný; krok 15 → 16 stanovil, že oba případy 16 a 18 se vzájemně doplňují.[poznámka 5] Protože řada 16 a 18 přichází s programovým termínem, a podmíněný výraz výsledky ve sloupci programu. Od cíle vzorec byl odvozen, je proveden důkaz a sloupec programu „"řádek obsahuje program.

Tento postup vytvoří pouze jeden operátor ve tvaru p? S: t převzatém z řádku 58. Toto není programovací jazyk, protože to není Turing Complete. Neexistují žádné příkazy, např. PŘIŘAZENÍ IF / ELSE, FOR / WHILE nebo rekurzivní programy, které jsou potřebné k dokončení jazyka Turing Complete. Mělo by být takto označeno: způsob vytvoření jediného logického operátoru, nikoli způsob vytváření programů obecně. Možná by bylo možné použít „Operator Synthesis“. Metoda výroby kola není metodou výroby automobilu.[Citace je zapotřebí ]

Viz také

Poznámky

  1. ^ Rozlišení „tvrzení“ / „cíle“ slouží pouze pro přehlednost; podle paradigmatu důkaz rozporem, cíl je ekvivalentní tvrzení .
  2. ^ Když a je vzorec cíle a termín programu v řádku, pak ve všech případech kde drží, je platný výstup programu, který má být syntetizován. Tento neměnný je udržován všemi pravidly pro ověřování. Vzorec tvrzení obvykle není spojen s termínem programu.
  3. ^ Pouze podmíněný operátor (?: ) je podporován od začátku. Lze však přidat libovolné nové operátory a vztahy poskytnutím jejich vlastností jako axiomů. V níže uvedeném příkladu hračky jsou uvedeny pouze vlastnosti a které jsou skutečně potřebné v důkazu, byly axiomatizovány, v řádcích 1 až 3.
  4. ^ Zatímco běžná skolemizace zachovává uspokojivost, reverzní skolemizace, tj. Nahrazení univerzálně kvantifikovaných proměnných funkcemi, zachovává platnost.
  5. ^ K tomu byla zapotřebí Axiom 3; ve skutečnosti, pokud nebyl celková objednávka, pro nesrovnatelné vstupy nebylo možné vypočítat maximum .

Reference

  1. ^ Basin, D .; Deville, Y .; Flener, P .; Hamfelt, A .; Fischer Nilsson, J. (2004). Msgstr "Syntéza programů ve výpočetní logice". In M. Bruynooghe a K.-K. Lau (ed.). Vývoj programu ve výpočetní logice. LNCS. 3049. Springer. 30–65. CiteSeerX  10.1.1.62.4976.
  2. ^ Alonzo Church (1957). "Aplikace rekurzivní aritmetiky na problém syntézy obvodů". Shrnutí letního institutu symbolické logiky. 1: 3–50.
  3. ^ Richard Büchi, Lawrence Landweber (duben 1969). „Řešení postupných podmínek strategiemi konečných států“. Transakce Americké matematické společnosti. 138: 295–311. doi:10.2307/1994916. JSTOR  1994916.
  4. ^ Solar-Lezama, Armando (2008). Syntéza programů skicováním (Ph.D.). University of California, Berkeley.
  5. ^ Alur, Rajeev; al., et (2013). „Syntax-guided Synthesis“. Sborník formálních metod v počítačovém designu. IEEE. p. 8.
  6. ^ SyGuS-Comp (soutěž o syntézu řízenou syntaxí)
  7. ^ Charles Volkstorf (7. ledna 2015). "Syntéza programu z axiomatického důkazu o správnosti". arXiv:1501.01363 [cs.LO ].
  8. ^ Zohar Manna, Richard Waldinger (leden 1980). „Deduktivní přístup k syntéze programu“. Transakce ACM v programovacích jazycích a systémech. 2: 90–121. doi:10.1145/357084.357090.
  9. ^ Zohar Manna a Richard Waldinger (prosinec 1978). Deduktivní přístup k syntéze programu (PDF) (Technická poznámka). SRI International.
  10. ^ Správnost pravidel řešení viz Manna, Waldinger (1980), s. 100.
  11. ^ Manna, Waldinger (1980), str. 108-111
  12. ^ Zohar Manna a Richard Waldinger (srpen 1987). „Původ paradigmatu binárního vyhledávání“. Věda o počítačovém programování. 9 (1): 37–83. doi:10.1016/0167-6423(87)90025-6.
  13. ^ Daniele Nardi (1989). "Formální syntéza unifikačního algoritmu metodou deduktivní-tablo". Journal of Logic Programming. 7: 1–43. doi:10.1016/0743-1066(89)90008-3.
  14. ^ Daniele Nardi a Riccardo Rosati (1992). "Dedukční syntéza programů pro odpovídání na dotazy". V Kung-Kiu Lau a Tim Clement (ed.). Mezinárodní workshop o syntéze a transformaci logických programů (LOPSTR). Workshopy v oboru výpočetní techniky. Springer. str. 15–29. doi:10.1007/978-1-4471-3560-9_2.
  15. ^ Jonathan Traugott (1986). "Deduktivní syntéza třídicích programů". Sborník z mezinárodní konference o automatizovaném odpočtu. LNCS. 230. Springer. 641–660.
  16. ^ Jonathan Traugott (červen 1989). "Deduktivní syntéza třídicích programů". Journal of Symbolic Computation. 7 (6): 533–572. doi:10.1016 / S0747-7171 (89) 80040-9.
  17. ^ Manna, Waldinger (1980), s. 99
  18. ^ Manna, Waldinger (1980), s. 104
  19. ^ Manna, Waldinger (1980), s. 103, s odkazem na: Neil V. Murray (únor 1979). Zkušební postup pro bezkvantifikační logiku první objednávky bez doložky (Technická zpráva). Syrakusy Univ. 2-79.
  20. ^ Zohar Manna, Richard Waldinger (leden 1986). "Zvláštní vztahy v automatizovaném odpočtu". Deník ACM. 33: 1–59. doi:10.1145/4904.4905.
  21. ^ Zohar Manna, Richard Waldinger (1992). "Pravidla zvláštních vztahů jsou neúplná". Proc. CADE 11. LNCS. 607. Springer. 492–506.
  • Zohar Manna, Richard Waldinger (1975). "Znalosti a uvažování v syntéze programu". Umělá inteligence. 6 (2): 175–208. doi:10.1016/0004-3702(75)90008-9.
  • Jonathan Traugott (1986). "Deduktivní syntéza třídicích programů". Sborník z mezinárodní konference o automatizovaném odpočtu. LNCS. 230. Springer. 641–660.