Support for Uninterpreted Functions in Yaga SMT Solver
Podpora neinterpretovaných funkcí v SMT řešiči Yaga
bakalářská práce (OBHÁJENO)

Zobrazit/ otevřít
Trvalý odkaz
http://hdl.handle.net/20.500.11956/196402Identifikátory
SIS: 269680
Kolekce
- Kvalifikační práce [11320]
Autor
Vedoucí práce
Oponent práce
Parízek, Pavel
Fakulta / součást
Matematicko-fyzikální fakulta
Obor
Informatika se specializací Systémové programování
Katedra / ústav / klinika
Katedra distribuovaných a spolehlivých systémů
Datum obhajoby
5. 9. 2024
Nakladatel
Univerzita Karlova, Matematicko-fyzikální fakultaJazyk
Angličtina
Známka
Výborně
Klíčová slova (česky)
SMT řešič|MCSat|Neinterpretované funkce|C++Klíčová slova (anglicky)
SMT solver|MCSat|Uninterpreted functions|C++Yaga je moderní, modulární SMT řešič vyvinutý na Univerzitě Karlově, založený na algoritmu MCSat. Jeho implementace v jazyce C++ aktuálně obsahuje pluginy pro Booleovskou logiku a lineární reálnou aritmetiku. V rámci této práce byl řešič rozšířen o plugin pro teorii neinterpretovaných funkcí. Rozšířený zahrnovalo i vytvoření testů a úpravy stavajících částí řešiče (jako např. parseru). Implementace byla vyhodnocena na sadě benchmarků SMT-LIB a porovnána s moderním SMT řešičem Z3. Pro všechny vstupy Yaga dává správný výsledek. Celkově mělo Z3 podle očekávání navrch. Nicméně, mezi benchmarky, které reprezentují formální verifikaci skutečných programů, byla Yaga ve většině případů rychlejší.
Yaga is a modern, modular SMT solver developed at Charles University, based on the Model-Constructing Satisfiability Calculus. Currently, its implementation in the C++ programming language contains plugins supporting Boolean logic and Linear Real Arith- metic. In this thesis, the solver is extended with a plugin for the theory of Uninterpreted Functions. The extension also involves creating tests and modifying existing parts of Yaga (such as the parser). The implementation is evaluated on a set of SMT-LIB benchmarks and compared with a state-of-the-art Z3 theorem prover. For all inputs, Yaga returns correct results. Overall, Z3 is expectedly faster. However, among the benchmarks which represent software verification of real programs, Yaga performs better in most cases.