/*通用增量SAT API的一部分,称为“ipasir”。*有关使用此软件的权利,请参阅“许可证”。*/#如果输入ipasir_h_INCLUDED#定义ipasir_h_INCLUDED/***返回增量SAT的名称和版本*求解库。*/const char*ipasir_signature();/***构造一个新的解算器并返回指向它的指针。*将返回的指针用作每个*以下功能的组合。**所需状态:不适用*之后的状态:INPUT*/无效*ipasir_init();/***释放解算器,即其所有资源和*分配的内存(析构函数)。解算器指针*在此调用后不能用于任何目的。**所需状态:INPUT或SAT或UNSAT*之后的状态:未定义*/void ipasir_release(void*solver);/***将给定文字添加到当前添加的子句中*或用0结束子句。以这种方式添加的条款*无法删除。添加可删除条款*可以使用激活文字和假设进行模拟。**所需状态:INPUT或SAT或UNSAT*之后的状态:INPUT**文本被编码为(非零)整数,如*DIMACS格式。它们必须小于或等于*INT_MAX且严格大于INT_MIN(以避免*否定溢出)。这适用于所有文字*API函数中的参数。*/void ipasir_add(void*solver,int lit或zero);/***为下一次SAT搜索添加假设(下一次调用*ipasir_solve)。调用ipasir_solve后*之前添加的假设被清除。**所需状态:INPUT或SAT或UNSAT*之后的状态:INPUT*/void ipasir_assume(void*solver,int lit);/***在规定的假设下,用规定的子句求解公式。*如果公式可满足,则函数返回10,解算器的状态更改为SAT。*如果公式不可满足,则函数返回20,解算器的状态更改为UNSAT。*如果搜索被中断(请参阅ipasir_set_terminate),函数将返回0,解算器的状态保持为INPUT。*此函数可以在解算器的任何定义状态下调用。**所需状态:INPUT或SAT或UNSAT*之后的状态:INPUT或SAT或UNSAT*/int ipasir_solve(无效*解算器);/***在找到的满足条件中获取给定文字的真值*转让。如果为True,返回“lit”;如果为False,返回“-lit”;如果不重要,返回0。*只有当ipasir_solve返回10时才能使用此函数*没有调用“ipasir_add”或“ipasir _assume”*此后,即解算器的状态为SAT。**要求状态:SAT*SAT之后的状态*/int ipasir_val(void*solver,int lit);/***检查给定的假设文字是否用于证明*假设条件下公式的不可满足性*用于上次SAT搜索。如果是,则返回1,否则返回0。*只有当ipasir_solve返回20并且*此后未调用过ipasir_add或ipasir-assume,即。,*解算器的状态为UNSAT。**所需状态:UNSAT*之后的状态:UNSAT*/int ipasir_failed(void*solver,int lit);/***设置一个回调函数,用于向*求解器。解算器将定期调用此函数并检查其返回*值。ipasir_set_terminate函数可以在任何*解算器的状态,调用后状态保持不变。*回调函数的形式为“int terminate(void*state)”*-如果解算器应终止,则返回非零值。*-求解器使用参数“state”调用回调函数*在ipasirsetterminate函数中传递值(第二个参数)。**所需状态:INPUT或SAT或UNSAT*之后的状态:INPUT或SAT或UNSAT*/void ipasir_set_terminate(void*solver,void*state,int(*terminate)(void*state));#结束语