मान लें कि हमारे पास निम्न कोड है:
संदर्भ c; सॉल्वर एस (सी); एक्सप्र एक्स x = c.bool_const ("a"); Expr y = c.bool_const ("a"); Expr z = c.bool_const ("b"); s.add (एक्स & amp; & amp;! y); std :: अदालत के & lt; & lt; s.check (); s.reset (); s.add (एक्स & amp; & amp;! जेड); std :: अदालत के & lt; & lt; s.check (); उपरोक्त कोड का निष्पादन परिणाम 'असत बैठ' है; परिणाम से पता चलता है कि z3 एक ही चर के रूप में एक्स और वाई का संबंध है। क्या Z3 उनके नामों से चर को भेद करते हैं? और अगर मैं अलग-अलग स्थानों में एक ही चर का उपयोग करता हूं, तो क्या मैं निम्न के रूप में कोड लिख सकता हूँ:
संदर्भ c; solver (रों); फ़ंक्शन test1 () {s.add (c.bool_const ("a")); } फ़ंक्शन test2 () {s.add (! C.bool_const ("a")); } फ़ंक्शन 'test1' और 'test2' एक ही चर में हेरफेर करते हैं?
आप प्रोग्रामिंग चर x और y को होस्ट भाषा सी ++ के साथ तार्किक चर के साथ भ्रमित करते हैं। a और b के बारे में Z3 कारण। x और y दोनों तार्किक चर का प्रतिनिधित्व करते हैं एक , और उन बाधाओं के लिए x & amp; amp;! Y जोड़कर, आप जेड 3 को तथ्य a & amp; amp; a देते हैं, जो आपके बाधाएं असंतुष्ट हैं।
No comments:
Post a Comment