Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ core_src_c := \
solvers/egraph/egraph_explanations.c \
solvers/egraph/egraph_utils.c \
solvers/egraph/theory_explanations.c \
solvers/mcsat_satellite.c \
solvers/floyd_warshall/dl_vartable.c \
solvers/floyd_warshall/idl_floyd_warshall.c \
solvers/floyd_warshall/rdl_floyd_warshall.c \
Expand Down
47 changes: 45 additions & 2 deletions src/api/search_parameters.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@
#define DEFAULT_USE_BOOL_DYN_ACK false
#define DEFAULT_USE_OPTIMISTIC_FCHECK true
#define DEFAULT_AUX_EQ_RATIO 0.3
#define DEFAULT_MCSAT_SUPPLEMENT_CHECK MCSAT_SUPPLEMENT_CHECK_BOTH


/*
Expand Down Expand Up @@ -167,6 +168,7 @@ static const param_t default_settings = {

DEFAULT_MAX_UPDATE_CONFLICTS,
DEFAULT_MAX_EXTENSIONALITY,
DEFAULT_MCSAT_SUPPLEMENT_CHECK,
};


Expand Down Expand Up @@ -224,9 +226,10 @@ typedef enum param_key {
// array solver
PARAM_MAX_UPDATE_CONFLICTS,
PARAM_MAX_EXTENSIONALITY,
PARAM_MCSAT_SUPPLEMENT_CHECK,
} param_key_t;

#define NUM_PARAM_KEYS (PARAM_MAX_EXTENSIONALITY+1)
#define NUM_PARAM_KEYS (PARAM_MCSAT_SUPPLEMENT_CHECK+1)

// parameter names in lexicographic ordering
static const char *const param_key_names[NUM_PARAM_KEYS] = {
Expand All @@ -253,6 +256,7 @@ static const char *const param_key_names[NUM_PARAM_KEYS] = {
"max-extensionality",
"max-interface-eqs",
"max-update-conflicts",
"mcsat-supplement-check",
"optimistic-final-check",
"prop-threshold",
"r-factor",
Expand Down Expand Up @@ -291,6 +295,7 @@ static const int32_t param_code[NUM_PARAM_KEYS] = {
PARAM_MAX_EXTENSIONALITY,
PARAM_MAX_INTERFACE_EQS,
PARAM_MAX_UPDATE_CONFLICTS,
PARAM_MCSAT_SUPPLEMENT_CHECK,
PARAM_OPTIMISTIC_FCHECK,
PARAM_PROP_THRESHOLD,
PARAM_R_FACTOR,
Expand Down Expand Up @@ -327,6 +332,19 @@ static const int32_t branching_code[NUM_BRANCHING_MODES] = {
BRANCHING_THEORY,
};

/*
* Supplementary MCSAT checking modes (in lexicographic order)
*/
static const char * const mcsat_supplement_check_modes[NUM_MCSAT_SUPPLEMENT_CHECK_MODES] = {
"both",
"final-only",
};

static const int32_t mcsat_supplement_check_code[NUM_MCSAT_SUPPLEMENT_CHECK_MODES] = {
MCSAT_SUPPLEMENT_CHECK_BOTH,
MCSAT_SUPPLEMENT_CHECK_FINAL_ONLY,
};

/*
* Names of delegate solvers (in lexicographic order)
*/
Expand Down Expand Up @@ -400,7 +418,6 @@ sat_delegate_t effective_sat_delegate_mode(sat_delegate_t config_delegate, const




/****************
* FUNCTIONS *
***************/
Expand Down Expand Up @@ -456,6 +473,28 @@ static int32_t set_branching_param(const char *value, branch_t *v) {
return k;
}

/*
* Parse value as supplementary MCSAT check mode. Store the result in *v.
* - return 0 if this works
* - return -2 otherwise
*/
static int32_t set_mcsat_supplement_check_param(const char *value, mcsat_supplement_check_t *v) {
int32_t k;

k = parse_as_keyword(value, mcsat_supplement_check_modes, mcsat_supplement_check_code,
NUM_MCSAT_SUPPLEMENT_CHECK_MODES);
assert(k >= 0 || k == -1);

if (k >= 0) {
assert(MCSAT_SUPPLEMENT_CHECK_BOTH <= k && k <= MCSAT_SUPPLEMENT_CHECK_FINAL_ONLY);
*v = (mcsat_supplement_check_t) k;
k = 0;
} else {
k = -2;
}
return k;
}

/*
* Parse value as a SAT delegate mode. Store the result in *v
* - return 0 if this works
Expand Down Expand Up @@ -774,6 +813,10 @@ int32_t params_set_field(param_t *parameters, const char *key, const char *value
}
break;

case PARAM_MCSAT_SUPPLEMENT_CHECK:
r = set_mcsat_supplement_check_param(value, &parameters->mcsat_supplement_check);
break;

default:
assert(k == -1);
r = -1;
Expand Down
18 changes: 18 additions & 0 deletions src/api/search_parameters.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,17 @@ typedef enum {

#define NUM_BRANCHING_MODES 6

/*
* Supplementary MCSAT check mode (for CDCL(T) mode)
*/
typedef enum {
MCSAT_SUPPLEMENT_CHECK_BOTH,
MCSAT_SUPPLEMENT_CHECK_FINAL_ONLY,
} mcsat_supplement_check_t;

// keep in sync with mcsat_supplement_check_modes in search_parameters.c
#define NUM_MCSAT_SUPPLEMENT_CHECK_MODES 2

/*
* Optional SAT delegate for QF_BV solving.
*/
Expand Down Expand Up @@ -191,6 +202,13 @@ struct param_s {
uint32_t max_update_conflicts;
uint32_t max_extensionality;

/*
* Supplementary MCSAT checks in CDCL(T)
* - BOTH: run in propagate and final_check
* - FINAL_ONLY: run in final_check only
*/
mcsat_supplement_check_t mcsat_supplement_check;

};


Expand Down
1 change: 1 addition & 0 deletions src/api/yices_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -9089,6 +9089,7 @@ static const error_code_t intern_code2error[NUM_INTERNALIZATION_ERRORS] = {
CTX_BV_SOLVER_EXCEPTION,
MCSAT_ERROR_UNSUPPORTED_THEORY,
CTX_HIGH_ORDER_FUN_NOT_SUPPORTED,
MCSAT_ERROR_UNSUPPORTED_THEORY,
};

static inline void convert_internalization_error(int32_t code) {
Expand Down
Loading
Loading