svf-tools 1.0.897 → 1.0.899

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (639) hide show
  1. package/SVF-doxygen/html/AbstractExecution_8cpp.html +1 -1
  2. package/SVF-doxygen/html/AbstractExecution_8cpp_source.html +1638 -1659
  3. package/SVF-doxygen/html/AbstractExecution_8h_source.html +49 -49
  4. package/SVF-doxygen/html/AbstractPointsToDS_8h_source.html +1 -1
  5. package/SVF-doxygen/html/AccessPath_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/AccessPath_8h_source.html +2 -2
  7. package/SVF-doxygen/html/AddressValue_8h_source.html +1 -1
  8. package/SVF-doxygen/html/AndersenPWC_8h_source.html +4 -4
  9. package/SVF-doxygen/html/AndersenSCD_8cpp_source.html +3 -3
  10. package/SVF-doxygen/html/AndersenSFR_8cpp_source.html +3 -3
  11. package/SVF-doxygen/html/AndersenStat_8cpp_source.html +1 -1
  12. package/SVF-doxygen/html/AndersenWaveDiff_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/Andersen_8cpp_source.html +5 -5
  14. package/SVF-doxygen/html/Andersen_8h_source.html +3 -3
  15. package/SVF-doxygen/html/BoundedZ3Expr_8cpp_source.html +4 -4
  16. package/SVF-doxygen/html/BoundedZ3Expr_8h_source.html +400 -380
  17. package/SVF-doxygen/html/BufOverflowChecker_8cpp_source.html +29 -28
  18. package/SVF-doxygen/html/BufOverflowChecker_8h_source.html +1 -1
  19. package/SVF-doxygen/html/CDGBuilder_8cpp_source.html +1 -1
  20. package/SVF-doxygen/html/CDGBuilder_8h_source.html +1 -1
  21. package/SVF-doxygen/html/CDG_8h_source.html +2 -2
  22. package/SVF-doxygen/html/CFGNormalizer_8cpp_source.html +3 -3
  23. package/SVF-doxygen/html/CFGNormalizer_8h_source.html +3 -3
  24. package/SVF-doxygen/html/CFGrammar_8cpp_source.html +2 -2
  25. package/SVF-doxygen/html/CFGrammar_8h_source.html +3 -3
  26. package/SVF-doxygen/html/CFLAlias_8h_source.html +2 -2
  27. package/SVF-doxygen/html/CFLGraphBuilder_8cpp_source.html +1 -1
  28. package/SVF-doxygen/html/CFLGraphBuilder_8h_source.html +1 -1
  29. package/SVF-doxygen/html/CFLSVFGBuilder_8cpp_source.html +1 -1
  30. package/SVF-doxygen/html/CFLSVFGBuilder_8h_source.html +2 -2
  31. package/SVF-doxygen/html/CFLSolver_8h_source.html +1 -1
  32. package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/CHG_8h_source.html +2 -2
  34. package/SVF-doxygen/html/CSC_8cpp_source.html +2 -2
  35. package/SVF-doxygen/html/CSC_8h_source.html +3 -3
  36. package/SVF-doxygen/html/ConditionalPT_8h_source.html +3 -3
  37. package/SVF-doxygen/html/ConsExeState_8cpp_source.html +6 -6
  38. package/SVF-doxygen/html/ConsExeState_8h_source.html +6 -6
  39. package/SVF-doxygen/html/ConsGEdge_8h_source.html +2 -2
  40. package/SVF-doxygen/html/ConsG_8cpp_source.html +14 -14
  41. package/SVF-doxygen/html/ConsG_8h_source.html +4 -4
  42. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +4 -4
  43. package/SVF-doxygen/html/ContextDDA_8h_source.html +2 -2
  44. package/SVF-doxygen/html/CoreBitVector_8h_source.html +1 -1
  45. package/SVF-doxygen/html/CppUtil_8cpp_source.html +1 -1
  46. package/SVF-doxygen/html/CppUtil_8h_source.html +1 -1
  47. package/SVF-doxygen/html/CxtStmt_8h_source.html +1 -1
  48. package/SVF-doxygen/html/DCHG_8cpp_source.html +3 -3
  49. package/SVF-doxygen/html/DCHG_8h_source.html +2 -2
  50. package/SVF-doxygen/html/DDAClient_8cpp_source.html +2 -2
  51. package/SVF-doxygen/html/DDAClient_8h_source.html +3 -3
  52. package/SVF-doxygen/html/DDAPass_8cpp_source.html +2 -2
  53. package/SVF-doxygen/html/DDAPass_8h_source.html +1 -1
  54. package/SVF-doxygen/html/DDAVFSolver_8h_source.html +2 -2
  55. package/SVF-doxygen/html/DPItem_8h_source.html +2 -2
  56. package/SVF-doxygen/html/ExeState_8cpp_source.html +1 -1
  57. package/SVF-doxygen/html/ExeState_8h_source.html +1 -1
  58. package/SVF-doxygen/html/FSMPTA_8cpp_source.html +1 -1
  59. package/SVF-doxygen/html/FSMPTA_8h_source.html +2 -2
  60. package/SVF-doxygen/html/FlowDDA_8cpp_source.html +4 -4
  61. package/SVF-doxygen/html/FlowDDA_8h_source.html +1 -1
  62. package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +2 -2
  63. package/SVF-doxygen/html/FlowSensitive_8cpp_source.html +6 -6
  64. package/SVF-doxygen/html/FlowSensitive_8h_source.html +2 -2
  65. package/SVF-doxygen/html/GeneralType_8h.html +8 -0
  66. package/SVF-doxygen/html/GeneralType_8h_source.html +110 -102
  67. package/SVF-doxygen/html/GenericGraph_8h_source.html +2 -2
  68. package/SVF-doxygen/html/GrammarBuilder_8h_source.html +1 -1
  69. package/SVF-doxygen/html/ICFGBuilder_8cpp_source.html +1 -1
  70. package/SVF-doxygen/html/ICFGBuilder_8h_source.html +1 -1
  71. package/SVF-doxygen/html/ICFGEdge_8h_source.html +3 -3
  72. package/SVF-doxygen/html/ICFGNode_8h_source.html +1 -1
  73. package/SVF-doxygen/html/ICFGSimplification_8cpp_source.html +2 -2
  74. package/SVF-doxygen/html/ICFGStat_8h_source.html +1 -1
  75. package/SVF-doxygen/html/ICFG_8cpp_source.html +3 -3
  76. package/SVF-doxygen/html/ICFG_8h_source.html +2 -2
  77. package/SVF-doxygen/html/IRGraph_8cpp_source.html +2 -2
  78. package/SVF-doxygen/html/IRGraph_8h_source.html +2 -2
  79. package/SVF-doxygen/html/IntervalExeState_8cpp_source.html +2 -2
  80. package/SVF-doxygen/html/IntervalExeState_8h_source.html +4 -4
  81. package/SVF-doxygen/html/IntervalValue_8h_source.html +863 -802
  82. package/SVF-doxygen/html/LLVMLoopAnalysis_8cpp_source.html +1 -1
  83. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +335 -316
  84. package/SVF-doxygen/html/LLVMModule_8h_source.html +11 -11
  85. package/SVF-doxygen/html/LLVMUtil_8cpp_source.html +2 -2
  86. package/SVF-doxygen/html/LLVMUtil_8h_source.html +1 -1
  87. package/SVF-doxygen/html/LeakChecker_8h_source.html +1 -1
  88. package/SVF-doxygen/html/LockAnalysis_8cpp_source.html +2 -2
  89. package/SVF-doxygen/html/LockAnalysis_8h_source.html +3 -3
  90. package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +1 -1
  91. package/SVF-doxygen/html/LockResultValidator_8h_source.html +2 -2
  92. package/SVF-doxygen/html/MHP_8cpp_source.html +3 -3
  93. package/SVF-doxygen/html/MHP_8h_source.html +3 -3
  94. package/SVF-doxygen/html/MSSAMuChi_8h_source.html +4 -4
  95. package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +1 -1
  96. package/SVF-doxygen/html/MTAAnnotator_8h_source.html +1 -1
  97. package/SVF-doxygen/html/MTAResultValidator_8cpp_source.html +5 -5
  98. package/SVF-doxygen/html/MTAStat_8cpp_source.html +1 -1
  99. package/SVF-doxygen/html/MTAStat_8h_source.html +1 -1
  100. package/SVF-doxygen/html/MTA_8cpp_source.html +1 -1
  101. package/SVF-doxygen/html/MTA_8h_source.html +1 -1
  102. package/SVF-doxygen/html/MemPartition_8h_source.html +2 -2
  103. package/SVF-doxygen/html/MemRegion_8cpp_source.html +4 -4
  104. package/SVF-doxygen/html/MemRegion_8h_source.html +5 -5
  105. package/SVF-doxygen/html/MemSSA_8cpp_source.html +4 -4
  106. package/SVF-doxygen/html/MemSSA_8h_source.html +5 -5
  107. package/SVF-doxygen/html/MutablePointsToDS_8h_source.html +1 -1
  108. package/SVF-doxygen/html/NodeIDAllocator_8cpp_source.html +2 -2
  109. package/SVF-doxygen/html/NodeIDAllocator_8h_source.html +2 -2
  110. package/SVF-doxygen/html/NumericLiteral_8h_source.html +465 -424
  111. package/SVF-doxygen/html/ObjTypeInference_8cpp_source.html +3 -3
  112. package/SVF-doxygen/html/ObjTypeInference_8h_source.html +2 -2
  113. package/SVF-doxygen/html/Options_8cpp_source.html +10 -1
  114. package/SVF-doxygen/html/Options_8h_source.html +8 -4
  115. package/SVF-doxygen/html/PAGBuilderFromFile_8cpp_source.html +195 -137
  116. package/SVF-doxygen/html/PAGBuilderFromFile_8h_source.html +3 -3
  117. package/SVF-doxygen/html/PCG_8cpp_source.html +1 -1
  118. package/SVF-doxygen/html/PCG_8h_source.html +1 -1
  119. package/SVF-doxygen/html/PTACallGraph_8cpp_source.html +1 -1
  120. package/SVF-doxygen/html/PTACallGraph_8h_source.html +4 -4
  121. package/SVF-doxygen/html/PTAStat_8cpp_source.html +1 -1
  122. package/SVF-doxygen/html/PersistentPointsToCache_8h_source.html +2 -2
  123. package/SVF-doxygen/html/PersistentPointsToDS_8h_source.html +2 -2
  124. package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +2 -2
  125. package/SVF-doxygen/html/PointerAnalysisImpl_8h_source.html +3 -3
  126. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +1 -1
  127. package/SVF-doxygen/html/PointerAnalysis_8h_source.html +5 -5
  128. package/SVF-doxygen/html/PointsTo_8cpp_source.html +3 -3
  129. package/SVF-doxygen/html/PointsTo_8h_source.html +3 -3
  130. package/SVF-doxygen/html/ProgSlice_8cpp_source.html +1 -1
  131. package/SVF-doxygen/html/ProgSlice_8h_source.html +2 -2
  132. package/SVF-doxygen/html/RelExeState_8cpp_source.html +5 -5
  133. package/SVF-doxygen/html/RelExeState_8h_source.html +6 -6
  134. package/SVF-doxygen/html/RelationSolver_8cpp.html +2 -0
  135. package/SVF-doxygen/html/RelationSolver_8cpp_source.html +386 -378
  136. package/SVF-doxygen/html/RelationSolver_8h_source.html +11 -11
  137. package/SVF-doxygen/html/SCC_8h_source.html +2 -2
  138. package/SVF-doxygen/html/SVFBugReport_8h_source.html +1 -1
  139. package/SVF-doxygen/html/SVFFileSystem_8cpp_source.html +1937 -1934
  140. package/SVF-doxygen/html/SVFFileSystem_8h.html +1 -1
  141. package/SVF-doxygen/html/SVFFileSystem_8h_source.html +59 -59
  142. package/SVF-doxygen/html/SVFGEdge_8h_source.html +2 -2
  143. package/SVF-doxygen/html/SVFGNode_8h_source.html +2 -2
  144. package/SVF-doxygen/html/SVFGOPT_8cpp_source.html +1 -1
  145. package/SVF-doxygen/html/SVFGOPT_8h_source.html +3 -3
  146. package/SVF-doxygen/html/SVFGReadWrite_8cpp_source.html +3 -3
  147. package/SVF-doxygen/html/SVFGStat_8cpp_source.html +1 -1
  148. package/SVF-doxygen/html/SVFGStat_8h_source.html +3 -3
  149. package/SVF-doxygen/html/SVFG_8cpp_source.html +2 -2
  150. package/SVF-doxygen/html/SVFG_8h_source.html +2 -2
  151. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +60 -60
  152. package/SVF-doxygen/html/SVFIR2ConsExeState_8h_source.html +9 -9
  153. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +1101 -886
  154. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +173 -154
  155. package/SVF-doxygen/html/SVFIR2Relation_8cpp_source.html +35 -35
  156. package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +17 -17
  157. package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +172 -121
  158. package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +5 -5
  159. package/SVF-doxygen/html/SVFIR_8cpp_source.html +24 -22
  160. package/SVF-doxygen/html/SVFIR_8h_source.html +55 -53
  161. package/SVF-doxygen/html/SVFLoop_8h_source.html +1 -1
  162. package/SVF-doxygen/html/SVFStat_8cpp_source.html +1 -1
  163. package/SVF-doxygen/html/SVFStat_8h_source.html +1 -1
  164. package/SVF-doxygen/html/SVFStatements_8cpp_source.html +20 -20
  165. package/SVF-doxygen/html/SVFStatements_8h_source.html +979 -955
  166. package/SVF-doxygen/html/SVFType_8cpp_source.html +1 -1
  167. package/SVF-doxygen/html/SVFType_8h_source.html +4 -4
  168. package/SVF-doxygen/html/SVFUtil_8h_source.html +2 -2
  169. package/SVF-doxygen/html/SVFValue_8cpp_source.html +1 -1
  170. package/SVF-doxygen/html/SVFValue_8h_source.html +3 -3
  171. package/SVF-doxygen/html/SVFVariables_8h_source.html +1 -1
  172. package/SVF-doxygen/html/SaberCheckerAPI_8h_source.html +1 -1
  173. package/SVF-doxygen/html/SaberCondAllocator_8cpp_source.html +10 -10
  174. package/SVF-doxygen/html/SaberCondAllocator_8h_source.html +8 -8
  175. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +2 -2
  176. package/SVF-doxygen/html/SaberSVFGBuilder_8h_source.html +2 -2
  177. package/SVF-doxygen/html/SingleAbsValue_8h_source.html +6 -6
  178. package/SVF-doxygen/html/SparseBitVector_8h_source.html +3 -3
  179. package/SVF-doxygen/html/SrcSnkDDA_8cpp_source.html +1 -1
  180. package/SVF-doxygen/html/SrcSnkDDA_8h_source.html +2 -2
  181. package/SVF-doxygen/html/Steensgaard_8cpp_source.html +2 -2
  182. package/SVF-doxygen/html/Steensgaard_8h_source.html +4 -4
  183. package/SVF-doxygen/html/SymState_8h_source.html +2 -2
  184. package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +4 -4
  185. package/SVF-doxygen/html/SymbolTableBuilder_8h_source.html +1 -1
  186. package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +3 -3
  187. package/SVF-doxygen/html/SymbolTableInfo_8h_source.html +4 -4
  188. package/SVF-doxygen/html/TCT_8cpp_source.html +3 -3
  189. package/SVF-doxygen/html/TCT_8h_source.html +4 -4
  190. package/SVF-doxygen/html/ThreadAPI_8cpp_source.html +1 -1
  191. package/SVF-doxygen/html/ThreadAPI_8h_source.html +1 -1
  192. package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +1 -1
  193. package/SVF-doxygen/html/ThreadCallGraph_8h_source.html +3 -3
  194. package/SVF-doxygen/html/VFGEdge_8h_source.html +1 -1
  195. package/SVF-doxygen/html/VFGNode_8h_source.html +12 -12
  196. package/SVF-doxygen/html/VFG_8cpp_source.html +18 -18
  197. package/SVF-doxygen/html/VFG_8h_source.html +17 -17
  198. package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
  199. package/SVF-doxygen/html/VersionedFlowSensitive_8cpp_source.html +4 -4
  200. package/SVF-doxygen/html/VersionedFlowSensitive_8h_source.html +4 -4
  201. package/SVF-doxygen/html/WPAFSSolver_8h_source.html +1 -1
  202. package/SVF-doxygen/html/WPASolver_8h_source.html +2 -2
  203. package/SVF-doxygen/html/WTO_8h_source.html +2 -2
  204. package/SVF-doxygen/html/WorkList_8h_source.html +1 -1
  205. package/SVF-doxygen/html/Z3Expr_8cpp_source.html +5 -5
  206. package/SVF-doxygen/html/Z3Expr_8h_source.html +303 -294
  207. package/SVF-doxygen/html/ae_8cpp_source.html +6 -6
  208. package/SVF-doxygen/html/classSVF_1_1AEStat.html +119 -119
  209. package/SVF-doxygen/html/classSVF_1_1AbstractExecution.html +1517 -1538
  210. package/SVF-doxygen/html/classSVF_1_1AccessPath.html +1 -1
  211. package/SVF-doxygen/html/classSVF_1_1Andersen.html +5 -5
  212. package/SVF-doxygen/html/classSVF_1_1AndersenBase.html +1 -1
  213. package/SVF-doxygen/html/classSVF_1_1AndersenSCD.html +3 -3
  214. package/SVF-doxygen/html/classSVF_1_1AndersenSFR.html +3 -3
  215. package/SVF-doxygen/html/classSVF_1_1AndersenStat.html +1 -1
  216. package/SVF-doxygen/html/classSVF_1_1AndersenWaveDiff.html +1 -1
  217. package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +2 -2
  218. package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +68 -68
  219. package/SVF-doxygen/html/classSVF_1_1BoundedZ3Expr-members.html +77 -72
  220. package/SVF-doxygen/html/classSVF_1_1BoundedZ3Expr.html +450 -294
  221. package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +51 -51
  222. package/SVF-doxygen/html/classSVF_1_1BranchVFGNode.html +4 -4
  223. package/SVF-doxygen/html/classSVF_1_1BufOverflowChecker.html +7 -7
  224. package/SVF-doxygen/html/classSVF_1_1CDGBuilder.html +1 -1
  225. package/SVF-doxygen/html/classSVF_1_1CFGNormalizer.html +3 -3
  226. package/SVF-doxygen/html/classSVF_1_1CFLSVFGBuilder.html +1 -1
  227. package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +1 -1
  228. package/SVF-doxygen/html/classSVF_1_1CSC.html +2 -2
  229. package/SVF-doxygen/html/classSVF_1_1CallPE.html +35 -35
  230. package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +97 -97
  231. package/SVF-doxygen/html/classSVF_1_1CondPTAImpl.html +1 -1
  232. package/SVF-doxygen/html/classSVF_1_1ConsExeState.html +5 -5
  233. package/SVF-doxygen/html/classSVF_1_1ConstraintGraph.html +13 -13
  234. package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +5 -5
  235. package/SVF-doxygen/html/classSVF_1_1CopyStmt-members.html +48 -33
  236. package/SVF-doxygen/html/classSVF_1_1CopyStmt.html +206 -65
  237. package/SVF-doxygen/html/classSVF_1_1DCHGraph.html +3 -3
  238. package/SVF-doxygen/html/classSVF_1_1DDAPass.html +2 -2
  239. package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +1 -1
  240. package/SVF-doxygen/html/classSVF_1_1ExeState.html +1 -1
  241. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +3 -3
  242. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +5 -5
  243. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +2 -2
  244. package/SVF-doxygen/html/classSVF_1_1ForkJoinAnalysis.html +3 -3
  245. package/SVF-doxygen/html/classSVF_1_1FunptrDDAClient.html +1 -1
  246. package/SVF-doxygen/html/classSVF_1_1GenericGraphReader.html +1 -1
  247. package/SVF-doxygen/html/classSVF_1_1GepStmt.html +56 -56
  248. package/SVF-doxygen/html/classSVF_1_1GrammarBase.html +1 -1
  249. package/SVF-doxygen/html/classSVF_1_1ICFG.html +3 -3
  250. package/SVF-doxygen/html/classSVF_1_1ICFGBuilder.html +1 -1
  251. package/SVF-doxygen/html/classSVF_1_1ICFGWriter.html +11 -11
  252. package/SVF-doxygen/html/classSVF_1_1IntervalESBase.html +2 -2
  253. package/SVF-doxygen/html/classSVF_1_1IntervalValue-members.html +40 -35
  254. package/SVF-doxygen/html/classSVF_1_1IntervalValue.html +512 -307
  255. package/SVF-doxygen/html/classSVF_1_1LLVMLoopAnalysis.html +1 -1
  256. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +331 -312
  257. package/SVF-doxygen/html/classSVF_1_1LoadStmt.html +19 -19
  258. package/SVF-doxygen/html/classSVF_1_1LockAnalysis.html +2 -2
  259. package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +1 -1
  260. package/SVF-doxygen/html/classSVF_1_1MHP.html +2 -2
  261. package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +3 -3
  262. package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +1 -1
  263. package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +4 -4
  264. package/SVF-doxygen/html/classSVF_1_1MTASVFGBuilder.html +1 -1
  265. package/SVF-doxygen/html/classSVF_1_1MTAStat.html +1 -1
  266. package/SVF-doxygen/html/classSVF_1_1MemSSA.html +4 -4
  267. package/SVF-doxygen/html/classSVF_1_1MultiOpndStmt.html +48 -48
  268. package/SVF-doxygen/html/classSVF_1_1MutableDFPTData.html +1 -1
  269. package/SVF-doxygen/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +1 -1
  270. package/SVF-doxygen/html/classSVF_1_1NumericLiteral-members.html +50 -43
  271. package/SVF-doxygen/html/classSVF_1_1NumericLiteral.html +574 -343
  272. package/SVF-doxygen/html/classSVF_1_1ObjTypeInference.html +3 -3
  273. package/SVF-doxygen/html/classSVF_1_1Options-members.html +129 -128
  274. package/SVF-doxygen/html/classSVF_1_1Options.html +26 -0
  275. package/SVF-doxygen/html/classSVF_1_1PAGBuilderFromFile.html +204 -135
  276. package/SVF-doxygen/html/classSVF_1_1PCG.html +1 -1
  277. package/SVF-doxygen/html/classSVF_1_1POCRSolver.html +1 -1
  278. package/SVF-doxygen/html/classSVF_1_1PTACallGraph.html +1 -1
  279. package/SVF-doxygen/html/classSVF_1_1PTAStat.html +1 -1
  280. package/SVF-doxygen/html/classSVF_1_1PersistentDFPTData.html +1 -1
  281. package/SVF-doxygen/html/classSVF_1_1PersistentDiffPTData.html +1 -1
  282. package/SVF-doxygen/html/classSVF_1_1PersistentPTData.html +1 -1
  283. package/SVF-doxygen/html/classSVF_1_1PersistentPointsToCache.html +1 -1
  284. package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +46 -46
  285. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +1 -1
  286. package/SVF-doxygen/html/classSVF_1_1PointsTo.html +1 -1
  287. package/SVF-doxygen/html/classSVF_1_1ProgSlice.html +1 -1
  288. package/SVF-doxygen/html/classSVF_1_1RaceResultValidator.html +1 -1
  289. package/SVF-doxygen/html/classSVF_1_1ReaderIDToObjMap.html +2 -2
  290. package/SVF-doxygen/html/classSVF_1_1ReaderPtrPool.html +2 -2
  291. package/SVF-doxygen/html/classSVF_1_1RelExeState.html +6 -6
  292. package/SVF-doxygen/html/classSVF_1_1RelationSolver-members.html +1 -1
  293. package/SVF-doxygen/html/classSVF_1_1RelationSolver.html +362 -358
  294. package/SVF-doxygen/html/classSVF_1_1RetPE.html +35 -35
  295. package/SVF-doxygen/html/classSVF_1_1SVFG.html +3 -3
  296. package/SVF-doxygen/html/classSVF_1_1SVFGOPT.html +1 -1
  297. package/SVF-doxygen/html/classSVF_1_1SVFGStat.html +1 -1
  298. package/SVF-doxygen/html/classSVF_1_1SVFIR-members.html +1 -1
  299. package/SVF-doxygen/html/classSVF_1_1SVFIR.html +32 -25
  300. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +51 -51
  301. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState-members.html +49 -40
  302. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +1346 -909
  303. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder-members.html +62 -61
  304. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +211 -131
  305. package/SVF-doxygen/html/classSVF_1_1SVFIRReader.html +1122 -1121
  306. package/SVF-doxygen/html/classSVF_1_1SVFIRWriter.html +429 -427
  307. package/SVF-doxygen/html/classSVF_1_1SVFLoopAndDomInfo.html +1 -1
  308. package/SVF-doxygen/html/classSVF_1_1SVFModuleReader.html +1 -1
  309. package/SVF-doxygen/html/classSVF_1_1SVFModuleWriter.html +23 -23
  310. package/SVF-doxygen/html/classSVF_1_1SVFStat.html +1 -1
  311. package/SVF-doxygen/html/classSVF_1_1SaberCondAllocator.html +14 -14
  312. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
  313. package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +38 -38
  314. package/SVF-doxygen/html/classSVF_1_1SingleAbsValue-members.html +96 -91
  315. package/SVF-doxygen/html/classSVF_1_1SingleAbsValue.html +19 -5
  316. package/SVF-doxygen/html/classSVF_1_1SrcSnkDDA.html +1 -1
  317. package/SVF-doxygen/html/classSVF_1_1StInfo.html +1 -1
  318. package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +2 -2
  319. package/SVF-doxygen/html/classSVF_1_1StoreStmt.html +17 -17
  320. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +4 -4
  321. package/SVF-doxygen/html/classSVF_1_1SymbolTableInfo.html +3 -3
  322. package/SVF-doxygen/html/classSVF_1_1SymbolTableInfoReader.html +1 -1
  323. package/SVF-doxygen/html/classSVF_1_1TCT.html +4 -4
  324. package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +22 -22
  325. package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +21 -21
  326. package/SVF-doxygen/html/classSVF_1_1ThreadAPI.html +1 -1
  327. package/SVF-doxygen/html/classSVF_1_1ThreadCallGraph.html +1 -1
  328. package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +44 -44
  329. package/SVF-doxygen/html/classSVF_1_1VFG.html +17 -17
  330. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitive.html +4 -4
  331. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +3 -3
  332. package/SVF-doxygen/html/classSVF_1_1WPAFSSolver.html +2 -2
  333. package/SVF-doxygen/html/classSVF_1_1WPAMinimumSolver.html +2 -2
  334. package/SVF-doxygen/html/classSVF_1_1WPASCCSolver.html +2 -2
  335. package/SVF-doxygen/html/classSVF_1_1WPASolver.html +1 -1
  336. package/SVF-doxygen/html/classSVF_1_1Z3Expr-members.html +2 -2
  337. package/SVF-doxygen/html/classSVF_1_1Z3Expr.html +227 -221
  338. package/SVF-doxygen/html/classSymblicAbstractionTest.html +6 -6
  339. package/SVF-doxygen/html/fastcluster__dm_8cpp_8inc_source.html +1 -1
  340. package/SVF-doxygen/html/functions_a.html +11 -8
  341. package/SVF-doxygen/html/functions_b.html +8 -5
  342. package/SVF-doxygen/html/functions_c.html +23 -14
  343. package/SVF-doxygen/html/functions_e.html +1 -1
  344. package/SVF-doxygen/html/functions_enum.html +3 -0
  345. package/SVF-doxygen/html/functions_eval_b.html +3 -0
  346. package/SVF-doxygen/html/functions_eval_c.html +3 -0
  347. package/SVF-doxygen/html/functions_eval_f.html +9 -0
  348. package/SVF-doxygen/html/functions_eval_i.html +3 -0
  349. package/SVF-doxygen/html/functions_eval_p.html +3 -0
  350. package/SVF-doxygen/html/functions_eval_s.html +6 -0
  351. package/SVF-doxygen/html/functions_eval_t.html +3 -0
  352. package/SVF-doxygen/html/functions_eval_u.html +3 -0
  353. package/SVF-doxygen/html/functions_eval_z.html +79 -0
  354. package/SVF-doxygen/html/functions_f.html +21 -12
  355. package/SVF-doxygen/html/functions_func.html +2 -2
  356. package/SVF-doxygen/html/functions_func_b.html +3 -3
  357. package/SVF-doxygen/html/functions_func_g.html +47 -12
  358. package/SVF-doxygen/html/functions_func_i.html +19 -9
  359. package/SVF-doxygen/html/functions_func_n.html +1 -1
  360. package/SVF-doxygen/html/functions_func_p.html +1 -1
  361. package/SVF-doxygen/html/functions_func_z.html +1 -1
  362. package/SVF-doxygen/html/functions_g.html +54 -19
  363. package/SVF-doxygen/html/functions_i.html +18 -5
  364. package/SVF-doxygen/html/functions_l.html +3 -3
  365. package/SVF-doxygen/html/functions_o.html +15 -15
  366. package/SVF-doxygen/html/functions_p.html +28 -29
  367. package/SVF-doxygen/html/functions_r.html +1 -1
  368. package/SVF-doxygen/html/functions_s.html +24 -16
  369. package/SVF-doxygen/html/functions_t.html +7 -4
  370. package/SVF-doxygen/html/functions_u.html +6 -3
  371. package/SVF-doxygen/html/functions_v.html +4 -6
  372. package/SVF-doxygen/html/functions_vars_a.html +3 -0
  373. package/SVF-doxygen/html/functions_vars_c.html +3 -0
  374. package/SVF-doxygen/html/functions_w.html +13 -7
  375. package/SVF-doxygen/html/functions_z.html +4 -1
  376. package/SVF-doxygen/html/menudata.js +2 -1
  377. package/SVF-doxygen/html/namespaceSVF.html +689 -617
  378. package/SVF-doxygen/html/namespaceSVF_1_1LLVMUtil.html +1 -1
  379. package/SVF-doxygen/html/namespaceSVF_1_1SVFUtil.html +1 -1
  380. package/SVF-doxygen/html/namespaceSVF_1_1cppUtil.html +1 -1
  381. package/SVF-doxygen/html/namespacemembers_s.html +6 -0
  382. package/SVF-doxygen/html/namespacemembers_type_s.html +6 -0
  383. package/SVF-doxygen/html/namespacemembers_type_u.html +6 -0
  384. package/SVF-doxygen/html/namespacemembers_u.html +6 -0
  385. package/SVF-doxygen/html/search/all_1.js +135 -134
  386. package/SVF-doxygen/html/search/all_10.js +326 -325
  387. package/SVF-doxygen/html/search/all_11.js +226 -226
  388. package/SVF-doxygen/html/search/all_12.js +574 -570
  389. package/SVF-doxygen/html/search/all_13.js +208 -207
  390. package/SVF-doxygen/html/search/all_14.js +73 -70
  391. package/SVF-doxygen/html/search/all_15.js +176 -176
  392. package/SVF-doxygen/html/search/all_16.js +77 -77
  393. package/SVF-doxygen/html/search/all_17.js +1 -1
  394. package/SVF-doxygen/html/search/all_18.js +1 -1
  395. package/SVF-doxygen/html/search/all_19.js +27 -26
  396. package/SVF-doxygen/html/search/all_1a.js +179 -179
  397. package/SVF-doxygen/html/search/all_2.js +182 -181
  398. package/SVF-doxygen/html/search/all_3.js +642 -640
  399. package/SVF-doxygen/html/search/all_4.js +236 -236
  400. package/SVF-doxygen/html/search/all_5.js +126 -126
  401. package/SVF-doxygen/html/search/all_6.js +235 -232
  402. package/SVF-doxygen/html/search/all_7.js +1056 -1047
  403. package/SVF-doxygen/html/search/all_8.js +215 -215
  404. package/SVF-doxygen/html/search/all_9.js +632 -629
  405. package/SVF-doxygen/html/search/all_a.js +46 -46
  406. package/SVF-doxygen/html/search/all_b.js +26 -26
  407. package/SVF-doxygen/html/search/all_c.js +115 -115
  408. package/SVF-doxygen/html/search/all_d.js +204 -204
  409. package/SVF-doxygen/html/search/all_e.js +209 -209
  410. package/SVF-doxygen/html/search/all_f.js +122 -122
  411. package/SVF-doxygen/html/search/classes_0.js +28 -28
  412. package/SVF-doxygen/html/search/classes_1.js +11 -11
  413. package/SVF-doxygen/html/search/classes_10.js +74 -74
  414. package/SVF-doxygen/html/search/classes_11.js +14 -14
  415. package/SVF-doxygen/html/search/classes_12.js +2 -2
  416. package/SVF-doxygen/html/search/classes_13.js +10 -10
  417. package/SVF-doxygen/html/search/classes_14.js +19 -19
  418. package/SVF-doxygen/html/search/classes_15.js +1 -1
  419. package/SVF-doxygen/html/search/classes_2.js +73 -73
  420. package/SVF-doxygen/html/search/classes_3.js +35 -35
  421. package/SVF-doxygen/html/search/classes_4.js +8 -8
  422. package/SVF-doxygen/html/search/classes_5.js +28 -28
  423. package/SVF-doxygen/html/search/classes_6.js +98 -98
  424. package/SVF-doxygen/html/search/classes_7.js +38 -38
  425. package/SVF-doxygen/html/search/classes_8.js +59 -59
  426. package/SVF-doxygen/html/search/classes_9.js +1 -1
  427. package/SVF-doxygen/html/search/classes_a.js +12 -12
  428. package/SVF-doxygen/html/search/classes_b.js +29 -29
  429. package/SVF-doxygen/html/search/classes_c.js +6 -6
  430. package/SVF-doxygen/html/search/classes_d.js +19 -19
  431. package/SVF-doxygen/html/search/classes_e.js +36 -36
  432. package/SVF-doxygen/html/search/classes_f.js +25 -25
  433. package/SVF-doxygen/html/search/defines_0.js +3 -3
  434. package/SVF-doxygen/html/search/defines_1.js +3 -3
  435. package/SVF-doxygen/html/search/defines_10.js +2 -2
  436. package/SVF-doxygen/html/search/defines_2.js +30 -30
  437. package/SVF-doxygen/html/search/defines_3.js +20 -20
  438. package/SVF-doxygen/html/search/defines_4.js +3 -3
  439. package/SVF-doxygen/html/search/defines_5.js +4 -4
  440. package/SVF-doxygen/html/search/defines_6.js +2 -2
  441. package/SVF-doxygen/html/search/defines_7.js +5 -5
  442. package/SVF-doxygen/html/search/defines_8.js +11 -11
  443. package/SVF-doxygen/html/search/defines_9.js +9 -9
  444. package/SVF-doxygen/html/search/defines_a.js +2 -2
  445. package/SVF-doxygen/html/search/defines_b.js +1 -1
  446. package/SVF-doxygen/html/search/defines_c.js +4 -4
  447. package/SVF-doxygen/html/search/defines_d.js +2 -2
  448. package/SVF-doxygen/html/search/defines_e.js +8 -8
  449. package/SVF-doxygen/html/search/defines_f.js +4 -4
  450. package/SVF-doxygen/html/search/enums_0.js +4 -4
  451. package/SVF-doxygen/html/search/enums_1.js +2 -2
  452. package/SVF-doxygen/html/search/enums_10.js +1 -1
  453. package/SVF-doxygen/html/search/enums_11.js +1 -1
  454. package/SVF-doxygen/html/search/enums_2.js +9 -8
  455. package/SVF-doxygen/html/search/enums_3.js +1 -1
  456. package/SVF-doxygen/html/search/enums_4.js +4 -4
  457. package/SVF-doxygen/html/search/enums_5.js +1 -1
  458. package/SVF-doxygen/html/search/enums_6.js +2 -2
  459. package/SVF-doxygen/html/search/enums_7.js +2 -2
  460. package/SVF-doxygen/html/search/enums_8.js +4 -4
  461. package/SVF-doxygen/html/search/enums_9.js +1 -1
  462. package/SVF-doxygen/html/search/enums_a.js +1 -1
  463. package/SVF-doxygen/html/search/enums_b.js +7 -7
  464. package/SVF-doxygen/html/search/enums_c.js +1 -1
  465. package/SVF-doxygen/html/search/enums_d.js +4 -4
  466. package/SVF-doxygen/html/search/enums_e.js +2 -2
  467. package/SVF-doxygen/html/search/enums_f.js +4 -4
  468. package/SVF-doxygen/html/search/enumvalues_0.js +15 -15
  469. package/SVF-doxygen/html/search/enumvalues_1.js +16 -15
  470. package/SVF-doxygen/html/search/enumvalues_10.js +36 -35
  471. package/SVF-doxygen/html/search/enumvalues_11.js +5 -4
  472. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  473. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  474. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  475. package/SVF-doxygen/html/search/enumvalues_15.js +4 -3
  476. package/SVF-doxygen/html/search/enumvalues_2.js +37 -36
  477. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  478. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  479. package/SVF-doxygen/html/search/enumvalues_5.js +50 -47
  480. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  481. package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
  482. package/SVF-doxygen/html/search/enumvalues_8.js +24 -23
  483. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  484. package/SVF-doxygen/html/search/enumvalues_a.js +17 -17
  485. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  486. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  487. package/SVF-doxygen/html/search/enumvalues_d.js +19 -18
  488. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  489. package/SVF-doxygen/html/search/enumvalues_f.js +49 -47
  490. package/SVF-doxygen/html/search/files_0.js +16 -16
  491. package/SVF-doxygen/html/search/files_1.js +9 -9
  492. package/SVF-doxygen/html/search/files_10.js +8 -8
  493. package/SVF-doxygen/html/search/files_11.js +8 -8
  494. package/SVF-doxygen/html/search/files_12.js +2 -2
  495. package/SVF-doxygen/html/search/files_2.js +53 -53
  496. package/SVF-doxygen/html/search/files_3.js +14 -14
  497. package/SVF-doxygen/html/search/files_4.js +5 -5
  498. package/SVF-doxygen/html/search/files_5.js +13 -13
  499. package/SVF-doxygen/html/search/files_6.js +10 -10
  500. package/SVF-doxygen/html/search/files_7.js +17 -17
  501. package/SVF-doxygen/html/search/files_8.js +13 -13
  502. package/SVF-doxygen/html/search/files_9.js +18 -18
  503. package/SVF-doxygen/html/search/files_a.js +3 -3
  504. package/SVF-doxygen/html/search/files_b.js +4 -4
  505. package/SVF-doxygen/html/search/files_c.js +20 -20
  506. package/SVF-doxygen/html/search/files_d.js +4 -4
  507. package/SVF-doxygen/html/search/files_e.js +62 -62
  508. package/SVF-doxygen/html/search/files_f.js +8 -8
  509. package/SVF-doxygen/html/search/functions_0.js +13 -13
  510. package/SVF-doxygen/html/search/functions_1.js +368 -368
  511. package/SVF-doxygen/html/search/functions_10.js +140 -140
  512. package/SVF-doxygen/html/search/functions_11.js +140 -140
  513. package/SVF-doxygen/html/search/functions_12.js +299 -299
  514. package/SVF-doxygen/html/search/functions_13.js +73 -73
  515. package/SVF-doxygen/html/search/functions_14.js +41 -41
  516. package/SVF-doxygen/html/search/functions_15.js +72 -72
  517. package/SVF-doxygen/html/search/functions_16.js +38 -38
  518. package/SVF-doxygen/html/search/functions_17.js +3 -3
  519. package/SVF-doxygen/html/search/functions_18.js +179 -179
  520. package/SVF-doxygen/html/search/functions_2.js +94 -94
  521. package/SVF-doxygen/html/search/functions_3.js +261 -261
  522. package/SVF-doxygen/html/search/functions_4.js +85 -85
  523. package/SVF-doxygen/html/search/functions_5.js +57 -57
  524. package/SVF-doxygen/html/search/functions_6.js +65 -65
  525. package/SVF-doxygen/html/search/functions_7.js +872 -863
  526. package/SVF-doxygen/html/search/functions_8.js +162 -162
  527. package/SVF-doxygen/html/search/functions_9.js +440 -438
  528. package/SVF-doxygen/html/search/functions_a.js +30 -30
  529. package/SVF-doxygen/html/search/functions_b.js +2 -2
  530. package/SVF-doxygen/html/search/functions_c.js +25 -25
  531. package/SVF-doxygen/html/search/functions_d.js +82 -82
  532. package/SVF-doxygen/html/search/functions_e.js +36 -36
  533. package/SVF-doxygen/html/search/functions_f.js +58 -58
  534. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  535. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  536. package/SVF-doxygen/html/search/related_0.js +4 -4
  537. package/SVF-doxygen/html/search/related_1.js +2 -2
  538. package/SVF-doxygen/html/search/related_2.js +2 -2
  539. package/SVF-doxygen/html/search/related_3.js +2 -2
  540. package/SVF-doxygen/html/search/related_4.js +2 -2
  541. package/SVF-doxygen/html/search/related_5.js +1 -1
  542. package/SVF-doxygen/html/search/related_6.js +2 -2
  543. package/SVF-doxygen/html/search/related_7.js +5 -5
  544. package/SVF-doxygen/html/search/related_8.js +2 -2
  545. package/SVF-doxygen/html/search/related_9.js +4 -4
  546. package/SVF-doxygen/html/search/related_a.js +19 -19
  547. package/SVF-doxygen/html/search/related_b.js +4 -4
  548. package/SVF-doxygen/html/search/related_c.js +2 -2
  549. package/SVF-doxygen/html/search/related_d.js +12 -12
  550. package/SVF-doxygen/html/search/related_e.js +2 -2
  551. package/SVF-doxygen/html/search/related_f.js +2 -2
  552. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  553. package/SVF-doxygen/html/search/typedefs_1.js +27 -27
  554. package/SVF-doxygen/html/search/typedefs_10.js +65 -63
  555. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  556. package/SVF-doxygen/html/search/typedefs_12.js +13 -11
  557. package/SVF-doxygen/html/search/typedefs_13.js +40 -40
  558. package/SVF-doxygen/html/search/typedefs_14.js +11 -11
  559. package/SVF-doxygen/html/search/typedefs_2.js +125 -125
  560. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  561. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  562. package/SVF-doxygen/html/search/typedefs_5.js +42 -42
  563. package/SVF-doxygen/html/search/typedefs_6.js +54 -54
  564. package/SVF-doxygen/html/search/typedefs_7.js +47 -47
  565. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  566. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  567. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  568. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  569. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  570. package/SVF-doxygen/html/search/typedefs_d.js +15 -15
  571. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  572. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  573. package/SVF-doxygen/html/search/variables_0.js +177 -177
  574. package/SVF-doxygen/html/search/variables_1.js +77 -76
  575. package/SVF-doxygen/html/search/variables_10.js +98 -98
  576. package/SVF-doxygen/html/search/variables_11.js +46 -46
  577. package/SVF-doxygen/html/search/variables_12.js +93 -93
  578. package/SVF-doxygen/html/search/variables_13.js +76 -76
  579. package/SVF-doxygen/html/search/variables_14.js +14 -14
  580. package/SVF-doxygen/html/search/variables_15.js +49 -49
  581. package/SVF-doxygen/html/search/variables_16.js +11 -11
  582. package/SVF-doxygen/html/search/variables_17.js +1 -1
  583. package/SVF-doxygen/html/search/variables_18.js +17 -17
  584. package/SVF-doxygen/html/search/variables_2.js +40 -40
  585. package/SVF-doxygen/html/search/variables_3.js +143 -142
  586. package/SVF-doxygen/html/search/variables_4.js +51 -51
  587. package/SVF-doxygen/html/search/variables_5.js +39 -39
  588. package/SVF-doxygen/html/search/variables_6.js +66 -66
  589. package/SVF-doxygen/html/search/variables_7.js +34 -34
  590. package/SVF-doxygen/html/search/variables_8.js +8 -8
  591. package/SVF-doxygen/html/search/variables_9.js +79 -79
  592. package/SVF-doxygen/html/search/variables_a.js +4 -4
  593. package/SVF-doxygen/html/search/variables_b.js +10 -10
  594. package/SVF-doxygen/html/search/variables_c.js +45 -45
  595. package/SVF-doxygen/html/search/variables_d.js +57 -57
  596. package/SVF-doxygen/html/search/variables_e.js +123 -123
  597. package/SVF-doxygen/html/search/variables_f.js +31 -31
  598. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
  599. package/SVF-doxygen/html/structSVF_1_1Hash.html +6 -6
  600. package/SVF-doxygen/html/structSVF_1_1Hash_3_01std_1_1pair_3_01S_00_01T_01_4_01_4.html +12 -12
  601. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1AccessPath_01_4.html +1 -1
  602. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1BoundedZ3Expr_01_4.html +6 -6
  603. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1CondStdSet_3_01Element_01_4_01_4.html +1 -1
  604. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1CxtDPItem_01_4.html +1 -1
  605. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1CxtStmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
  606. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1NumericLiteral_01_4.html +5 -5
  607. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SingleAbsValue_01_4.html +1 -1
  608. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SparseBitVector_3_01N_01_4_01_4.html +1 -1
  609. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1StmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
  610. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1SymState_01_4.html +1 -1
  611. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1Z3Expr_01_4.html +6 -6
  612. package/SVF-doxygen/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4.html +1 -1
  613. package/SVF-doxygen/html/svf-ex_8cpp.html +21 -21
  614. package/SVF-doxygen/html/svf-ex_8cpp_source.html +21 -21
  615. package/SVF-doxygen/html/svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html +2 -2
  616. package/SVF-doxygen/html/svf_2include_2MTA_2MTAResultValidator_8h_source.html +3 -3
  617. package/package.json +1 -1
  618. package/svf/include/AE/Core/BoundedZ3Expr.h +33 -20
  619. package/svf/include/AE/Core/IntervalValue.h +57 -5
  620. package/svf/include/AE/Core/NumericLiteral.h +31 -1
  621. package/svf/include/AE/Core/RelationSolver.h +1 -1
  622. package/svf/include/AE/Svfexe/SVFIR2ItvExeState.h +10 -0
  623. package/svf/include/SVFIR/SVFIR.h +2 -1
  624. package/svf/include/SVFIR/SVFStatements.h +12 -2
  625. package/svf/include/Util/GeneralType.h +4 -0
  626. package/svf/include/Util/Options.h +3 -0
  627. package/svf/include/Util/Z3Expr.h +9 -2
  628. package/svf/lib/AE/Core/RelationSolver.cpp +11 -6
  629. package/svf/lib/AE/Svfexe/AbstractExecution.cpp +13 -34
  630. package/svf/lib/AE/Svfexe/BufOverflowChecker.cpp +6 -6
  631. package/svf/lib/AE/Svfexe/SVFIR2ItvExeState.cpp +217 -23
  632. package/svf/lib/SVFIR/PAGBuilderFromFile.cpp +62 -3
  633. package/svf/lib/SVFIR/SVFFileSystem.cpp +4 -1
  634. package/svf/lib/SVFIR/SVFIR.cpp +3 -3
  635. package/svf/lib/Util/Options.cpp +8 -0
  636. package/svf-llvm/include/SVF-LLVM/SVFIRBuilder.h +39 -3
  637. package/svf-llvm/lib/LLVMModule.cpp +21 -2
  638. package/svf-llvm/lib/SVFIRBuilder.cpp +7 -7
  639. package/svf-llvm/lib/SVFIRExtAPI.cpp +3 -3
