fact: Fixpoint try_just_one (s: list nat) (c: clause) (cs: clauses) (f: list nat -> clauses -> jRes) : jRes := match c with nil => jNone | (L p v) as k:: c1 => let s1 := update p v s in let cs1 := clauses_update k (anti_literals k) cs in match f s1 cs1 with jNone => try_just_one s c1 cs f | jOne s2 => match try_just_one s c1 cs f with jNone => jOne s2 | jOne s3 => if list_nat_eq s2 s3 then jOne s2 else jMore s2 s3 | jMore s1 s2 => jMore s1 s2 end | jMore s1 s2 => jMore s1 s2 end end.
imports: List UList Permutation Div OrderedList ListOp Lia