00001 #ifndef BOOLECTOR_H_INCLUDED
00002 #define BOOLECTOR_H_INCLUDED
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 typedef struct BtorExp BtorExp;
00014 typedef struct Btor Btor;
00015
00016 #include <stdio.h>
00017
00018
00019
00020
00021
00117
00118
00119
00120
00125 #define BOOLECTOR_SAT 10
00126
00130 #define BOOLECTOR_UNSAT 20
00131
00132
00133
00134
00135
00143 Btor *boolector_new (void);
00144
00152 void boolector_enable_model_gen (Btor * btor);
00153
00161 void boolector_enable_inc_usage (Btor * btor);
00162
00171 void boolector_set_rewrite_level (Btor * btor, int rewrite_level);
00172
00182 int boolector_get_refs (Btor * btor);
00183
00191 void boolector_delete (Btor * btor);
00192
00193
00194
00195
00196
00204 BtorExp *boolector_const (Btor * btor, const char *bits);
00205
00212 BtorExp *boolector_zero (Btor * btor, int width);
00213
00219 BtorExp *boolector_false (Btor * btor);
00220
00227 BtorExp *boolector_ones (Btor * btor, int width);
00228
00234 BtorExp *boolector_true (Btor * btor);
00235
00242 BtorExp *boolector_one (Btor * btor, int width);
00243
00253 BtorExp *boolector_unsigned_int (Btor * btor, unsigned u, int width);
00254
00264 BtorExp *boolector_int (Btor * btor, int i, int width);
00265
00280 BtorExp *boolector_var (Btor * btor, int width, const char *symbol);
00281
00303 BtorExp *boolector_array (Btor * btor, int elem_width, int index_width, const char *symbol);
00304
00311 BtorExp *boolector_not (Btor * btor, BtorExp * exp);
00312
00319 BtorExp *boolector_neg (Btor * btor, BtorExp * exp);
00320
00327 BtorExp *boolector_redor (Btor * btor, BtorExp * exp);
00328
00335 BtorExp *boolector_redxor (Btor * btor, BtorExp * exp);
00336
00343 BtorExp *boolector_redand (Btor * btor, BtorExp * exp);
00344
00355 BtorExp *boolector_slice (Btor * btor, BtorExp * exp, int upper, int lower);
00356
00364 BtorExp *boolector_uext (Btor * btor, BtorExp * exp, int width);
00365
00374 BtorExp *boolector_sext (Btor * btor, BtorExp * exp, int width);
00375
00383 BtorExp *boolector_implies (Btor * btor, BtorExp * e0, BtorExp * e1);
00384
00392 BtorExp *boolector_iff (Btor * btor, BtorExp * e0, BtorExp * e1);
00393
00401 BtorExp *boolector_xor (Btor * btor, BtorExp * e0, BtorExp * e1);
00402
00410 BtorExp *boolector_xnor (Btor * btor, BtorExp * e0, BtorExp * e1);
00411
00419 BtorExp *boolector_and (Btor * btor, BtorExp * e0, BtorExp * e1);
00420
00428 BtorExp *boolector_nand (Btor * btor, BtorExp * e0, BtorExp * e1);
00429
00437 BtorExp *boolector_or (Btor * btor, BtorExp * e0, BtorExp * e1);
00438
00446 BtorExp *boolector_nor (Btor * btor, BtorExp * e0, BtorExp * e1);
00447
00455 BtorExp *boolector_eq (Btor * btor, BtorExp * e0, BtorExp * e1);
00456
00464 BtorExp *boolector_ne (Btor * btor, BtorExp * e0, BtorExp * e1);
00465
00474 BtorExp *boolector_add (Btor * btor, BtorExp * e0, BtorExp * e1);
00475
00485 BtorExp *boolector_uaddo (Btor * btor, BtorExp * e0, BtorExp * e1);
00486
00496 BtorExp *boolector_saddo (Btor * btor, BtorExp * e0, BtorExp * e1);
00497
00506 BtorExp *boolector_mul (Btor * btor, BtorExp * e0, BtorExp * e1);
00507
00518 BtorExp *boolector_umulo (Btor * btor, BtorExp * e0, BtorExp * e1);
00519
00530 BtorExp *boolector_smulo (Btor * btor, BtorExp * e0, BtorExp * e1);
00531
00540 BtorExp *boolector_ult (Btor * btor, BtorExp * e0, BtorExp * e1);
00541
00550 BtorExp *boolector_slt (Btor * btor, BtorExp * e0, BtorExp * e1);
00551
00560 BtorExp *boolector_ulte (Btor * btor, BtorExp * e0, BtorExp * e1);
00561
00570 BtorExp *boolector_slte (Btor * btor, BtorExp * e0, BtorExp * e1);
00571
00580 BtorExp *boolector_ugt (Btor * btor, BtorExp * e0, BtorExp * e1);
00581
00590 BtorExp *boolector_sgt (Btor * btor, BtorExp * e0, BtorExp * e1);
00591
00600 BtorExp *boolector_ugte (Btor * btor, BtorExp * e0, BtorExp * e1);
00601
00610 BtorExp *boolector_sgte (Btor * btor, BtorExp * e0, BtorExp * e1);
00611
00621 BtorExp *boolector_sll (Btor * btor, BtorExp * e0, BtorExp * e1);
00622
00632 BtorExp *boolector_srl (Btor * btor, BtorExp * e0, BtorExp * e1);
00633
00644 BtorExp *boolector_sra (Btor * btor, BtorExp * e0, BtorExp * e1);
00645
00655 BtorExp *boolector_rol (Btor * btor, BtorExp * e0, BtorExp * e1);
00656
00666 BtorExp *boolector_ror (Btor * btor, BtorExp * e0, BtorExp * e1);
00667
00676 BtorExp *boolector_sub (Btor * btor, BtorExp * e0, BtorExp * e1);
00677
00688 BtorExp *boolector_usubo (Btor * btor, BtorExp * e0, BtorExp * e1);
00689
00700 BtorExp *boolector_ssubo (Btor * btor, BtorExp * e0, BtorExp * e1);
00701
00716 BtorExp *boolector_udiv (Btor * btor, BtorExp * e0, BtorExp * e1);
00717
00732 BtorExp *boolector_sdiv (Btor * btor, BtorExp * e0, BtorExp * e1);
00733
00746 BtorExp *boolector_sdivo (Btor * btor, BtorExp * e0, BtorExp * e1);
00747
00761 BtorExp *boolector_urem (Btor * btor, BtorExp * e0, BtorExp * e1);
00762
00775 BtorExp *boolector_srem (Btor * btor, BtorExp * e0, BtorExp * e1);
00776
00786 BtorExp *boolector_smod (Btor * btor, BtorExp * e0, BtorExp * e1);
00787
00795 BtorExp *boolector_concat (Btor * btor, BtorExp * e0, BtorExp * e1);
00796
00805 BtorExp *boolector_read (Btor * btor, BtorExp * e_array, BtorExp * e_index);
00806
00818 BtorExp *boolector_write (Btor * btor, BtorExp * e_array, BtorExp * e_index, BtorExp * e_value);
00819
00831 BtorExp *boolector_cond (Btor * btor, BtorExp * e_cond, BtorExp * e_if, BtorExp * e_else);
00832
00839 BtorExp *boolector_inc (Btor * btor, BtorExp *exp);
00840
00847 BtorExp *boolector_dec (Btor * btor, BtorExp *exp);
00848
00855 int boolector_is_array (Btor * btor, BtorExp * exp);
00856
00864 int boolector_get_width (Btor * btor, BtorExp * exp);
00865
00872 int boolector_get_index_width (Btor * btor, BtorExp * e_array);
00873
00882 const char *boolector_get_symbol_of_var (Btor * btor, BtorExp * var);
00883
00890 BtorExp *boolector_copy (Btor * btor, BtorExp * exp);
00891
00897 void boolector_release (Btor * btor, BtorExp * exp);
00898
00909 void boolector_dump_btor (Btor * btor, FILE * file, BtorExp * exp);
00910
00919 void boolector_dump_smt (Btor * btor, FILE * file, BtorExp * exp);
00920
00928 void boolector_assert (Btor * btor, BtorExp * exp);
00929
00941 void boolector_assume (Btor * btor, BtorExp * exp);
00942
00957 int boolector_sat (Btor * btor);
00958
00973 char *boolector_bv_assignment (Btor * btor, BtorExp * exp);
00974
00999 void boolector_array_assignment (Btor * btor, BtorExp * e_array, char ***indices, char ***values, int *size);
01000
01008 void boolector_free_bv_assignment (Btor * btor, char * assignment);
01009
01010 #endif