@@ -98,404 +98,412 @@ $(function() {
98
98
  <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> *</span></div>
99
99
  <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div>
100
100
  <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="RelationSolver_8h.html">AE/Core/RelationSolver.h</a>&quot;</span></div>
101
- <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div>
102
- <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div>
101
+ <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;cmath&gt;</span></div>
102
+ <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div>
103
103
  <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
104
- <div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1"> 33</a></span>&#160;<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">RelationSolver::bilateral</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> &amp;domain, <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi,</div>
105
- <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> descend_check)</div>
106
- <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;{</div>
107
- <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> upper = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a33fd0e4a654dd4f5b7762b0088e11674">top</a>();</div>
108
- <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> lower = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a839e8ee927c1cad86aef3059b41ba2eb">bottom</a>();</div>
109
- <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> meets_in_a_row = 0;</div>
110
- <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; z3::solver solver = <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Z3Expr::getSolver</a>();</div>
111
- <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; z3::params <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>());</div>
112
- <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>.set(<span class="stringliteral">&quot;:timeout&quot;</span>, <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(600)); <span class="comment">// in milliseconds</span></div>
113
- <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; solver.set(<a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>);</div>
114
- <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> consequence;</div>
115
- <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
116
- <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">while</span> (lower != upper)</div>
117
- <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
118
- <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (meets_in_a_row == descend_check)</div>
119
- <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
120
- <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; consequence = lower;</div>
121
- <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
122
- <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">else</span></div>
123
- <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div>
124
- <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; consequence = abstract_consequence(lower, upper, domain);</div>
125
- <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div>
126
- <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> rhs = !(gamma_hat(consequence, domain));</div>
127
- <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; solver.push();</div>
128
- <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; solver.add(phi.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>() &amp;&amp; rhs.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>());</div>
129
- <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, double&gt;</a> solution;</div>
130
- <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; z3::check_result checkRes = solver.check();</div>
131
- <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">if</span> (checkRes == z3::sat)</div>
132
- <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div>
133
- <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; z3::model m = solver.get_model();</div>
134
- <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; m.size(); i++)</div>
135
- <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div>
136
- <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; z3::func_decl v = m[i];</div>
137
- <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">// assert(v.arity() == 0);</span></div>
138
- <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">if</span> (v.arity() != 0)</div>
139
- <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">continue</span>;</div>
140
- <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; solution.emplace(std::stoi(v.name().str()),</div>
141
- <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; m.get_const_interp(v).get_numeral_int());</div>
142
- <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div>
143
- <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
144
- <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
145
- <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span> (solution.find(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) == solution.end())</div>
146
- <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div>
147
- <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; solution.emplace(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, 0);</div>
148
- <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
149
- <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
150
- <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; solver.pop();</div>
151
- <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> newLower = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a839e8ee927c1cad86aef3059b41ba2eb">bottom</a>();</div>
152
- <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; newLower.<a class="code" href="classSVF_1_1IntervalESBase.html#adc0db607e4c0f117760535df67b91fbd">joinWith</a>(lower);</div>
153
- <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> rhs = beta(solution, domain);</div>
154
- <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; newLower.<a class="code" href="classSVF_1_1IntervalESBase.html#adc0db607e4c0f117760535df67b91fbd">joinWith</a>(rhs);</div>
155
- <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; lower = newLower;</div>
156
- <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; meets_in_a_row = 0;</div>
157
- <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
158
- <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">else</span> </div>
159
- <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div>
160
- <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; solver.pop();</div>
161
- <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span> (checkRes == z3::unknown)</div>
162
- <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div>
163
- <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (solver.reason_unknown() == <span class="stringliteral">&quot;timeout&quot;</span>)</div>
164
- <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> upper;</div>
165
- <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
166
- <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> newUpper = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a33fd0e4a654dd4f5b7762b0088e11674">top</a>();</div>
167
- <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; newUpper.<a class="code" href="classSVF_1_1IntervalESBase.html#a92a8531c7f12cc6f9117596aa5e534b6">meetWith</a>(upper);</div>
168
- <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; newUpper.<a class="code" href="classSVF_1_1IntervalESBase.html#a92a8531c7f12cc6f9117596aa5e534b6">meetWith</a>(consequence);</div>
169
- <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; upper = newUpper;</div>
170
- <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; meets_in_a_row += 1;</div>
171
- <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div>
172
- <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
173
- <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">return</span> upper;</div>
174
- <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div>
175
- <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
176
- <div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf"> 111</a></span>&#160;<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">RelationSolver::RSY</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; domain, <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi)</div>
177
- <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;{</div>
178
- <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> lower = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a839e8ee927c1cad86aef3059b41ba2eb">bottom</a>();</div>
179
- <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; z3::solver&amp; solver = <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Z3Expr::getSolver</a>();</div>
180
- <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; z3::params <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>());</div>
181
- <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>.set(<span class="stringliteral">&quot;:timeout&quot;</span>, <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(600)); <span class="comment">// in milliseconds</span></div>
182
- <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; solver.set(<a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>);</div>
183
- <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">while</span> (1)</div>
184
- <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div>
185
- <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> rhs = !(gamma_hat(lower, domain));</div>
186
- <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; solver.push();</div>
187
- <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; solver.add(phi.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>() &amp;&amp; rhs.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>());</div>
188
- <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, double&gt;</a> solution;</div>
189
- <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; z3::check_result checkRes = solver.check();</div>
190
- <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span> (checkRes == z3::sat)</div>
191
- <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div>
192
- <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; z3::model m = solver.get_model();</div>
193
- <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; m.size(); i++)</div>
194
- <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div>
195
- <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; z3::func_decl v = m[i];</div>
196
- <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span> (v.arity() != 0)</div>
197
- <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">continue</span>;</div>
198
- <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
199
- <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; solution.emplace(std::stoi(v.name().str()),</div>
200
- <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; m.get_const_interp(v).get_numeral_int());</div>
201
- <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
202
- <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
203
- <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div>
204
- <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span> (solution.find(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) == solution.end())</div>
205
- <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div>
206
- <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; solution.emplace(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, 0);</div>
207
- <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
208
- <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div>
209
- <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; solver.pop();</div>
210
- <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> newLower = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a839e8ee927c1cad86aef3059b41ba2eb">bottom</a>();</div>
211
- <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; newLower.<a class="code" href="classSVF_1_1IntervalESBase.html#adc0db607e4c0f117760535df67b91fbd">joinWith</a>(lower);</div>
212
- <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; newLower.<a class="code" href="classSVF_1_1IntervalESBase.html#adc0db607e4c0f117760535df67b91fbd">joinWith</a>(beta(solution, domain));</div>
213
- <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; lower = newLower;</div>
214
- <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
215
- <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">else</span> </div>
216
- <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div>
217
- <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; solver.pop();</div>
218
- <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">if</span> (checkRes == z3::unknown)</div>
219
- <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div>
220
- <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span> (solver.reason_unknown() == <span class="stringliteral">&quot;timeout&quot;</span>)</div>
221
- <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a33fd0e4a654dd4f5b7762b0088e11674">top</a>();</div>
222
- <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div>
223
- <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">break</span>;</div>
224
- <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
225
- <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div>
226
- <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">return</span> lower;</div>
227
- <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;}</div>
228
- <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
229
- <div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a012d18ece2c66ba6e784ae9578171369"> 167</a></span>&#160;<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSVF_1_1RelationSolver.html#a012d18ece2c66ba6e784ae9578171369">RelationSolver::abstract_consequence</a>(</div>
230
- <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; lower, <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; upper, <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; domain)<span class="keyword"> const</span></div>
231
- <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="keyword"></span>{</div>
232
- <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">/*Returns the &quot;abstract consequence&quot; of lower and upper.</span></div>
233
- <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment"></span> </div>
234
- <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="comment"> The abstract consequence must be a superset of lower and *NOT* a</span></div>
235
- <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="comment"> superset of upper.</span></div>
104
+ <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div>
105
+ <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div>
106
+ <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
107
+ <div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1"> 36</a></span>&#160;<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">RelationSolver::bilateral</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> &amp;domain, <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi,</div>
108
+ <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> descend_check)</div>
109
+ <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;{</div>
110
+ <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> upper = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a33fd0e4a654dd4f5b7762b0088e11674">top</a>();</div>
111
+ <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> lower = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a839e8ee927c1cad86aef3059b41ba2eb">bottom</a>();</div>
112
+ <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> meets_in_a_row = 0;</div>
113
+ <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; z3::solver solver = <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Z3Expr::getSolver</a>();</div>
114
+ <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; z3::params <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>());</div>
115
+ <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>.set(<span class="stringliteral">&quot;:timeout&quot;</span>, <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(600)); <span class="comment">// in milliseconds</span></div>
116
+ <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; solver.set(<a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>);</div>
117
+ <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> consequence;</div>
118
+ <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
119
+ <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">while</span> (lower != upper)</div>
120
+ <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
121
+ <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">if</span> (meets_in_a_row == descend_check)</div>
122
+ <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div>
123
+ <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; consequence = lower;</div>
124
+ <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div>
125
+ <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span></div>
126
+ <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div>
127
+ <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; consequence = abstract_consequence(lower, upper, domain);</div>
128
+ <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div>
129
+ <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> rhs = !(gamma_hat(consequence, domain));</div>
130
+ <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; solver.push();</div>
131
+ <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; solver.add(phi.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>() &amp;&amp; rhs.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>());</div>
132
+ <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, s32_t&gt;</a> solution;</div>
133
+ <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; z3::check_result checkRes = solver.check();</div>
134
+ <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span> (checkRes == z3::sat)</div>
135
+ <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div>
136
+ <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; z3::model m = solver.get_model();</div>
137
+ <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; m.size(); i++)</div>
138
+ <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div>
139
+ <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; z3::func_decl v = m[i];</div>
140
+ <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="comment">// assert(v.arity() == 0);</span></div>
141
+ <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span> (v.arity() != 0)</div>
142
+ <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">continue</span>;</div>
143
+ <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; solution.emplace(std::stoi(v.name().str()),</div>
144
+ <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; m.get_const_interp(v).get_numeral_int());</div>
145
+ <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div>
146
+ <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
147
+ <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div>
148
+ <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span> (solution.find(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) == solution.end())</div>
149
+ <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; {</div>
150
+ <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; solution.emplace(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, 0);</div>
151
+ <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
152
+ <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div>
153
+ <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; solver.pop();</div>
154
+ <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> newLower = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a839e8ee927c1cad86aef3059b41ba2eb">bottom</a>();</div>
155
+ <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; newLower.<a class="code" href="classSVF_1_1IntervalESBase.html#adc0db607e4c0f117760535df67b91fbd">joinWith</a>(lower);</div>
156
+ <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> rhs = beta(solution, domain);</div>
157
+ <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; newLower.<a class="code" href="classSVF_1_1IntervalESBase.html#adc0db607e4c0f117760535df67b91fbd">joinWith</a>(rhs);</div>
158
+ <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; lower = newLower;</div>
159
+ <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; meets_in_a_row = 0;</div>
160
+ <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
161
+ <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">else</span> </div>
162
+ <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div>
163
+ <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; solver.pop();</div>
164
+ <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (checkRes == z3::unknown)</div>
165
+ <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; {</div>
166
+ <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (solver.reason_unknown() == <span class="stringliteral">&quot;timeout&quot;</span>)</div>
167
+ <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> upper;</div>
168
+ <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
169
+ <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> newUpper = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a33fd0e4a654dd4f5b7762b0088e11674">top</a>();</div>
170
+ <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; newUpper.<a class="code" href="classSVF_1_1IntervalESBase.html#a92a8531c7f12cc6f9117596aa5e534b6">meetWith</a>(upper);</div>
171
+ <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; newUpper.<a class="code" href="classSVF_1_1IntervalESBase.html#a92a8531c7f12cc6f9117596aa5e534b6">meetWith</a>(consequence);</div>
172
+ <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; upper = newUpper;</div>
173
+ <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; meets_in_a_row += 1;</div>
174
+ <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
175
+ <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div>
176
+ <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> upper;</div>
177
+ <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;}</div>
178
+ <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
179
+ <div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf"> 114</a></span>&#160;<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">RelationSolver::RSY</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; domain, <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi)</div>
180
+ <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;{</div>
181
+ <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> lower = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a839e8ee927c1cad86aef3059b41ba2eb">bottom</a>();</div>
182
+ <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; z3::solver&amp; solver = <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Z3Expr::getSolver</a>();</div>
183
+ <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; z3::params <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>());</div>
184
+ <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>.set(<span class="stringliteral">&quot;:timeout&quot;</span>, <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(600)); <span class="comment">// in milliseconds</span></div>
185
+ <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; solver.set(<a class="code" href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a>);</div>
186
+ <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">while</span> (1)</div>
187
+ <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div>
188
+ <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> rhs = !(gamma_hat(lower, domain));</div>
189
+ <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; solver.push();</div>
190
+ <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; solver.add(phi.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>() &amp;&amp; rhs.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>());</div>
191
+ <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, s32_t&gt;</a> solution;</div>
192
+ <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; z3::check_result checkRes = solver.check();</div>
193
+ <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">if</span> (checkRes == z3::sat)</div>
194
+ <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div>
195
+ <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; z3::model m = solver.get_model();</div>
196
+ <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; m.size(); i++)</div>
197
+ <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div>
198
+ <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; z3::func_decl v = m[i];</div>
199
+ <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (v.arity() != 0)</div>
200
+ <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">continue</span>;</div>
201
+ <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
202
+ <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; solution.emplace(std::stoi(v.name().str()),</div>
203
+ <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; m.get_const_interp(v).get_numeral_int());</div>
204
+ <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
205
+ <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
206
+ <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {</div>
207
+ <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">if</span> (solution.find(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) == solution.end())</div>
208
+ <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; {</div>
209
+ <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; solution.emplace(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, 0);</div>
210
+ <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
211
+ <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
212
+ <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; solver.pop();</div>
213
+ <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> newLower = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a839e8ee927c1cad86aef3059b41ba2eb">bottom</a>();</div>
214
+ <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; newLower.<a class="code" href="classSVF_1_1IntervalESBase.html#adc0db607e4c0f117760535df67b91fbd">joinWith</a>(lower);</div>
215
+ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; newLower.<a class="code" href="classSVF_1_1IntervalESBase.html#adc0db607e4c0f117760535df67b91fbd">joinWith</a>(beta(solution, domain));</div>
216
+ <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; lower = newLower;</div>
217
+ <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div>
218
+ <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">else</span> </div>
219
+ <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div>
220
+ <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; solver.pop();</div>
221
+ <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span> (checkRes == z3::unknown)</div>
222
+ <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div>
223
+ <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">if</span> (solver.reason_unknown() == <span class="stringliteral">&quot;timeout&quot;</span>)</div>
224
+ <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">return</span> domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a33fd0e4a654dd4f5b7762b0088e11674">top</a>();</div>
225
+ <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div>
226
+ <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">break</span>;</div>
227
+ <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; }</div>
228
+ <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div>
229
+ <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">return</span> lower;</div>
230
+ <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;}</div>
231
+ <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
232
+ <div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a012d18ece2c66ba6e784ae9578171369"> 170</a></span>&#160;<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSVF_1_1RelationSolver.html#a012d18ece2c66ba6e784ae9578171369">RelationSolver::abstract_consequence</a>(</div>
233
+ <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; lower, <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; upper, <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; domain)<span class="keyword"> const</span></div>
234
+ <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="keyword"></span>{</div>
235
+ <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">/*Returns the &quot;abstract consequence&quot; of lower and upper.</span></div>
236
236
  <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="comment"></span> </div>
237
- <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment"> Note that this is a fairly &quot;simple&quot; abstract consequence, in that it</span></div>
238
- <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment"> sets only one variable to a non-top interval. This improves performance</span></div>
239
- <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment"> of the SMT solver in many cases. In certain cases, other choices for</span></div>
240
- <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"> the abstract consequence will lead to better algorithm performance.*/</span></div>
241
- <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
242
- <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>().begin();</div>
243
- <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; it != domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>().end(); ++it)</div>
244
- <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {</div>
245
- <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> proposed = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a33fd0e4a654dd4f5b7762b0088e11674">top</a>(); </div>
246
- <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; proposed.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[it-&gt;first] = lower.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>.at(it-&gt;first);</div>
247
- <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">if</span> (!(proposed &gt;= upper)) </div>
248
- <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div>
249
- <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> proposed; </div>
250
- <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div>
251
- <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div>
252
- <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">return</span> lower; </div>
253
- <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;}</div>
254
- <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
255
- <div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a"> 196</a></span>&#160;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> <a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">RelationSolver::gamma_hat</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; exeState)<span class="keyword"> const</span></div>
256
- <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="keyword"></span>{</div>
257
- <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> res(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().bool_val(<span class="keyword">true</span>));</div>
258
- <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : exeState.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
259
- <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div>
260
- <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.isBottom())</div>
261
- <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().bool_val(<span class="keyword">false</span>);</div>
262
- <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.isTop())</div>
263
- <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">continue</span>;</div>
264
- <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> v = toZ3Expr(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first);</div>
265
- <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; res = (res &amp;&amp; v &gt;= (int)<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb().getNumeral() &amp;&amp;</div>
266
- <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; v &lt;= (int)<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub().getNumeral()).simplify();</div>
267
- <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div>
268
- <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">return</span> res;</div>
269
- <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;}</div>
270
- <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; </div>
271
- <div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a93a034bb18001abc278d6986706024af"> 212</a></span>&#160;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> <a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">RelationSolver::gamma_hat</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; alpha,</div>
272
- <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; exeState)<span class="keyword"> const</span></div>
273
- <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="keyword"></span>{</div>
274
- <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> res(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().bool_val(<span class="keyword">true</span>));</div>
275
- <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : exeState.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
276
- <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; {</div>
277
- <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> interval = alpha.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first);</div>
278
- <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">if</span> (interval.<a class="code" href="classSVF_1_1IntervalValue.html#af8be90fc1b61103187908dce4ba68001">isBottom</a>())</div>
279
- <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().bool_val(<span class="keyword">false</span>);</div>
280
- <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">if</span> (interval.<a class="code" href="classSVF_1_1IntervalValue.html#a977128211266b93e58e298a7ac29a059">isTop</a>())</div>
281
- <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">continue</span>;</div>
282
- <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> v = toZ3Expr(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first);</div>
283
- <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; res = (res &amp;&amp; v &gt;= (int)interval.<a class="code" href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() &amp;&amp;</div>
284
- <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; v &lt;= (int)interval.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>()).simplify();</div>
285
- <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; }</div>
286
- <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> res;</div>
287
- <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;}</div>
288
- <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
289
- <div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#aff6752947e73cd0559b5a340547c9016"> 230</a></span>&#160;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> <a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">RelationSolver::gamma_hat</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; exeState)<span class="keyword"> const</span></div>
290
- <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="keyword"></span>{</div>
291
- <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keyword">auto</span> it = exeState.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>().find(<span class="keywordtype">id</span>);</div>
292
- <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; assert(it != exeState.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>().end() &amp;&amp; <span class="stringliteral">&quot;id not in varToVal?&quot;</span>);</div>
293
- <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> v = toZ3Expr(<span class="keywordtype">id</span>);</div>
294
- <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// Z3Expr v = Z3Expr::getContext().int_const(std::to_string(id).c_str());</span></div>
295
- <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> res = (v &gt;= (int)it-&gt;second.lb().getNumeral() &amp;&amp;</div>
296
- <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; v &lt;= (int)it-&gt;second.ub().getNumeral());</div>
297
- <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">return</span> res;</div>
298
- <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;}</div>
299
- <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
300
- <div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#af0c2db68bffbb223b845ca307b86c10a"> 241</a></span>&#160;<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSVF_1_1RelationSolver.html#af0c2db68bffbb223b845ca307b86c10a">RelationSolver::beta</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, double&gt;</a>&amp; sigma,</div>
301
- <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; exeState)<span class="keyword"> const</span></div>
302
- <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="keyword"></span>{</div>
303
- <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> res;</div>
304
- <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : exeState.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
305
- <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div>
306
- <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; res.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(</div>
307
- <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; sigma.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first), sigma.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first));</div>
308
- <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div>
309
- <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">return</span> res;</div>
310
- <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;}</div>
311
- <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; </div>
312
- <div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#af00aee55faf18a994dc5558ca4bf4932"> 253</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1RelationSolver.html#af00aee55faf18a994dc5558ca4bf4932">RelationSolver::updateMap</a>(<a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; map, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> key, <span class="keyword">const</span> <a class="code" href="classSVF_1_1NumericLiteral.html">NumericLiteral</a>&amp; value)</div>
313
- <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;{</div>
314
- <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">auto</span> it = map.find(key);</div>
315
- <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span> (it == map.end())</div>
316
- <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; {</div>
317
- <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; map.emplace(key, value);</div>
318
- <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; }</div>
319
- <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">else</span></div>
320
- <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div>
321
- <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; it-&gt;second = value;</div>
322
- <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; }</div>
323
- <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;}</div>
324
- <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; </div>
325
- <div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3"> 266</a></span>&#160;<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">RelationSolver::BS</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; domain, <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> &amp;phi)</div>
326
- <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;{</div>
327
- <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> bias = 0;</div>
328
- <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordtype">int</span> infinity = (INT32_MAX) - 1;</div>
329
- <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="comment">// int infinity = 20;</span></div>
330
- <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a> ret;</div>
331
- <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a> low_values, high_values;</div>
332
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> new_phi = phi;</div>
333
- <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>: domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
334
- <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
335
- <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; updateMap(ret, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub());</div>
336
- <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb().is_minus_infinity())</div>
337
- <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; updateMap(low_values, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, -infinity);</div>
338
- <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">else</span></div>
339
- <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; updateMap(low_values, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb());</div>
340
- <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub().is_plus_infinity())</div>
341
- <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; updateMap(high_values, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, infinity);</div>
342
- <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">else</span></div>
343
- <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; updateMap(high_values, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub());</div>
344
- <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first &gt; bias)</div>
345
- <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; bias = <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first + 1;</div>
346
- <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; }</div>
347
- <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>: domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
348
- <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div>
349
- <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> reverse_key = <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first + bias;</div>
350
- <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; updateMap(ret, reverse_key, -<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb());</div>
351
- <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub().is_plus_infinity())</div>
352
- <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; updateMap(low_values, reverse_key, -infinity);</div>
353
- <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">else</span></div>
354
- <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; updateMap(low_values, reverse_key, -<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub());</div>
355
- <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb().is_minus_infinity())</div>
356
- <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; updateMap(high_values, reverse_key, infinity);</div>
357
- <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">else</span></div>
358
- <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; updateMap(high_values, reverse_key, -<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb());</div>
359
- <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; new_phi = (new_phi &amp;&amp; (toZ3Expr(reverse_key) == -1 * toZ3Expr(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first)));</div>
360
- <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div>
361
- <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; BoxedOptSolver(new_phi.<a class="code" href="classSVF_1_1Z3Expr.html#afb3478316592a395c6d473791b5a0981">simplify</a>(), ret, low_values, high_values);</div>
362
- <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> retInv;</div>
363
- <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>: ret)</div>
364
- <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div>
365
- <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first &gt;= bias)</div>
366
- <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; {</div>
367
- <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.equal(infinity))</div>
368
- <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; retInv.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first - bias].setLb(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().int_const(<span class="stringliteral">&quot;-oo&quot;</span>));</div>
369
- <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">else</span></div>
370
- <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; retInv.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first - bias].setLb(-<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second);</div>
371
- <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div>
372
- <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">else</span></div>
373
- <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div>
374
- <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.equal(infinity))</div>
375
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; retInv.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first].setUb(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().int_const(<span class="stringliteral">&quot;+oo&quot;</span>));</div>
376
- <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">else</span></div>
377
- <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; retInv.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first].setUb(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second);</div>
378
- <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div>
379
- <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div>
380
- <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">return</span> retInv;</div>
381
- <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;}</div>
382
- <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; </div>
383
- <div class="line"><a name="l00331"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#aaae7ac9ed7d0e17f39948c37b867ada9"> 331</a></span>&#160;<a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a> <a class="code" href="classSVF_1_1RelationSolver.html#aaae7ac9ed7d0e17f39948c37b867ada9">RelationSolver::BoxedOptSolver</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi, <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; ret, <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; low_values, <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; high_values)</div>
384
- <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;{</div>
385
- <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, Z3Expr&gt;</a> L_phi;</div>
386
- <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a> mid_values;</div>
387
- <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">while</span> (1)</div>
388
- <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div>
389
- <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; L_phi.clear();</div>
390
- <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : ret)</div>
391
- <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div>
392
- <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> v = toZ3Expr(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first);</div>
393
- <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">if</span> (low_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first).leq(high_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first)))</div>
394
- <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div>
395
- <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="classSVF_1_1NumericLiteral.html">NumericLiteral</a> mid = (low_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) + (high_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) - low_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first)) / 2);</div>
396
- <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; updateMap(mid_values, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, mid);</div>
397
- <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> expr = ((int)mid.<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() &lt;= v &amp;&amp; v &lt;= (int)high_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first).getNumeral());</div>
398
- <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; L_phi[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first] = expr;</div>
399
- <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div>
400
- <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div>
401
- <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">if</span> (L_phi.empty())</div>
402
- <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">break</span>;</div>
403
- <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">else</span></div>
404
- <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; decide_cpa_ext(phi, L_phi, mid_values, ret, low_values, high_values);</div>
405
- <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div>
406
- <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">return</span> ret;</div>
407
- <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;}</div>
408
- <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; </div>
409
- <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; </div>
410
- <div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a7ace50c6e53a79f0e329badb63570f92"> 359</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1RelationSolver.html#a7ace50c6e53a79f0e329badb63570f92">RelationSolver::decide_cpa_ext</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi,</div>
411
- <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, Z3Expr&gt;</a>&amp; L_phi,</div>
412
- <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; mid_values,</div>
413
- <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; ret,</div>
414
- <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; low_values,</div>
415
- <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; high_values)</div>
416
- <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;{</div>
417
- <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">while</span> (1)</div>
418
- <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div>
419
- <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> join_expr(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().bool_val(<span class="keyword">false</span>));</div>
420
- <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : L_phi)</div>
421
- <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; join_expr = (join_expr || <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second);</div>
422
- <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; join_expr = (join_expr &amp;&amp; phi).simplify();</div>
423
- <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; z3::solver&amp; solver = <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Z3Expr::getSolver</a>();</div>
424
- <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; solver.push();</div>
425
- <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; solver.add(join_expr.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>());</div>
426
- <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, double&gt;</a> solution;</div>
427
- <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; z3::check_result checkRes = solver.check();</div>
428
- <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span> (checkRes == z3::sat)</div>
429
- <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div>
430
- <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; z3::model m = solver.get_model();</div>
431
- <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; solver.pop();</div>
432
- <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span> &amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : L_phi)</div>
433
- <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; {</div>
434
- <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <span class="keywordtype">id</span> = <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first;</div>
435
- <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordtype">int</span> value = m.eval(toZ3Expr(<span class="keywordtype">id</span>).getExpr()).get_numeral_int();</div>
436
- <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="comment">// int value = m.eval(Z3Expr::getContext().int_const(std::to_string(id).c_str())).get_numeral_int();</span></div>
437
- <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment"></span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> expr = (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second &amp;&amp; toZ3Expr(<span class="keywordtype">id</span>) == value);</div>
438
- <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; solver.push();</div>
439
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; solver.add(expr.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>());</div>
440
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="comment">// solution meets phi_id</span></div>
441
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">if</span> (solver.check() == z3::sat)</div>
442
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div>
443
- <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; updateMap(ret, <span class="keywordtype">id</span>, <a class="code" href="classSVF_1_1NumericLiteral.html">NumericLiteral</a>(value));</div>
444
- <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; updateMap(low_values, <span class="keywordtype">id</span>, ret.at(<span class="keywordtype">id</span>) + 1);</div>
445
- <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; </div>
446
- <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="classSVF_1_1NumericLiteral.html">NumericLiteral</a> mid = (low_values.at(<span class="keywordtype">id</span>) + high_values.at(<span class="keywordtype">id</span>) + 1) / 2;</div>
447
- <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; updateMap(mid_values, <span class="keywordtype">id</span>, mid);</div>
448
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> v = toZ3Expr(<span class="keywordtype">id</span>);</div>
449
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="comment">// Z3Expr v = Z3Expr::getContext().int_const(std::to_string(id).c_str());</span></div>
450
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> expr = ((int)mid_values.at(<span class="keywordtype">id</span>).getNumeral() &lt;= v &amp;&amp; v &lt;= (int)high_values.at(<span class="keywordtype">id</span>).getNumeral());</div>
451
- <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; L_phi[id] = expr;</div>
452
- <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; }</div>
453
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; solver.pop();</div>
454
- <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div>
455
- <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div>
456
- <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">else</span> </div>
457
- <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; {</div>
458
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; solver.pop();</div>
459
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : L_phi)</div>
460
- <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; high_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) = mid_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) - 1;</div>
461
- <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">return</span>;</div>
462
- <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div>
463
- <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; }</div>
464
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; </div>
465
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;}</div>
237
+ <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment"> The abstract consequence must be a superset of lower and *NOT* a</span></div>
238
+ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment"> superset of upper.</span></div>
239
+ <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment"></span> </div>
240
+ <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"> Note that this is a fairly &quot;simple&quot; abstract consequence, in that it</span></div>
241
+ <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment"> sets only one variable to a non-top interval. This improves performance</span></div>
242
+ <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment"> of the SMT solver in many cases. In certain cases, other choices for</span></div>
243
+ <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment"> the abstract consequence will lead to better algorithm performance.*/</span></div>
244
+ <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
245
+ <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>().begin();</div>
246
+ <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; it != domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>().end(); ++it)</div>
247
+ <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div>
248
+ <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> proposed = domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a33fd0e4a654dd4f5b7762b0088e11674">top</a>(); </div>
249
+ <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; proposed.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[it-&gt;first] = lower.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>.at(it-&gt;first);</div>
250
+ <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span> (!(proposed &gt;= upper)) </div>
251
+ <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div>
252
+ <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">return</span> proposed; </div>
253
+ <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
254
+ <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
255
+ <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">return</span> lower; </div>
256
+ <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div>
257
+ <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
258
+ <div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a"> 199</a></span>&#160;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> <a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">RelationSolver::gamma_hat</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; exeState)<span class="keyword"> const</span></div>
259
+ <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="keyword"></span>{</div>
260
+ <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> res(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().bool_val(<span class="keyword">true</span>));</div>
261
+ <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : exeState.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
262
+ <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div>
263
+ <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.isBottom())</div>
264
+ <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().bool_val(<span class="keyword">false</span>);</div>
265
+ <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.isTop())</div>
266
+ <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">continue</span>;</div>
267
+ <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> v = toZ3Expr(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first);</div>
268
+ <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; res = (res &amp;&amp; v &gt;= (int)<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb().getNumeral() &amp;&amp;</div>
269
+ <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; v &lt;= (int)<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub().getNumeral()).simplify();</div>
270
+ <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div>
271
+ <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span> res;</div>
272
+ <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;}</div>
273
+ <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
274
+ <div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a93a034bb18001abc278d6986706024af"> 215</a></span>&#160;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> <a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">RelationSolver::gamma_hat</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; alpha,</div>
275
+ <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; exeState)<span class="keyword"> const</span></div>
276
+ <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="keyword"></span>{</div>
277
+ <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> res(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().bool_val(<span class="keyword">true</span>));</div>
278
+ <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : exeState.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
279
+ <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
280
+ <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a> interval = alpha.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first);</div>
281
+ <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> (interval.<a class="code" href="classSVF_1_1IntervalValue.html#af8be90fc1b61103187908dce4ba68001">isBottom</a>())</div>
282
+ <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().bool_val(<span class="keyword">false</span>);</div>
283
+ <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">if</span> (interval.<a class="code" href="classSVF_1_1IntervalValue.html#a977128211266b93e58e298a7ac29a059">isTop</a>())</div>
284
+ <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">continue</span>;</div>
285
+ <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> v = toZ3Expr(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first);</div>
286
+ <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; res = (res &amp;&amp; v &gt;= (int)interval.<a class="code" href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">lb</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>() &amp;&amp;</div>
287
+ <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; v &lt;= (int)interval.<a class="code" href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">ub</a>().<a class="code" href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">getNumeral</a>()).simplify();</div>
288
+ <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
289
+ <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> res;</div>
290
+ <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;}</div>
291
+ <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; </div>
292
+ <div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#aff6752947e73cd0559b5a340547c9016"> 233</a></span>&#160;<a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> <a class="code" href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">RelationSolver::gamma_hat</a>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; exeState)<span class="keyword"> const</span></div>
293
+ <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="keyword"></span>{</div>
294
+ <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">auto</span> it = exeState.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>().find(<span class="keywordtype">id</span>);</div>
295
+ <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; assert(it != exeState.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>().end() &amp;&amp; <span class="stringliteral">&quot;id not in varToVal?&quot;</span>);</div>
296
+ <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> v = toZ3Expr(<span class="keywordtype">id</span>);</div>
297
+ <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">// Z3Expr v = Z3Expr::getContext().int_const(std::to_string(id).c_str());</span></div>
298
+ <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> res = (v &gt;= (int)it-&gt;second.lb().getNumeral() &amp;&amp;</div>
299
+ <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; v &lt;= (int)it-&gt;second.ub().getNumeral());</div>
300
+ <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span> res;</div>
301
+ <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;}</div>
302
+ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; </div>
303
+ <div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#ac4abc5e1eb3b638710572c958162c22c"> 244</a></span>&#160;<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSVF_1_1RelationSolver.html#ac4abc5e1eb3b638710572c958162c22c">RelationSolver::beta</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, s32_t&gt;</a>&amp; sigma,</div>
304
+ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; exeState)<span class="keyword"> const</span></div>
305
+ <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="keyword"></span>{</div>
306
+ <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> res;</div>
307
+ <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : exeState.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
308
+ <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; {</div>
309
+ <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; res.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first] = <a class="code" href="classSVF_1_1IntervalValue.html">IntervalValue</a>(</div>
310
+ <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; sigma.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first), sigma.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first));</div>
311
+ <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div>
312
+ <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">return</span> res;</div>
313
+ <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;}</div>
314
+ <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; </div>
315
+ <div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#af00aee55faf18a994dc5558ca4bf4932"> 256</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1RelationSolver.html#af00aee55faf18a994dc5558ca4bf4932">RelationSolver::updateMap</a>(<a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; map, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> key, <span class="keyword">const</span> <a class="code" href="classSVF_1_1NumericLiteral.html">NumericLiteral</a>&amp; value)</div>
316
+ <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;{</div>
317
+ <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">auto</span> it = map.find(key);</div>
318
+ <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">if</span> (it == map.end())</div>
319
+ <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; {</div>
320
+ <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; map.emplace(key, value);</div>
321
+ <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div>
322
+ <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">else</span></div>
323
+ <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; {</div>
324
+ <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; it-&gt;second = value;</div>
325
+ <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div>
326
+ <div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;}</div>
327
+ <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
328
+ <div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3"> 269</a></span>&#160;<a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> <a class="code" href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">RelationSolver::BS</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a>&amp; domain, <span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> &amp;phi)</div>
329
+ <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;{</div>
330
+ <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> bias = 0;</div>
331
+ <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> infinity = INT32_MAX - 1;</div>
332
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; </div>
333
+ <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// int infinity = (INT32_MAX) - 1;</span></div>
334
+ <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// int infinity = 20;</span></div>
335
+ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a> ret;</div>
336
+ <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a> low_values, high_values;</div>
337
+ <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> new_phi = phi;</div>
338
+ <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>: domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
339
+ <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div>
340
+ <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; updateMap(ret, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub());</div>
341
+ <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb().is_minus_infinity())</div>
342
+ <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; updateMap(low_values, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, -infinity);</div>
343
+ <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">else</span></div>
344
+ <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; updateMap(low_values, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb());</div>
345
+ <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub().is_plus_infinity())</div>
346
+ <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; updateMap(high_values, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, infinity);</div>
347
+ <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">else</span></div>
348
+ <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; updateMap(high_values, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub());</div>
349
+ <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first &gt; bias)</div>
350
+ <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; bias = <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first + 1;</div>
351
+ <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div>
352
+ <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>: domain.<a class="code" href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">getVarToVal</a>())</div>
353
+ <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div>
354
+ <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> reverse_key = <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first + bias;</div>
355
+ <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; updateMap(ret, reverse_key, -<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb());</div>
356
+ <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub().is_plus_infinity())</div>
357
+ <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; updateMap(low_values, reverse_key, -infinity);</div>
358
+ <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">else</span></div>
359
+ <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; updateMap(low_values, reverse_key, -<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.ub());</div>
360
+ <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb().is_minus_infinity())</div>
361
+ <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; updateMap(high_values, reverse_key, infinity);</div>
362
+ <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">else</span></div>
363
+ <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; updateMap(high_values, reverse_key, -<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.lb());</div>
364
+ <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; new_phi = (new_phi &amp;&amp; (toZ3Expr(reverse_key) == -1 * toZ3Expr(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first)));</div>
365
+ <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div>
366
+ <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; BoxedOptSolver(new_phi.<a class="code" href="classSVF_1_1Z3Expr.html#afb3478316592a395c6d473791b5a0981">simplify</a>(), ret, low_values, high_values);</div>
367
+ <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="classSVF_1_1IntervalESBase.html">IntervalESBase</a> retInv;</div>
368
+ <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>: ret)</div>
369
+ <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; {</div>
370
+ <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first &gt;= bias)</div>
371
+ <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; {</div>
372
+ <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.equal(infinity))</div>
373
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; retInv.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first - bias].setLb(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().int_const(<span class="stringliteral">&quot;-oo&quot;</span>));</div>
374
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">else</span></div>
375
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; retInv.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first - bias].setLb(-<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second);</div>
376
+ <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div>
377
+ <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">else</span></div>
378
+ <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; {</div>
379
+ <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second.equal(infinity))</div>
380
+ <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; retInv.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first].setUb(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().int_const(<span class="stringliteral">&quot;+oo&quot;</span>));</div>
381
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">else</span></div>
382
+ <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; retInv.<a class="code" href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">_varToItvVal</a>[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first].setUb(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second);</div>
383
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div>
384
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div>
385
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> retInv;</div>
386
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;}</div>
387
+ <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; </div>
388
+ <div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#aaae7ac9ed7d0e17f39948c37b867ada9"> 336</a></span>&#160;<a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a> <a class="code" href="classSVF_1_1RelationSolver.html#aaae7ac9ed7d0e17f39948c37b867ada9">RelationSolver::BoxedOptSolver</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi, <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; ret, <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; low_values, <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; high_values)</div>
389
+ <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;{</div>
390
+ <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, Z3Expr&gt;</a> L_phi;</div>
391
+ <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a> mid_values;</div>
392
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">while</span> (1)</div>
393
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; {</div>
394
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; L_phi.clear();</div>
395
+ <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : ret)</div>
396
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; {</div>
397
+ <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> v = toZ3Expr(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first);</div>
398
+ <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">if</span> (low_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first).leq(high_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first)))</div>
399
+ <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div>
400
+ <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="classSVF_1_1NumericLiteral.html">NumericLiteral</a> mid = (low_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) + (high_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) - low_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first)) / 2);</div>
401
+ <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; updateMap(mid_values, <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first, mid);</div>
402
+ <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> expr = (mid.<a class="code" href="classSVF_1_1NumericLiteral.html#ac2994e13c3572b114c57a9bb4f155d67">getExpr</a>() &lt;= v &amp;&amp; v &lt;= high_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first).<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>());</div>
403
+ <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; L_phi[<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first] = expr;</div>
404
+ <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div>
405
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div>
406
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">if</span> (L_phi.empty())</div>
407
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">break</span>;</div>
408
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">else</span></div>
409
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; decide_cpa_ext(phi, L_phi, mid_values, ret, low_values, high_values);</div>
410
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; }</div>
411
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">return</span> ret;</div>
412
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;}</div>
413
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; </div>
414
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; </div>
415
+ <div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="classSVF_1_1RelationSolver.html#a7ace50c6e53a79f0e329badb63570f92"> 364</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1RelationSolver.html#a7ace50c6e53a79f0e329badb63570f92">RelationSolver::decide_cpa_ext</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a>&amp; phi,</div>
416
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, Z3Expr&gt;</a>&amp; L_phi,</div>
417
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; mid_values,</div>
418
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; ret,</div>
419
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; low_values,</div>
420
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, NumericLiteral&gt;</a>&amp; high_values)</div>
421
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;{</div>
422
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">while</span> (1)</div>
423
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; {</div>
424
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> join_expr(<a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Z3Expr::getContext</a>().bool_val(<span class="keyword">false</span>));</div>
425
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : L_phi)</div>
426
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; join_expr = (join_expr || <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second);</div>
427
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; join_expr = (join_expr &amp;&amp; phi).simplify();</div>
428
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; z3::solver&amp; solver = <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Z3Expr::getSolver</a>();</div>
429
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; solver.push();</div>
430
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; solver.add(join_expr.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>());</div>
431
+ <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t, double&gt;</a> solution;</div>
432
+ <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; z3::check_result checkRes = solver.check();</div>
433
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (checkRes == z3::sat)</div>
434
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; {</div>
435
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; z3::model m = solver.get_model();</div>
436
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; solver.pop();</div>
437
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span> &amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : L_phi)</div>
438
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div>
439
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <span class="keywordtype">id</span> = <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first;</div>
440
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordtype">int</span> value = m.eval(toZ3Expr(<span class="keywordtype">id</span>).getExpr()).get_numeral_int();</div>
441
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="comment">// int value = m.eval(Z3Expr::getContext().int_const(std::to_string(id).c_str())).get_numeral_int();</span></div>
442
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="comment"></span> <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> expr = (<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.second &amp;&amp; toZ3Expr(<span class="keywordtype">id</span>) == value);</div>
443
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; solver.push();</div>
444
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; solver.add(expr.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>());</div>
445
+ <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// solution meets phi_id</span></div>
446
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">if</span> (solver.check() == z3::sat)</div>
447
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; {</div>
448
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; updateMap(ret, <span class="keywordtype">id</span>, <a class="code" href="classSVF_1_1NumericLiteral.html">NumericLiteral</a>(value));</div>
449
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; updateMap(low_values, <span class="keywordtype">id</span>, ret.at(<span class="keywordtype">id</span>) + 1);</div>
450
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; </div>
451
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="classSVF_1_1NumericLiteral.html">NumericLiteral</a> mid = (low_values.at(<span class="keywordtype">id</span>) + high_values.at(<span class="keywordtype">id</span>) + 1) / 2;</div>
452
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; updateMap(mid_values, <span class="keywordtype">id</span>, mid);</div>
453
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> v = toZ3Expr(<span class="keywordtype">id</span>);</div>
454
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// Z3Expr v = Z3Expr::getContext().int_const(std::to_string(id).c_str());</span></div>
455
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="classSVF_1_1Z3Expr.html">Z3Expr</a> expr = (mid_values.at(<span class="keywordtype">id</span>).getExpr() &lt;= v &amp;&amp; v &lt;= high_values.at(<span class="keywordtype">id</span>).<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>());</div>
456
+ <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; L_phi[id] = expr;</div>
457
+ <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div>
458
+ <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; solver.pop();</div>
459
+ <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div>
460
+ <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; }</div>
461
+ <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">else</span> </div>
462
+ <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; {</div>
463
+ <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; solver.pop();</div>
464
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; <a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a> : L_phi)</div>
465
+ <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; high_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) = mid_values.at(<a class="code" href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a>.first) - 1;</div>
466
+ <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">return</span>;</div>
467
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div>
468
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div>
469
+ <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; </div>
470
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;}</div>
466
471
  </div><!-- fragment --></div><!-- contents -->
