Z3의 합동 클로저 엔진은 솔버의 핵심 구성 요소로, 평등성에 기초하여 동등성 클래스의 용어를 유지하는 것을 담당합니다. 두 용어가 동일하다고 판명되면 해결 프로세스 전반에 걸쳐 동등한 것으로 취급됩니다. 작동 방식은 다음과 같습니다.
1. 초기화 및 데이터 구조 : 엔진은 e-node라는 데이터 구조를 사용하여 공식에서 용어를 나타냅니다. 각 e- 노드에는 동등성 클래스를 관리하는 데 중요한 노조 찾기 작업을 구현하는 데 도움이되는 필드가 포함되어 있습니다. 엔진은 ETable로 알려진 해시 테이블을 사용하여 기능 응용 프로그램을 합동 폐쇄 루트에 매핑합니다 [1] [3].
2. Union-Find Operations : 합동 폐쇄 엔진은 경로 압축과 노조를 사용하여 노조 찾기 작업을 효율적으로 수행합니다. 이를 통해 등가 클래스의 루트에 액세스하는 것이 빠르며 작은 클래스를 더 큰 클래스로 병합하는 것이 효율적입니다 [1].
3. 동등성 감지 : 솔버가 용어간에 평등을 만나면 합동 폐쇄 엔진은이 용어가 동일한 동등한 클래스에 속하는지 확인합니다. 그렇지 않은 경우, 병합 된 클래스의 모든 용어가 동일하게 취급되도록하는 수업을 통합합니다 [3] [4].
4. 부울 추론과 통합 : 합동 폐쇄 엔진은 Z3의 부울 만족도 핵심과 밀접하게 통합되어 있습니다. 그것은 동등한 용어가 공식에 걸쳐 일관되게 처리되도록함으로써 평등을 전파하고 불만족성을 감지하는 데 도움이된다 [5].
5. 갈등 해결 : CDCL (T) (이론과의 갈등 중심 조항 학습)의 맥락에서, 합동 폐쇄 엔진은 만족스러운 과제 또는 증거를 찾는 동안 평등이 일관되게 적용되도록함으로써 갈등 해결에 역할을합니다. 불만족의 [1].
전반적으로 Z3의 합동 폐쇄 엔진은 평등을 효율적으로 처리하고 솔버가 동등한 용어를 일관되게 취급하는 데 필수적이며, 이는 여러 이론과 관련된 복잡한 공식을 해결하는 데 중요합니다.
인용 :[1] https://z3prover.github.io/papers/z3internals.html
[2] https://www.researchgate.net/publication/266654073_z3-Str_A_Z3 기반_string_solver_for_web_application_analysy
[3] https://www.cs.purdue.edu/homes/xyzhang/comp/fse13.pdf
[4] https://www.csl.sri.com/~tiwari/papers/thesis.pdf
[5] https://ceur-ws.org/vol-418/paper10.pdf
[6] https://theory.stanford.edu/~nikolaj/programmingz3.html
[7] https://arxiv.org/pdf/2209.03398.pdf
[8] http://algos.inesc.pt/projects/nanotime/ref12.pdf