Theorem: LRAT.DefaultFormula.restoreAssignments_performRupCheck_base_case
Proof state before:
case inr.inl.intro.intro.intro.intro
rupHints : Array Nat
n : Nat
f : DefaultFormula n
f_assignments_size : f.assignments.size = n
f' : DefaultFormula n
_f'_def : f' = (f.performRupCheck rupHints).fst
f'_assignments_size : f'.assignments.size = n
derivedLits : List (Literal (PosFin n))
derivedLits_arr : Array (Literal (PosFin n))
derivedLits_arr_def : derivedLits_arr = { data := derivedLits }
_derivedLits_arr_nodup : ∀ (i j : Fin derivedLits_arr.size), i ≠ j → derivedLits_arr[i] ≠ derivedLits_arr[j]
i : Fin n
j : Fin derivedLits.length
j_eq_i : (derivedLits.get j).fst.val = ↑i
h1 : f'.assignments[↑i] = addAssignment (derivedLits.get j).snd f.assignments[↑i]
h2 : ¬hasAssignment (derivedLits.get j).snd f.assignments[↑i] = true
h3 : ∀ (k : Fin derivedLits.length), k ≠ j → (derivedLits.get k).fst.val ≠ ↑i
j_lt_derivedLits_arr_size : ↑j < derivedLits_arr.size
i_gt_zero : ↑i > 0
⊢ ↑⟨↑j, j_lt_derivedLits_arr_size⟩ ≥ 0 ∧
    derivedLits_arr[⟨↑j, j_lt_derivedLits_arr_size⟩] = (⟨↑i, ⋯⟩, (derivedLits.get j).snd) ∧
      f'.assignments[↑i] = addAssignment (derivedLits.get j).snd f.assignments[↑i] ∧
        ¬hasAssignment (derivedLits.get j).snd f.assignments[↑i] = true ∧
          ∀ (k : Fin derivedLits_arr.size),
            ↑k ≥ 0 → k ≠ ⟨↑j, j_lt_derivedLits_arr_size⟩ → derivedLits_arr[k].fst.val ≠ ↑i
Tactic:
constructor
Proof state after:
case inr.inl.intro.intro.intro.intro.left
rupHints : Array Nat
n : Nat
f : DefaultFormula n
f_assignments_size : f.assignments.size = n
f' : DefaultFormula n
_f'_def : f' = (f.performRupCheck rupHints).fst
f'_assignments_size : f'.assignments.size = n
derivedLits : List (Literal (PosFin n))
derivedLits_arr : Array (Literal (PosFin n))
derivedLits_arr_def : derivedLits_arr = { data := derivedLits }
_derivedLits_arr_nodup : ∀ (i j : Fin derivedLits_arr.size), i ≠ j → derivedLits_arr[i] ≠ derivedLits_arr[j]
i : Fin n
j : Fin derivedLits.length
j_eq_i : (derivedLits.get j).fst.val = ↑i
h1 : f'.assignments[↑i] = addAssignment (derivedLits.get j).snd f.assignments[↑i]
h2 : ¬hasAssignment (derivedLits.get j).snd f.assignments[↑i] = true
h3 : ∀ (k : Fin derivedLits.length), k ≠ j → (derivedLits.get k).fst.val ≠ ↑i
j_lt_derivedLits_arr_size : ↑j < derivedLits_arr.size
i_gt_zero : ↑i > 0
⊢ ↑⟨↑j, j_lt_derivedLits_arr_size⟩ ≥ 0

case inr.inl.intro.intro.intro.intro.right
rupHints : Array Nat
n : Nat
f : DefaultFormula n
f_assignments_size : f.assignments.size = n
f' : DefaultFormula n
_f'_def : f' = (f.performRupCheck rupHints).fst
f'_assignments_size : f'.assignments.size = n
derivedLits : List (Literal (PosFin n))
derivedLits_arr : Array (Literal (PosFin n))
derivedLits_arr_def : derivedLits_arr = { data := derivedLits }
_derivedLits_arr_nodup : ∀ (i j : Fin derivedLits_arr.size), i ≠ j → derivedLits_arr[i] ≠ derivedLits_arr[j]
i : Fin n
j : Fin derivedLits.length
j_eq_i : (derivedLits.get j).fst.val = ↑i
h1 : f'.assignments[↑i] = addAssignment (derivedLits.get j).snd f.assignments[↑i]
h2 : ¬hasAssignment (derivedLits.get j).snd f.assignments[↑i] = true
h3 : ∀ (k : Fin derivedLits.length), k ≠ j → (derivedLits.get k).fst.val ≠ ↑i
j_lt_derivedLits_arr_size : ↑j < derivedLits_arr.size
i_gt_zero : ↑i > 0
⊢ derivedLits_arr[⟨↑j, j_lt_derivedLits_arr_size⟩] = (⟨↑i, ⋯⟩, (derivedLits.get j).snd) ∧
    f'.assignments[↑i] = addAssignment (derivedLits.get j).snd f.assignments[↑i] ∧
      ¬hasAssignment (derivedLits.get j).snd f.assignments[↑i] = true ∧
        ∀ (k : Fin derivedLits_arr.size), ↑k ≥ 0 → k ≠ ⟨↑j, j_lt_derivedLits_arr_size⟩ → derivedLits_arr[k].fst.val ≠ ↑i