467
472
  <div class="ttc" id="acJSON_8cpp_html_a009ef1d888ab6dbe77e6b42b0b39f1ae"><div class="ttname"><a href="cJSON_8cpp.html#a009ef1d888ab6dbe77e6b42b0b39f1ae">p</a></div><div class="ttdeci">cJSON * p</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02559">cJSON.cpp:2559</a></div></div>
468
- <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a0df88638c5e3f8cd56d34088b96199f1"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">SVF::RelationSolver::bilateral</a></div><div class="ttdeci">IntervalESBase bilateral(const IntervalESBase &amp;domain, const Z3Expr &amp;phi, u32_t descend_check=0)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00033">RelationSolver.cpp:33</a></div></div>
469
- <div class="ttc" id="aclassSVF_1_1Z3Expr_html_a57c199ba2c3c6a6d44a86e0b1429be55"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">SVF::Z3Expr::getExpr</a></div><div class="ttdeci">const z3::expr &amp; getExpr() const</div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00079">Z3Expr.h:79</a></div></div>
470
- <div class="ttc" id="aclassSVF_1_1IntervalValue_html_a0df07a2659cbf3a918de5b0d7c407264"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">SVF::IntervalValue::lb</a></div><div class="ttdeci">const NumericLiteral &amp; lb() const</div><div class="ttdoc">Return the lower bound.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00218">IntervalValue.h:218</a></div></div>
473
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a0df88638c5e3f8cd56d34088b96199f1"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a0df88638c5e3f8cd56d34088b96199f1">SVF::RelationSolver::bilateral</a></div><div class="ttdeci">IntervalESBase bilateral(const IntervalESBase &amp;domain, const Z3Expr &amp;phi, u32_t descend_check=0)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00036">RelationSolver.cpp:36</a></div></div>
474
+ <div class="ttc" id="aclassSVF_1_1Z3Expr_html_a57c199ba2c3c6a6d44a86e0b1429be55"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">SVF::Z3Expr::getExpr</a></div><div class="ttdeci">const z3::expr &amp; getExpr() const</div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00086">Z3Expr.h:86</a></div></div>
475
+ <div class="ttc" id="aclassSVF_1_1IntervalValue_html_a0df07a2659cbf3a918de5b0d7c407264"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#a0df07a2659cbf3a918de5b0d7c407264">SVF::IntervalValue::lb</a></div><div class="ttdeci">const NumericLiteral &amp; lb() const</div><div class="ttdoc">Return the lower bound.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00220">IntervalValue.h:220</a></div></div>
471
476
  <div class="ttc" id="anamespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00067">BasicTypes.h:67</a></div></div>
