So verwenden Sie z3-Split-Klauseln für nicht gesetzte Kerne und versuchen, den nicht gesetzten Kern erneut zu ermitteln

Können Sie uns sagen, wie man Klauseln von nicht gesättigten Kernen aufteilt? Und hier ist Frage 2 bezüglich der gefundenen nicht gesättigten Kerne, ich werde versuchen, noch einmal zu suchen. Möchten Sie wissen, wie das geht?

Vielen Dank.

So teilen Sie die Klauseln wie folgt auf

`and` (`or` (`<=_int` 1002 x1) (`<=_int` 1000 x1)) (`and` (`or` (`<=_int` 0 (`+_int` x2 (`*_int` -1003 x1))) (`<=_int` 0 (`+_int` x2 (`*_int` -1230 x1)))) (`and` (`or` (`<=_int` 0 (`+_int` x3 (`*_int` -1999 x2))) 

Zu Frage 2

cout<<s.check(3,assumptions)<<endl;
    expr_vector core = s.unsat_core();
................

expr assumptions2[2] = {p1,p3};
                    cout<<"check next"<<s.check(2,assumptions2)<<endl;
                    expr_vector core1 = s.unsat_core();
                    for(unsigned int k=0;k<core1.size();++k){
                            cout<<"New core size "<<k<<endl;
                            cout<<"New unsat core "<<core1[k]<<endl;
                    }

Wenn die Funktion unsat core erneut aufgerufen wird, können die unsat cores nicht erneut ausgegeben werden. Vielen Dank.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage