The Eos SMT/SMA-Solver: A Preliminary Report 1
Giulio Mazzi
Universit` a Degli Studi di Verona
Lisbon, 7th July 2019
1Joint work with Maria Paola Bonacina
- G. Mazzi (Universit`
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 1 / 31
Conflict-driven Reasoning Conflict-Driven SATisfiability 2 CDCL : - - PowerPoint PPT Presentation
The Eos SMT/SMA-Solver: A Preliminary Report 1 Giulio Mazzi Universit` a Degli Studi di Verona Lisbon, 7th July 2019 1 Joint work with Maria Paola Bonacina G. Mazzi (Universit` a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 1 / 31
1Joint work with Maria Paola Bonacina
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 1 / 31
2[Bonacina, Graham-Lengrand, Shankar, CADE2017, JAR2019]
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 2 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 3 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 4 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 5 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 6 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 7 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 8 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 9 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 10 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 11 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 12 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 13 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 14 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 15 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 16 / 31
procedure conflict analysis conflict ← get reason() ⊲ get the reason of the conflict conflict level ← get max level(conflict) ⊲ higher level of conflict values backjump(conflict level) ⊲ undo everything after the conflict while conflict has two or more terms at conflict level do last ← pop from trail( ) ⊲ get the last Boolean propagation on the trail if last.level() = conflict level and last is in conflict then ⊲ rule Resolve conflict.remove(last) ⊲ resolve this value with the conflict ⊲ get the justification of this propagation justification ← get justification(last) for all Term just in justification do ⊲ is this propagation justified by a first order decision at the conflict level? if just is non-Boolean and at conflict level then new value ← ¬ trail.get value(last) ⊲ flip the value of the propagation backjump one level( ) ⊲ rule UndoDecide: undo add decision(last,new value) ⊲ rule UndoDecide: decide return else conflict.add(just) ⊲ add just to the conflict ⊲ here, the conflict has a single term assigned at the level of the conflict topmost var ← get outstanding(conflict) if topmost var is non-Boolean then backjump one level( ) ⊲ rule UndoClear return clause ← create clause(conflict) ⊲ learn a new clause bt level ← compute backjump level(conflict) backjump(bt level) ⊲ rule Backjump learn new clause(clause)
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 17 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 18 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 19 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 20 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 21 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 22 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 23 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 24 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 25 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 26 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 27 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 28 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 29 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 30 / 31
a di Verona) Eos SMT/SMA-solver Lisbon, 7th July 2019 31 / 31