472
- <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a7e827609a1d69c6517f1a3eee0326fc3"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">SVF::RelationSolver::BS</a></div><div class="ttdeci">IntervalESBase BS(const IntervalESBase &amp;domain, const Z3Expr &amp;phi)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00266">RelationSolver.cpp:266</a></div></div>
477
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a7e827609a1d69c6517f1a3eee0326fc3"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a7e827609a1d69c6517f1a3eee0326fc3">SVF::RelationSolver::BS</a></div><div class="ttdeci">IntervalESBase BS(const IntervalESBase &amp;domain, const Z3Expr &amp;phi)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00269">RelationSolver.cpp:269</a></div></div>
473
478
  <div class="ttc" id="aclassSVF_1_1Z3Expr_html_acfdff582a0188678c10939165a40df30"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">SVF::Z3Expr::getContext</a></div><div class="ttdeci">static z3::context &amp; getContext()</div><div class="ttdoc">Get z3 context, singleton design here to make sure we only have one context.</div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00066">Z3Expr.cpp:66</a></div></div>
474
- <div class="ttc" id="aclassSVF_1_1RelationSolver_html_aaae7ac9ed7d0e17f39948c37b867ada9"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#aaae7ac9ed7d0e17f39948c37b867ada9">SVF::RelationSolver::BoxedOptSolver</a></div><div class="ttdeci">Map&lt; u32_t, NumericLiteral &gt; BoxedOptSolver(const Z3Expr &amp;phi, Map&lt; u32_t, NumericLiteral &gt; &amp;ret, Map&lt; u32_t, NumericLiteral &gt; &amp;low_values, Map&lt; u32_t, NumericLiteral &gt; &amp;high_values)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00331">RelationSolver.cpp:331</a></div></div>
479
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_aaae7ac9ed7d0e17f39948c37b867ada9"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#aaae7ac9ed7d0e17f39948c37b867ada9">SVF::RelationSolver::BoxedOptSolver</a></div><div class="ttdeci">Map&lt; u32_t, NumericLiteral &gt; BoxedOptSolver(const Z3Expr &amp;phi, Map&lt; u32_t, NumericLiteral &gt; &amp;ret, Map&lt; u32_t, NumericLiteral &gt; &amp;low_values, Map&lt; u32_t, NumericLiteral &gt; &amp;high_values)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00336">RelationSolver.cpp:336</a></div></div>
475
480
  <div class="ttc" id="aclassSVF_1_1IntervalValue_html_af8be90fc1b61103187908dce4ba68001"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#af8be90fc1b61103187908dce4ba68001">SVF::IntervalValue::isBottom</a></div><div class="ttdeci">bool isBottom() const override</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00060">IntervalValue.h:60</a></div></div>
