Domanda

Sto cercando di capire come funziona un risolutore SMT il più semplice possibile. Supponiamo che abbiamo un semplice programma di input con valori simbolici x e y. Per esempio

if (x+y < 20) {
   if (x > 10) {
      if (y > 10) {
        assume(false);
      }
   }
}

Qui abbiamo percorsi diversi, a seconda delle condizioni. Raggiungere assume(false) Ogni condizione deve essere vera, quindi la nostra formula in uscita è:

$ x+y <20 , , , , , Wedge , , , , , x> 10 , , , , , Wedge , , , , , y> 10 $

Fin qui tutto bene. Cosa succede dopo, passo dopo passo?

Vorrei implementare, il più semplice possibile, un risolutore che ottiene come input qualcosa come la formula sopra e offre un output specifico per raggiungere la fine del percorso - qui assume(false), cioè x = 2147483647, y = 2147483647 (JFI: x+y sarebbe -2) - per il rilevamento di overflow o simile.

So che ci sono molti risolutori SMT su Internet, ma non sono riuscito a trovarne uno semplice che spiega. In attesa di un suggerimento.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top