Problema satisfacabilității formulelor în teorii ( în engleză satisfiability modulo theories , SMT) este problema solubilității formulelor logice, ținând cont de teoriile care stau la baza acestora. Exemple de astfel de teorii pentru formulele SMT sunt: teorii ale numerelor întregi și ale numerelor reale, teorii ale listelor, tablourilor, vectorilor de biți etc.
Formal , o formulă SMT este o formulă în logica de ordinul întâi în care unele funcții și simboluri predicate au o interpretare suplimentară. Sarcina este de a determina dacă formula dată este fezabilă. Cu alte cuvinte, spre deosebire de problema de satisfacție pentru formulele booleene , în loc de variabile booleene, formula SMT conține variabile arbitrare, iar predicatele sunt funcții booleene ale acestor variabile.
Exemple de predicate sunt inegalitățile liniare ( ) sau egalitățile care implică așa-numiții termeni neinterpretați sau simboluri de funcție : , unde este o funcție nedefinită a două argumente. Predicatele sunt interpretate în funcție de teoria căreia îi aparțin. De exemplu, inegalitățile liniare asupra variabilelor reale sunt evaluate conform regulilor teoriei aritmeticii reale liniare, în timp ce predicatele peste termeni neinterpretați și simbolurile funcției sunt evaluate conform regulilor teoriei funcțiilor neinterpretate cu egalitate (numită și teorie goală). . SMT include, de asemenea, teorii ale matricelor și listelor (folosite adesea pentru modelarea și verificarea programelor ) și teoria vectorului de biți (folosită adesea pentru modelarea și verificarea hardware). Sunt posibile și subteorii: de exemplu, logica diferențelor este o subteorie a aritmeticii liniare, în care inegalitățile sunt limitate la următoarea formă pentru variabilele și și constanta .
Majoritatea soluțiilor SMT acceptă numai formule non-cuantificatoare .
Formula SMT este o generalizare a formulei booleene SAT în care variabilele sunt înlocuite cu predicate din teoriile relevante. Prin urmare, SMT-urile oferă mai multe opțiuni de modelare decât formulele SAT. De exemplu, formula SMT vă permite să modelați operațiile unei funcții ale modulelor de microprocesor la nivel de cuvânt , mai degrabă decât la nivel de biți .
Primele încercări de a rezolva problemele SMT au vizat conversia acestora în formule SAT (de exemplu, variabilele de 32 de biți au fost codificate cu 32 de variabile booleene care codifică operațiile corespunzătoare pe cuvinte în operații de nivel scăzut pe biți) și rezolvarea formulei SAT cu o rezolvator. Această abordare are avantajele sale - vă permite să utilizați soluții SAT existente fără modificări și să utilizați optimizările făcute în acestea. Pe de altă parte, pierderea semanticii de nivel înalt a teoriilor subiacente înseamnă că rezolvatorul SAT trebuie să facă eforturi mari pentru a deduce fapte „evidente” (cum ar fi pentru adunare). Această considerație a condus la rezolvatori SMT specializați care integrează dovezi booleene convenționale în stil DPLL cu soluții specifice teoriei ( T-solvers ) care funcționează cu disjuncții și conjuncții de predicate dintr-o anumită teorie.
Arhitectura DPLL(T) transferă funcțiile de demonstrație booleene către solutorul SAT, care la rândul său interacționează cu rezolvatorul teoriei T. Rezolvatorul SAT generează modele în care unele dintre literalele care intră fără negație nu sunt variabile booleene, ci instrucțiuni atomice. a unora, posibil multisortate, teorie de ordinul întâi. Rezolvatorul de teorie încearcă să găsească inconsecvențe în modelele transmise acestuia, iar dacă nu se găsește o astfel de inconsecvență, formula este declarată satisfăcătoare. Pentru ca această integrare să funcționeze, rezolvatorul de teorie trebuie să participe la analiza conflictului oferind explicații pentru infezabilitatea atunci când apar conflicte, care sunt stocate în soluție pe baza arhitecturii DPLL. Deoarece numărul modelelor SAT este finit, enumerarea va conduce la un răspuns în timp finit [1] .