Theory IsaSAT_ACIDS
theory IsaSAT_ACIDS
imports IsaSAT_Literals
Pairing_Heap_LLVM.Heaps_Abs
Watched_Literals_VMTF
begin
text ‹Instead of using VSIDS (which requires float), we use the more stable ACIDS variant
that works simply on integers and does not seem much worse.
We use ACIDS in a practical way, i.e., when the weight reaches the maximum
integer, we simply stop incrementing it. ›
section ‹ACIDS›
type_synonym ('a, 'v) acids = ‹('a multiset × 'a multiset × ('a ⇒ 'v)) × 'v›
definition acids :: ‹'a multiset ⇒ ('a, 'ann) ann_lits ⇒ ('a, 'v::{zero,linorder}) acids set› where
‹acids 𝒜 M = {((ℬ, b, w), m). set_mset ℬ = set_mset 𝒜 ∧ b ⊆# 𝒜 ∧ Max ({0} ∪ w ` set_mset b) ≤ m ∧ (∀L ∈#𝒜. L ∉# b ⟶ defined_lit M (Pos L)) ∧ distinct_mset b}›
lemma acids_prepend: ‹ac ∈ acids 𝒜 M ⟹ ac ∈ acids 𝒜 (L # M)›
unfolding acids_def by (auto simp: defined_lit_map)