[STATEMENT]
lemma InvariantsAfterInitialization:
shows
  "let state' = (initialize F0 initialState) in
       InvariantConsistent (getM state') \<and>
       InvariantUniq (getM state') \<and>
       InvariantWatchListsContainOnlyClausesFromF (getWatchList state') (getF state') \<and>
       InvariantWatchListsUniq (getWatchList state') \<and>
       InvariantWatchListsCharacterization (getWatchList state') (getWatch1 state') (getWatch2 state') \<and>
       InvariantWatchesEl (getF state') (getWatch1 state') (getWatch2 state') \<and>
       InvariantWatchesDiffer (getF state') (getWatch1 state') (getWatch2 state') \<and>
       InvariantWatchCharacterization (getF state') (getWatch1 state') (getWatch2 state') (getM state') \<and>
       InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and>
       InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and>
       InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and>
       InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and>
       InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and>
       InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and>
       InvariantUniqQ (getQ state') \<and>
       InvariantVarsM (getM state') F0 {} \<and>
       InvariantVarsQ (getQ state') F0 {} \<and>
       InvariantVarsF (getF state') F0 {} \<and>
       ((getConflictFlag state') \<or> (getQ state') = []) \<and>
       currentLevel (getM state') = 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. let state' = initialize F0 initialState in InvariantConsistent (getM state') \<and> InvariantUniq (getM state') \<and> InvariantWatchListsContainOnlyClausesFromF (getWatchList state') (getF state') \<and> InvariantWatchListsUniq (getWatchList state') \<and> InvariantWatchListsCharacterization (getWatchList state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesEl (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesDiffer (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchCharacterization (getF state') (getWatch1 state') (getWatch2 state') (getM state') \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
using InvariantsAfterInitializationStep[of "initialState" "{}" "F0" "initialize F0 initialState" "F0"]
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>InvariantConsistent (getM initialState); InvariantUniq (getM initialState); InvariantWatchListsContainOnlyClausesFromF (getWatchList initialState) (getF initialState); InvariantWatchListsUniq (getWatchList initialState); InvariantWatchListsCharacterization (getWatchList initialState) (getWatch1 initialState) (getWatch2 initialState); InvariantWatchesEl (getF initialState) (getWatch1 initialState) (getWatch2 initialState); InvariantWatchesDiffer (getF initialState) (getWatch1 initialState) (getWatch2 initialState); InvariantWatchCharacterization (getF initialState) (getWatch1 initialState) (getWatch2 initialState) (getM initialState); InvariantConflictFlagCharacterization (getConflictFlag initialState) (getF initialState) (getM initialState); InvariantConflictClauseCharacterization (getConflictFlag initialState) (getConflictClause initialState) (getF initialState) (getM initialState); InvariantQCharacterization (getConflictFlag initialState) (getQ initialState) (getF initialState) (getM initialState); InvariantGetReasonIsReason (getReason initialState) (getF initialState) (getM initialState) (set (getQ initialState)); InvariantUniqQ (getQ initialState); getConflictFlag initialState \<or> getQ initialState = []; currentLevel (getM initialState) = 0; finite {}; InvariantVarsM (getM initialState) F0 {}; InvariantVarsQ (getQ initialState) F0 {}; InvariantVarsF (getF initialState) F0 {}; initialize F0 initialState = initialize F0 initialState; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> InvariantConsistent (getM (initialize F0 initialState)) \<and> InvariantUniq (getM (initialize F0 initialState)) \<and> InvariantWatchListsContainOnlyClausesFromF (getWatchList (initialize F0 initialState)) (getF (initialize F0 initialState)) \<and> InvariantWatchListsUniq (getWatchList (initialize F0 initialState)) \<and> InvariantWatchListsCharacterization (getWatchList (initialize F0 initialState)) (getWatch1 (initialize F0 initialState)) (getWatch2 (initialize F0 initialState)) \<and> InvariantWatchesEl (getF (initialize F0 initialState)) (getWatch1 (initialize F0 initialState)) (getWatch2 (initialize F0 initialState)) \<and> InvariantWatchesDiffer (getF (initialize F0 initialState)) (getWatch1 (initialize F0 initialState)) (getWatch2 (initialize F0 initialState)) \<and> InvariantWatchCharacterization (getF (initialize F0 initialState)) (getWatch1 (initialize F0 initialState)) (getWatch2 (initialize F0 initialState)) (getM (initialize F0 initialState)) \<and> InvariantConflictFlagCharacterization (getConflictFlag (initialize F0 initialState)) (getF (initialize F0 initialState)) (getM (initialize F0 initialState)) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 initialState)) (getConflictClause (initialize F0 initialState)) (getF (initialize F0 initialState)) (getM (initialize F0 initialState)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 initialState)) (getQ (initialize F0 initialState)) (getF (initialize F0 initialState)) (getM (initialize F0 initialState)) \<and> InvariantUniqQ (getQ (initialize F0 initialState)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 initialState)) (getF (initialize F0 initialState)) (getM (initialize F0 initialState)) (set (getQ (initialize F0 initialState))) \<and> InvariantVarsM (getM (initialize F0 initialState)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 initialState)) F0 {} \<and> InvariantVarsF (getF (initialize F0 initialState)) F0 {} \<and> (getConflictFlag (initialize F0 initialState) \<or> getQ (initialize F0 initialState) = []) \<and> currentLevel (getM (initialize F0 initialState)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 initialState in InvariantConsistent (getM state') \<and> InvariantUniq (getM state') \<and> InvariantWatchListsContainOnlyClausesFromF (getWatchList state') (getF state') \<and> InvariantWatchListsUniq (getWatchList state') \<and> InvariantWatchListsCharacterization (getWatchList state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesEl (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesDiffer (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchCharacterization (getF state') (getWatch1 state') (getWatch2 state') (getM state') \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding initialState_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>InvariantConsistent (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantUniq (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchListsContainOnlyClausesFromF (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchListsUniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchListsCharacterization (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchesEl (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchesDiffer (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchCharacterization (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictFlagCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictClauseCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> InvariantConsistent (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniq (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchListsContainOnlyClausesFromF (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchListsUniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchListsCharacterization (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchesEl (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchesDiffer (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchCharacterization (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictFlagCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in InvariantConsistent (getM state') \<and> InvariantUniq (getM state') \<and> InvariantWatchListsContainOnlyClausesFromF (getWatchList state') (getF state') \<and> InvariantWatchListsUniq (getWatchList state') \<and> InvariantWatchListsCharacterization (getWatchList state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesEl (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesDiffer (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchCharacterization (getF state') (getWatch1 state') (getWatch2 state') (getM state') \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantConsistent_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniq (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchListsContainOnlyClausesFromF (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchListsUniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchListsCharacterization (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchesEl (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchesDiffer (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchCharacterization (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictFlagCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictClauseCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantUniq (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchListsContainOnlyClausesFromF (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchListsUniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchListsCharacterization (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchesEl (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchesDiffer (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchCharacterization (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictFlagCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> InvariantUniq (getM state') \<and> InvariantWatchListsContainOnlyClausesFromF (getWatchList state') (getF state') \<and> InvariantWatchListsUniq (getWatchList state') \<and> InvariantWatchListsCharacterization (getWatchList state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesEl (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesDiffer (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchCharacterization (getF state') (getWatch1 state') (getWatch2 state') (getM state') \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantUniq_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantWatchListsContainOnlyClausesFromF (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchListsUniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchListsCharacterization (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchesEl (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchesDiffer (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchCharacterization (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictFlagCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictClauseCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantWatchListsContainOnlyClausesFromF (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchListsUniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchListsCharacterization (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchesEl (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchesDiffer (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchCharacterization (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictFlagCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> InvariantWatchListsContainOnlyClausesFromF (getWatchList state') (getF state') \<and> InvariantWatchListsUniq (getWatchList state') \<and> InvariantWatchListsCharacterization (getWatchList state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesEl (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesDiffer (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchCharacterization (getF state') (getWatch1 state') (getWatch2 state') (getM state') \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantWatchListsContainOnlyClausesFromF_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchListsUniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchListsCharacterization (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchesEl (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchesDiffer (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchCharacterization (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictFlagCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictClauseCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantWatchListsUniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchListsCharacterization (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchesEl (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchesDiffer (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchCharacterization (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictFlagCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> InvariantWatchListsUniq (getWatchList state') \<and> InvariantWatchListsCharacterization (getWatchList state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesEl (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesDiffer (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchCharacterization (getF state') (getWatch1 state') (getWatch2 state') (getM state') \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantWatchListsUniq_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); InvariantWatchListsCharacterization (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchesEl (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchesDiffer (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchCharacterization (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictFlagCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictClauseCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> InvariantWatchListsCharacterization (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchesEl (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchesDiffer (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchCharacterization (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictFlagCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> InvariantWatchListsCharacterization (getWatchList state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesEl (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesDiffer (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchCharacterization (getF state') (getWatch1 state') (getWatch2 state') (getM state') \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantWatchListsCharacterization_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); InvariantWatchesEl (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchesDiffer (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchCharacterization (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictFlagCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictClauseCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> InvariantWatchesEl (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchesDiffer (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchCharacterization (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictFlagCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> InvariantWatchesEl (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchesDiffer (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchCharacterization (getF state') (getWatch1 state') (getWatch2 state') (getM state') \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantWatchesEl_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); InvariantWatchesDiffer (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantWatchCharacterization (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictFlagCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictClauseCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> InvariantWatchesDiffer (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantWatchCharacterization (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictFlagCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> InvariantWatchesDiffer (getF state') (getWatch1 state') (getWatch2 state') \<and> InvariantWatchCharacterization (getF state') (getWatch1 state') (getWatch2 state') (getM state') \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantWatchesDiffer_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; InvariantWatchCharacterization (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictFlagCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictClauseCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> InvariantWatchCharacterization (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictFlagCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> InvariantWatchCharacterization (getF state') (getWatch1 state') (getWatch2 state') (getM state') \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantWatchCharacterization_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> watchCharacterizationCondition w1 w2 (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c) \<and> watchCharacterizationCondition w2 w1 (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c); InvariantConflictFlagCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictClauseCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> watchCharacterizationCondition w1 w2 (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c) \<and> watchCharacterizationCondition w2 w1 (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c)) \<and> InvariantConflictFlagCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> watchCharacterizationCondition w1 w2 (getM state') (getF state' ! c) \<and> watchCharacterizationCondition w2 w1 (getM state') (getF state' ! c)) \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding watchCharacterizationCondition_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); InvariantConflictFlagCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantConflictClauseCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> InvariantConflictFlagCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> InvariantConflictFlagCharacterization (getConflictFlag state') (getF state') (getM state') \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantConflictFlagCharacterization_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = formulaFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantConflictClauseCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = formulaFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantConflictClauseCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> getConflictFlag state' = formulaFalse (getF state') (elements (getM state')) \<and> InvariantConflictClauseCharacterization (getConflictFlag state') (getConflictClause state') (getF state') (getM state') \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantConflictClauseCharacterization_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = formulaFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantQCharacterization (getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = formulaFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> InvariantQCharacterization (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> getConflictFlag state' = formulaFalse (getF state') (elements (getM state')) \<and> (getConflictFlag state' \<longrightarrow> getConflictClause state' < length (getF state') \<and> clauseFalse (getF state' ! getConflictClause state') (elements (getM state'))) \<and> InvariantQCharacterization (getConflictFlag state') (getQ state') (getF state') (getM state') \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantQCharacterization_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = formulaFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<not> getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> (\<forall>l. l el getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = (\<exists>c. c el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<and> isUnitClause c l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); InvariantUniqQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = formulaFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (\<not> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<forall>l. l el getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = (\<exists>c. c el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isUnitClause c l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))))) \<and> InvariantUniqQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> getConflictFlag state' = formulaFalse (getF state') (elements (getM state')) \<and> (getConflictFlag state' \<longrightarrow> getConflictClause state' < length (getF state') \<and> clauseFalse (getF state' ! getConflictClause state') (elements (getM state'))) \<and> (\<not> getConflictFlag state' \<longrightarrow> (\<forall>l. l el getQ state' = (\<exists>c. c el getF state' \<and> isUnitClause c l (elements (getM state'))))) \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> InvariantUniqQ (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantUniqQ_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = formulaFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<not> getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> (\<forall>l. l el getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = (\<exists>c. c el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<and> isUnitClause c l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = formulaFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (\<not> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<forall>l. l el getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = (\<exists>c. c el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isUnitClause c l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))))) \<and> uniq (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> getConflictFlag state' = formulaFalse (getF state') (elements (getM state')) \<and> (getConflictFlag state' \<longrightarrow> getConflictClause state' < length (getF state') \<and> clauseFalse (getF state' ! getConflictClause state') (elements (getM state'))) \<and> (\<not> getConflictFlag state' \<longrightarrow> (\<forall>l. l el getQ state' = (\<exists>c. c el getF state' \<and> isUnitClause c l (elements (getM state'))))) \<and> InvariantNoDecisionsWhenConflict (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> uniq (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantNoDecisionsWhenConflict_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = formulaFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<not> getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> (\<forall>l. l el getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = (\<exists>c. c el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<and> isUnitClause c l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = formulaFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (\<not> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<forall>l. l el getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = (\<exists>c. c el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isUnitClause c l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))))) \<and> uniq (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> getConflictFlag state' = formulaFalse (getF state') (elements (getM state')) \<and> (getConflictFlag state' \<longrightarrow> getConflictClause state' < length (getF state') \<and> clauseFalse (getF state' ! getConflictClause state') (elements (getM state'))) \<and> (\<not> getConflictFlag state' \<longrightarrow> (\<forall>l. l el getQ state' = (\<exists>c. c el getF state' \<and> isUnitClause c l (elements (getM state'))))) \<and> (\<forall>level'<currentLevel (getM state'). \<not> formulaFalse (getF state') (elements (prefixToLevel level' (getM state')))) \<and> InvariantNoDecisionsWhenUnit (getF state') (getM state') (currentLevel (getM state')) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> uniq (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantNoDecisionsWhenUnit_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = formulaFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<not> getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> (\<forall>l. l el getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = (\<exists>c. c el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<and> isUnitClause c l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))); InvariantGetReasonIsReason (getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = formulaFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (\<not> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<forall>l. l el getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = (\<exists>c. c el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isUnitClause c l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))))) \<and> uniq (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> InvariantGetReasonIsReason (getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> getConflictFlag state' = formulaFalse (getF state') (elements (getM state')) \<and> (getConflictFlag state' \<longrightarrow> getConflictClause state' < length (getF state') \<and> clauseFalse (getF state' ! getConflictClause state') (elements (getM state'))) \<and> (\<not> getConflictFlag state' \<longrightarrow> (\<forall>l. l el getQ state' = (\<exists>c. c el getF state' \<and> isUnitClause c l (elements (getM state'))))) \<and> (\<forall>level'<currentLevel (getM state'). \<not> formulaFalse (getF state') (elements (prefixToLevel level' (getM state')))) \<and> (\<forall>level'<currentLevel (getM state'). \<nexists>clause literal. clause el getF state' \<and> isUnitClause clause literal (elements (prefixToLevel level' (getM state')))) \<and> InvariantGetReasonIsReason (getReason state') (getF state') (getM state') (set (getQ state')) \<and> uniq (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantGetReasonIsReason_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = formulaFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<not> getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> (\<forall>l. l el getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = (\<exists>c. c el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<and> isUnitClause c l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))); \<forall>literal. (literal el elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> \<not> literal el decisions (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> 0 < elementLevel literal (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>reason. getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isReason (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) literal (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (0 < currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> literal \<in> set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>reason. getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> (isUnitClause (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) literal (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))); uniq (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; InvariantVarsM (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = formulaFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (\<not> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<forall>l. l el getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = (\<exists>c. c el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isUnitClause c l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))))) \<and> uniq (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> (\<forall>literal. (literal el elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> \<not> literal el decisions (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> 0 < elementLevel literal (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>reason. getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> isReason (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) literal (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> (0 < currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> literal \<in> set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>reason. getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> (isUnitClause (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) literal (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))))) \<and> InvariantVarsM (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> getConflictFlag state' = formulaFalse (getF state') (elements (getM state')) \<and> (getConflictFlag state' \<longrightarrow> getConflictClause state' < length (getF state') \<and> clauseFalse (getF state' ! getConflictClause state') (elements (getM state'))) \<and> (\<not> getConflictFlag state' \<longrightarrow> (\<forall>l. l el getQ state' = (\<exists>c. c el getF state' \<and> isUnitClause c l (elements (getM state'))))) \<and> (\<forall>level'<currentLevel (getM state'). \<not> formulaFalse (getF state') (elements (prefixToLevel level' (getM state')))) \<and> (\<forall>level'<currentLevel (getM state'). \<nexists>clause literal. clause el getF state' \<and> isUnitClause clause literal (elements (prefixToLevel level' (getM state')))) \<and> (\<forall>literal. (literal el elements (getM state') \<and> \<not> literal el decisions (getM state') \<and> 0 < elementLevel literal (getM state') \<longrightarrow> (\<exists>reason. getReason state' literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF state') \<and> isReason (getF state' ! reason) literal (elements (getM state')))) \<and> (0 < currentLevel (getM state') \<and> literal \<in> set (getQ state') \<longrightarrow> (\<exists>reason. getReason state' literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF state') \<and> (isUnitClause (getF state' ! reason) literal (elements (getM state')) \<or> clauseFalse (getF state' ! reason) (elements (getM state')))))) \<and> uniq (getQ state') \<and> InvariantVarsM (getM state') F0 {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantVarsM_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = formulaFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<not> getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> (\<forall>l. l el getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = (\<exists>c. c el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<and> isUnitClause c l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))); \<forall>literal. (literal el elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> \<not> literal el decisions (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> 0 < elementLevel literal (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>reason. getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isReason (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) literal (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (0 < currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> literal \<in> set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>reason. getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> (isUnitClause (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) literal (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))); uniq (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; vars (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<subseteq> vars F0 \<union> {}; InvariantVarsQ (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = formulaFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (\<not> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<forall>l. l el getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = (\<exists>c. c el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isUnitClause c l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))))) \<and> uniq (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> (\<forall>literal. (literal el elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> \<not> literal el decisions (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> 0 < elementLevel literal (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>reason. getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> isReason (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) literal (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> (0 < currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> literal \<in> set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>reason. getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> (isUnitClause (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) literal (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))))) \<and> vars (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<subseteq> vars F0 \<union> {} \<and> InvariantVarsQ (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> getConflictFlag state' = formulaFalse (getF state') (elements (getM state')) \<and> (getConflictFlag state' \<longrightarrow> getConflictClause state' < length (getF state') \<and> clauseFalse (getF state' ! getConflictClause state') (elements (getM state'))) \<and> (\<not> getConflictFlag state' \<longrightarrow> (\<forall>l. l el getQ state' = (\<exists>c. c el getF state' \<and> isUnitClause c l (elements (getM state'))))) \<and> (\<forall>level'<currentLevel (getM state'). \<not> formulaFalse (getF state') (elements (prefixToLevel level' (getM state')))) \<and> (\<forall>level'<currentLevel (getM state'). \<nexists>clause literal. clause el getF state' \<and> isUnitClause clause literal (elements (prefixToLevel level' (getM state')))) \<and> (\<forall>literal. (literal el elements (getM state') \<and> \<not> literal el decisions (getM state') \<and> 0 < elementLevel literal (getM state') \<longrightarrow> (\<exists>reason. getReason state' literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF state') \<and> isReason (getF state' ! reason) literal (elements (getM state')))) \<and> (0 < currentLevel (getM state') \<and> literal \<in> set (getQ state') \<longrightarrow> (\<exists>reason. getReason state' literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF state') \<and> (isUnitClause (getF state' ! reason) literal (elements (getM state')) \<or> clauseFalse (getF state' ! reason) (elements (getM state')))))) \<and> uniq (getQ state') \<and> vars (elements (getM state')) \<subseteq> vars F0 \<union> {} \<and> InvariantVarsQ (getQ state') F0 {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantVarsQ_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = formulaFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<not> getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> (\<forall>l. l el getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = (\<exists>c. c el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<and> isUnitClause c l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))); \<forall>literal. (literal el elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> \<not> literal el decisions (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> 0 < elementLevel literal (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>reason. getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isReason (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) literal (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (0 < currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> literal \<in> set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>reason. getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> (isUnitClause (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) literal (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))); uniq (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; vars (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<subseteq> vars F0 \<union> {}; vars (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<subseteq> vars F0 \<union> {}; InvariantVarsF (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) F0 {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = formulaFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (\<not> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<forall>l. l el getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = (\<exists>c. c el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isUnitClause c l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))))) \<and> uniq (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> (\<forall>literal. (literal el elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> \<not> literal el decisions (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> 0 < elementLevel literal (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>reason. getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> isReason (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) literal (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> (0 < currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> literal \<in> set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>reason. getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> (isUnitClause (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) literal (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))))) \<and> vars (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<subseteq> vars F0 \<union> {} \<and> vars (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<subseteq> vars F0 \<union> {} \<and> InvariantVarsF (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) F0 {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> getConflictFlag state' = formulaFalse (getF state') (elements (getM state')) \<and> (getConflictFlag state' \<longrightarrow> getConflictClause state' < length (getF state') \<and> clauseFalse (getF state' ! getConflictClause state') (elements (getM state'))) \<and> (\<not> getConflictFlag state' \<longrightarrow> (\<forall>l. l el getQ state' = (\<exists>c. c el getF state' \<and> isUnitClause c l (elements (getM state'))))) \<and> (\<forall>level'<currentLevel (getM state'). \<not> formulaFalse (getF state') (elements (prefixToLevel level' (getM state')))) \<and> (\<forall>level'<currentLevel (getM state'). \<nexists>clause literal. clause el getF state' \<and> isUnitClause clause literal (elements (prefixToLevel level' (getM state')))) \<and> (\<forall>literal. (literal el elements (getM state') \<and> \<not> literal el decisions (getM state') \<and> 0 < elementLevel literal (getM state') \<longrightarrow> (\<exists>reason. getReason state' literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF state') \<and> isReason (getF state' ! reason) literal (elements (getM state')))) \<and> (0 < currentLevel (getM state') \<and> literal \<in> set (getQ state') \<longrightarrow> (\<exists>reason. getReason state' literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF state') \<and> (isUnitClause (getF state' ! reason) literal (elements (getM state')) \<or> clauseFalse (getF state' ! reason) (elements (getM state')))))) \<and> uniq (getQ state') \<and> vars (elements (getM state')) \<subseteq> vars F0 \<union> {} \<and> vars (getQ state') \<subseteq> vars F0 \<union> {} \<and> InvariantVarsF (getF state') F0 {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding InvariantVarsF_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = formulaFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<not> getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> (\<forall>l. l el getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = (\<exists>c. c el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<and> isUnitClause c l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))); \<forall>literal. (literal el elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> \<not> literal el decisions (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> 0 < elementLevel literal (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>reason. getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isReason (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) literal (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (0 < currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> literal \<in> set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>reason. getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> (isUnitClause (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) literal (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))); uniq (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; currentLevel (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = 0; finite {}; vars (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<subseteq> vars F0 \<union> {}; vars (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<subseteq> vars F0 \<union> {}; vars (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<subseteq> vars F0 \<union> {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = formulaFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (\<not> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<forall>l. l el getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = (\<exists>c. c el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isUnitClause c l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))))) \<and> uniq (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> (\<forall>literal. (literal el elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> \<not> literal el decisions (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> 0 < elementLevel literal (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>reason. getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> isReason (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) literal (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> (0 < currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> literal \<in> set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>reason. getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> (isUnitClause (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) literal (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))))) \<and> vars (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<subseteq> vars F0 \<union> {} \<and> vars (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<subseteq> vars F0 \<union> {} \<and> vars (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<subseteq> vars F0 \<union> {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> currentLevel (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> getConflictFlag state' = formulaFalse (getF state') (elements (getM state')) \<and> (getConflictFlag state' \<longrightarrow> getConflictClause state' < length (getF state') \<and> clauseFalse (getF state' ! getConflictClause state') (elements (getM state'))) \<and> (\<not> getConflictFlag state' \<longrightarrow> (\<forall>l. l el getQ state' = (\<exists>c. c el getF state' \<and> isUnitClause c l (elements (getM state'))))) \<and> (\<forall>level'<currentLevel (getM state'). \<not> formulaFalse (getF state') (elements (prefixToLevel level' (getM state')))) \<and> (\<forall>level'<currentLevel (getM state'). \<nexists>clause literal. clause el getF state' \<and> isUnitClause clause literal (elements (prefixToLevel level' (getM state')))) \<and> (\<forall>literal. (literal el elements (getM state') \<and> \<not> literal el decisions (getM state') \<and> 0 < elementLevel literal (getM state') \<longrightarrow> (\<exists>reason. getReason state' literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF state') \<and> isReason (getF state' ! reason) literal (elements (getM state')))) \<and> (0 < currentLevel (getM state') \<and> literal \<in> set (getQ state') \<longrightarrow> (\<exists>reason. getReason state' literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF state') \<and> (isUnitClause (getF state' ! reason) literal (elements (getM state')) \<or> clauseFalse (getF state' ! reason) (elements (getM state')))))) \<and> uniq (getQ state') \<and> vars (elements (getM state')) \<subseteq> vars F0 \<union> {} \<and> vars (getQ state') \<subseteq> vars F0 \<union> {} \<and> vars (getF state') \<subseteq> vars F0 \<union> {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> currentLevel (getM state') = 0
[PROOF STEP]
unfolding currentLevel_def
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>consistent (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); uniq (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<forall>l c. c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l) \<longrightarrow> 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); \<forall>l. uniq (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l); \<forall>c l. (c \<in> set (getWatchList \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> l)) = (Some l = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<or> Some l = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>w1 w2. getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w1 \<and> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause = Some w2 \<and> w1 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause \<and> w2 el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! clause); \<forall>clause. 0 \<le> clause \<and> clause < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause \<noteq> getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> clause; \<forall>c w1 w2. 0 \<le> c \<and> c < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> Some w1 = getWatch1 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<and> Some w2 = getWatch2 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> c \<longrightarrow> (literalFalse w1 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w1) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (literalFalse w2 (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> literalTrue l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel l (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> (\<forall>l. l el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> elementLevel (opposite l) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<le> elementLevel (opposite w2) (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = formulaFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! getConflictClause \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)); \<not> getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<longrightarrow> (\<forall>l. l el getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = (\<exists>c. c el getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<and> isUnitClause c l (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))); \<forall>literal. (literal el elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> \<not> literal el decisions (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> 0 < elementLevel literal (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>reason. getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isReason (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) literal (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (0 < length (decisions (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> literal \<in> set (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<exists>reason. getReason \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> (isUnitClause (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) literal (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<or> clauseFalse (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> ! reason) (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))); uniq (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>); getConflictFlag \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> \<or> getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = []; length (decisions (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) = 0; finite {}; vars (elements (getM \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<subseteq> vars F0 \<union> {}; vars (getQ \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<subseteq> vars F0 \<union> {}; vars (getF \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<subseteq> vars F0 \<union> {}; initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>; set F0 \<subseteq> set F0\<rbrakk> \<Longrightarrow> consistent (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> uniq (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l c. c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l) \<longrightarrow> 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (\<forall>l. uniq (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) \<and> (\<forall>c l. (c \<in> set (getWatchList (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) l)) = (Some l = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<or> Some l = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>w1 w2. getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w1 \<and> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause = Some w2 \<and> w1 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause \<and> w2 el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause \<noteq> getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> Some w1 = getWatch1 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<and> Some w2 = getWatch2 (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) c \<longrightarrow> (literalFalse w1 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w1) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (literalFalse w2 (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<longrightarrow> (\<exists>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> literalTrue l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel l (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> (\<forall>l. l el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> elementLevel (opposite l) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<le> elementLevel (opposite w2) (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = formulaFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! getConflictClause (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))) \<and> (\<not> getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<longrightarrow> (\<forall>l. l el getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = (\<exists>c. c el getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<and> isUnitClause c l (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)))))) \<and> uniq (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> (\<forall>literal. (literal el elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> \<not> literal el decisions (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> 0 < elementLevel literal (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>reason. getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> isReason (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) literal (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))) \<and> (0 < length (decisions (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<and> literal \<in> set (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<longrightarrow> (\<exists>reason. getReason (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<and> (isUnitClause (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) literal (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<or> clauseFalse (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) ! reason) (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))))))) \<and> vars (elements (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) \<subseteq> vars F0 \<union> {} \<and> vars (getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<subseteq> vars F0 \<union> {} \<and> vars (getF (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>)) \<subseteq> vars F0 \<union> {} \<and> (getConflictFlag (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) \<or> getQ (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>) = []) \<and> length (decisions (getM (initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr>))) = 0

goal (1 subgoal):
 1. let state' = initialize F0 \<lparr>getSATFlag = UNDEF, getF = [], getM = [], getConflictFlag = False, getConflictClause = 0, getQ = [], getReason = Map.empty, getWatch1 = Map.empty, getWatch2 = Map.empty, getWatchList = \<lambda>l. [], getC = [], getCl = Pos 0, getCll = Pos 0, getCn = 0\<rparr> in consistent (elements (getM state')) \<and> uniq (elements (getM state')) \<and> (\<forall>l c. c \<in> set (getWatchList state' l) \<longrightarrow> 0 \<le> c \<and> c < length (getF state')) \<and> (\<forall>l. uniq (getWatchList state' l)) \<and> (\<forall>c l. (c \<in> set (getWatchList state' l)) = (Some l = getWatch1 state' c \<or> Some l = getWatch2 state' c)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> (\<exists>w1 w2. getWatch1 state' clause = Some w1 \<and> getWatch2 state' clause = Some w2 \<and> w1 el getF state' ! clause \<and> w2 el getF state' ! clause)) \<and> (\<forall>clause. 0 \<le> clause \<and> clause < length (getF state') \<longrightarrow> getWatch1 state' clause \<noteq> getWatch2 state' clause) \<and> (\<forall>c w1 w2. 0 \<le> c \<and> c < length (getF state') \<and> Some w1 = getWatch1 state' c \<and> Some w2 = getWatch2 state' c \<longrightarrow> (literalFalse w1 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w1) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w1 \<and> l \<noteq> w2 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w1) (getM state'))) \<and> (literalFalse w2 (elements (getM state')) \<longrightarrow> (\<exists>l. l el getF state' ! c \<and> literalTrue l (elements (getM state')) \<and> elementLevel l (getM state') \<le> elementLevel (opposite w2) (getM state')) \<or> (\<forall>l. l el getF state' ! c \<and> l \<noteq> w2 \<and> l \<noteq> w1 \<longrightarrow> literalFalse l (elements (getM state')) \<and> elementLevel (opposite l) (getM state') \<le> elementLevel (opposite w2) (getM state')))) \<and> getConflictFlag state' = formulaFalse (getF state') (elements (getM state')) \<and> (getConflictFlag state' \<longrightarrow> getConflictClause state' < length (getF state') \<and> clauseFalse (getF state' ! getConflictClause state') (elements (getM state'))) \<and> (\<not> getConflictFlag state' \<longrightarrow> (\<forall>l. l el getQ state' = (\<exists>c. c el getF state' \<and> isUnitClause c l (elements (getM state'))))) \<and> (\<forall>level'<length (decisions (getM state')). \<not> formulaFalse (getF state') (elements (prefixToLevel level' (getM state')))) \<and> (\<forall>level'<length (decisions (getM state')). \<nexists>clause literal. clause el getF state' \<and> isUnitClause clause literal (elements (prefixToLevel level' (getM state')))) \<and> (\<forall>literal. (literal el elements (getM state') \<and> \<not> literal el decisions (getM state') \<and> 0 < elementLevel literal (getM state') \<longrightarrow> (\<exists>reason. getReason state' literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF state') \<and> isReason (getF state' ! reason) literal (elements (getM state')))) \<and> (0 < length (decisions (getM state')) \<and> literal \<in> set (getQ state') \<longrightarrow> (\<exists>reason. getReason state' literal = Some reason \<and> 0 \<le> reason \<and> reason < length (getF state') \<and> (isUnitClause (getF state' ! reason) literal (elements (getM state')) \<or> clauseFalse (getF state' ! reason) (elements (getM state')))))) \<and> uniq (getQ state') \<and> vars (elements (getM state')) \<subseteq> vars F0 \<union> {} \<and> vars (getQ state') \<subseteq> vars F0 \<union> {} \<and> vars (getF state') \<subseteq> vars F0 \<union> {} \<and> (getConflictFlag state' \<or> getQ state' = []) \<and> length (decisions (getM state')) = 0
[PROOF STEP]
by (simp) (force)