Case split is a core proof rule in current decision procedures for the theory of string constraints. Its use is the primary cause of the state space explosion in string constraint solving, since it is the only rule that creates branches in the proof tree. Moreover, explicit handling of the case split rule may cause recomputation of the same tasks in multiple branches of the proof tree. In this paper, we propose a symbolic algorithm that significantly reduces such a redundancy. In particular, we encode a string constraint as a regular language and proof rules as rational transducers. This allows us to perform similar steps in the proof tree only once, alleviating the state space explosion. We also extend the encoding to handle arbitrary Boolean combinations of string constraints, length constraints, and regular constraints. In our experimental results, we validate that our technique works in many practical cases where other state-of-the-art solvers fail to provide an answer; our Python prototype implementation solved over 50 % of string constraints that could not be solved by the other tools.
翻译:案件分割是当前决定程序对字符串限制理论的核心证明规则。 使用它是国家空间爆炸在字符串限制解决中的首要原因, 因为这是在实证树上创建分支的唯一规则。 此外, 明确处理案件分割规则可能导致在实证树多个分支对相同任务进行重计。 在本文中, 我们提出了一个象征性的算法, 以大量减少这种冗余。 特别是, 我们将字符串限制编码为常规语言和证据规则, 并将其作为理性导体。 这使我们能够在实证树上只执行一次类似的步骤, 以缓解国家空间爆炸。 我们还扩展编码, 以处理任意将字符串限制、 长度限制和常规限制组合的布利安任意组合。 在我们的实验结果中, 我们验证我们的技术在很多实际案例中是有效的, 当其它状态的解答器无法提供答案时; 我们的Python原型应用解决了50%以上无法用其他工具解决的字符串限制。</s>