476
- <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a7ace50c6e53a79f0e329badb63570f92"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a7ace50c6e53a79f0e329badb63570f92">SVF::RelationSolver::decide_cpa_ext</a></div><div class="ttdeci">void decide_cpa_ext(const Z3Expr &amp;phi, Map&lt; u32_t, Z3Expr &gt; &amp;, Map&lt; u32_t, NumericLiteral &gt; &amp;, Map&lt; u32_t, NumericLiteral &gt; &amp;, Map&lt; u32_t, NumericLiteral &gt; &amp;, Map&lt; u32_t, NumericLiteral &gt; &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00359">RelationSolver.cpp:359</a></div></div>
481
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a7ace50c6e53a79f0e329badb63570f92"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a7ace50c6e53a79f0e329badb63570f92">SVF::RelationSolver::decide_cpa_ext</a></div><div class="ttdeci">void decide_cpa_ext(const Z3Expr &amp;phi, Map&lt; u32_t, Z3Expr &gt; &amp;, Map&lt; u32_t, NumericLiteral &gt; &amp;, Map&lt; u32_t, NumericLiteral &gt; &amp;, Map&lt; u32_t, NumericLiteral &gt; &amp;, Map&lt; u32_t, NumericLiteral &gt; &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00364">RelationSolver.cpp:364</a></div></div>
477
482
  <div class="ttc" id="aclassSVF_1_1Z3Expr_html"><div class="ttname"><a href="classSVF_1_1Z3Expr.html">SVF::Z3Expr</a></div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00038">Z3Expr.h:38</a></div></div>
478
- <div class="ttc" id="aclassSVF_1_1NumericLiteral_html_a4181e5e15e10304ea524e5f8b2a3f576"><div class="ttname"><a href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">SVF::NumericLiteral::getNumeral</a></div><div class="ttdeci">s64_t getNumeral() const</div><div class="ttdoc">Return Numeral.</div><div class="ttdef"><b>Definition:</b> <a href="NumericLiteral_8h_source.html#l00118">NumericLiteral.h:118</a></div></div>
483
+ <div class="ttc" id="aOptions_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
484
+ <div class="ttc" id="aclassSVF_1_1NumericLiteral_html_a4181e5e15e10304ea524e5f8b2a3f576"><div class="ttname"><a href="classSVF_1_1NumericLiteral.html#a4181e5e15e10304ea524e5f8b2a3f576">SVF::NumericLiteral::getNumeral</a></div><div class="ttdeci">s64_t getNumeral() const</div><div class="ttdoc">Return Numeral, default type is double in case to support both int and float.</div><div class="ttdef"><b>Definition:</b> <a href="NumericLiteral_8h_source.html#l00132">NumericLiteral.h:132</a></div></div>
479
485
  <div class="ttc" id="aclassSVF_1_1IntervalESBase_html"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html">SVF::IntervalESBase</a></div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00054">IntervalExeState.h:54</a></div></div>
480
486
  <div class="ttc" id="aRelationSolver_8h_html"><div class="ttname"><a href="RelationSolver_8h.html">RelationSolver.h</a></div></div>
481
- <div class="ttc" id="aclassSVF_1_1RelationSolver_html_af860063ccaeca043bac84eb9eb2cf80a"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">SVF::RelationSolver::gamma_hat</a></div><div class="ttdeci">Z3Expr gamma_hat(const IntervalESBase &amp;exeState) const</div><div class="ttdoc">Return Z3Expr according to valToValMap.</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00196">RelationSolver.cpp:196</a></div></div>
482
- <div class="ttc" id="aclassSVF_1_1IntervalValue_html_adac2dc2c9f744a071ad3f0175ed40cd9"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">SVF::IntervalValue::ub</a></div><div class="ttdeci">const NumericLiteral &amp; ub() const</div><div class="ttdoc">Return the upper bound.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00225">IntervalValue.h:225</a></div></div>
487
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_af860063ccaeca043bac84eb9eb2cf80a"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#af860063ccaeca043bac84eb9eb2cf80a">SVF::RelationSolver::gamma_hat</a></div><div class="ttdeci">Z3Expr gamma_hat(const IntervalESBase &amp;exeState) const</div><div class="ttdoc">Return Z3Expr according to valToValMap.</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00199">RelationSolver.cpp:199</a></div></div>
488
+ <div class="ttc" id="aclassSVF_1_1IntervalValue_html_adac2dc2c9f744a071ad3f0175ed40cd9"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#adac2dc2c9f744a071ad3f0175ed40cd9">SVF::IntervalValue::ub</a></div><div class="ttdeci">const NumericLiteral &amp; ub() const</div><div class="ttdoc">Return the upper bound.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00227">IntervalValue.h:227</a></div></div>
483
489
  <div class="ttc" id="aclassSVF_1_1IntervalESBase_html_a92a8531c7f12cc6f9117596aa5e534b6"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html#a92a8531c7f12cc6f9117596aa5e534b6">SVF::IntervalESBase::meetWith</a></div><div class="ttdeci">void meetWith(const IntervalESBase &amp;other)</div><div class="ttdoc">domain meet with other, important! other widen this.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8cpp_source.html#l00164">IntervalExeState.cpp:164</a></div></div>
484
490
  <div class="ttc" id="aclassSVF_1_1IntervalESBase_html_ad2288306aed7301ccd30e55410c7b428"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html#ad2288306aed7301ccd30e55410c7b428">SVF::IntervalESBase::_varToItvVal</a></div><div class="ttdeci">VarToValMap _varToItvVal</div><div class="ttdoc">Map a variable (symbol) to its interval value.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00147">IntervalExeState.h:147</a></div></div>
485
491
  <div class="ttc" id="aclassSVF_1_1IntervalValue_html"><div class="ttname"><a href="classSVF_1_1IntervalValue.html">SVF::IntervalValue</a></div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00043">IntervalValue.h:43</a></div></div>
486
- <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a657af041f883e7b1a3f9892453a2c4cf"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">SVF::RelationSolver::RSY</a></div><div class="ttdeci">IntervalESBase RSY(const IntervalESBase &amp;domain, const Z3Expr &amp;phi)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00111">RelationSolver.cpp:111</a></div></div>
487
- <div class="ttc" id="aclassSVF_1_1RelationSolver_html_af0c2db68bffbb223b845ca307b86c10a"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#af0c2db68bffbb223b845ca307b86c10a">SVF::RelationSolver::beta</a></div><div class="ttdeci">IntervalESBase beta(const Map&lt; u32_t, double &gt; &amp;sigma, const IntervalESBase &amp;exeState) const</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00241">RelationSolver.cpp:241</a></div></div>
488
- <div class="ttc" id="aclassSVF_1_1RelationSolver_html_af00aee55faf18a994dc5558ca4bf4932"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#af00aee55faf18a994dc5558ca4bf4932">SVF::RelationSolver::updateMap</a></div><div class="ttdeci">void updateMap(Map&lt; u32_t, NumericLiteral &gt; &amp;map, u32_t key, const NumericLiteral &amp;value)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00253">RelationSolver.cpp:253</a></div></div>
492
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a657af041f883e7b1a3f9892453a2c4cf"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a657af041f883e7b1a3f9892453a2c4cf">SVF::RelationSolver::RSY</a></div><div class="ttdeci">IntervalESBase RSY(const IntervalESBase &amp;domain, const Z3Expr &amp;phi)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00114">RelationSolver.cpp:114</a></div></div>
493
+ <div class="ttc" id="anamespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00047">GeneralType.h:47</a></div></div>
494
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_af00aee55faf18a994dc5558ca4bf4932"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#af00aee55faf18a994dc5558ca4bf4932">SVF::RelationSolver::updateMap</a></div><div class="ttdeci">void updateMap(Map&lt; u32_t, NumericLiteral &gt; &amp;map, u32_t key, const NumericLiteral &amp;value)</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00256">RelationSolver.cpp:256</a></div></div>
489
495
  <div class="ttc" id="aclassSVF_1_1IntervalESBase_html_a839e8ee927c1cad86aef3059b41ba2eb"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html#a839e8ee927c1cad86aef3059b41ba2eb">SVF::IntervalESBase::bottom</a></div><div class="ttdeci">IntervalESBase bottom() const</div><div class="ttdoc">Set all value bottom.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00113">IntervalExeState.h:113</a></div></div>
490
- <div class="ttc" id="aclassSVF_1_1Z3Expr_html_afb3478316592a395c6d473791b5a0981"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#afb3478316592a395c6d473791b5a0981">SVF::Z3Expr::simplify</a></div><div class="ttdeci">Z3Expr simplify() const</div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00130">Z3Expr.h:130</a></div></div>
496
+ <div class="ttc" id="aclassSVF_1_1Z3Expr_html_afb3478316592a395c6d473791b5a0981"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#afb3478316592a395c6d473791b5a0981">SVF::Z3Expr::simplify</a></div><div class="ttdeci">Z3Expr simplify() const</div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00137">Z3Expr.h:137</a></div></div>
491
497
  <div class="ttc" id="acJSON_8h_html_ac76cea59d438ba893d2f82aabb367d14"><div class="ttname"><a href="cJSON_8h.html#ac76cea59d438ba893d2f82aabb367d14">item</a></div><div class="ttdeci">cJSON * item</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00222">cJSON.h:222</a></div></div>
492
498
  <div class="ttc" id="aclassSVF_1_1IntervalValue_html_a977128211266b93e58e298a7ac29a059"><div class="ttname"><a href="classSVF_1_1IntervalValue.html#a977128211266b93e58e298a7ac29a059">SVF::IntervalValue::isTop</a></div><div class="ttdeci">bool isTop() const override</div><div class="ttdef"><b>Definition:</b> <a href="IntervalValue_8h_source.html#l00055">IntervalValue.h:55</a></div></div>
493
499
  <div class="ttc" id="aclassSVF_1_1NumericLiteral_html"><div class="ttname"><a href="classSVF_1_1NumericLiteral.html">SVF::NumericLiteral</a></div><div class="ttdef"><b>Definition:</b> <a href="NumericLiteral_8h_source.html#l00038">NumericLiteral.h:38</a></div></div>
494
500
  <div class="ttc" id="aclassSVF_1_1IntervalESBase_html_a903797577ba99ef57879774a3849bbfe"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html#a903797577ba99ef57879774a3849bbfe">SVF::IntervalESBase::getVarToVal</a></div><div class="ttdeci">const VarToValMap &amp; getVarToVal() const</div><div class="ttdoc">get var2val map</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00189">IntervalExeState.h:189</a></div></div>
495
- <div class="ttc" id="anamespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00097">GeneralType.h:97</a></div></div>
496
- <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a012d18ece2c66ba6e784ae9578171369"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a012d18ece2c66ba6e784ae9578171369">SVF::RelationSolver::abstract_consequence</a></div><div class="ttdeci">IntervalESBase abstract_consequence(const IntervalESBase &amp;lower, const IntervalESBase &amp;upper, const IntervalESBase &amp;domain) const</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00167">RelationSolver.cpp:167</a></div></div>
501
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_ac4abc5e1eb3b638710572c958162c22c"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#ac4abc5e1eb3b638710572c958162c22c">SVF::RelationSolver::beta</a></div><div class="ttdeci">IntervalESBase beta(const Map&lt; u32_t, s32_t &gt; &amp;sigma, const IntervalESBase &amp;exeState) const</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00244">RelationSolver.cpp:244</a></div></div>
502
+ <div class="ttc" id="anamespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00101">GeneralType.h:101</a></div></div>
503
+ <div class="ttc" id="aclassSVF_1_1RelationSolver_html_a012d18ece2c66ba6e784ae9578171369"><div class="ttname"><a href="classSVF_1_1RelationSolver.html#a012d18ece2c66ba6e784ae9578171369">SVF::RelationSolver::abstract_consequence</a></div><div class="ttdeci">IntervalESBase abstract_consequence(const IntervalESBase &amp;lower, const IntervalESBase &amp;upper, const IntervalESBase &amp;domain) const</div><div class="ttdef"><b>Definition:</b> <a href="RelationSolver_8cpp_source.html#l00170">RelationSolver.cpp:170</a></div></div>
497
504
  <div class="ttc" id="aclassSVF_1_1IntervalESBase_html_a33fd0e4a654dd4f5b7762b0088e11674"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html#a33fd0e4a654dd4f5b7762b0088e11674">SVF::IntervalESBase::top</a></div><div class="ttdeci">IntervalESBase top() const</div><div class="ttdoc">Set all value top.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8h_source.html#l00124">IntervalExeState.h:124</a></div></div>
498
505
  <div class="ttc" id="anamespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="GeneralType_8h_source.html#l00046">GeneralType.h:46</a></div></div>
506
+ <div class="ttc" id="aclassSVF_1_1NumericLiteral_html_ac2994e13c3572b114c57a9bb4f155d67"><div class="ttname"><a href="classSVF_1_1NumericLiteral.html#ac2994e13c3572b114c57a9bb4f155d67">SVF::NumericLiteral::getExpr</a></div><div class="ttdeci">Z3Expr getExpr() const</div><div class="ttdoc">Return Expr.</div><div class="ttdef"><b>Definition:</b> <a href="NumericLiteral_8h_source.html#l00138">NumericLiteral.h:138</a></div></div>
499
507
  <div class="ttc" id="aclassSVF_1_1IntervalESBase_html_adc0db607e4c0f117760535df67b91fbd"><div class="ttname"><a href="classSVF_1_1IntervalESBase.html#adc0db607e4c0f117760535df67b91fbd">SVF::IntervalESBase::joinWith</a></div><div class="ttdeci">void joinWith(const IntervalESBase &amp;other)</div><div class="ttdoc">domain join with other, important! other widen this.</div><div class="ttdef"><b>Definition:</b> <a href="IntervalExeState_8cpp_source.html#l00113">IntervalExeState.cpp:113</a></div></div>
500
508
  <div class="ttc" id="aclassSVF_1_1Z3Expr_html_a16721e960145864d0835eb95f2ae4681"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">SVF::Z3Expr::getSolver</a></div><div class="ttdeci">static z3::solver &amp; getSolver()</div><div class="ttdoc">Get z3 solver, singleton design here to make sure we only have one context.</div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00056">Z3Expr.cpp:56</a></div></div>
501
509
  <!-- start footer part -->