ilang  1.1.4
ILAng: A Modeling and Verification Platform for SoCs
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Macros
chc_inv_callback_fn.h
1 // --- Hongce Zhang (hongcez@princeton.edu)
5 
6 #ifndef CHC_INV_CALLBACK_FN_H__
7 #define CHC_INV_CALLBACK_FN_H__
8 
9 #include <ilang/smt-inout/chc_inv_in.h>
10 #include <ilang/util/log.h>
11 #include <ilang/util/str_util.h>
12 
13 namespace ilang {
14 namespace smt {
15 
16 //
17 // -------------- call back function declarations ---------------- //
18 //
19 // these are just proxy that forwards calls to the SmtlibInvariantParser
20 // member functions
21 // this is just because we can not pass function objects (lambda functions)
22 // to the legacy C code
23 
24 // --- for abstract parser
25 // (forall
26 smtlib2_term proxy_push_quantifier_scope(smtlib2_parser_interface* p);
27 
28 // ) ; end of forall
29 smtlib2_term proxy_pop_quantifier_scope(smtlib2_parser_interface* p);
30 
31 // the special function dealing with the final term in a forall term
32 smtlib2_term proxy_make_forall_term(smtlib2_parser_interface* parser,
33  smtlib2_term term);
34 
35 // the special function dealing with the final term in an exists term
36 smtlib2_term proxy_make_exists_term(smtlib2_parser_interface* parser,
37  smtlib2_term term);
38 
39 // we will treat everything as an assert, although it does nothing
40 void proxy_assert_formula(smtlib2_parser_interface* parser, smtlib2_term term);
41 
42 // in the case of CVC4 output, it will be a define-fun
43 void proxy_define_func(smtlib2_parser_interface* parser, const char* name,
44  smtlib2_vector* params, smtlib2_sort sort,
45  smtlib2_term term);
46 //
47 smtlib2_sort proxy_make_sort(smtlib2_parser_interface* p, const char* sortname,
48  smtlib2_vector* index);
49 //
50 void proxy_declare_variable(smtlib2_parser_interface* p, const char* name,
51  smtlib2_sort sort);
52 
53 void proxy_declare_function(smtlib2_parser_interface* p, const char* name,
54  smtlib2_sort sort);
55 
56 void proxy_check_sat(smtlib2_parser_interface* p);
57 // --- for term parser
58 
59 smtlib2_term proxy_mk_function(smtlib2_context ctx, const char* symbol,
60  smtlib2_sort sort, smtlib2_vector* index,
61  smtlib2_vector* args);
62 
63 smtlib2_term proxy_mk_number(smtlib2_context ctx, const char* rep,
64  unsigned int width, unsigned int base);
65 // handle the operators
66 
67 #define SMTLIB2_VERILOG_DECLHANDLER(name) \
68  smtlib2_term smt_to_vlg_mk_##name(smtlib2_context ctx, const char* symbol, \
69  smtlib2_sort sort, smtlib2_vector* idx, \
70  smtlib2_vector* args)
71 
72 SMTLIB2_VERILOG_DECLHANDLER(and);
73 SMTLIB2_VERILOG_DECLHANDLER(or);
74 SMTLIB2_VERILOG_DECLHANDLER(not);
75 SMTLIB2_VERILOG_DECLHANDLER(implies);
76 SMTLIB2_VERILOG_DECLHANDLER(eq);
77 SMTLIB2_VERILOG_DECLHANDLER(ite);
78 SMTLIB2_VERILOG_DECLHANDLER (xor);
79 SMTLIB2_VERILOG_DECLHANDLER(nand);
80 
81 SMTLIB2_VERILOG_DECLHANDLER(true);
82 SMTLIB2_VERILOG_DECLHANDLER(false);
83 
84 SMTLIB2_VERILOG_DECLHANDLER(concat);
85 SMTLIB2_VERILOG_DECLHANDLER(bvnot);
86 SMTLIB2_VERILOG_DECLHANDLER(bvand);
87 SMTLIB2_VERILOG_DECLHANDLER(bvnand);
88 SMTLIB2_VERILOG_DECLHANDLER(bvor);
89 SMTLIB2_VERILOG_DECLHANDLER(bvnor);
90 SMTLIB2_VERILOG_DECLHANDLER(bvxor);
91 SMTLIB2_VERILOG_DECLHANDLER(bvxnor);
92 SMTLIB2_VERILOG_DECLHANDLER(bvult);
93 SMTLIB2_VERILOG_DECLHANDLER(bvslt);
94 SMTLIB2_VERILOG_DECLHANDLER(bvule);
95 SMTLIB2_VERILOG_DECLHANDLER(bvsle);
96 SMTLIB2_VERILOG_DECLHANDLER(bvugt);
97 SMTLIB2_VERILOG_DECLHANDLER(bvsgt);
98 SMTLIB2_VERILOG_DECLHANDLER(bvuge);
99 SMTLIB2_VERILOG_DECLHANDLER(bvsge);
100 SMTLIB2_VERILOG_DECLHANDLER(bvcomp);
101 SMTLIB2_VERILOG_DECLHANDLER(bvneg);
102 SMTLIB2_VERILOG_DECLHANDLER(bvadd);
103 SMTLIB2_VERILOG_DECLHANDLER(bvsub);
104 SMTLIB2_VERILOG_DECLHANDLER(bvmul);
105 SMTLIB2_VERILOG_DECLHANDLER(bvudiv);
106 SMTLIB2_VERILOG_DECLHANDLER(bvsdiv);
107 SMTLIB2_VERILOG_DECLHANDLER(bvsmod);
108 SMTLIB2_VERILOG_DECLHANDLER(bvurem);
109 SMTLIB2_VERILOG_DECLHANDLER(bvsrem);
110 SMTLIB2_VERILOG_DECLHANDLER(bvshl);
111 SMTLIB2_VERILOG_DECLHANDLER(bvlshr);
112 SMTLIB2_VERILOG_DECLHANDLER(bvashr);
113 SMTLIB2_VERILOG_DECLHANDLER(extract);
114 SMTLIB2_VERILOG_DECLHANDLER(bit2bool);
115 SMTLIB2_VERILOG_DECLHANDLER(repeat);
116 SMTLIB2_VERILOG_DECLHANDLER(zero_extend);
117 SMTLIB2_VERILOG_DECLHANDLER(sign_extend);
118 SMTLIB2_VERILOG_DECLHANDLER(rotate_left);
119 SMTLIB2_VERILOG_DECLHANDLER(rotate_right);
120 
121 #undef SMTLIB2_VERILOG_DECLHANDLER
122 
123 }; // namespace smt
124 }; // namespace ilang
125 
126 #endif // CHC_INV_CALLBACK_FN_H__