मेरे पास एक ही समस्या है। विशेष रूप से, मैं समारोह की जरूरत:
Z3_ast Z3_mk_bvredxnor(Z3_context ctx, Z3_ast t)
जो एक bitvector कार्य करने के लिए तर्क में दिए गए के सभी बिट्स पर एक XNOR करता है, और लंबाई 1.
के bitvector रिटर्न इस काम नहीं करेगी जब से
Z3_ast mk_bvredxnor(Z3_context ctx, Z3_ast t)
{
size_t i;
size_t s = Z3_get_bv_sort_size(ctx,Z3_get_sort(ctx,t));
Z3_ast ret = Z3_mk_extract(ctx,0,0,t);
for(i=1;i<s;i++)
ret = Z3_mk_bvxnor(ctx,ret,Z3_mk_extract(ctx,i,i,t));
return ret;
}
फिर, डिबग करने के लिए मेरी कमी एक बुरा सपना था की कोशिश कर रहा: एपीआई में मौजूद हैं, मैं का उपयोग शुरू किया।सुधार करने के लिए इस स्वागत किया जाएगा
Z3_func_decl getBvredxnorDecl(Z3_context ctx, int size)
{
static bool sizes[64]={0};
static Z3_func_decl declTab[64]={0};
if(sizes[size])
return declTab[size];
Z3_sort bv_size = Z3_mk_bv_sort(ctx, size);
Z3_sort bv1 = Z3_mk_bv_sort(ctx, 1);
stringstream buff;
buff << "bvredxnor" << size;
Z3_symbol var_name = Z3_mk_string_symbol(ctx,"X");
Z3_symbol func_name = Z3_mk_string_symbol(ctx, buff.str().c_str());
Z3_func_decl bvredxnorDecl = Z3_mk_func_decl(ctx,
func_name,
1,
&bv_size,
bv1);
declTab[size]=bvredxnorDecl;
Z3_ast b = Z3_mk_bound(ctx,0,bv_size); /* bounded variable */
Z3_ast bvredxnorApp = Z3_mk_app(ctx,bvredxnorDecl, 1, &b);
Z3_pattern pattern = Z3_mk_pattern(ctx,1,&bvredxnorApp);
Z3_ast bvredxnor_def = mk_bvredxnor(ctx,b);
Z3_ast def = Z3_mk_eq(ctx,bvredxnorApp,bvredxnor_def);
Z3_ast axiom = Z3_mk_forall(ctx,0,1,&pattern,1,&bv_size,&name,def);
Z3_assert_cnstr(ctx,axiom);
return bvredxnorDecl;
}
Z3_ast bvredxnor(Z3_context ctx, Z3_ast t)
{
int size = Z3_get_bv_sort_size(ctx,Z3_get_sort(ctx,t));
return Z3_mk_app(ctx,getBvredxnorDecl(ctx,size),1, &t);
}
कोई भी टिप्पणी:
तो मैं के साथ आया था। मतलब समय में, यह मुद्दा मैं here
यह काम कर देता है, लेकिन अपने मॉडल complexify ...
इसके अलावा मुझे आश्चर्य है कि हल करती है:
- इस के बाद से सभी प्रोग्राम के लिए किया जाता है, मैं मान लें कि MACRO_FINDER = TRUE का कोई प्रभाव नहीं होगा (क्योंकि यह एक प्रसंस्करण चरण है)।
- चूंकि एमबीक्यूआई डिफ़ॉल्ट रूप से चालू है, इसे सक्रिय करने की कोई आवश्यकता नहीं है, है ना?
विस्तृत उत्तर के लिए धन्यवाद। सार्वभौमिक क्वांटिफायर का उपयोग निश्चित रूप से एक साफ चाल है। मैं सार्वभौमिक क्वांटिफायर और अनियंत्रित कार्यों का उपयोग करने की लागत के बारे में सोचता हूं। मात्राबद्ध एलआईए के रूप में मेरी बाधाएं अब यूएफएलआईए सूत्रों को मापती हैं। क्या इस बदलाव ने ज़ेड 3 के हल करने के समय को बहुत प्रभावित किया है? – pad
हां, सूत्र 'यूएफएलआईए' में होगा, लेकिन यह यूएफएलआईए के एक निर्णायक खंड में है। यदि आप विकल्प 1 ('MACRO_FINDER = true') का उपयोग करते हैं, तो प्रदर्शन प्रभाव बहुत छोटा होना चाहिए। जेड 3 इन क्वांटिफायरों को मैक्रोज़ के रूप में पहचानेंगे, और क्वांटिफायर और सहायक अनियंत्रित कार्यों की सभी घटनाओं को खत्म कर देंगे। इस प्रकार, परिणामस्वरूप समस्या प्रीप्रोसेसिंग के बाद 'QF_LIA' में होगा। विकल्प 2 ('एमबीक्यूआई ') का प्रदर्शन प्रभाव स्पष्ट नहीं है, कुछ समस्याओं में ज़ेड 3 तेज हो सकता है, लेकिन दूसरों में बहुत धीमी है। –
धन्यवाद! बस स्पष्ट करने के लिए, मेरे मूल सूत्र एलआईए क्वांटिफायर के साथ हैं, और मैं उन्हें हल करने के लिए एलआईए क्वांटिफायर उन्मूलन का उपयोग करना चाहता हूं। विकल्प 1 मेरे लिए अधिक आकर्षक लग रहा है, और मैं जल्द ही इसके साथ प्रयोग करने जा रहा हूं। – pad