split at h
n : Nat
arr : Array (Option (DefaultClause n))
hsize✝ : (ofArray arr).assignments.size = n
modified_assignments_invariant : Array Assignment → Prop :=
  fun assignments =>
    ∃ hsize, ∀ (i : PosFin n) (b : Bool), hasAssignment b assignments[i.val] = true → unit (i, b) ∈ (ofArray arr).toList
hb : modified_assignments_invariant (mkArray n unassigned)
acc : Array Assignment
ih : modified_assignments_invariant acc
cOpt : Option (DefaultClause n)
cOpt_in_arr : cOpt ∈ arr.data
hsize : (ofArray_fold_fn acc cOpt).size = n
i : PosFin n
b : Bool
h :
  hasAssignment b
      (match cOpt with
        | none => acc
        | some c =>
          match c.isUnit with
          | none => acc
          | some (l, true) => acc.modify l.val addPosAssignment
          | some (l, false) => acc.modify l.val addNegAssignment)[i.val] =
    true
⊢ unit (i, b) ∈ (ofArray arr).toList
case h_1
n : Nat
arr : Array (Option (DefaultClause n))
hsize✝ : (ofArray arr).assignments.size = n
modified_assignments_invariant : Array Assignment → Prop :=
  fun assignments =>
    ∃ hsize, ∀ (i : PosFin n) (b : Bool), hasAssignment b assignments[i.val] = true → unit (i, b) ∈ (ofArray arr).toList
hb : modified_assignments_invariant (mkArray n unassigned)
acc : Array Assignment
ih : modified_assignments_invariant acc
i : PosFin n
b : Bool
cOpt✝ : Option (DefaultClause n)
cOpt_in_arr : none ∈ arr.data
hsize : (ofArray_fold_fn acc none).size = n
h : hasAssignment b acc[i.val] = true
⊢ unit (i, b) ∈ (ofArray arr).toList

case h_2
n : Nat
arr : Array (Option (DefaultClause n))
hsize✝ : (ofArray arr).assignments.size = n
modified_assignments_invariant : Array Assignment → Prop :=
  fun assignments =>
    ∃ hsize, ∀ (i : PosFin n) (b : Bool), hasAssignment b assignments[i.val] = true → unit (i, b) ∈ (ofArray arr).toList
hb : modified_assignments_invariant (mkArray n unassigned)
acc : Array Assignment
ih : modified_assignments_invariant acc
i : PosFin n
b : Bool
cOpt✝ : Option (DefaultClause n)
c✝ : DefaultClause n
cOpt_in_arr : some c✝ ∈ arr.data
hsize : (ofArray_fold_fn acc (some c✝)).size = n
h :
  hasAssignment b
      (match c✝.isUnit with
        | none => acc
        | some (l, true) => acc.modify l.val addPosAssignment
        | some (l, false) => acc.modify l.val addNegAssignment)[i.val] =
    true
⊢ unit (i, b) ∈ (ofArray arr).toList