< Module unsat_proofs:frat.
< Prove_Constraint unsat_proofs:lrat:proj_lit_unique. Proof completed.
< Prove_Constraint unsat_proofs:lrat:proj_lit_is. Proof completed.
< Prove_Constraint unsat_proofs:lrat:proj_clause_unique. Proof completed.
< Prove_Constraint unsat_proofs:lrat:proj_clause_is. Proof completed.
< Prove_Constraint unsat_proofs:lrat:proj_formula_unique. Proof completed.
< Prove_Constraint unsat_proofs:lrat:proj_formula_is. Proof completed.
< Add_Proj_Rel unsat_proofs:lrat:is_clause. Proof completed.
< Prove_Ext_Ind unsat_proofs:lrat:is_clause. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Proof completed.
< Add_Proj_Rel unsat_proofs:lrat:is_formula. Proof completed.
< Prove_Ext_Ind unsat_proofs:lrat:is_formula. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Proof completed.
< Prove unsat_proofs:lrat:is_lit_pos_or_neg. Proof completed.
< Prove unsat_proofs:lrat:is_clause_empty_or_not. Proof completed.
< Prove unsat_proofs:lrat:is_clause_or_or_not. Proof completed.
< Prove unsat_proofs:lrat:is_clause_eq_or_not. Proof completed.
< Prove unsat_proofs:lrat:is_formula_empty_or_not. Proof completed.
< Prove unsat_proofs:lrat:is_formula_and_or_not. Proof completed.
< Prove unsat_proofs:lrat:is_formula_eq_or_not. Proof completed.
< Extensible_Theorem is_finalClauses_addFClause_or_not : forall F, IsF : is_finalClauses F -> (exists ID C F', F = addFClause ID C F') \/ ((exists ID C F', F = addFClause ID C F') -> false) on IsF. Subgoal 1: Variables: FinalClauses Clause I IH : forall F, is_finalClauses F * -> (exists ID C F', F = addFClause ID C F') \/ ((exists ID C F', F = addFClause ID C F') -> false) IsF : is_finalClauses (addFClause I Clause FinalClauses) @ IsF1 : is_integer I IsF2 : is_clause Clause IsF3 : is_finalClauses FinalClauses * ============================ (exists ID C F', addFClause I Clause FinalClauses = addFClause ID C F') \/ ((exists ID C F', addFClause I Clause FinalClauses = addFClause ID C F') -> false)
< search. Subgoal 2: IH : forall F, is_finalClauses F * -> (exists ID C F', F = addFClause ID C F') \/ ((exists ID C F', F = addFClause ID C F') -> false) IsF : is_finalClauses endFClause @ ============================ (exists ID C F', endFClause = addFClause ID C F') \/ ((exists ID C F', endFClause = addFClause ID C F') -> false)
< search. Proof completed.
< Extensible_Theorem is_finalClauses_endFClause_or_not : forall F, IsF : is_finalClauses F -> F = endFClause \/ (F = endFClause -> false) on IsF. Subgoal 1: Variables: FinalClauses Clause I IH : forall F, is_finalClauses F * -> F = endFClause \/ (F = endFClause -> false) IsF : is_finalClauses (addFClause I Clause FinalClauses) @ IsF1 : is_integer I IsF2 : is_clause Clause IsF3 : is_finalClauses FinalClauses * ============================ addFClause I Clause FinalClauses = endFClause \/ (addFClause I Clause FinalClauses = endFClause -> false)
< search. Subgoal 2: IH : forall F, is_finalClauses F * -> F = endFClause \/ (F = endFClause -> false) IsF : is_finalClauses endFClause @ ============================ endFClause = endFClause \/ (endFClause = endFClause -> false)
< search. Proof completed.
< Extensible_Theorem is_finalClauses_eq_or_not : forall F1 F2, IsF1 : is_finalClauses F1 -> IsF2 : is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) on IsF1. Subgoal 1: Variables: F2 FinalClauses Clause I IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF2 : is_finalClauses F2 IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * ============================ addFClause I Clause FinalClauses = F2 \/ (addFClause I Clause FinalClauses = F2 -> false)
< Or: apply is_finalClauses_addFClause_or_not to IsF2. Subgoal 1: Variables: F2 FinalClauses Clause I IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF2 : is_finalClauses F2 IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * Or : (exists ID C F', F2 = addFClause ID C F') \/ ((exists ID C F', F2 = addFClause ID C F') -> false) ============================ addFClause I Clause FinalClauses = F2 \/ (addFClause I Clause FinalClauses = F2 -> false)
< N: case Or. Subgoal 1.1: Variables: FinalClauses Clause I ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF2 : is_finalClauses (addFClause ID C F') IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * ============================ addFClause I Clause FinalClauses = addFClause ID C F' \/ (addFClause I Clause FinalClauses = addFClause ID C F' -> false)
< Is': case IsF2. Subgoal 1.1: Variables: FinalClauses Clause I ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' ============================ addFClause I Clause FinalClauses = addFClause ID C F' \/ (addFClause I Clause FinalClauses = addFClause ID C F' -> false)
< Or: apply is_integer_eq_or_not to IsF3 Is'. Subgoal 1.1: Variables: FinalClauses Clause I ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' Or : I = ID \/ (I = ID -> false) ============================ addFClause I Clause FinalClauses = addFClause ID C F' \/ (addFClause I Clause FinalClauses = addFClause ID C F' -> false)
< N: case Or. Subgoal 1.1.1: Variables: FinalClauses Clause ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID Clause FinalClauses) @ IsF3 : is_integer ID IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' ============================ addFClause ID Clause FinalClauses = addFClause ID C F' \/ (addFClause ID Clause FinalClauses = addFClause ID C F' -> false)
< Or: apply is_clause_eq_or_not to IsF4 Is'1. Subgoal 1.1.1: Variables: FinalClauses Clause ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID Clause FinalClauses) @ IsF3 : is_integer ID IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' Or : Clause = C \/ (Clause = C -> false) ============================ addFClause ID Clause FinalClauses = addFClause ID C F' \/ (addFClause ID Clause FinalClauses = addFClause ID C F' -> false)
< N: case Or. Subgoal 1.1.1.1: Variables: FinalClauses ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID C FinalClauses) @ IsF3 : is_integer ID IsF4 : is_clause C IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' ============================ addFClause ID C FinalClauses = addFClause ID C F' \/ (addFClause ID C FinalClauses = addFClause ID C F' -> false)
< Or: apply IH to IsF5 Is'2. Subgoal 1.1.1.1: Variables: FinalClauses ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID C FinalClauses) @ IsF3 : is_integer ID IsF4 : is_clause C IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' Or : FinalClauses = F' \/ (FinalClauses = F' -> false) ============================ addFClause ID C FinalClauses = addFClause ID C F' \/ (addFClause ID C FinalClauses = addFClause ID C F' -> false)
< N: case Or. Subgoal 1.1.1.1.1: Variables: ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID C F') @ IsF3 : is_integer ID IsF4 : is_clause C IsF5 : is_finalClauses F' * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' ============================ addFClause ID C F' = addFClause ID C F' \/ (addFClause ID C F' = addFClause ID C F' -> false)
< search. Subgoal 1.1.1.1.2: Variables: FinalClauses ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID C FinalClauses) @ IsF3 : is_integer ID IsF4 : is_clause C IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : FinalClauses = F' -> false ============================ addFClause ID C FinalClauses = addFClause ID C F' \/ (addFClause ID C FinalClauses = addFClause ID C F' -> false)
< right. Subgoal 1.1.1.1.2: Variables: FinalClauses ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID C FinalClauses) @ IsF3 : is_integer ID IsF4 : is_clause C IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : FinalClauses = F' -> false ============================ addFClause ID C FinalClauses = addFClause ID C F' -> false
< intros E. Subgoal 1.1.1.1.2: Variables: FinalClauses ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID C FinalClauses) @ IsF3 : is_integer ID IsF4 : is_clause C IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : FinalClauses = F' -> false E : addFClause ID C FinalClauses = addFClause ID C F' ============================ false
< case E. Subgoal 1.1.1.1.2: Variables: ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID C F') @ IsF3 : is_integer ID IsF4 : is_clause C IsF5 : is_finalClauses F' * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : F' = F' -> false ============================ false
< backchain N. Subgoal 1.1.1.2: Variables: FinalClauses Clause ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID Clause FinalClauses) @ IsF3 : is_integer ID IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : Clause = C -> false ============================ addFClause ID Clause FinalClauses = addFClause ID C F' \/ (addFClause ID Clause FinalClauses = addFClause ID C F' -> false)
< right. Subgoal 1.1.1.2: Variables: FinalClauses Clause ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID Clause FinalClauses) @ IsF3 : is_integer ID IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : Clause = C -> false ============================ addFClause ID Clause FinalClauses = addFClause ID C F' -> false
< intros E. Subgoal 1.1.1.2: Variables: FinalClauses Clause ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID Clause FinalClauses) @ IsF3 : is_integer ID IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : Clause = C -> false E : addFClause ID Clause FinalClauses = addFClause ID C F' ============================ false
< case E. Subgoal 1.1.1.2: Variables: ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID C F') @ IsF3 : is_integer ID IsF4 : is_clause C IsF5 : is_finalClauses F' * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : C = C -> false ============================ false
< backchain N. Subgoal 1.1.2: Variables: FinalClauses Clause I ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : I = ID -> false ============================ addFClause I Clause FinalClauses = addFClause ID C F' \/ (addFClause I Clause FinalClauses = addFClause ID C F' -> false)
< right. Subgoal 1.1.2: Variables: FinalClauses Clause I ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : I = ID -> false ============================ addFClause I Clause FinalClauses = addFClause ID C F' -> false
< intros E. Subgoal 1.1.2: Variables: FinalClauses Clause I ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : I = ID -> false E : addFClause I Clause FinalClauses = addFClause ID C F' ============================ false
< case E. Subgoal 1.1.2: Variables: ID C F' IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause ID C F') @ IsF3 : is_integer ID IsF4 : is_clause C IsF5 : is_finalClauses F' * Is' : is_integer ID Is'1 : is_clause C Is'2 : is_finalClauses F' N : ID = ID -> false ============================ false
< backchain N. Subgoal 1.2: Variables: F2 FinalClauses Clause I IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF2 : is_finalClauses F2 IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * N : (exists ID C F', F2 = addFClause ID C F') -> false ============================ addFClause I Clause FinalClauses = F2 \/ (addFClause I Clause FinalClauses = F2 -> false)
< right. Subgoal 1.2: Variables: F2 FinalClauses Clause I IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF2 : is_finalClauses F2 IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * N : (exists ID C F', F2 = addFClause ID C F') -> false ============================ addFClause I Clause FinalClauses = F2 -> false
< intros E. Subgoal 1.2: Variables: F2 FinalClauses Clause I IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF2 : is_finalClauses F2 IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * N : (exists ID C F', F2 = addFClause ID C F') -> false E : addFClause I Clause FinalClauses = F2 ============================ false
< case E. Subgoal 1.2: Variables: FinalClauses Clause I IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses (addFClause I Clause FinalClauses) @ IsF2 : is_finalClauses (addFClause I Clause FinalClauses) IsF3 : is_integer I IsF4 : is_clause Clause IsF5 : is_finalClauses FinalClauses * N : (exists ID C F', addFClause I Clause FinalClauses = addFClause ID C F') -> false ============================ false
< backchain N. Subgoal 2: Variables: F2 IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses endFClause @ IsF2 : is_finalClauses F2 ============================ endFClause = F2 \/ (endFClause = F2 -> false)
< Or: apply is_finalClauses_endFClause_or_not to IsF2. Subgoal 2: Variables: F2 IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses endFClause @ IsF2 : is_finalClauses F2 Or : F2 = endFClause \/ (F2 = endFClause -> false) ============================ endFClause = F2 \/ (endFClause = F2 -> false)
< N: case Or. Subgoal 2.1: IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses endFClause @ IsF2 : is_finalClauses endFClause ============================ endFClause = endFClause \/ (endFClause = endFClause -> false)
< search. Subgoal 2.2: Variables: F2 IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses endFClause @ IsF2 : is_finalClauses F2 N : F2 = endFClause -> false ============================ endFClause = F2 \/ (endFClause = F2 -> false)
< right. Subgoal 2.2: Variables: F2 IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses endFClause @ IsF2 : is_finalClauses F2 N : F2 = endFClause -> false ============================ endFClause = F2 -> false
< intros E. Subgoal 2.2: Variables: F2 IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses endFClause @ IsF2 : is_finalClauses F2 N : F2 = endFClause -> false E : endFClause = F2 ============================ false
< case E. Subgoal 2.2: IH : forall F1 F2, is_finalClauses F1 * -> is_finalClauses F2 -> F1 = F2 \/ (F1 = F2 -> false) IsF1 : is_finalClauses endFClause @ IsF2 : is_finalClauses endFClause N : endFClause = endFClause -> false ============================ false
< backchain N. Proof completed.
< Prove unsat_proofs:lrat:negate_lit_unique. Proof completed.
< Prove unsat_proofs:lrat:negate_lit_reverse. Proof completed.
< Prove unsat_proofs:lrat:negate_lit_not_same. Proof completed.
< Prove unsat_proofs:lrat:negate_lit_is_lit. Proof completed.
< Prove unsat_proofs:lrat:negate_lit_is_lit_back. Proof completed.
< Prove unsat_proofs:lrat:negate_lit_exists. Proof completed.
< Prove_Constraint unsat_proofs:lrat:sat_clause_ext_to_proj. Proof completed.
< Prove_Constraint unsat_proofs:lrat:sat_clause_proj_to_ext. Proof completed.
< Prove_Constraint unsat_proofs:lrat:unsat_clause_ext_to_proj. Proof completed.
< Prove_Constraint unsat_proofs:lrat:unsat_clause_proj_to_ext. Proof completed.
< Prove_Constraint unsat_proofs:lrat:sat_formula_ext_to_proj. Proof completed.
< Prove_Constraint unsat_proofs:lrat:sat_formula_proj_to_ext. Proof completed.
< Prove unsat_proofs:lrat:unsat_sat_clause. Proof completed.
< Prove unsat_proofs:lrat:sat_clause_orderless. Proof completed.
< Prove unsat_proofs:lrat:sat_formula_orderless. Proof completed.
< Prove unsat_proofs:lrat:unsat_clause_orderless. Proof completed.
< Prove unsat_proofs:lrat:unit_clause_is. Proof completed.
< Prove unsat_proofs:lrat:unit_clause_unique. Proof completed.
< Prove unsat_proofs:lrat:unit_clause_not_assigned. Proof completed.
< Prove unsat_proofs:lrat:unit_clause_not_assigned_negate. Proof completed.
< Prove unsat_proofs:lrat:unit_clause_expand. Proof completed.
< Prove unsat_proofs:lrat:unit_clause_add. Proof completed.
< Prove unsat_proofs:lrat:gatherLits_is. Proof completed.
< Prove unsat_proofs:lrat:gatherLits_exists. Proof completed.
< Prove unsat_proofs:lrat:gatherLits_permutation. Proof completed.
< Prove_Constraint unsat_proofs:lrat:proj_gatherLits. Proof completed.
< Prove_Constraint unsat_proofs:lrat:proj_gatherLits_permutation. Proof completed.
< Prove unsat_proofs:lrat:gatherLits_sat. Proof completed.
< Prove unsat_proofs:lrat:gatherLits_mem_sat. Proof completed.
< Prove unsat_proofs:lrat:gatherLits_unsat. Proof completed.
< Prove unsat_proofs:lrat:negate_lits_unsat. Proof completed.
< Extensible_Theorem checkFinalClauses_orderless : forall K1 K2 FC, IsK1 : is_list (is_pair is_integer is_clause) K1 -> IsK2 : is_list (is_pair is_integer is_clause) K2 -> CFC : checkFinalClauses K1 FC -> Prm : permutation K1 K2 -> checkFinalClauses K2 FC on CFC. Subgoal 1: Variables: K1 K2 KRest Rest C ID IH : forall K1 K2 FC, is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> checkFinalClauses K1 FC * -> permutation K1 K2 -> checkFinalClauses K2 FC IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 CFC : checkFinalClauses K1 (addFClause ID C Rest) @ Prm : permutation K1 K2 CFC1 : select (ID, C) KRest K1 CFC2 : checkFinalClauses KRest Rest * ============================ checkFinalClauses K2 (addFClause ID C Rest)
< M1: apply select_mem to CFC1. Subgoal 1: Variables: K1 K2 KRest Rest C ID IH : forall K1 K2 FC, is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> checkFinalClauses K1 FC * -> permutation K1 K2 -> checkFinalClauses K2 FC IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 CFC : checkFinalClauses K1 (addFClause ID C Rest) @ Prm : permutation K1 K2 CFC1 : select (ID, C) KRest K1 CFC2 : checkFinalClauses KRest Rest * M1 : mem (ID, C) K1 ============================ checkFinalClauses K2 (addFClause ID C Rest)
< M2: apply permutation_mem to Prm M1. Subgoal 1: Variables: K1 K2 KRest Rest C ID IH : forall K1 K2 FC, is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> checkFinalClauses K1 FC * -> permutation K1 K2 -> checkFinalClauses K2 FC IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 CFC : checkFinalClauses K1 (addFClause ID C Rest) @ Prm : permutation K1 K2 CFC1 : select (ID, C) KRest K1 CFC2 : checkFinalClauses KRest Rest * M1 : mem (ID, C) K1 M2 : mem (ID, C) K2 ============================ checkFinalClauses K2 (addFClause ID C Rest)
< S: apply mem_select to M2. Subgoal 1: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 FC, is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> checkFinalClauses K1 FC * -> permutation K1 K2 -> checkFinalClauses K2 FC IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 CFC : checkFinalClauses K1 (addFClause ID C Rest) @ Prm : permutation K1 K2 CFC1 : select (ID, C) KRest K1 CFC2 : checkFinalClauses KRest Rest * M1 : mem (ID, C) K1 M2 : mem (ID, C) K2 S : select (ID, C) L' K2 ============================ checkFinalClauses K2 (addFClause ID C Rest)
< apply selects_permutation to _ _ Prm _ _. Subgoal 1: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 FC, is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> checkFinalClauses K1 FC * -> permutation K1 K2 -> checkFinalClauses K2 FC IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 CFC : checkFinalClauses K1 (addFClause ID C Rest) @ Prm : permutation K1 K2 CFC1 : select (ID, C) KRest K1 CFC2 : checkFinalClauses KRest Rest * M1 : mem (ID, C) K1 M2 : mem (ID, C) K2 S : select (ID, C) L' K2 H1 : permutation KRest L' ============================ checkFinalClauses K2 (addFClause ID C Rest)
< apply select_is to IsK1 _. Subgoal 1: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 FC, is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> checkFinalClauses K1 FC * -> permutation K1 K2 -> checkFinalClauses K2 FC IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 CFC : checkFinalClauses K1 (addFClause ID C Rest) @ Prm : permutation K1 K2 CFC1 : select (ID, C) KRest K1 CFC2 : checkFinalClauses KRest Rest * M1 : mem (ID, C) K1 M2 : mem (ID, C) K2 S : select (ID, C) L' K2 H1 : permutation KRest L' H2 : is_list (is_pair is_integer is_clause) KRest ============================ checkFinalClauses K2 (addFClause ID C Rest)
< apply select_is to IsK2 _. Subgoal 1: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 FC, is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> checkFinalClauses K1 FC * -> permutation K1 K2 -> checkFinalClauses K2 FC IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 CFC : checkFinalClauses K1 (addFClause ID C Rest) @ Prm : permutation K1 K2 CFC1 : select (ID, C) KRest K1 CFC2 : checkFinalClauses KRest Rest * M1 : mem (ID, C) K1 M2 : mem (ID, C) K2 S : select (ID, C) L' K2 H1 : permutation KRest L' H2 : is_list (is_pair is_integer is_clause) KRest H3 : is_list (is_pair is_integer is_clause) L' ============================ checkFinalClauses K2 (addFClause ID C Rest)
< apply IH to _ _ CFC2 _. Subgoal 1: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 FC, is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> checkFinalClauses K1 FC * -> permutation K1 K2 -> checkFinalClauses K2 FC IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 CFC : checkFinalClauses K1 (addFClause ID C Rest) @ Prm : permutation K1 K2 CFC1 : select (ID, C) KRest K1 CFC2 : checkFinalClauses KRest Rest * M1 : mem (ID, C) K1 M2 : mem (ID, C) K2 S : select (ID, C) L' K2 H1 : permutation KRest L' H2 : is_list (is_pair is_integer is_clause) KRest H3 : is_list (is_pair is_integer is_clause) L' H4 : checkFinalClauses L' Rest ============================ checkFinalClauses K2 (addFClause ID C Rest)
< search. Subgoal 2: Variables: K2 IH : forall K1 K2 FC, is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> checkFinalClauses K1 FC * -> permutation K1 K2 -> checkFinalClauses K2 FC IsK1 : is_list (is_pair is_integer is_clause) [] IsK2 : is_list (is_pair is_integer is_clause) K2 CFC : checkFinalClauses [] endFClause @ Prm : permutation [] K2 ============================ checkFinalClauses K2 endFClause
< case Prm. Subgoal 2: IH : forall K1 K2 FC, is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> checkFinalClauses K1 FC * -> permutation K1 K2 -> checkFinalClauses K2 FC IsK1 : is_list (is_pair is_integer is_clause) [] IsK2 : is_list (is_pair is_integer is_clause) [] CFC : checkFinalClauses [] endFClause @ ============================ checkFinalClauses [] endFClause
< search. Proof completed.
< Prove_Constraint unsat_proofs:lrat:proj_proof_is. Subgoal 1: Variables: Known Prf ID FC Proj : Known |{proof}- endFrat ID FC ~~> emptyLrat ID Prf IsP : is_proof (endFrat ID FC) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Proj1 : rupProof Known emptyClause Prf ============================ is_proof (emptyLrat ID Prf)
< Is: case IsP. Subgoal 1: Variables: Known Prf ID FC Proj : Known |{proof}- endFrat ID FC ~~> emptyLrat ID Prf IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Proj1 : rupProof Known emptyClause Prf Is : is_integer ID Is1 : is_finalClauses FC ============================ is_proof (emptyLrat ID Prf)
< apply rupProof_is to Proj1 IsKnown. Subgoal 1: Variables: Known Prf ID FC Proj : Known |{proof}- endFrat ID FC ~~> emptyLrat ID Prf IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Proj1 : rupProof Known emptyClause Prf Is : is_integer ID Is1 : is_finalClauses FC H1 : is_list is_integer Prf ============================ is_proof (emptyLrat ID Prf)
< search. Subgoal 2: Variables: Known Prf ID FC Proj : Known |{proof}- endFratPrf ID Prf FC ~~> emptyLrat ID Prf IsP : is_proof (endFratPrf ID Prf FC) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ is_proof (emptyLrat ID Prf)
< Is: case IsP. Subgoal 2: Variables: Known Prf ID FC Proj : Known |{proof}- endFratPrf ID Prf FC ~~> emptyLrat ID Prf IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Is : is_integer ID Is1 : is_list is_integer Prf Is2 : is_finalClauses FC ============================ is_proof (emptyLrat ID Prf)
< search. Subgoal 3: Variables: Known Rest Prf C ID Proj : Known |{proof}- addProofless ID C Rest ~~> addLrupProof ID C Prf Rest IsP : is_proof (addProofless ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Proj1 : rupProof Known C Prf ============================ is_proof (addLrupProof ID C Prf Rest)
< Is: case IsP. Subgoal 3: Variables: Known Rest Prf C ID Proj : Known |{proof}- addProofless ID C Rest ~~> addLrupProof ID C Prf Rest IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Proj1 : rupProof Known C Prf Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ is_proof (addLrupProof ID C Prf Rest)
< apply rupProof_is to Proj1 IsKnown. Subgoal 3: Variables: Known Rest Prf C ID Proj : Known |{proof}- addProofless ID C Rest ~~> addLrupProof ID C Prf Rest IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Proj1 : rupProof Known C Prf Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list is_integer Prf ============================ is_proof (addLrupProof ID C Prf Rest)
< search. Subgoal 4: Variables: Known Rest F C T Proj : Known |{proof}- relocateClause F T Rest ~~> addLrupProof T C [F] (deleteLratProof F Rest) IsP : is_proof (relocateClause F T Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Proj1 : T = F -> false Proj2 : mem (F, C) Known ============================ is_proof (addLrupProof T C [F] (deleteLratProof F Rest))
< Is: case IsP. Subgoal 4: Variables: Known Rest F C T Proj : Known |{proof}- relocateClause F T Rest ~~> addLrupProof T C [F] (deleteLratProof F Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Proj1 : T = F -> false Proj2 : mem (F, C) Known Is : is_integer F Is1 : is_integer T Is2 : is_proof Rest ============================ is_proof (addLrupProof T C [F] (deleteLratProof F Rest))
< IsFC: apply mem_is to IsKnown Proj2. Subgoal 4: Variables: Known Rest T ID C1 Proj : Known |{proof}- relocateClause ID T Rest ~~> addLrupProof T C1 [ID] (deleteLratProof ID Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Proj1 : T = ID -> false Proj2 : mem (ID, C1) Known Is : is_integer ID Is1 : is_integer T Is2 : is_proof Rest IsFC : is_integer ID IsFC1 : is_clause C1 ============================ is_proof (addLrupProof T C1 [ID] (deleteLratProof ID Rest))
< search. Subgoal 5: Variables: Known PT ID Proj : Known |{proof}- relocateClause ID ID PT ~~> PT IsP : is_proof (relocateClause ID ID PT) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ is_proof PT
< Is: case IsP. Subgoal 5: Variables: Known PT ID Proj : Known |{proof}- relocateClause ID ID PT ~~> PT IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Is : is_integer ID Is1 : is_integer ID Is2 : is_proof PT ============================ is_proof PT
< search. Subgoal 6: Variables: Known Rest ID C Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest IsP : is_proof (deleteFrat ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ is_proof (deleteLratProof ID Rest)
< case IsP. Subgoal 6: Variables: Known Rest ID C Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest ============================ is_proof (deleteLratProof ID Rest)
< search. Subgoal 7: Variables: Known PT Comment Proj : Known |{proof}- commentProof Comment PT ~~> PT IsP : is_proof (commentProof Comment PT) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ is_proof PT
< case IsP. Subgoal 7: Variables: Known PT Comment Proj : Known |{proof}- commentProof Comment PT ~~> PT IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known H1 : is_string Comment H2 : is_proof PT ============================ is_proof PT
< search. Proof completed.
< Prove_Constraint unsat_proofs:lrat:proj_proof_extend. Subgoal 1: Variables: Known Known' Prf ID FC Proj : Known |{proof}- endFrat ID FC ~~> emptyLrat ID Prf IsP : is_proof (endFrat ID FC) IsKnown : is_list (is_pair is_integer is_clause) Known IsKnown' : is_list (is_pair is_integer is_clause) Known' GCL : good_clause_list Known GCL' : good_clause_list Known' Mems : forall ID C, mem (ID, C) Known -> mem (ID, C) Known' Proj1 : rupProof Known emptyClause Prf ============================ Known' |{proof}- endFrat ID FC ~~> emptyLrat ID Prf
< apply rupProof_orderless to _ IsKnown' _ Proj1 _. Subgoal 1: Variables: Known Known' Prf ID FC Proj : Known |{proof}- endFrat ID FC ~~> emptyLrat ID Prf IsP : is_proof (endFrat ID FC) IsKnown : is_list (is_pair is_integer is_clause) Known IsKnown' : is_list (is_pair is_integer is_clause) Known' GCL : good_clause_list Known GCL' : good_clause_list Known' Mems : forall ID C, mem (ID, C) Known -> mem (ID, C) Known' Proj1 : rupProof Known emptyClause Prf H1 : rupProof Known' emptyClause Prf ============================ Known' |{proof}- endFrat ID FC ~~> emptyLrat ID Prf
< search. Subgoal 2: Variables: Known Known' Prf ID FC Proj : Known |{proof}- endFratPrf ID Prf FC ~~> emptyLrat ID Prf IsP : is_proof (endFratPrf ID Prf FC) IsKnown : is_list (is_pair is_integer is_clause) Known IsKnown' : is_list (is_pair is_integer is_clause) Known' GCL : good_clause_list Known GCL' : good_clause_list Known' Mems : forall ID C, mem (ID, C) Known -> mem (ID, C) Known' ============================ Known' |{proof}- endFratPrf ID Prf FC ~~> emptyLrat ID Prf
< search. Subgoal 3: Variables: Known Known' Rest Prf C ID Proj : Known |{proof}- addProofless ID C Rest ~~> addLrupProof ID C Prf Rest IsP : is_proof (addProofless ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsKnown' : is_list (is_pair is_integer is_clause) Known' GCL : good_clause_list Known GCL' : good_clause_list Known' Mems : forall ID C, mem (ID, C) Known -> mem (ID, C) Known' Proj1 : rupProof Known C Prf ============================ Known' |{proof}- addProofless ID C Rest ~~> addLrupProof ID C Prf Rest
< apply rupProof_orderless to _ IsKnown' _ Proj1 _. Subgoal 3: Variables: Known Known' Rest Prf C ID Proj : Known |{proof}- addProofless ID C Rest ~~> addLrupProof ID C Prf Rest IsP : is_proof (addProofless ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsKnown' : is_list (is_pair is_integer is_clause) Known' GCL : good_clause_list Known GCL' : good_clause_list Known' Mems : forall ID C, mem (ID, C) Known -> mem (ID, C) Known' Proj1 : rupProof Known C Prf H1 : rupProof Known' C Prf ============================ Known' |{proof}- addProofless ID C Rest ~~> addLrupProof ID C Prf Rest
< search. Subgoal 4: Variables: Known Known' Rest F C T Proj : Known |{proof}- relocateClause F T Rest ~~> addLrupProof T C [F] (deleteLratProof F Rest) IsP : is_proof (relocateClause F T Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsKnown' : is_list (is_pair is_integer is_clause) Known' GCL : good_clause_list Known GCL' : good_clause_list Known' Mems : forall ID C, mem (ID, C) Known -> mem (ID, C) Known' Proj1 : T = F -> false Proj2 : mem (F, C) Known ============================ Known' |{proof}- relocateClause F T Rest ~~> addLrupProof T C [F] (deleteLratProof F Rest)
< apply Mems to Proj2. Subgoal 4: Variables: Known Known' Rest F C T Proj : Known |{proof}- relocateClause F T Rest ~~> addLrupProof T C [F] (deleteLratProof F Rest) IsP : is_proof (relocateClause F T Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsKnown' : is_list (is_pair is_integer is_clause) Known' GCL : good_clause_list Known GCL' : good_clause_list Known' Mems : forall ID C, mem (ID, C) Known -> mem (ID, C) Known' Proj1 : T = F -> false Proj2 : mem (F, C) Known H1 : mem (F, C) Known' ============================ Known' |{proof}- relocateClause F T Rest ~~> addLrupProof T C [F] (deleteLratProof F Rest)
< search. Subgoal 5: Variables: Known PT Known' ID Proj : Known |{proof}- relocateClause ID ID PT ~~> PT IsP : is_proof (relocateClause ID ID PT) IsKnown : is_list (is_pair is_integer is_clause) Known IsKnown' : is_list (is_pair is_integer is_clause) Known' GCL : good_clause_list Known GCL' : good_clause_list Known' Mems : forall ID C, mem (ID, C) Known -> mem (ID, C) Known' ============================ Known' |{proof}- relocateClause ID ID PT ~~> PT
< search. Subgoal 6: Variables: Known Known' Rest ID C Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest IsP : is_proof (deleteFrat ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsKnown' : is_list (is_pair is_integer is_clause) Known' GCL : good_clause_list Known GCL' : good_clause_list Known' Mems : forall ID C, mem (ID, C) Known -> mem (ID, C) Known' ============================ Known' |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest
< search. Subgoal 7: Variables: Known PT Known' Comment Proj : Known |{proof}- commentProof Comment PT ~~> PT IsP : is_proof (commentProof Comment PT) IsKnown : is_list (is_pair is_integer is_clause) Known IsKnown' : is_list (is_pair is_integer is_clause) Known' GCL : good_clause_list Known GCL' : good_clause_list Known' Mems : forall ID C, mem (ID, C) Known -> mem (ID, C) Known' ============================ Known' |{proof}- commentProof Comment PT ~~> PT
< search. Proof completed.
< Prove unsat_proofs:lrat:check_proof_correct. Subgoal 4: Variables: Known Sat KRest Prf Final ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFrat ID Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFrat ID Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final ============================ false
< GA_Empty: assert good_assignment []. Subgoal 4.1: Variables: Known Sat KRest Prf Final ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFrat ID Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFrat ID Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final ============================ good_assignment []
< unfold . Subgoal 4.1: Variables: Known Sat KRest Prf Final ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFrat ID Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFrat ID Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final ============================ forall L NL, mem L [] -> negate_lit L NL -> mem NL [] -> false
< intros M. Subgoal 4.1: Variables: Known Sat KRest Prf Final ID L NL IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFrat ID Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFrat ID Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final M : mem L [] H1 : negate_lit L NL H2 : mem NL [] ============================ false
< case M. Subgoal 4: Variables: Known Sat KRest Prf Final ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFrat ID Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFrat ID Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final GA_Empty : good_assignment [] ============================ false
< ExpASat: assert forall L, mem L [] -> mem L Sat. Subgoal 4.2: Variables: Known Sat KRest Prf Final ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFrat ID Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFrat ID Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final GA_Empty : good_assignment [] ============================ forall L, mem L [] -> mem L Sat
< intros M. Subgoal 4.2: Variables: Known Sat KRest Prf Final ID L IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFrat ID Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFrat ID Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final GA_Empty : good_assignment [] M : mem L [] ============================ mem L Sat
< case M. Subgoal 4: Variables: Known Sat KRest Prf Final ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFrat ID Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFrat ID Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final GA_Empty : good_assignment [] ExpASat : forall L, mem L [] -> mem L Sat ============================ false
< S: apply rupProof_maintains_sat to _ _ CP2 Sat _ IsSat GA_Sat. Subgoal 4: Variables: Known Sat KRest Prf Final ID S IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFrat ID Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFrat ID Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final GA_Empty : good_assignment [] ExpASat : forall L, mem L [] -> mem L Sat S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S emptyClause ============================ false
< case S3. Subgoal 5: Variables: Known Sat KRest Final Prf ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFratPrf ID Prf Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFratPrf ID Prf Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final ============================ false
< GA_Empty: assert good_assignment []. Subgoal 5.1: Variables: Known Sat KRest Final Prf ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFratPrf ID Prf Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFratPrf ID Prf Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final ============================ good_assignment []
< unfold . Subgoal 5.1: Variables: Known Sat KRest Final Prf ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFratPrf ID Prf Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFratPrf ID Prf Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final ============================ forall L NL, mem L [] -> negate_lit L NL -> mem NL [] -> false
< intros M. Subgoal 5.1: Variables: Known Sat KRest Final Prf ID L NL IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFratPrf ID Prf Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFratPrf ID Prf Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final M : mem L [] H1 : negate_lit L NL H2 : mem NL [] ============================ false
< case M. Subgoal 5: Variables: Known Sat KRest Final Prf ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFratPrf ID Prf Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFratPrf ID Prf Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final GA_Empty : good_assignment [] ============================ false
< ExpASat: assert forall L, mem L [] -> mem L Sat. Subgoal 5.2: Variables: Known Sat KRest Final Prf ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFratPrf ID Prf Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFratPrf ID Prf Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final GA_Empty : good_assignment [] ============================ forall L, mem L [] -> mem L Sat
< intros M. Subgoal 5.2: Variables: Known Sat KRest Final Prf ID L IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFratPrf ID Prf Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFratPrf ID Prf Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final GA_Empty : good_assignment [] M : mem L [] ============================ mem L Sat
< case M. Subgoal 5: Variables: Known Sat KRest Final Prf ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFratPrf ID Prf Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFratPrf ID Prf Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final GA_Empty : good_assignment [] ExpASat : forall L, mem L [] -> mem L Sat ============================ false
< S: apply rupProof_maintains_sat to _ _ CP2 Sat _ IsSat GA_Sat. Subgoal 5: Variables: Known Sat KRest Final Prf ID S IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (endFratPrf ID Prf Final) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFratPrf ID Prf Final) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final GA_Empty : good_assignment [] ExpASat : forall L, mem L [] -> mem L Sat S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S emptyClause ============================ false
< case S3. Subgoal 6: Variables: Known Sat KRest Prf Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (addProofless ID C Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * ============================ false
< GA_Empty: assert good_assignment []. Subgoal 6.1: Variables: Known Sat KRest Prf Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (addProofless ID C Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * ============================ good_assignment []
< unfold . Subgoal 6.1: Variables: Known Sat KRest Prf Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (addProofless ID C Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * ============================ forall L NL, mem L [] -> negate_lit L NL -> mem NL [] -> false
< intros M. Subgoal 6.1: Variables: Known Sat KRest Prf Rest C ID L NL IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (addProofless ID C Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * M : mem L [] H1 : negate_lit L NL H2 : mem NL [] ============================ false
< case M. Subgoal 6: Variables: Known Sat KRest Prf Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (addProofless ID C Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ============================ false
< ExpEmpty: assert forall L, mem L [] -> mem L Sat. Subgoal 6.2: Variables: Known Sat KRest Prf Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (addProofless ID C Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ============================ forall L, mem L [] -> mem L Sat
< intros M. Subgoal 6.2: Variables: Known Sat KRest Prf Rest C ID L IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (addProofless ID C Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] M : mem L [] ============================ mem L Sat
< case M. Subgoal 6: Variables: Known Sat KRest Prf Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (addProofless ID C Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat ============================ false
< Is: case IsP. Subgoal 6: Variables: Known Sat KRest Prf Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ false
< S: apply rupProof_maintains_sat to _ _ CP2 Sat _ IsSat GA_Sat. Subgoal 6: Variables: Known Sat KRest Prf Rest C ID S IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C ============================ false
< NewSat: assert forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC. Subgoal 6.3: Variables: Known Sat KRest Prf Rest C ID S IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C ============================ forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC
< intros Lkp. Subgoal 6.3: Variables: Known Sat KRest Prf Rest C ID S CID InC IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C Lkp : lookup ((ID, C)::Known) CID InC ============================ sat_clause S InC
< Lkp: case Lkp. Subgoal 6.3.1: Variables: Known Sat KRest Prf Rest S CID InC IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless CID InC Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known CID KRest CP2 : rupProof Known InC Prf CP3 : checkProof ((CID, InC)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer CID Is1 : is_clause InC Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S InC ============================ sat_clause S InC
< search. Subgoal 6.3.2: Variables: Known Sat KRest Prf Rest C ID S CID InC IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C Lkp : ID = CID -> false Lkp1 : lookup Known CID InC ============================ sat_clause S InC
< SC: apply Sat to Lkp1. Subgoal 6.3.2: Variables: Known Sat KRest Prf Rest C ID S CID InC IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C Lkp : ID = CID -> false Lkp1 : lookup Known CID InC SC : sat_clause Sat InC ============================ sat_clause S InC
< M: apply lookup_mem to Lkp1. Subgoal 6.3.2: Variables: Known Sat KRest Prf Rest C ID S CID InC IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C Lkp : ID = CID -> false Lkp1 : lookup Known CID InC SC : sat_clause Sat InC M : mem (CID, InC) Known ============================ sat_clause S InC
< Is: apply mem_is to _ M. Subgoal 6.3.2: Variables: Known Sat KRest Prf Rest C ID S ID1 C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C Lkp : ID = ID1 -> false Lkp1 : lookup Known ID1 C1 SC : sat_clause Sat C1 M : mem (ID1, C1) Known Is3 : is_integer ID1 Is4 : is_clause C1 ============================ sat_clause S C1
< apply sat_clause_orderless to _ _ _ SC _. Subgoal 6.3.2: Variables: Known Sat KRest Prf Rest C ID S ID1 C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C Lkp : ID = ID1 -> false Lkp1 : lookup Known ID1 C1 SC : sat_clause Sat C1 M : mem (ID1, C1) Known Is3 : is_integer ID1 Is4 : is_clause C1 H1 : sat_clause S C1 ============================ sat_clause S C1
< search. Subgoal 6: Variables: Known Sat KRest Prf Rest C ID S IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C NewSat : forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC ============================ false
< GCL_New: apply good_clause_list_remove_all_add to GCL CP1 with C = C. Subgoal 6: Variables: Known Sat KRest Prf Rest C ID S IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C NewSat : forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC GCL_New : good_clause_list ((ID, C)::KRest) ============================ false
< NewSat': assert forall CID C1, lookup ((ID, C)::KRest) CID C1 -> sat_clause S C1. Subgoal 6.4: Variables: Known Sat KRest Prf Rest C ID S IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C NewSat : forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC GCL_New : good_clause_list ((ID, C)::KRest) ============================ forall CID C1, lookup ((ID, C)::KRest) CID C1 -> sat_clause S C1
< intros Lkp. Subgoal 6.4: Variables: Known Sat KRest Prf Rest C ID S CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C NewSat : forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC GCL_New : good_clause_list ((ID, C)::KRest) Lkp : lookup ((ID, C)::KRest) CID C1 ============================ sat_clause S C1
< Lkp: case Lkp. Subgoal 6.4.1: Variables: Known Sat KRest Prf Rest S CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless CID C1 Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known CID KRest CP2 : rupProof Known C1 Prf CP3 : checkProof ((CID, C1)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer CID Is1 : is_clause C1 Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C1 NewSat : forall CID1 InC, lookup ((CID, C1)::Known) CID1 InC -> sat_clause S InC GCL_New : good_clause_list ((CID, C1)::KRest) ============================ sat_clause S C1
< backchain NewSat. Subgoal 6.4.2: Variables: Known Sat KRest Prf Rest C ID S CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C NewSat : forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC GCL_New : good_clause_list ((ID, C)::KRest) Lkp : ID = CID -> false Lkp1 : lookup KRest CID C1 ============================ sat_clause S C1
< apply remove_all_lookup_after to CP1 Lkp1. Subgoal 6.4.2: Variables: Known Sat KRest Prf Rest C ID S CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C NewSat : forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC GCL_New : good_clause_list ((ID, C)::KRest) Lkp : ID = CID -> false Lkp1 : lookup KRest CID C1 H1 : lookup Known CID C1 ============================ sat_clause S C1
< backchain NewSat. Subgoal 6: Variables: Known Sat KRest Prf Rest C ID S IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C NewSat : forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC GCL_New : good_clause_list ((ID, C)::KRest) NewSat' : forall CID C1, lookup ((ID, C)::KRest) CID C1 -> sat_clause S C1 ============================ false
< assert is_list (is_pair is_integer is_clause) ((ID, C)::KRest). Subgoal 6.5: Variables: Known Sat KRest Prf Rest C ID S IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C NewSat : forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC GCL_New : good_clause_list ((ID, C)::KRest) NewSat' : forall CID C1, lookup ((ID, C)::KRest) CID C1 -> sat_clause S C1 ============================ is_list (is_pair is_integer is_clause) ((ID, C)::KRest)
< apply remove_all_is to _ CP1. Subgoal 6.5: Variables: Known Sat KRest Prf Rest C ID S IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C NewSat : forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC GCL_New : good_clause_list ((ID, C)::KRest) NewSat' : forall CID C1, lookup ((ID, C)::KRest) CID C1 -> sat_clause S C1 H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_list (is_pair is_integer is_clause) ((ID, C)::KRest)
< search. Subgoal 6: Variables: Known Sat KRest Prf Rest C ID S IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest * GA_Empty : good_assignment [] ExpEmpty : forall L, mem L [] -> mem L Sat Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest S : is_list is_lit S S1 : good_assignment S S2 : forall L, mem L Sat -> mem L S S3 : sat_clause S C NewSat : forall CID InC, lookup ((ID, C)::Known) CID InC -> sat_clause S InC GCL_New : good_clause_list ((ID, C)::KRest) NewSat' : forall CID C1, lookup ((ID, C)::KRest) CID C1 -> sat_clause S C1 H1 : is_list (is_pair is_integer is_clause) ((ID, C)::KRest) ============================ false
< apply IH to Is2 S S1 GCL_New _ CP3 _. Subgoal 7: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (relocateClause From To Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * ============================ false
< Is: case IsP. Subgoal 7: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ false
< assert forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1. Subgoal 7.1: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1
< intros Lkp. Subgoal 7.1: Variables: Known Sat KRest C KRest2 Rest To From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest Lkp : lookup ((To, C)::KRest2) CID C1 ============================ sat_clause Sat C1
< Lkp: case Lkp. Subgoal 7.1.1: Variables: Known Sat KRest KRest2 Rest From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From CID Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : CID = From -> false CP2 : remove_all Known CID KRest CP3 : select (From, C1) KRest2 KRest CP4 : checkProof ((CID, C1)::KRest2) Rest * Is : is_integer From Is1 : is_integer CID Is2 : is_proof Rest ============================ sat_clause Sat C1
< backchain Sat to CID = From. Subgoal 7.1.1: Variables: Known Sat KRest KRest2 Rest From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From CID Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : CID = From -> false CP2 : remove_all Known CID KRest CP3 : select (From, C1) KRest2 KRest CP4 : checkProof ((CID, C1)::KRest2) Rest * Is : is_integer From Is1 : is_integer CID Is2 : is_proof Rest ============================ lookup Known From C1
< M: apply select_mem to CP3. Subgoal 7.1.1: Variables: Known Sat KRest KRest2 Rest From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From CID Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : CID = From -> false CP2 : remove_all Known CID KRest CP3 : select (From, C1) KRest2 KRest CP4 : checkProof ((CID, C1)::KRest2) Rest * Is : is_integer From Is1 : is_integer CID Is2 : is_proof Rest M : mem (From, C1) KRest ============================ lookup Known From C1
< M1: apply remove_all_mem_after to CP2 M. Subgoal 7.1.1: Variables: Known Sat KRest KRest2 Rest From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From CID Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : CID = From -> false CP2 : remove_all Known CID KRest CP3 : select (From, C1) KRest2 KRest CP4 : checkProof ((CID, C1)::KRest2) Rest * Is : is_integer From Is1 : is_integer CID Is2 : is_proof Rest M : mem (From, C1) KRest M1 : mem (From, C1) Known ============================ lookup Known From C1
< Lkp': apply is_list_mem_lookup to IsKnown M1 _. Subgoal 7.1.1: Variables: Known Sat KRest KRest2 Rest From CID C1 C' IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From CID Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : CID = From -> false CP2 : remove_all Known CID KRest CP3 : select (From, C1) KRest2 KRest CP4 : checkProof ((CID, C1)::KRest2) Rest * Is : is_integer From Is1 : is_integer CID Is2 : is_proof Rest M : mem (From, C1) KRest M1 : mem (From, C1) Known Lkp' : lookup Known From C' ============================ lookup Known From C1
< M': apply lookup_mem to Lkp'. Subgoal 7.1.1: Variables: Known Sat KRest KRest2 Rest From CID C1 C' IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From CID Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : CID = From -> false CP2 : remove_all Known CID KRest CP3 : select (From, C1) KRest2 KRest CP4 : checkProof ((CID, C1)::KRest2) Rest * Is : is_integer From Is1 : is_integer CID Is2 : is_proof Rest M : mem (From, C1) KRest M1 : mem (From, C1) Known Lkp' : lookup Known From C' M' : mem (From, C') Known ============================ lookup Known From C1
< apply good_clause_list_mems to GCL M1 M'. Subgoal 7.1.1: Variables: Known Sat KRest KRest2 Rest From CID C' IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From CID Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : CID = From -> false CP2 : remove_all Known CID KRest CP3 : select (From, C') KRest2 KRest CP4 : checkProof ((CID, C')::KRest2) Rest * Is : is_integer From Is1 : is_integer CID Is2 : is_proof Rest M : mem (From, C') KRest M1 : mem (From, C') Known Lkp' : lookup Known From C' M' : mem (From, C') Known ============================ lookup Known From C'
< search. Subgoal 7.1.2: Variables: Known Sat KRest C KRest2 Rest To From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest Lkp : To = CID -> false Lkp1 : lookup KRest2 CID C1 ============================ sat_clause Sat C1
< assert CID = From -> false. Subgoal 7.1.2.1: Variables: Known Sat KRest C KRest2 Rest To From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest Lkp : To = CID -> false Lkp1 : lookup KRest2 CID C1 ============================ CID = From -> false
< M: apply lookup_mem to Lkp1. Subgoal 7.1.2.1: Variables: Known Sat KRest C KRest2 Rest To From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest Lkp : To = CID -> false Lkp1 : lookup KRest2 CID C1 M : mem (CID, C1) KRest2 ============================ CID = From -> false
< intros E. Subgoal 7.1.2.1: Variables: Known Sat KRest C KRest2 Rest To From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest Lkp : To = CID -> false Lkp1 : lookup KRest2 CID C1 M : mem (CID, C1) KRest2 E : CID = From ============================ false
< case E. Subgoal 7.1.2.1: Variables: Known Sat KRest C KRest2 Rest To From C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest Lkp : To = From -> false Lkp1 : lookup KRest2 From C1 M : mem (From, C1) KRest2 ============================ false
< GCL': apply good_clause_list_remove_all to GCL CP2. Subgoal 7.1.2.1: Variables: Known Sat KRest C KRest2 Rest To From C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest Lkp : To = From -> false Lkp1 : lookup KRest2 From C1 M : mem (From, C1) KRest2 GCL' : good_clause_list KRest ============================ false
< GCL': case GCL'. Subgoal 7.1.2.1: Variables: Known Sat KRest C KRest2 Rest To From C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest Lkp : To = From -> false Lkp1 : lookup KRest2 From C1 M : mem (From, C1) KRest2 GCL' : forall ID C1 KRest1 C2, select (ID, C1) KRest1 KRest -> mem (ID, C2) KRest1 -> false ============================ false
< apply GCL' to CP3 M. Subgoal 7.1.2: Variables: Known Sat KRest C KRest2 Rest To From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest Lkp : To = CID -> false Lkp1 : lookup KRest2 CID C1 H1 : CID = From -> false ============================ sat_clause Sat C1
< Lkp2: apply lookup_after_select_before to Lkp1 CP3 _. Subgoal 7.1.2: Variables: Known Sat KRest C KRest2 Rest To From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest Lkp : To = CID -> false Lkp1 : lookup KRest2 CID C1 H1 : CID = From -> false Lkp2 : lookup KRest CID C1 ============================ sat_clause Sat C1
< apply remove_all_lookup_after to CP2 Lkp2. Subgoal 7.1.2: Variables: Known Sat KRest C KRest2 Rest To From CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest Lkp : To = CID -> false Lkp1 : lookup KRest2 CID C1 H1 : CID = From -> false Lkp2 : lookup KRest CID C1 H2 : lookup Known CID C1 ============================ sat_clause Sat C1
< backchain Sat. Subgoal 7: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 ============================ false
< assert is_list (is_pair is_integer is_clause) ((To, C)::KRest2). Subgoal 7.2: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 ============================ is_list (is_pair is_integer is_clause) ((To, C)::KRest2)
< IsKR: apply remove_all_is to _ CP2. Subgoal 7.2: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 IsKR : is_list (is_pair is_integer is_clause) KRest ============================ is_list (is_pair is_integer is_clause) ((To, C)::KRest2)
< apply select_is to _ CP3. Subgoal 7.2: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 IsKR : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 ============================ is_list (is_pair is_integer is_clause) ((To, C)::KRest2)
< IsPr: apply select_is_picked to _ CP3. Subgoal 7.2: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 IsKR : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 IsPr : is_pair is_integer is_clause (From, C) ============================ is_list (is_pair is_integer is_clause) ((To, C)::KRest2)
< case IsPr. Subgoal 7.2: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 IsKR : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : is_integer From H4 : is_clause C ============================ is_list (is_pair is_integer is_clause) ((To, C)::KRest2)
< search. Subgoal 7: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) ============================ false
< assert good_clause_list ((To, C)::KRest2). Subgoal 7.3: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) ============================ good_clause_list ((To, C)::KRest2)
< GCL1: apply good_clause_list_remove_all to GCL CP2. Subgoal 7.3: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest ============================ good_clause_list ((To, C)::KRest2)
< GCL2: apply good_clause_list_select to GCL1 CP3. Subgoal 7.3: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 ============================ good_clause_list ((To, C)::KRest2)
< unfold . Subgoal 7.3: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 ============================ forall ID C1 KRest C2, select (ID, C1) KRest ((To, C)::KRest2) -> mem (ID, C2) KRest -> false
< intros S M. Subgoal 7.3: Variables: Known Sat KRest C KRest2 Rest To From ID C1 KRest1 C2 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 S : select (ID, C1) KRest1 ((To, C)::KRest2) M : mem (ID, C2) KRest1 ============================ false
< S: case S. Subgoal 7.3.1: Variables: Known Sat KRest C KRest2 Rest To From C2 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 M : mem (To, C2) KRest2 ============================ false
< MKR: apply mem_after_select_before to CP3 M. Subgoal 7.3.1: Variables: Known Sat KRest C KRest2 Rest To From C2 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 M : mem (To, C2) KRest2 MKR : mem (To, C2) KRest ============================ false
< apply remove_all_no_mem to CP2 MKR. Subgoal 7.3.2: Variables: Known Sat KRest C KRest2 Rest To From ID C1 C2 L1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 M : mem (ID, C2) ((To, C)::L1) S : select (ID, C1) L1 KRest2 ============================ false
< M: case M. Subgoal 7.3.2.1: Variables: Known Sat KRest C KRest2 Rest To From C1 L1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 S : select (To, C1) L1 KRest2 ============================ false
< M: apply select_mem to S. Subgoal 7.3.2.1: Variables: Known Sat KRest C KRest2 Rest To From C1 L1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 S : select (To, C1) L1 KRest2 M : mem (To, C1) KRest2 ============================ false
< M': apply mem_after_select_before to CP3 M. Subgoal 7.3.2.1: Variables: Known Sat KRest C KRest2 Rest To From C1 L1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 S : select (To, C1) L1 KRest2 M : mem (To, C1) KRest2 M' : mem (To, C1) KRest ============================ false
< apply remove_all_no_mem to CP2 M'. Subgoal 7.3.2.2: Variables: Known Sat KRest C KRest2 Rest To From ID C1 C2 L1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 S : select (ID, C1) L1 KRest2 M : mem (ID, C2) L1 ============================ false
< GCL': case GCL2. Subgoal 7.3.2.2: Variables: Known Sat KRest C KRest2 Rest To From ID C1 C2 L1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) GCL1 : good_clause_list KRest S : select (ID, C1) L1 KRest2 M : mem (ID, C2) L1 GCL' : forall ID C1 KRest C2, select (ID, C1) KRest KRest2 -> mem (ID, C2) KRest -> false ============================ false
< apply GCL' to S M. Subgoal 7: Variables: Known Sat KRest C KRest2 Rest To From IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : forall CID C1, lookup ((To, C)::KRest2) CID C1 -> sat_clause Sat C1 H2 : is_list (is_pair is_integer is_clause) ((To, C)::KRest2) H3 : good_clause_list ((To, C)::KRest2) ============================ false
< apply IH to Is2 IsSat GA_Sat _ _ CP4 _. Subgoal 8: Variables: Known Sat C Rest ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (relocateClause ID ID Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause ID ID Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : mem (ID, C) Known CP2 : checkProof Known Rest * ============================ false
< Is: case IsP. Subgoal 8: Variables: Known Sat C Rest ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause ID ID Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : mem (ID, C) Known CP2 : checkProof Known Rest * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest ============================ false
< apply IH to _ _ _ _ _ CP2 _. Subgoal 9: Variables: Known Sat KRest Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (deleteFrat ID C Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * ============================ false
< Is: case IsP. Subgoal 9: Variables: Known Sat KRest Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ false
< IsKRest: apply select_is to _ CP1. Subgoal 9: Variables: Known Sat KRest Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest ============================ false
< GCL_KRest: apply good_clause_list_select to GCL CP1. Subgoal 9: Variables: Known Sat KRest Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest ============================ false
< assert forall CID C, lookup KRest CID C -> sat_clause Sat C. Subgoal 9.1: Variables: Known Sat KRest Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest ============================ forall CID C1, lookup KRest CID C1 -> sat_clause Sat C1
< intros L. Subgoal 9.1: Variables: Known Sat KRest Rest C ID CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest L : lookup KRest CID C1 ============================ sat_clause Sat C1
< M: apply lookup_mem to L. Subgoal 9.1: Variables: Known Sat KRest Rest C ID CID C1 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest L : lookup KRest CID C1 M : mem (CID, C1) KRest ============================ sat_clause Sat C1
< apply mem_is to _ M. Subgoal 9.1: Variables: Known Sat KRest Rest C ID ID1 C2 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest L : lookup KRest ID1 C2 M : mem (ID1, C2) KRest H1 : is_integer ID1 H2 : is_clause C2 ============================ sat_clause Sat C2
< assert forall I C1 C2, mem (I, C1) Known -> mem (I, C2) Known -> C1 = C2. Subgoal 9.1.1: Variables: Known Sat KRest Rest C ID ID1 C2 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest L : lookup KRest ID1 C2 M : mem (ID1, C2) KRest H1 : is_integer ID1 H2 : is_clause C2 ============================ forall I C1 C2, mem (I, C1) Known -> mem (I, C2) Known -> C1 = C2
< intros M1 M2. Subgoal 9.1.1: Variables: Known Sat KRest Rest C ID ID1 C2 I C3 C4 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest L : lookup KRest ID1 C2 M : mem (ID1, C2) KRest H1 : is_integer ID1 H2 : is_clause C2 M1 : mem (I, C3) Known M2 : mem (I, C4) Known ============================ C3 = C4
< apply good_clause_list_mems to _ M1 M2. Subgoal 9.1.1: Variables: Known Sat KRest Rest C ID ID1 C2 I C4 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest L : lookup KRest ID1 C2 M : mem (ID1, C2) KRest H1 : is_integer ID1 H2 : is_clause C2 M1 : mem (I, C4) Known M2 : mem (I, C4) Known ============================ C4 = C4
< search. Subgoal 9.1: Variables: Known Sat KRest Rest C ID ID1 C2 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest L : lookup KRest ID1 C2 M : mem (ID1, C2) KRest H1 : is_integer ID1 H2 : is_clause C2 H3 : forall I C1 C2, mem (I, C1) Known -> mem (I, C2) Known -> C1 = C2 ============================ sat_clause Sat C2
< L': apply lookup_after_select to _ _ _ CP1 L. Subgoal 9.1: Variables: Known Sat KRest Rest C ID ID1 C2 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest L : lookup KRest ID1 C2 M : mem (ID1, C2) KRest H1 : is_integer ID1 H2 : is_clause C2 H3 : forall I C1 C2, mem (I, C1) Known -> mem (I, C2) Known -> C1 = C2 L' : lookup Known ID1 C2 ============================ sat_clause Sat C2
< apply Sat to L'. Subgoal 9.1: Variables: Known Sat KRest Rest C ID ID1 C2 IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest L : lookup KRest ID1 C2 M : mem (ID1, C2) KRest H1 : is_integer ID1 H2 : is_clause C2 H3 : forall I C1 C2, mem (I, C1) Known -> mem (I, C2) Known -> C1 = C2 L' : lookup Known ID1 C2 H4 : sat_clause Sat C2 ============================ sat_clause Sat C2
< search. Subgoal 9: Variables: Known Sat KRest Rest C ID IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID C Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest GCL_KRest : good_clause_list KRest H1 : forall CID C1, lookup KRest CID C1 -> sat_clause Sat C1 ============================ false
< apply IH to Is2 IsSat GA_Sat GCL_KRest IsKRest CP2 _. Subgoal 10: Variables: Known Sat Rest Comment IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsP : is_proof (commentProof Comment Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (commentProof Comment Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : checkProof Known Rest * ============================ false
< Is: case IsP. Subgoal 10: Variables: Known Sat Rest Comment IH : forall Known P Sat, is_proof P -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (commentProof Comment Rest) @ Sat : forall CID C, lookup Known CID C -> sat_clause Sat C CP1 : checkProof Known Rest * Is : is_string Comment Is1 : is_proof Rest ============================ false
< apply IH to Is1 _ _ _ _ CP1 _. Proof completed.
< Prove unsat_proofs:lrat:checkProof_orderless. Subgoal 4: Variables: K1 K2 KRest Prf1 Final ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsP : is_proof (endFrat ID Final) IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFrat ID Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final ============================ checkProof K2 (endFrat ID Final)
< Is: case IsP. Subgoal 4: Variables: K1 K2 KRest Prf1 Final ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFrat ID Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_finalClauses Final ============================ checkProof K2 (endFrat ID Final)
< apply rupProof_permutation to IsK1 IsK2 GCL CP2 Prm. Subgoal 4: Variables: K1 K2 KRest Prf1 Final ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFrat ID Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_finalClauses Final H1 : rupProof K2 emptyClause Prf1 ============================ checkProof K2 (endFrat ID Final)
< Prm': apply remove_all_permutation to _ _ CP1 Prm. Subgoal 4: Variables: K1 K2 KRest Prf1 Final ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFrat ID Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_finalClauses Final H1 : rupProof K2 emptyClause Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' ============================ checkProof K2 (endFrat ID Final)
< apply remove_all_is to _ Prm'. Subgoal 4: Variables: K1 K2 KRest Prf1 Final ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFrat ID Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_finalClauses Final H1 : rupProof K2 emptyClause Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' H2 : is_list (is_pair is_integer is_clause) P' ============================ checkProof K2 (endFrat ID Final)
< apply remove_all_is to _ CP1. Subgoal 4: Variables: K1 K2 KRest Prf1 Final ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFrat ID Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_finalClauses Final H1 : rupProof K2 emptyClause Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' H2 : is_list (is_pair is_integer is_clause) P' H3 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof K2 (endFrat ID Final)
< apply checkFinalClauses_orderless to _ _ CP3 _. Subgoal 4: Variables: K1 K2 KRest Prf1 Final ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFrat ID Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_finalClauses Final H1 : rupProof K2 emptyClause Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' H2 : is_list (is_pair is_integer is_clause) P' H3 : is_list (is_pair is_integer is_clause) KRest H4 : checkFinalClauses ((ID, emptyClause)::P') Final ============================ checkProof K2 (endFrat ID Final)
< search. Subgoal 5: Variables: K1 K2 KRest Final Prf1 ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsP : is_proof (endFratPrf ID Prf1 Final) IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFratPrf ID Prf1 Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final ============================ checkProof K2 (endFratPrf ID Prf1 Final)
< Is: case IsP. Subgoal 5: Variables: K1 K2 KRest Final Prf1 ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFratPrf ID Prf1 Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_list is_integer Prf1 Is2 : is_finalClauses Final ============================ checkProof K2 (endFratPrf ID Prf1 Final)
< apply rupProof_permutation to IsK1 IsK2 GCL CP2 Prm. Subgoal 5: Variables: K1 K2 KRest Final Prf1 ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFratPrf ID Prf1 Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_list is_integer Prf1 Is2 : is_finalClauses Final H1 : rupProof K2 emptyClause Prf1 ============================ checkProof K2 (endFratPrf ID Prf1 Final)
< Prm': apply remove_all_permutation to _ _ CP1 Prm. Subgoal 5: Variables: K1 K2 KRest Final Prf1 ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFratPrf ID Prf1 Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_list is_integer Prf1 Is2 : is_finalClauses Final H1 : rupProof K2 emptyClause Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' ============================ checkProof K2 (endFratPrf ID Prf1 Final)
< apply remove_all_is to _ Prm'. Subgoal 5: Variables: K1 K2 KRest Final Prf1 ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFratPrf ID Prf1 Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_list is_integer Prf1 Is2 : is_finalClauses Final H1 : rupProof K2 emptyClause Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' H2 : is_list (is_pair is_integer is_clause) P' ============================ checkProof K2 (endFratPrf ID Prf1 Final)
< apply remove_all_is to _ CP1. Subgoal 5: Variables: K1 K2 KRest Final Prf1 ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFratPrf ID Prf1 Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_list is_integer Prf1 Is2 : is_finalClauses Final H1 : rupProof K2 emptyClause Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' H2 : is_list (is_pair is_integer is_clause) P' H3 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof K2 (endFratPrf ID Prf1 Final)
< apply checkFinalClauses_orderless to _ _ CP3 _. Subgoal 5: Variables: K1 K2 KRest Final Prf1 ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (endFratPrf ID Prf1 Final) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) Final Is : is_integer ID Is1 : is_list is_integer Prf1 Is2 : is_finalClauses Final H1 : rupProof K2 emptyClause Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' H2 : is_list (is_pair is_integer is_clause) P' H3 : is_list (is_pair is_integer is_clause) KRest H4 : checkFinalClauses ((ID, emptyClause)::P') Final ============================ checkProof K2 (endFratPrf ID Prf1 Final)
< search. Subgoal 6: Variables: K1 K2 KRest Prf1 Rest C ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsP : is_proof (addProofless ID C Rest) IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (addProofless ID C Rest) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest * ============================ checkProof K2 (addProofless ID C Rest)
< Is: case IsP. Subgoal 6: Variables: K1 K2 KRest Prf1 Rest C ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (addProofless ID C Rest) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ checkProof K2 (addProofless ID C Rest)
< apply rupProof_permutation to IsK1 IsK2 GCL CP2 Prm. Subgoal 6: Variables: K1 K2 KRest Prf1 Rest C ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (addProofless ID C Rest) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : rupProof K2 C Prf1 ============================ checkProof K2 (addProofless ID C Rest)
< Prm': apply remove_all_permutation to _ _ CP1 Prm. Subgoal 6: Variables: K1 K2 KRest Prf1 Rest C ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (addProofless ID C Rest) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : rupProof K2 C Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' ============================ checkProof K2 (addProofless ID C Rest)
< apply remove_all_is to _ Prm'. Subgoal 6: Variables: K1 K2 KRest Prf1 Rest C ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (addProofless ID C Rest) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : rupProof K2 C Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' H2 : is_list (is_pair is_integer is_clause) P' ============================ checkProof K2 (addProofless ID C Rest)
< apply remove_all_is to _ CP1. Subgoal 6: Variables: K1 K2 KRest Prf1 Rest C ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (addProofless ID C Rest) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : rupProof K2 C Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' H2 : is_list (is_pair is_integer is_clause) P' H3 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof K2 (addProofless ID C Rest)
< apply good_clause_list_remove_all_add to GCL Prm' with C = C. Subgoal 6: Variables: K1 K2 KRest Prf1 Rest C ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (addProofless ID C Rest) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : rupProof K2 C Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' H2 : is_list (is_pair is_integer is_clause) P' H3 : is_list (is_pair is_integer is_clause) KRest H4 : good_clause_list ((ID, C)::P') ============================ checkProof K2 (addProofless ID C Rest)
< apply IH to _ _ _ _ CP3 _. Subgoal 6: Variables: K1 K2 KRest Prf1 Rest C ID P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (addProofless ID C Rest) @ Prm : permutation K1 K2 CP1 : remove_all K1 ID KRest CP2 : rupProof K1 C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : rupProof K2 C Prf1 Prm' : remove_all K2 ID P' Prm'1 : permutation KRest P' H2 : is_list (is_pair is_integer is_clause) P' H3 : is_list (is_pair is_integer is_clause) KRest H4 : good_clause_list ((ID, C)::P') H5 : checkProof ((ID, C)::P') Rest ============================ checkProof K2 (addProofless ID C Rest)
< search. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsP : is_proof (relocateClause From To Rest) IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * ============================ checkProof K2 (relocateClause From To Rest)
< Is: case IsP. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ checkProof K2 (relocateClause From To Rest)
< M: apply select_mem to CP3. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest ============================ checkProof K2 (relocateClause From To Rest)
< Prm': apply remove_all_permutation to _ _ CP2 _. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' ============================ checkProof K2 (relocateClause From To Rest)
< M2: apply permutation_mem to Prm'1 M. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' ============================ checkProof K2 (relocateClause From To Rest)
< S: apply mem_select to M2. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' ============================ checkProof K2 (relocateClause From To Rest)
< IsKR: apply remove_all_is to _ CP2. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest ============================ checkProof K2 (relocateClause From To Rest)
< IsP': apply remove_all_is to _ Prm'. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' ============================ checkProof K2 (relocateClause From To Rest)
< Prm'': apply selects_permutation to _ _ Prm'1 CP3 S. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' ============================ checkProof K2 (relocateClause From To Rest)
< Prm_Final: assert permutation ((To, C)::KRest2) ((To, C)::L'). Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') ============================ checkProof K2 (relocateClause From To Rest)
< IsPr: apply select_is_picked to _ CP3. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') IsPr : is_pair is_integer is_clause (From, C) ============================ checkProof K2 (relocateClause From To Rest)
< Is: case IsPr. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C ============================ checkProof K2 (relocateClause From To Rest)
< IsKR2: apply select_is to _ CP3. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 ============================ checkProof K2 (relocateClause From To Rest)
< IsL': apply select_is to _ S. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' ============================ checkProof K2 (relocateClause From To Rest)
< GCL_P': apply good_clause_list_remove_all to _ Prm'. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' ============================ checkProof K2 (relocateClause From To Rest)
< GCL_L': apply good_clause_list_select to _ S. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' ============================ checkProof K2 (relocateClause From To Rest)
< assert good_clause_list ((To, C)::L'). Subgoal 7.1: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' ============================ good_clause_list ((To, C)::L')
< unfold . Subgoal 7.1: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' ============================ forall ID C1 KRest C2, select (ID, C1) KRest ((To, C)::L') -> mem (ID, C2) KRest -> false
< intros S' M'. Subgoal 7.1: Variables: K1 K2 KRest C KRest2 Rest To From P' L' ID C1 KRest1 C2 IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' S' : select (ID, C1) KRest1 ((To, C)::L') M' : mem (ID, C2) KRest1 ============================ false
< S': case S'. Subgoal 7.1.1: Variables: K1 K2 KRest C KRest2 Rest To From P' L' C2 IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' M' : mem (To, C2) L' ============================ false
< MKR: apply mem_after_select_before to S M'. Subgoal 7.1.1: Variables: K1 K2 KRest C KRest2 Rest To From P' L' C2 IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' M' : mem (To, C2) L' MKR : mem (To, C2) P' ============================ false
< apply remove_all_no_mem to Prm' MKR. Subgoal 7.1.2: Variables: K1 K2 KRest C KRest2 Rest To From P' L' ID C1 C2 L1 IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' M' : mem (ID, C2) ((To, C)::L1) S' : select (ID, C1) L1 L' ============================ false
< M': case M'. Subgoal 7.1.2.1: Variables: K1 K2 KRest C KRest2 Rest To From P' L' C1 L1 IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' S' : select (To, C1) L1 L' ============================ false
< M': apply select_mem to S'. Subgoal 7.1.2.1: Variables: K1 K2 KRest C KRest2 Rest To From P' L' C1 L1 IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' S' : select (To, C1) L1 L' M' : mem (To, C1) L' ============================ false
< M'': apply mem_after_select_before to S M'. Subgoal 7.1.2.1: Variables: K1 K2 KRest C KRest2 Rest To From P' L' C1 L1 IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' S' : select (To, C1) L1 L' M' : mem (To, C1) L' M'' : mem (To, C1) P' ============================ false
< apply remove_all_no_mem to Prm' M''. Subgoal 7.1.2.2: Variables: K1 K2 KRest C KRest2 Rest To From P' L' ID C1 C2 L1 IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' S' : select (ID, C1) L1 L' M' : mem (ID, C2) L1 ============================ false
< GCL': case GCL_L'. Subgoal 7.1.2.2: Variables: K1 K2 KRest C KRest2 Rest To From P' L' ID C1 C2 L1 IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' S' : select (ID, C1) L1 L' M' : mem (ID, C2) L1 GCL' : forall ID C1 KRest C2, select (ID, C1) KRest L' -> mem (ID, C2) KRest -> false ============================ false
< apply GCL' to S' M'. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' H1 : good_clause_list ((To, C)::L') ============================ checkProof K2 (relocateClause From To Rest)
< apply IH to Is2 _ _ _ CP4 Prm_Final. Subgoal 7: Variables: K1 K2 KRest C KRest2 Rest To From P' L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause From To Rest) @ Prm : permutation K1 K2 CP1 : To = From -> false CP2 : remove_all K1 To KRest CP3 : select (From, C) KRest2 KRest CP4 : checkProof ((To, C)::KRest2) Rest * Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest M : mem (From, C) KRest Prm' : remove_all K2 To P' Prm'1 : permutation KRest P' M2 : mem (From, C) P' S : select (From, C) L' P' IsKR : is_list (is_pair is_integer is_clause) KRest IsP' : is_list (is_pair is_integer is_clause) P' Prm'' : permutation KRest2 L' Prm_Final : permutation ((To, C)::KRest2) ((To, C)::L') Is3 : is_integer From Is4 : is_clause C IsKR2 : is_list (is_pair is_integer is_clause) KRest2 IsL' : is_list (is_pair is_integer is_clause) L' GCL_P' : good_clause_list P' GCL_L' : good_clause_list L' H1 : good_clause_list ((To, C)::L') H2 : checkProof ((To, C)::L') Rest ============================ checkProof K2 (relocateClause From To Rest)
< search. Subgoal 8: Variables: K1 K2 C Rest ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsP : is_proof (relocateClause ID ID Rest) IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause ID ID Rest) @ Prm : permutation K1 K2 CP1 : mem (ID, C) K1 CP2 : checkProof K1 Rest * ============================ checkProof K2 (relocateClause ID ID Rest)
< Is: case IsP. Subgoal 8: Variables: K1 K2 C Rest ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause ID ID Rest) @ Prm : permutation K1 K2 CP1 : mem (ID, C) K1 CP2 : checkProof K1 Rest * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest ============================ checkProof K2 (relocateClause ID ID Rest)
< M2: apply permutation_mem to Prm CP1. Subgoal 8: Variables: K1 K2 C Rest ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause ID ID Rest) @ Prm : permutation K1 K2 CP1 : mem (ID, C) K1 CP2 : checkProof K1 Rest * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest M2 : mem (ID, C) K2 ============================ checkProof K2 (relocateClause ID ID Rest)
< apply IH to _ _ _ _ CP2 _. Subgoal 8: Variables: K1 K2 C Rest ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (relocateClause ID ID Rest) @ Prm : permutation K1 K2 CP1 : mem (ID, C) K1 CP2 : checkProof K1 Rest * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest M2 : mem (ID, C) K2 H1 : checkProof K2 Rest ============================ checkProof K2 (relocateClause ID ID Rest)
< search. Subgoal 9: Variables: K1 K2 KRest Rest C ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsP : is_proof (deleteFrat ID C Rest) IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * ============================ checkProof K2 (deleteFrat ID C Rest)
< Is: case IsP. Subgoal 9: Variables: K1 K2 KRest Rest C ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ checkProof K2 (deleteFrat ID C Rest)
< IsKRest: apply select_is to _ CP1. Subgoal 9: Variables: K1 K2 KRest Rest C ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest ============================ checkProof K2 (deleteFrat ID C Rest)
< MK1: apply select_mem to CP1. Subgoal 9: Variables: K1 K2 KRest Rest C ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest MK1 : mem (ID, C) K1 ============================ checkProof K2 (deleteFrat ID C Rest)
< MK2: apply permutation_mem to Prm MK1. Subgoal 9: Variables: K1 K2 KRest Rest C ID IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest MK1 : mem (ID, C) K1 MK2 : mem (ID, C) K2 ============================ checkProof K2 (deleteFrat ID C Rest)
< S: apply mem_select to MK2. Subgoal 9: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest MK1 : mem (ID, C) K1 MK2 : mem (ID, C) K2 S : select (ID, C) L' K2 ============================ checkProof K2 (deleteFrat ID C Rest)
< Prm': apply permutation_symmetric to Prm. Subgoal 9: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest MK1 : mem (ID, C) K1 MK2 : mem (ID, C) K2 S : select (ID, C) L' K2 Prm' : permutation K2 K1 ============================ checkProof K2 (deleteFrat ID C Rest)
< GCL_K1: apply permutation_good_clause_list to _ Prm' GCL. Subgoal 9: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest MK1 : mem (ID, C) K1 MK2 : mem (ID, C) K2 S : select (ID, C) L' K2 Prm' : permutation K2 K1 GCL_K1 : good_clause_list K1 ============================ checkProof K2 (deleteFrat ID C Rest)
< GCL_L': apply good_clause_list_select to GCL S. Subgoal 9: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest MK1 : mem (ID, C) K1 MK2 : mem (ID, C) K2 S : select (ID, C) L' K2 Prm' : permutation K2 K1 GCL_K1 : good_clause_list K1 GCL_L' : good_clause_list L' ============================ checkProof K2 (deleteFrat ID C Rest)
< IsL': apply select_is to _ S. Subgoal 9: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest MK1 : mem (ID, C) K1 MK2 : mem (ID, C) K2 S : select (ID, C) L' K2 Prm' : permutation K2 K1 GCL_K1 : good_clause_list K1 GCL_L' : good_clause_list L' IsL' : is_list (is_pair is_integer is_clause) L' ============================ checkProof K2 (deleteFrat ID C Rest)
< P': apply selects_permutation to _ _ Prm' _ _. Subgoal 9: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest MK1 : mem (ID, C) K1 MK2 : mem (ID, C) K2 S : select (ID, C) L' K2 Prm' : permutation K2 K1 GCL_K1 : good_clause_list K1 GCL_L' : good_clause_list L' IsL' : is_list (is_pair is_integer is_clause) L' P' : permutation L' KRest ============================ checkProof K2 (deleteFrat ID C Rest)
< PrmSub: apply permutation_symmetric to P'. Subgoal 9: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest MK1 : mem (ID, C) K1 MK2 : mem (ID, C) K2 S : select (ID, C) L' K2 Prm' : permutation K2 K1 GCL_K1 : good_clause_list K1 GCL_L' : good_clause_list L' IsL' : is_list (is_pair is_integer is_clause) L' P' : permutation L' KRest PrmSub : permutation KRest L' ============================ checkProof K2 (deleteFrat ID C Rest)
< apply IH to Is2 _ _ GCL_L' CP2 PrmSub. Subgoal 9: Variables: K1 K2 KRest Rest C ID L' IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (deleteFrat ID C Rest) @ Prm : permutation K1 K2 CP1 : select (ID, C) KRest K1 CP2 : checkProof KRest Rest * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest IsKRest : is_list (is_pair is_integer is_clause) KRest MK1 : mem (ID, C) K1 MK2 : mem (ID, C) K2 S : select (ID, C) L' K2 Prm' : permutation K2 K1 GCL_K1 : good_clause_list K1 GCL_L' : good_clause_list L' IsL' : is_list (is_pair is_integer is_clause) L' P' : permutation L' KRest PrmSub : permutation KRest L' H1 : checkProof L' Rest ============================ checkProof K2 (deleteFrat ID C Rest)
< search. Subgoal 10: Variables: K1 K2 Rest Comment IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsP : is_proof (commentProof Comment Rest) IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (commentProof Comment Rest) @ Prm : permutation K1 K2 CP1 : checkProof K1 Rest * ============================ checkProof K2 (commentProof Comment Rest)
< case IsP. Subgoal 10: Variables: K1 K2 Rest Comment IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (commentProof Comment Rest) @ Prm : permutation K1 K2 CP1 : checkProof K1 Rest * H1 : is_string Comment H2 : is_proof Rest ============================ checkProof K2 (commentProof Comment Rest)
< apply IH to _ _ _ _ CP1 _. Subgoal 10: Variables: K1 K2 Rest Comment IH : forall K1 K2 Prf, is_proof Prf -> is_list (is_pair is_integer is_clause) K1 -> is_list (is_pair is_integer is_clause) K2 -> good_clause_list K2 -> checkProof K1 Prf * -> permutation K1 K2 -> checkProof K2 Prf IsK1 : is_list (is_pair is_integer is_clause) K1 IsK2 : is_list (is_pair is_integer is_clause) K2 GCL : good_clause_list K2 CP : checkProof K1 (commentProof Comment Rest) @ Prm : permutation K1 K2 CP1 : checkProof K1 Rest * H1 : is_string Comment H2 : is_proof Rest H3 : checkProof K2 Rest ============================ checkProof K2 (commentProof Comment Rest)
< search. Proof completed.
< Theorem rupProof_self : forall Known ID C, is_clause C -> lookup Known ID C -> rupProof Known C [ID]. ============================ forall Known ID C, is_clause C -> lookup Known ID C -> rupProof Known C [ID]
< intros IsC Lkp. Variables: Known ID C IsC : is_clause C Lkp : lookup Known ID C ============================ rupProof Known C [ID]
< GL: apply gatherLits_exists to IsC. Variables: Known ID C L IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L ============================ rupProof Known C [ID]
< IsL: apply gatherLits_is to IsC GL. Variables: Known ID C L IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L ============================ rupProof Known C [ID]
< apply negateLitList_exists to IsL. Variables: Known ID C L NL IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L H1 : negateLitList L NL ============================ rupProof Known C [ID]
< unfold . Variables: Known ID C L NL IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L H1 : negateLitList L NL ============================ exists Lits A, gatherLits C Lits /\ (negateLitList Lits A /\ rupProof_help Known A [ID])
< exists L, NL. Variables: Known ID C L NL IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L H1 : negateLitList L NL ============================ gatherLits C L /\ (negateLitList L NL /\ rupProof_help Known NL [ID])
< split. Subgoal 1: Variables: Known ID C L NL IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L H1 : negateLitList L NL ============================ gatherLits C L
< search. Subgoal 2: Variables: Known ID C L NL IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L H1 : negateLitList L NL ============================ negateLitList L NL
< search. Subgoal 3: Variables: Known ID C L NL IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L H1 : negateLitList L NL ============================ rupProof_help Known NL [ID]
< unfold . Subgoal 3: Variables: Known ID C L NL IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L H1 : negateLitList L NL ============================ exists C, lookup Known ID C /\ unsat_clause NL C
< exists C. Subgoal 3: Variables: Known ID C L NL IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L H1 : negateLitList L NL ============================ lookup Known ID C /\ unsat_clause NL C
< split. Subgoal 3.1: Variables: Known ID C L NL IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L H1 : negateLitList L NL ============================ lookup Known ID C
< search. Subgoal 3.2: Variables: Known ID C L NL IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L H1 : negateLitList L NL ============================ unsat_clause NL C
< apply negate_lits_unsat to _ GL _. Subgoal 3.2: Variables: Known ID C L NL IsC : is_clause C Lkp : lookup Known ID C GL : gatherLits C L IsL : is_list is_lit L H1 : negateLitList L NL H2 : unsat_clause NL C ============================ unsat_clause NL C
< search. Proof completed.
< Theorem mem_lookup : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K -> exists C', lookup K ID C'. ============================ forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K -> exists C', lookup K ID C'
< induction on 2. IH : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K * -> exists C', lookup K ID C' ============================ forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K @ -> exists C', lookup K ID C'
< intros Is M. Variables: K ID C IH : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K * -> exists C', lookup K ID C' Is : is_list (is_pair is_integer is_clause) K M : mem (ID, C) K @ ============================ exists C', lookup K ID C'
< M: case M. Subgoal 1: Variables: ID C Rest IH : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K * -> exists C', lookup K ID C' Is : is_list (is_pair is_integer is_clause) ((ID, C)::Rest) ============================ exists C', lookup ((ID, C)::Rest) ID C'
< search. Subgoal 2: Variables: ID C Rest I IH : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K * -> exists C', lookup K ID C' Is : is_list (is_pair is_integer is_clause) (I::Rest) M : mem (ID, C) Rest * ============================ exists C', lookup (I::Rest) ID C'
< Is: case Is. Subgoal 2: Variables: ID C Rest I IH : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K * -> exists C', lookup K ID C' M : mem (ID, C) Rest * Is : is_pair is_integer is_clause I Is1 : is_list (is_pair is_integer is_clause) Rest ============================ exists C', lookup (I::Rest) ID C'
< IsP: case Is. Subgoal 2: Variables: ID C Rest B A IH : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K * -> exists C', lookup K ID C' M : mem (ID, C) Rest * Is1 : is_list (is_pair is_integer is_clause) Rest IsP : is_integer A IsP1 : is_clause B ============================ exists C', lookup ((A, B)::Rest) ID C'
< IsID: apply mem_is to _ M. Subgoal 2: Variables: Rest B A ID1 C1 IH : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K * -> exists C', lookup K ID C' M : mem (ID1, C1) Rest * Is1 : is_list (is_pair is_integer is_clause) Rest IsP : is_integer A IsP1 : is_clause B IsID : is_integer ID1 IsID1 : is_clause C1 ============================ exists C', lookup ((A, B)::Rest) ID1 C'
< Or: apply is_integer_eq_or_not to IsP IsID. Subgoal 2: Variables: Rest B A ID1 C1 IH : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K * -> exists C', lookup K ID C' M : mem (ID1, C1) Rest * Is1 : is_list (is_pair is_integer is_clause) Rest IsP : is_integer A IsP1 : is_clause B IsID : is_integer ID1 IsID1 : is_clause C1 Or : A = ID1 \/ (A = ID1 -> false) ============================ exists C', lookup ((A, B)::Rest) ID1 C'
< N: case Or. Subgoal 2.1: Variables: Rest B ID1 C1 IH : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K * -> exists C', lookup K ID C' M : mem (ID1, C1) Rest * Is1 : is_list (is_pair is_integer is_clause) Rest IsP : is_integer ID1 IsP1 : is_clause B IsID : is_integer ID1 IsID1 : is_clause C1 ============================ exists C', lookup ((ID1, B)::Rest) ID1 C'
< search. Subgoal 2.2: Variables: Rest B A ID1 C1 IH : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K * -> exists C', lookup K ID C' M : mem (ID1, C1) Rest * Is1 : is_list (is_pair is_integer is_clause) Rest IsP : is_integer A IsP1 : is_clause B IsID : is_integer ID1 IsID1 : is_clause C1 N : A = ID1 -> false ============================ exists C', lookup ((A, B)::Rest) ID1 C'
< apply IH to _ M. Subgoal 2.2: Variables: Rest B A ID1 C1 C' IH : forall K ID C, is_list (is_pair is_integer is_clause) K -> mem (ID, C) K * -> exists C', lookup K ID C' M : mem (ID1, C1) Rest * Is1 : is_list (is_pair is_integer is_clause) Rest IsP : is_integer A IsP1 : is_clause B IsID : is_integer ID1 IsID1 : is_clause C1 N : A = ID1 -> false H1 : lookup Rest ID1 C' ============================ exists C', lookup ((A, B)::Rest) ID1 C'
< search. Proof completed.
< Add_Ext_Size unsat_proofs:lrat:checkProof. Proof completed.
< Add_Proj_Rel unsat_proofs:lrat:checkProof. Proof completed.
< Prove_Ext_Ind unsat_proofs:lrat:checkProof. Subgoal 4: Variables: Known KRest Prf Final ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (endFrat ID Final) 1 @@ Acc : acc 1 @ IsP : is_proof (endFrat ID Final) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : remove_all Known ID KRest R2 : rupProof Known emptyClause Prf R3 : checkFinalClauses ((ID, emptyClause)::KRest) Final ============================ <checkProof {P}> Known (endFrat ID Final)
< search. Subgoal 5: Variables: Known KRest Final Prf ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (endFratPrf ID Prf Final) 1 @@ Acc : acc 1 @ IsP : is_proof (endFratPrf ID Prf Final) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : remove_all Known ID KRest R2 : rupProof Known emptyClause Prf R3 : checkFinalClauses ((ID, emptyClause)::KRest) Final ============================ <checkProof {P}> Known (endFratPrf ID Prf Final)
< search. Subgoal 6: Variables: N Known N2 KRest Prf Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (addProofless ID C Rest) N @@ Acc : acc N @ IsP : is_proof (addProofless ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : remove_all Known ID KRest R3 : rupProof Known C Prf R4 : <checkProof {ES}> ((ID, C)::KRest) Rest N2 ** ============================ <checkProof {P}> Known (addProofless ID C Rest)
< case IsP. Subgoal 6: Variables: N Known N2 KRest Prf Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (addProofless ID C Rest) N @@ Acc : acc N @ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : remove_all Known ID KRest R3 : rupProof Known C Prf R4 : <checkProof {ES}> ((ID, C)::KRest) Rest N2 ** H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest ============================ <checkProof {P}> Known (addProofless ID C Rest)
< Acc: case Acc. Subgoal 6: Variables: N Known N2 KRest Prf Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (addProofless ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : remove_all Known ID KRest R3 : rupProof Known C Prf R4 : <checkProof {ES}> ((ID, C)::KRest) Rest N2 ** H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * ============================ <checkProof {P}> Known (addProofless ID C Rest)
< apply ext_size_is_int_checkProof to R4. Subgoal 6: Variables: N Known N2 KRest Prf Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (addProofless ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : remove_all Known ID KRest R3 : rupProof Known C Prf R4 : <checkProof {ES}> ((ID, C)::KRest) Rest N2 ** H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 ============================ <checkProof {P}> Known (addProofless ID C Rest)
< L: apply lt_plus_one to R1 _. Subgoal 6: Variables: N Known N2 KRest Prf Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (addProofless ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : remove_all Known ID KRest R3 : rupProof Known C Prf R4 : <checkProof {ES}> ((ID, C)::KRest) Rest N2 ** H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N ============================ <checkProof {P}> Known (addProofless ID C Rest)
< apply ext_size_pos_checkProof to R4. Subgoal 6: Variables: N Known N2 KRest Prf Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (addProofless ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : remove_all Known ID KRest R3 : rupProof Known C Prf R4 : <checkProof {ES}> ((ID, C)::KRest) Rest N2 ** H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 ============================ <checkProof {P}> Known (addProofless ID C Rest)
< A: apply Acc to _ L. Subgoal 6: Variables: N Known N2 KRest Prf Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (addProofless ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : remove_all Known ID KRest R3 : rupProof Known C Prf R4 : <checkProof {ES}> ((ID, C)::KRest) Rest N2 ** H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * ============================ <checkProof {P}> Known (addProofless ID C Rest)
< apply remove_all_is to _ R2. Subgoal 6: Variables: N Known N2 KRest Prf Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (addProofless ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : remove_all Known ID KRest R3 : rupProof Known C Prf R4 : <checkProof {ES}> ((ID, C)::KRest) Rest N2 ** H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest ============================ <checkProof {P}> Known (addProofless ID C Rest)
< apply good_clause_list_remove_all_add to GCL R2 with C = C. Subgoal 6: Variables: N Known N2 KRest Prf Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (addProofless ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : remove_all Known ID KRest R3 : rupProof Known C Prf R4 : <checkProof {ES}> ((ID, C)::KRest) Rest N2 ** H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : good_clause_list ((ID, C)::KRest) ============================ <checkProof {P}> Known (addProofless ID C Rest)
< apply IH to R4 A _ _ _. Subgoal 6: Variables: N Known N2 KRest Prf Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (addProofless ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : remove_all Known ID KRest R3 : rupProof Known C Prf R4 : <checkProof {ES}> ((ID, C)::KRest) Rest N2 ** H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : good_clause_list ((ID, C)::KRest) H8 : <checkProof {P}> ((ID, C)::KRest) Rest ============================ <checkProof {P}> Known (addProofless ID C Rest)
< search. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ Acc : acc N @ IsP : is_proof (relocateClause From To Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** ============================ <checkProof {P}> Known (relocateClause From To Rest)
< case IsP. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ Acc : acc N @ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest ============================ <checkProof {P}> Known (relocateClause From To Rest)
< Acc: case Acc. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * ============================ <checkProof {P}> Known (relocateClause From To Rest)
< apply ext_size_is_int_checkProof to R5. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 ============================ <checkProof {P}> Known (relocateClause From To Rest)
< L: apply lt_plus_one to R1 _. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N ============================ <checkProof {P}> Known (relocateClause From To Rest)
< apply ext_size_pos_checkProof to R5. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 ============================ <checkProof {P}> Known (relocateClause From To Rest)
< A: apply Acc to _ L. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * ============================ <checkProof {P}> Known (relocateClause From To Rest)
< apply remove_all_is to _ R3. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest ============================ <checkProof {P}> Known (relocateClause From To Rest)
< apply select_is to _ R4. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 ============================ <checkProof {P}> Known (relocateClause From To Rest)
< IsIDC: apply select_is_picked to _ R4. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_pair is_integer is_clause (From, C) ============================ <checkProof {P}> Known (relocateClause From To Rest)
< IsIDC: case IsIDC. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C ============================ <checkProof {P}> Known (relocateClause From To Rest)
< assert good_clause_list ((To, C)::KRest2). Subgoal 7.1: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C ============================ good_clause_list ((To, C)::KRest2)
< GCL1: apply good_clause_list_remove_all to GCL R3. Subgoal 7.1: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest ============================ good_clause_list ((To, C)::KRest2)
< GCL2: apply good_clause_list_select to GCL1 R4. Subgoal 7.1: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 ============================ good_clause_list ((To, C)::KRest2)
< unfold . Subgoal 7.1: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 ============================ forall ID C1 KRest C2, select (ID, C1) KRest ((To, C)::KRest2) -> mem (ID, C2) KRest -> false
< intros S M. Subgoal 7.1: Variables: N Known N2 KRest C KRest2 Rest To From ID C1 KRest1 C2 IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 S : select (ID, C1) KRest1 ((To, C)::KRest2) M : mem (ID, C2) KRest1 ============================ false
< S: case S. Subgoal 7.1.1: Variables: N Known N2 KRest C KRest2 Rest To From C2 IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 M : mem (To, C2) KRest2 ============================ false
< MKR: apply mem_after_select_before to R4 M. Subgoal 7.1.1: Variables: N Known N2 KRest C KRest2 Rest To From C2 IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 M : mem (To, C2) KRest2 MKR : mem (To, C2) KRest ============================ false
< apply remove_all_no_mem to R3 MKR. Subgoal 7.1.2: Variables: N Known N2 KRest C KRest2 Rest To From ID C1 C2 L1 IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 M : mem (ID, C2) ((To, C)::L1) S : select (ID, C1) L1 KRest2 ============================ false
< M: case M. Subgoal 7.1.2.1: Variables: N Known N2 KRest C KRest2 Rest To From C1 L1 IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 S : select (To, C1) L1 KRest2 ============================ false
< M: apply select_mem to S. Subgoal 7.1.2.1: Variables: N Known N2 KRest C KRest2 Rest To From C1 L1 IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 S : select (To, C1) L1 KRest2 M : mem (To, C1) KRest2 ============================ false
< M': apply mem_after_select_before to R4 M. Subgoal 7.1.2.1: Variables: N Known N2 KRest C KRest2 Rest To From C1 L1 IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 S : select (To, C1) L1 KRest2 M : mem (To, C1) KRest2 M' : mem (To, C1) KRest ============================ false
< apply remove_all_no_mem to R3 M'. Subgoal 7.1.2.2: Variables: N Known N2 KRest C KRest2 Rest To From ID C1 C2 L1 IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest GCL2 : good_clause_list KRest2 S : select (ID, C1) L1 KRest2 M : mem (ID, C2) L1 ============================ false
< GCL': case GCL2. Subgoal 7.1.2.2: Variables: N Known N2 KRest C KRest2 Rest To From ID C1 C2 L1 IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C GCL1 : good_clause_list KRest S : select (ID, C1) L1 KRest2 M : mem (ID, C2) L1 GCL' : forall ID C1 KRest C2, select (ID, C1) KRest KRest2 -> mem (ID, C2) KRest -> false ============================ false
< apply GCL' to S M. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) ============================ <checkProof {P}> Known (relocateClause From To Rest)
< apply IH to R5 A _ _ _. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest ============================ <checkProof {P}> Known (relocateClause From To Rest)
< MKR: apply select_mem to R4. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest ============================ <checkProof {P}> Known (relocateClause From To Rest)
< MK: apply remove_all_mem_after to R3 MKR. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known ============================ <checkProof {P}> Known (relocateClause From To Rest)
< LK: apply mem_lookup to _ MK. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From C' IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C' ============================ <checkProof {P}> Known (relocateClause From To Rest)
< MK': apply lookup_mem to LK. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From C' IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C' MK' : mem (From, C') Known ============================ <checkProof {P}> Known (relocateClause From To Rest)
< apply good_clause_list_mems to GCL MK' MK. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known ============================ <checkProof {P}> Known (relocateClause From To Rest)
< apply rupProof_self to IsIDC1 _ with Known = Known ID = From. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] ============================ <checkProof {P}> Known (relocateClause From To Rest)
< Proj: assert Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest). Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ <checkProof {P}> Known (relocateClause From To Rest)
< unfold . Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ exists P_P KRest C KRest2, ((To = From -> false) /\ (remove_all Known To KRest /\ (select (From, C) KRest2 KRest /\ <checkProof {P}> ((To, C)::KRest2) Rest))) /\ (Known |{proof}- relocateClause From To Rest ~~> P_P /\ <checkProof {P}> Known P_P)
< exists addLrupProof To C [From] (deleteLratProof From Rest). Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ exists KRest C1 KRest2, ((To = From -> false) /\ (remove_all Known To KRest /\ (select (From, C1) KRest2 KRest /\ <checkProof {P}> ((To, C1)::KRest2) Rest))) /\ (Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) /\ <checkProof {P}> Known (addLrupProof To C [From] (deleteLratProof From Rest)))
< exists KRest, C, KRest2. Subgoal 7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ ((To = From -> false) /\ (remove_all Known To KRest /\ (select (From, C) KRest2 KRest /\ <checkProof {P}> ((To, C)::KRest2) Rest))) /\ (Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) /\ <checkProof {P}> Known (addLrupProof To C [From] (deleteLratProof From Rest)))
< split. Subgoal 7.2: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ To = From -> false
< search. Subgoal 7.3: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ remove_all Known To KRest
< search. Subgoal 7.4: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ select (From, C) KRest2 KRest
< search. Subgoal 7.5: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ <checkProof {P}> ((To, C)::KRest2) Rest
< search. Subgoal 7.6: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest)
< search. Subgoal 7.7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ <checkProof {P}> Known (addLrupProof To C [From] (deleteLratProof From Rest))
< unfold . Subgoal 7.7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ exists KRest, remove_all Known To KRest /\ (rupProof Known C [From] /\ <checkProof {P}> ((To, C)::KRest) (deleteLratProof From Rest))
< exists KRest. Subgoal 7.7: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ remove_all Known To KRest /\ (rupProof Known C [From] /\ <checkProof {P}> ((To, C)::KRest) (deleteLratProof From Rest))
< split. Subgoal 7.7.1: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ remove_all Known To KRest
< search. Subgoal 7.7.2: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ rupProof Known C [From]
< search. Subgoal 7.7.3: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ <checkProof {P}> ((To, C)::KRest) (deleteLratProof From Rest)
< unfold . Subgoal 7.7.3: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ exists C1 KRest1, select (From, C1) KRest1 ((To, C)::KRest) /\ <checkProof {P}> KRest1 Rest
< exists C, (To, C)::KRest2. Subgoal 7.7.3: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ select (From, C) ((To, C)::KRest2) ((To, C)::KRest) /\ <checkProof {P}> ((To, C)::KRest2) Rest
< split. Subgoal 7.7.3.1: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ select (From, C) ((To, C)::KRest2) ((To, C)::KRest)
< search. Subgoal 7.7.3.2: Variables: N Known N2 KRest C KRest2 Rest To From IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause From To Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : To = From -> false R3 : remove_all Known To KRest R4 : select (From, C) KRest2 KRest R5 : <checkProof {ES}> ((To, C)::KRest2) Rest N2 ** H1 : is_integer From H2 : is_integer To H3 : is_proof Rest Acc : forall M, 0 <= M -> M < N -> acc M * H4 : is_integer N2 L : N2 < N H5 : 0 <= N2 A : acc N2 * H6 : is_list (is_pair is_integer is_clause) KRest H7 : is_list (is_pair is_integer is_clause) KRest2 IsIDC : is_integer From IsIDC1 : is_clause C H8 : good_clause_list ((To, C)::KRest2) H9 : <checkProof {P}> ((To, C)::KRest2) Rest MKR : mem (From, C) KRest MK : mem (From, C) Known LK : lookup Known From C MK' : mem (From, C) Known H10 : rupProof Known C [From] Proj : Known |{proof}- relocateClause From To Rest ~~> addLrupProof To C [From] (deleteLratProof From Rest) ============================ <checkProof {P}> ((To, C)::KRest2) Rest
< search. Subgoal 8: Variables: N Known N2 C Rest ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause ID ID Rest) N @@ Acc : acc N @ IsP : is_proof (relocateClause ID ID Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : mem (ID, C) Known R3 : <checkProof {ES}> Known Rest N2 ** ============================ <checkProof {P}> Known (relocateClause ID ID Rest)
< Acc: case Acc. Subgoal 8: Variables: N Known N2 C Rest ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause ID ID Rest) N @@ IsP : is_proof (relocateClause ID ID Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : mem (ID, C) Known R3 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * ============================ <checkProof {P}> Known (relocateClause ID ID Rest)
< apply ext_size_is_int_checkProof to R3. Subgoal 8: Variables: N Known N2 C Rest ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause ID ID Rest) N @@ IsP : is_proof (relocateClause ID ID Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : mem (ID, C) Known R3 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 ============================ <checkProof {P}> Known (relocateClause ID ID Rest)
< L: apply lt_plus_one to R1 _. Subgoal 8: Variables: N Known N2 C Rest ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause ID ID Rest) N @@ IsP : is_proof (relocateClause ID ID Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : mem (ID, C) Known R3 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N ============================ <checkProof {P}> Known (relocateClause ID ID Rest)
< apply ext_size_pos_checkProof to R3. Subgoal 8: Variables: N Known N2 C Rest ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause ID ID Rest) N @@ IsP : is_proof (relocateClause ID ID Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : mem (ID, C) Known R3 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 ============================ <checkProof {P}> Known (relocateClause ID ID Rest)
< A: apply Acc to _ L. Subgoal 8: Variables: N Known N2 C Rest ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause ID ID Rest) N @@ IsP : is_proof (relocateClause ID ID Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : mem (ID, C) Known R3 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * ============================ <checkProof {P}> Known (relocateClause ID ID Rest)
< case IsP. Subgoal 8: Variables: N Known N2 C Rest ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause ID ID Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : mem (ID, C) Known R3 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * H3 : is_integer ID H4 : is_integer ID H5 : is_proof Rest ============================ <checkProof {P}> Known (relocateClause ID ID Rest)
< apply IH to R3 A _ _ _. Subgoal 8: Variables: N Known N2 C Rest ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause ID ID Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : mem (ID, C) Known R3 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * H3 : is_integer ID H4 : is_integer ID H5 : is_proof Rest H6 : <checkProof {P}> Known Rest ============================ <checkProof {P}> Known (relocateClause ID ID Rest)
< Proj: assert Known |{proof}- relocateClause ID ID Rest ~~> Rest. Subgoal 8: Variables: N Known N2 C Rest ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (relocateClause ID ID Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : mem (ID, C) Known R3 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * H3 : is_integer ID H4 : is_integer ID H5 : is_proof Rest H6 : <checkProof {P}> Known Rest Proj : Known |{proof}- relocateClause ID ID Rest ~~> Rest ============================ <checkProof {P}> Known (relocateClause ID ID Rest)
< search. Subgoal 9: Variables: N Known N2 KRest Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (deleteFrat ID C Rest) N @@ Acc : acc N @ IsP : is_proof (deleteFrat ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : select (ID, C) KRest Known R3 : <checkProof {ES}> KRest Rest N2 ** ============================ <checkProof {P}> Known (deleteFrat ID C Rest)
< Proj: assert Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest. Subgoal 9: Variables: N Known N2 KRest Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (deleteFrat ID C Rest) N @@ Acc : acc N @ IsP : is_proof (deleteFrat ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : select (ID, C) KRest Known R3 : <checkProof {ES}> KRest Rest N2 ** Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest ============================ <checkProof {P}> Known (deleteFrat ID C Rest)
< Acc: case Acc. Subgoal 9: Variables: N Known N2 KRest Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (deleteFrat ID C Rest) N @@ IsP : is_proof (deleteFrat ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : select (ID, C) KRest Known R3 : <checkProof {ES}> KRest Rest N2 ** Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest Acc : forall M, 0 <= M -> M < N -> acc M * ============================ <checkProof {P}> Known (deleteFrat ID C Rest)
< apply ext_size_is_int_checkProof to R3. Subgoal 9: Variables: N Known N2 KRest Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (deleteFrat ID C Rest) N @@ IsP : is_proof (deleteFrat ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : select (ID, C) KRest Known R3 : <checkProof {ES}> KRest Rest N2 ** Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 ============================ <checkProof {P}> Known (deleteFrat ID C Rest)
< L: apply lt_plus_one to R1 _. Subgoal 9: Variables: N Known N2 KRest Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (deleteFrat ID C Rest) N @@ IsP : is_proof (deleteFrat ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : select (ID, C) KRest Known R3 : <checkProof {ES}> KRest Rest N2 ** Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N ============================ <checkProof {P}> Known (deleteFrat ID C Rest)
< apply ext_size_pos_checkProof to R3. Subgoal 9: Variables: N Known N2 KRest Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (deleteFrat ID C Rest) N @@ IsP : is_proof (deleteFrat ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : select (ID, C) KRest Known R3 : <checkProof {ES}> KRest Rest N2 ** Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 ============================ <checkProof {P}> Known (deleteFrat ID C Rest)
< A: apply Acc to _ L. Subgoal 9: Variables: N Known N2 KRest Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (deleteFrat ID C Rest) N @@ IsP : is_proof (deleteFrat ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : select (ID, C) KRest Known R3 : <checkProof {ES}> KRest Rest N2 ** Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * ============================ <checkProof {P}> Known (deleteFrat ID C Rest)
< case IsP. Subgoal 9: Variables: N Known N2 KRest Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (deleteFrat ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : select (ID, C) KRest Known R3 : <checkProof {ES}> KRest Rest N2 ** Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * H3 : is_integer ID H4 : is_clause C H5 : is_proof Rest ============================ <checkProof {P}> Known (deleteFrat ID C Rest)
< apply select_is to _ R2. Subgoal 9: Variables: N Known N2 KRest Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (deleteFrat ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : select (ID, C) KRest Known R3 : <checkProof {ES}> KRest Rest N2 ** Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * H3 : is_integer ID H4 : is_clause C H5 : is_proof Rest H6 : is_list (is_pair is_integer is_clause) KRest ============================ <checkProof {P}> Known (deleteFrat ID C Rest)
< apply good_clause_list_select to GCL R2. Subgoal 9: Variables: N Known N2 KRest Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (deleteFrat ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : select (ID, C) KRest Known R3 : <checkProof {ES}> KRest Rest N2 ** Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * H3 : is_integer ID H4 : is_clause C H5 : is_proof Rest H6 : is_list (is_pair is_integer is_clause) KRest H7 : good_clause_list KRest ============================ <checkProof {P}> Known (deleteFrat ID C Rest)
< apply IH to R3 A _ _ _. Subgoal 9: Variables: N Known N2 KRest Rest C ID IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (deleteFrat ID C Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : select (ID, C) KRest Known R3 : <checkProof {ES}> KRest Rest N2 ** Proj : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * H3 : is_integer ID H4 : is_clause C H5 : is_proof Rest H6 : is_list (is_pair is_integer is_clause) KRest H7 : good_clause_list KRest H8 : <checkProof {P}> KRest Rest ============================ <checkProof {P}> Known (deleteFrat ID C Rest)
< search. Subgoal 10: Variables: N Known N2 Rest Comment IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (commentProof Comment Rest) N @@ Acc : acc N @ IsP : is_proof (commentProof Comment Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : <checkProof {ES}> Known Rest N2 ** ============================ <checkProof {P}> Known (commentProof Comment Rest)
< Acc: case Acc. Subgoal 10: Variables: N Known N2 Rest Comment IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (commentProof Comment Rest) N @@ IsP : is_proof (commentProof Comment Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * ============================ <checkProof {P}> Known (commentProof Comment Rest)
< apply ext_size_is_int_checkProof to R2. Subgoal 10: Variables: N Known N2 Rest Comment IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (commentProof Comment Rest) N @@ IsP : is_proof (commentProof Comment Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 ============================ <checkProof {P}> Known (commentProof Comment Rest)
< L: apply lt_plus_one to R1 _. Subgoal 10: Variables: N Known N2 Rest Comment IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (commentProof Comment Rest) N @@ IsP : is_proof (commentProof Comment Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N ============================ <checkProof {P}> Known (commentProof Comment Rest)
< apply ext_size_pos_checkProof to R2. Subgoal 10: Variables: N Known N2 Rest Comment IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (commentProof Comment Rest) N @@ IsP : is_proof (commentProof Comment Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 ============================ <checkProof {P}> Known (commentProof Comment Rest)
< A: apply Acc to _ L. Subgoal 10: Variables: N Known N2 Rest Comment IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (commentProof Comment Rest) N @@ IsP : is_proof (commentProof Comment Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * ============================ <checkProof {P}> Known (commentProof Comment Rest)
< case IsP. Subgoal 10: Variables: N Known N2 Rest Comment IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (commentProof Comment Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * H3 : is_string Comment H4 : is_proof Rest ============================ <checkProof {P}> Known (commentProof Comment Rest)
< apply IH to R2 A _ _ _. Subgoal 10: Variables: N Known N2 Rest Comment IH : forall N Known P, <checkProof {ES}> Known P N -> acc N * -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P IH1 : forall N Known P, <checkProof {ES}> Known P N ** -> acc N @ -> is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> <checkProof {P}> Known P R : <checkProof {ES}> Known (commentProof Comment Rest) N @@ IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known R1 : 1 + N2 = N R2 : <checkProof {ES}> Known Rest N2 ** Acc : forall M, 0 <= M -> M < N -> acc M * H1 : is_integer N2 L : N2 < N H2 : 0 <= N2 A : acc N2 * H3 : is_string Comment H4 : is_proof Rest H5 : <checkProof {P}> Known Rest ============================ <checkProof {P}> Known (commentProof Comment Rest)
< search. Proof completed.
< Prove_Constraint unsat_proofs:lrat:proj_checkProof. Subgoal 1: Variables: Known Prf ID FC Hyp : Known |{proof}- endFrat ID FC ~~> emptyLrat ID Prf Hyp1 : checkProof Known (endFrat ID FC) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : rupProof Known emptyClause Prf ============================ checkProof Known (emptyLrat ID Prf)
< case Hyp1. Subgoal 1: Variables: Known Prf ID FC KRest Prf1 Hyp : Known |{proof}- endFrat ID FC ~~> emptyLrat ID Prf Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : rupProof Known emptyClause Prf H1 : remove_all Known ID KRest H2 : rupProof Known emptyClause Prf1 H3 : checkFinalClauses ((ID, emptyClause)::KRest) FC ============================ checkProof Known (emptyLrat ID Prf)
< search. Subgoal 2: Variables: Known Prf ID FC Hyp : Known |{proof}- endFratPrf ID Prf FC ~~> emptyLrat ID Prf Hyp1 : checkProof Known (endFratPrf ID Prf FC) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known ============================ checkProof Known (emptyLrat ID Prf)
< case Hyp1. Subgoal 2: Variables: Known Prf ID FC KRest Hyp : Known |{proof}- endFratPrf ID Prf FC ~~> emptyLrat ID Prf Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known H1 : remove_all Known ID KRest H2 : rupProof Known emptyClause Prf H3 : checkFinalClauses ((ID, emptyClause)::KRest) FC ============================ checkProof Known (emptyLrat ID Prf)
< search. Subgoal 3: Variables: Known Rest Prf C ID Hyp : Known |{proof}- addProofless ID C Rest ~~> addLrupProof ID C Prf Rest Hyp1 : checkProof Known (addProofless ID C Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : rupProof Known C Prf ============================ checkProof Known (addLrupProof ID C Prf Rest)
< case Hyp1. Subgoal 3: Variables: Known Rest Prf C ID KRest Prf1 Hyp : Known |{proof}- addProofless ID C Rest ~~> addLrupProof ID C Prf Rest Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : rupProof Known C Prf H1 : remove_all Known ID KRest H2 : rupProof Known C Prf1 H3 : checkProof ((ID, C)::KRest) Rest ============================ checkProof Known (addLrupProof ID C Prf Rest)
< search. Subgoal 4: Variables: Known Rest F C T Hyp : Known |{proof}- relocateClause F T Rest ~~> addLrupProof T C [F] (deleteLratProof F Rest) Hyp1 : checkProof Known (relocateClause F T Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = F -> false Hyp5 : mem (F, C) Known ============================ checkProof Known (addLrupProof T C [F] (deleteLratProof F Rest))
< Prf: case Hyp1. Subgoal 4.1: Variables: Known Rest F C T KRest C1 KRest2 Hyp : Known |{proof}- relocateClause F T Rest ~~> addLrupProof T C [F] (deleteLratProof F Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = F -> false Hyp5 : mem (F, C) Known Prf : T = F -> false Prf1 : remove_all Known T KRest Prf2 : select (F, C1) KRest2 KRest Prf3 : checkProof ((T, C1)::KRest2) Rest ============================ checkProof Known (addLrupProof T C [F] (deleteLratProof F Rest))
< M: apply select_mem to Prf2. Subgoal 4.1: Variables: Known Rest F C T KRest C1 KRest2 Hyp : Known |{proof}- relocateClause F T Rest ~~> addLrupProof T C [F] (deleteLratProof F Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = F -> false Hyp5 : mem (F, C) Known Prf : T = F -> false Prf1 : remove_all Known T KRest Prf2 : select (F, C1) KRest2 KRest Prf3 : checkProof ((T, C1)::KRest2) Rest M : mem (F, C1) KRest ============================ checkProof Known (addLrupProof T C [F] (deleteLratProof F Rest))
< M': apply remove_all_mem_after to Prf1 M. Subgoal 4.1: Variables: Known Rest F C T KRest C1 KRest2 Hyp : Known |{proof}- relocateClause F T Rest ~~> addLrupProof T C [F] (deleteLratProof F Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = F -> false Hyp5 : mem (F, C) Known Prf : T = F -> false Prf1 : remove_all Known T KRest Prf2 : select (F, C1) KRest2 KRest Prf3 : checkProof ((T, C1)::KRest2) Rest M : mem (F, C1) KRest M' : mem (F, C1) Known ============================ checkProof Known (addLrupProof T C [F] (deleteLratProof F Rest))
< apply good_clause_list_mems to _ Hyp5 M'. Subgoal 4.1: Variables: Known Rest F T KRest C1 KRest2 Hyp : Known |{proof}- relocateClause F T Rest ~~> addLrupProof T C1 [F] (deleteLratProof F Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = F -> false Hyp5 : mem (F, C1) Known Prf : T = F -> false Prf1 : remove_all Known T KRest Prf2 : select (F, C1) KRest2 KRest Prf3 : checkProof ((T, C1)::KRest2) Rest M : mem (F, C1) KRest M' : mem (F, C1) Known ============================ checkProof Known (addLrupProof T C1 [F] (deleteLratProof F Rest))
< Is: apply mem_is to _ M'. Subgoal 4.1: Variables: Known Rest T KRest KRest2 ID C2 Hyp : Known |{proof}- relocateClause ID T Rest ~~> addLrupProof T C2 [ID] (deleteLratProof ID Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = ID -> false Hyp5 : mem (ID, C2) Known Prf : T = ID -> false Prf1 : remove_all Known T KRest Prf2 : select (ID, C2) KRest2 KRest Prf3 : checkProof ((T, C2)::KRest2) Rest M : mem (ID, C2) KRest M' : mem (ID, C2) Known Is : is_integer ID Is1 : is_clause C2 ============================ checkProof Known (addLrupProof T C2 [ID] (deleteLratProof ID Rest))
< apply remove_all_is to _ Prf1. Subgoal 4.1: Variables: Known Rest T KRest KRest2 ID C2 Hyp : Known |{proof}- relocateClause ID T Rest ~~> addLrupProof T C2 [ID] (deleteLratProof ID Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = ID -> false Hyp5 : mem (ID, C2) Known Prf : T = ID -> false Prf1 : remove_all Known T KRest Prf2 : select (ID, C2) KRest2 KRest Prf3 : checkProof ((T, C2)::KRest2) Rest M : mem (ID, C2) KRest M' : mem (ID, C2) Known Is : is_integer ID Is1 : is_clause C2 H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Known (addLrupProof T C2 [ID] (deleteLratProof ID Rest))
< L: apply is_list_mem_lookup to _ M _. Subgoal 4.1: Variables: Known Rest T KRest KRest2 ID C2 C' Hyp : Known |{proof}- relocateClause ID T Rest ~~> addLrupProof T C2 [ID] (deleteLratProof ID Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = ID -> false Hyp5 : mem (ID, C2) Known Prf : T = ID -> false Prf1 : remove_all Known T KRest Prf2 : select (ID, C2) KRest2 KRest Prf3 : checkProof ((T, C2)::KRest2) Rest M : mem (ID, C2) KRest M' : mem (ID, C2) Known Is : is_integer ID Is1 : is_clause C2 H1 : is_list (is_pair is_integer is_clause) KRest L : lookup KRest ID C' ============================ checkProof Known (addLrupProof T C2 [ID] (deleteLratProof ID Rest))
< M2: apply lookup_mem to L. Subgoal 4.1: Variables: Known Rest T KRest KRest2 ID C2 C' Hyp : Known |{proof}- relocateClause ID T Rest ~~> addLrupProof T C2 [ID] (deleteLratProof ID Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = ID -> false Hyp5 : mem (ID, C2) Known Prf : T = ID -> false Prf1 : remove_all Known T KRest Prf2 : select (ID, C2) KRest2 KRest Prf3 : checkProof ((T, C2)::KRest2) Rest M : mem (ID, C2) KRest M' : mem (ID, C2) Known Is : is_integer ID Is1 : is_clause C2 H1 : is_list (is_pair is_integer is_clause) KRest L : lookup KRest ID C' M2 : mem (ID, C') KRest ============================ checkProof Known (addLrupProof T C2 [ID] (deleteLratProof ID Rest))
< apply good_clause_list_remove_all to _ Prf1. Subgoal 4.1: Variables: Known Rest T KRest KRest2 ID C2 C' Hyp : Known |{proof}- relocateClause ID T Rest ~~> addLrupProof T C2 [ID] (deleteLratProof ID Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = ID -> false Hyp5 : mem (ID, C2) Known Prf : T = ID -> false Prf1 : remove_all Known T KRest Prf2 : select (ID, C2) KRest2 KRest Prf3 : checkProof ((T, C2)::KRest2) Rest M : mem (ID, C2) KRest M' : mem (ID, C2) Known Is : is_integer ID Is1 : is_clause C2 H1 : is_list (is_pair is_integer is_clause) KRest L : lookup KRest ID C' M2 : mem (ID, C') KRest H2 : good_clause_list KRest ============================ checkProof Known (addLrupProof T C2 [ID] (deleteLratProof ID Rest))
< apply good_clause_list_mems to _ M2 M. Subgoal 4.1: Variables: Known Rest T KRest KRest2 ID C2 Hyp : Known |{proof}- relocateClause ID T Rest ~~> addLrupProof T C2 [ID] (deleteLratProof ID Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = ID -> false Hyp5 : mem (ID, C2) Known Prf : T = ID -> false Prf1 : remove_all Known T KRest Prf2 : select (ID, C2) KRest2 KRest Prf3 : checkProof ((T, C2)::KRest2) Rest M : mem (ID, C2) KRest M' : mem (ID, C2) Known Is : is_integer ID Is1 : is_clause C2 H1 : is_list (is_pair is_integer is_clause) KRest L : lookup KRest ID C2 M2 : mem (ID, C2) KRest H2 : good_clause_list KRest ============================ checkProof Known (addLrupProof T C2 [ID] (deleteLratProof ID Rest))
< L': apply remove_all_lookup_after to Prf1 L. Subgoal 4.1: Variables: Known Rest T KRest KRest2 ID C2 Hyp : Known |{proof}- relocateClause ID T Rest ~~> addLrupProof T C2 [ID] (deleteLratProof ID Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = ID -> false Hyp5 : mem (ID, C2) Known Prf : T = ID -> false Prf1 : remove_all Known T KRest Prf2 : select (ID, C2) KRest2 KRest Prf3 : checkProof ((T, C2)::KRest2) Rest M : mem (ID, C2) KRest M' : mem (ID, C2) Known Is : is_integer ID Is1 : is_clause C2 H1 : is_list (is_pair is_integer is_clause) KRest L : lookup KRest ID C2 M2 : mem (ID, C2) KRest H2 : good_clause_list KRest L' : lookup Known ID C2 ============================ checkProof Known (addLrupProof T C2 [ID] (deleteLratProof ID Rest))
< RUP: apply rupProof_self to Is1 L'. Subgoal 4.1: Variables: Known Rest T KRest KRest2 ID C2 Hyp : Known |{proof}- relocateClause ID T Rest ~~> addLrupProof T C2 [ID] (deleteLratProof ID Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = ID -> false Hyp5 : mem (ID, C2) Known Prf : T = ID -> false Prf1 : remove_all Known T KRest Prf2 : select (ID, C2) KRest2 KRest Prf3 : checkProof ((T, C2)::KRest2) Rest M : mem (ID, C2) KRest M' : mem (ID, C2) Known Is : is_integer ID Is1 : is_clause C2 H1 : is_list (is_pair is_integer is_clause) KRest L : lookup KRest ID C2 M2 : mem (ID, C2) KRest H2 : good_clause_list KRest L' : lookup Known ID C2 RUP : rupProof Known C2 [ID] ============================ checkProof Known (addLrupProof T C2 [ID] (deleteLratProof ID Rest))
< search. Subgoal 4.2: Variables: Known Rest C T C1 Hyp : Known |{proof}- relocateClause T T Rest ~~> addLrupProof T C [T] (deleteLratProof T Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Hyp4 : T = T -> false Hyp5 : mem (T, C) Known Prf : mem (T, C1) Known Prf1 : checkProof Known Rest ============================ checkProof Known (addLrupProof T C [T] (deleteLratProof T Rest))
< apply Hyp4 to _. Subgoal 5: Variables: Known P' ID Hyp : Known |{proof}- relocateClause ID ID P' ~~> P' Hyp1 : checkProof Known (relocateClause ID ID P') Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known ============================ checkProof Known P'
< Prf: case Hyp1. Subgoal 5.1: Variables: Known P' ID KRest C KRest2 Hyp : Known |{proof}- relocateClause ID ID P' ~~> P' Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Prf : ID = ID -> false Prf1 : remove_all Known ID KRest Prf2 : select (ID, C) KRest2 KRest Prf3 : checkProof ((ID, C)::KRest2) P' ============================ checkProof Known P'
< apply Prf to _. Subgoal 5.2: Variables: Known P' ID C Hyp : Known |{proof}- relocateClause ID ID P' ~~> P' Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known Prf : mem (ID, C) Known Prf1 : checkProof Known P' ============================ checkProof Known P'
< search. Subgoal 6: Variables: Known Rest ID C Hyp : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest Hyp1 : checkProof Known (deleteFrat ID C Rest) Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known ============================ checkProof Known (deleteLratProof ID Rest)
< case Hyp1. Subgoal 6: Variables: Known Rest ID C KRest Hyp : Known |{proof}- deleteFrat ID C Rest ~~> deleteLratProof ID Rest Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known H1 : select (ID, C) KRest Known H2 : checkProof KRest Rest ============================ checkProof Known (deleteLratProof ID Rest)
< search. Subgoal 7: Variables: Known P' Comment Hyp : Known |{proof}- commentProof Comment P' ~~> P' Hyp1 : checkProof Known (commentProof Comment P') Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known ============================ checkProof Known P'
< case Hyp1. Subgoal 7: Variables: Known P' Comment Hyp : Known |{proof}- commentProof Comment P' ~~> P' Hyp2 : is_list (is_pair is_integer is_clause) Known Hyp3 : good_clause_list Known H1 : checkProof Known P' ============================ checkProof Known P'
< search. Proof completed.
< Prove unsat_proofs:lrat:formulaToKnown_unique. Proof completed.
< Prove unsat_proofs:lrat:formulaToKnown_all_greater. Proof completed.
< Prove unsat_proofs:lrat:formulaToKnown_all_unique. Proof completed.
< Prove unsat_proofs:lrat:formulaToKnown_sat_formula. Proof completed.
< Prove unsat_proofs:lrat:formulaToKnown_is. Proof completed.
< Extensible_Theorem checkFratProof_correct : forall FormulaClauses Known FP Sat, IsFP : is_fratProof FP -> IsSat : is_list is_lit Sat -> GA_Sat : good_assignment Sat -> GCL_K : good_clause_list Known -> GCL_FC : good_clause_list FormulaClauses -> IsKnown : is_list (is_pair is_integer is_clause) Known -> IsFC : is_list (is_pair is_integer is_clause) FormulaClauses -> NoMem : (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> CFP : checkFratProof FormulaClauses Known FP -> SatK : (forall CID C, lookup Known CID C -> sat_clause Sat C) -> SatFC : (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false on CFP. Subgoal 1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsFP : is_fratProof (addOriginal ID C Rest) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * ============================ false
< IsFP: case IsFP. Subgoal 1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest ============================ false
< SatC: assert sat_clause Sat C. Subgoal 1.1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest ============================ sat_clause Sat C
< M1: apply select_mem to CFP1. Subgoal 1.1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest M1 : mem (ID, C) FormulaClauses ============================ sat_clause Sat C
< Is: apply select_is_picked to _ CFP1. Subgoal 1.1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest M1 : mem (ID, C) FormulaClauses Is : is_pair is_integer is_clause (ID, C) ============================ sat_clause Sat C
< Is: case Is. Subgoal 1.1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest M1 : mem (ID, C) FormulaClauses Is : is_integer ID Is1 : is_clause C ============================ sat_clause Sat C
< Lkp: apply is_list_mem_lookup to IsFC M1 _. Subgoal 1.1: Variables: FormulaClauses Known Sat CRest Rest C ID C' IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest M1 : mem (ID, C) FormulaClauses Is : is_integer ID Is1 : is_clause C Lkp : lookup FormulaClauses ID C' ============================ sat_clause Sat C
< M2: apply lookup_mem to Lkp. Subgoal 1.1: Variables: FormulaClauses Known Sat CRest Rest C ID C' IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest M1 : mem (ID, C) FormulaClauses Is : is_integer ID Is1 : is_clause C Lkp : lookup FormulaClauses ID C' M2 : mem (ID, C') FormulaClauses ============================ sat_clause Sat C
< apply good_clause_list_mems to _ M1 M2. Subgoal 1.1: Variables: FormulaClauses Known Sat CRest Rest ID C' IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C' Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C') CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C')::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C' IsFP2 : is_fratProof Rest M1 : mem (ID, C') FormulaClauses Is : is_integer ID Is1 : is_clause C' Lkp : lookup FormulaClauses ID C' M2 : mem (ID, C') FormulaClauses ============================ sat_clause Sat C'
< apply SatFC to Lkp. Subgoal 1.1: Variables: FormulaClauses Known Sat CRest Rest ID C' IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C' Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C') CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C')::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C' IsFP2 : is_fratProof Rest M1 : mem (ID, C') FormulaClauses Is : is_integer ID Is1 : is_clause C' Lkp : lookup FormulaClauses ID C' M2 : mem (ID, C') FormulaClauses H1 : sat_clause Sat C' ============================ sat_clause Sat C'
< search. Subgoal 1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C ============================ false
< assert forall CID C, lookup CRest CID C -> sat_clause Sat C. Subgoal 1.2: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C ============================ forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1
< intros Lkp. Subgoal 1.2: Variables: FormulaClauses Known Sat CRest Rest C ID CID C1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C Lkp : lookup CRest CID C1 ============================ sat_clause Sat C1
< M: apply lookup_mem to Lkp. Subgoal 1.2: Variables: FormulaClauses Known Sat CRest Rest C ID CID C1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C Lkp : lookup CRest CID C1 M : mem (CID, C1) CRest ============================ sat_clause Sat C1
< apply select_is to _ CFP1. Subgoal 1.2: Variables: FormulaClauses Known Sat CRest Rest C ID CID C1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C Lkp : lookup CRest CID C1 M : mem (CID, C1) CRest H1 : is_list (is_pair is_integer is_clause) CRest ============================ sat_clause Sat C1
< apply mem_is to _ M. Subgoal 1.2: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 C2 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C Lkp : lookup CRest ID1 C2 M : mem (ID1, C2) CRest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C2 ============================ sat_clause Sat C2
< assert forall I C1 C2, mem (I, C1) FormulaClauses -> mem (I, C2) FormulaClauses -> C1 = C2. Subgoal 1.2.1: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 C2 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C Lkp : lookup CRest ID1 C2 M : mem (ID1, C2) CRest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C2 ============================ forall I C1 C2, mem (I, C1) FormulaClauses -> mem (I, C2) FormulaClauses -> C1 = C2
< intros MA MB. Subgoal 1.2.1: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 C2 I C3 C4 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C Lkp : lookup CRest ID1 C2 M : mem (ID1, C2) CRest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C2 MA : mem (I, C3) FormulaClauses MB : mem (I, C4) FormulaClauses ============================ C3 = C4
< apply good_clause_list_mems to _ MA MB. Subgoal 1.2.1: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 C2 I C4 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C Lkp : lookup CRest ID1 C2 M : mem (ID1, C2) CRest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C2 MA : mem (I, C4) FormulaClauses MB : mem (I, C4) FormulaClauses ============================ C4 = C4
< search. Subgoal 1.2: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 C2 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C Lkp : lookup CRest ID1 C2 M : mem (ID1, C2) CRest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C2 H4 : forall I C1 C2, mem (I, C1) FormulaClauses -> mem (I, C2) FormulaClauses -> C1 = C2 ============================ sat_clause Sat C2
< Lkp': apply lookup_after_select to IsFC _ _ CFP1 Lkp. Subgoal 1.2: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 C2 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C Lkp : lookup CRest ID1 C2 M : mem (ID1, C2) CRest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C2 H4 : forall I C1 C2, mem (I, C1) FormulaClauses -> mem (I, C2) FormulaClauses -> C1 = C2 Lkp' : lookup FormulaClauses ID1 C2 ============================ sat_clause Sat C2
< apply SatFC to Lkp'. Subgoal 1.2: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 C2 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C Lkp : lookup CRest ID1 C2 M : mem (ID1, C2) CRest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C2 H4 : forall I C1 C2, mem (I, C1) FormulaClauses -> mem (I, C2) FormulaClauses -> C1 = C2 Lkp' : lookup FormulaClauses ID1 C2 H5 : sat_clause Sat C2 ============================ sat_clause Sat C2
< search. Subgoal 1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 ============================ false
< assert forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1. Subgoal 1.3: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 ============================ forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1
< intros Lkp. Subgoal 1.3: Variables: FormulaClauses Known Sat CRest Rest C ID CID C1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 Lkp : lookup ((ID, C)::Known) CID C1 ============================ sat_clause Sat C1
< Lkp: case Lkp. Subgoal 1.3.1: Variables: FormulaClauses Known Sat CRest Rest CID C1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal CID C1 Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (CID, C1) CRest FormulaClauses CFP2 : checkFratProof CRest ((CID, C1)::Known) Rest * IsFP : is_integer CID IsFP1 : is_clause C1 IsFP2 : is_fratProof Rest SatC : sat_clause Sat C1 H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 ============================ sat_clause Sat C1
< search. Subgoal 1.3.2: Variables: FormulaClauses Known Sat CRest Rest C ID CID C1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 Lkp : ID = CID -> false Lkp1 : lookup Known CID C1 ============================ sat_clause Sat C1
< apply SatK to Lkp1. Subgoal 1.3.2: Variables: FormulaClauses Known Sat CRest Rest C ID CID C1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 Lkp : ID = CID -> false Lkp1 : lookup Known CID C1 H2 : sat_clause Sat C1 ============================ sat_clause Sat C1
< search. Subgoal 1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 ============================ false
< apply select_is to _ CFP1. Subgoal 1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest ============================ false
< apply good_clause_list_select to _ CFP1. Subgoal 1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest ============================ false
< assert good_clause_list ((ID, C)::Known). Subgoal 1.4: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest ============================ good_clause_list ((ID, C)::Known)
< unfold . Subgoal 1.4: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest ============================ forall ID1 C1 KRest C2, select (ID1, C1) KRest ((ID, C)::Known) -> mem (ID1, C2) KRest -> false
< intros S M. Subgoal 1.4: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 C1 KRest C2 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest S : select (ID1, C1) KRest ((ID, C)::Known) M : mem (ID1, C2) KRest ============================ false
< S: case S. Subgoal 1.4.1: Variables: FormulaClauses Known Sat CRest Rest C ID C2 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest M : mem (ID, C2) Known ============================ false
< M': apply select_mem to CFP1. Subgoal 1.4.1: Variables: FormulaClauses Known Sat CRest Rest C ID C2 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest M : mem (ID, C2) Known M' : mem (ID, C) FormulaClauses ============================ false
< apply NoMem to M M'. Subgoal 1.4.2: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 C1 C2 L1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest M : mem (ID1, C2) ((ID, C)::L1) S : select (ID1, C1) L1 Known ============================ false
< M: case M. Subgoal 1.4.2.1: Variables: FormulaClauses Known Sat CRest Rest C ID C1 L1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest S : select (ID, C1) L1 Known ============================ false
< MS: apply select_mem to S. Subgoal 1.4.2.1: Variables: FormulaClauses Known Sat CRest Rest C ID C1 L1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest S : select (ID, C1) L1 Known MS : mem (ID, C1) Known ============================ false
< M': apply select_mem to CFP1. Subgoal 1.4.2.1: Variables: FormulaClauses Known Sat CRest Rest C ID C1 L1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest S : select (ID, C1) L1 Known MS : mem (ID, C1) Known M' : mem (ID, C) FormulaClauses ============================ false
< apply NoMem to MS M'. Subgoal 1.4.2.2: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 C1 C2 L1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest S : select (ID1, C1) L1 Known M : mem (ID1, C2) L1 ============================ false
< GCL: case GCL_K. Subgoal 1.4.2.2: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 C1 C2 L1 IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest S : select (ID1, C1) L1 Known M : mem (ID1, C2) L1 GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to S M. Subgoal 1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) ============================ false
< assert forall ID1 CK CFC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CFC) CRest -> false. Subgoal 1.5: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) ============================ forall ID1 CK CFC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CFC) CRest -> false
< intros MA MB. Subgoal 1.5: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 CK CFC IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MA : mem (ID1, CK) ((ID, C)::Known) MB : mem (ID1, CFC) CRest ============================ false
< MA: case MA. Subgoal 1.5.1: Variables: FormulaClauses Known Sat CRest Rest C ID CFC IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MB : mem (ID, CFC) CRest ============================ false
< GCL: case GCL_FC. Subgoal 1.5.1: Variables: FormulaClauses Known Sat CRest Rest C ID CFC IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MB : mem (ID, CFC) CRest GCL : forall ID C1 KRest C2, select (ID, C1) KRest FormulaClauses -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to CFP1 MB. Subgoal 1.5.2: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 CK CFC IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MB : mem (ID1, CFC) CRest MA : mem (ID1, CK) Known ============================ false
< MFC: apply mem_after_select_before to CFP1 MB. Subgoal 1.5.2: Variables: FormulaClauses Known Sat CRest Rest C ID ID1 CK CFC IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MB : mem (ID1, CFC) CRest MA : mem (ID1, CK) Known MFC : mem (ID1, CFC) FormulaClauses ============================ false
< apply NoMem to MA MFC. Subgoal 1: Variables: FormulaClauses Known Sat CRest Rest C ID IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (addOriginal ID C Rest) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : select (ID, C) CRest FormulaClauses CFP2 : checkFratProof CRest ((ID, C)::Known) Rest * IsFP : is_integer ID IsFP1 : is_clause C IsFP2 : is_fratProof Rest SatC : sat_clause Sat C H1 : forall CID C1, lookup CRest CID C1 -> sat_clause Sat C1 H2 : forall CID C1, lookup ((ID, C)::Known) CID C1 -> sat_clause Sat C1 H3 : is_list (is_pair is_integer is_clause) CRest H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CFC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CFC) CRest -> false ============================ false
< apply IH to IsFP2 _ GA_Sat _ _ _ _ _ CFP2 _ _. Subgoal 2: Variables: FormulaClauses Known Sat Prf IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsFP : is_fratProof (endOriginal Prf) IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (endOriginal Prf) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : checkProof Known Prf ============================ false
< IsP: case IsFP. Subgoal 2: Variables: FormulaClauses Known Sat Prf IH : forall FormulaClauses Known FP Sat, is_fratProof FP -> is_list is_lit Sat -> good_assignment Sat -> good_clause_list Known -> good_clause_list FormulaClauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) FormulaClauses -> (forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false) -> checkFratProof FormulaClauses Known FP * -> (forall CID C, lookup Known CID C -> sat_clause Sat C) -> (forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C) -> false IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat GCL_K : good_clause_list Known GCL_FC : good_clause_list FormulaClauses IsKnown : is_list (is_pair is_integer is_clause) Known IsFC : is_list (is_pair is_integer is_clause) FormulaClauses NoMem : forall ID CK CFC, mem (ID, CK) Known -> mem (ID, CFC) FormulaClauses -> false CFP : checkFratProof FormulaClauses Known (endOriginal Prf) @ SatK : forall CID C, lookup Known CID C -> sat_clause Sat C SatFC : forall CID C, lookup FormulaClauses CID C -> sat_clause Sat C CFP1 : checkProof Known Prf IsP : is_proof Prf ============================ false
< apply check_proof_correct to IsP IsSat GA_Sat GCL_K IsKnown CFP1 SatK. Proof completed.
< Theorem fratProveFormula_correct : forall F FPrf Sat, is_formula F -> is_fratProof FPrf -> is_list is_lit Sat -> good_assignment Sat -> fratProveFormula F FPrf -> sat_formula Sat F -> false. ============================ forall F FPrf Sat, is_formula F -> is_fratProof FPrf -> is_list is_lit Sat -> good_assignment Sat -> fratProveFormula F FPrf -> sat_formula Sat F -> false
< intros IsF IsFPrf IsSat GA_Sat FPF SatF. Variables: F FPrf Sat IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat FPF : fratProveFormula F FPrf SatF : sat_formula Sat F ============================ false
< Check: case FPF. Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf ============================ false
< assert forall CID C, lookup KnownClauses CID C -> sat_clause Sat C. Subgoal 1: Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf ============================ forall CID C, lookup KnownClauses CID C -> sat_clause Sat C
< intros Lkp. Subgoal 1: Variables: F FPrf Sat KnownClauses CID C IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf Lkp : lookup KnownClauses CID C ============================ sat_clause Sat C
< M: apply lookup_mem to Lkp. Subgoal 1: Variables: F FPrf Sat KnownClauses CID C IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf Lkp : lookup KnownClauses CID C M : mem (CID, C) KnownClauses ============================ sat_clause Sat C
< apply formulaToKnown_sat_formula to Check SatF M. Subgoal 1: Variables: F FPrf Sat KnownClauses CID C IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf Lkp : lookup KnownClauses CID C M : mem (CID, C) KnownClauses H1 : sat_clause Sat C ============================ sat_clause Sat C
< search. Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C ============================ false
< assert forall (CID : integer) C, lookup [] CID C -> sat_clause Sat C. Subgoal 2: Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C ============================ forall CID C, lookup [] CID C -> sat_clause Sat C
< intros Lkp. Subgoal 2: Variables: F FPrf Sat KnownClauses CID C IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C Lkp : lookup [] CID C ============================ sat_clause Sat C
< case Lkp. Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C ============================ false
< assert forall ID (CK : clause) CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false. Subgoal 3: Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C ============================ forall ID CK CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false
< intros M. Subgoal 3: Variables: F FPrf Sat KnownClauses ID CK CFC IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C M : mem (ID, CK) [] H3 : mem (ID, CFC) KnownClauses ============================ false
< case M. Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C H3 : forall ID CK CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false ============================ false
< apply formulaToKnown_is to IsF _ Check. Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C H3 : forall ID CK CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false H4 : is_list (is_pair is_integer is_clause) KnownClauses ============================ false
< assert good_clause_list KnownClauses. Subgoal 4: Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C H3 : forall ID CK CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false H4 : is_list (is_pair is_integer is_clause) KnownClauses ============================ good_clause_list KnownClauses
< unfold . Subgoal 4: Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C H3 : forall ID CK CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false H4 : is_list (is_pair is_integer is_clause) KnownClauses ============================ forall ID C1 KRest C2, select (ID, C1) KRest KnownClauses -> mem (ID, C2) KRest -> false
< intros MA MB. Subgoal 4: Variables: F FPrf Sat KnownClauses ID C1 KRest C2 IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C H3 : forall ID CK CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false H4 : is_list (is_pair is_integer is_clause) KnownClauses MA : select (ID, C1) KRest KnownClauses MB : mem (ID, C2) KRest ============================ false
< backchain formulaToKnown_all_unique. Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C H3 : forall ID CK CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false H4 : is_list (is_pair is_integer is_clause) KnownClauses H5 : good_clause_list KnownClauses ============================ false
< assert good_clause_list []. Subgoal 5: Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C H3 : forall ID CK CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false H4 : is_list (is_pair is_integer is_clause) KnownClauses H5 : good_clause_list KnownClauses ============================ good_clause_list []
< unfold . Subgoal 5: Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C H3 : forall ID CK CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false H4 : is_list (is_pair is_integer is_clause) KnownClauses H5 : good_clause_list KnownClauses ============================ forall ID C1 KRest C2, select (ID, C1) KRest [] -> mem (ID, C2) KRest -> false
< intros M. Subgoal 5: Variables: F FPrf Sat KnownClauses ID C1 KRest C2 IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C H3 : forall ID CK CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false H4 : is_list (is_pair is_integer is_clause) KnownClauses H5 : good_clause_list KnownClauses M : select (ID, C1) KRest [] H6 : mem (ID, C2) KRest ============================ false
< case M. Variables: F FPrf Sat KnownClauses IsF : is_formula F IsFPrf : is_fratProof FPrf IsSat : is_list is_lit Sat GA_Sat : good_assignment Sat SatF : sat_formula Sat F Check : formulaToKnown 1 F KnownClauses Check1 : checkFratProof KnownClauses [] FPrf H1 : forall CID C, lookup KnownClauses CID C -> sat_clause Sat C H2 : forall CID C, lookup [] CID C -> sat_clause Sat C H3 : forall ID CK CFC, mem (ID, CK) [] -> mem (ID, CFC) KnownClauses -> false H4 : is_list (is_pair is_integer is_clause) KnownClauses H5 : good_clause_list KnownClauses H6 : good_clause_list [] ============================ false
< apply checkFratProof_correct to IsFPrf IsSat GA_Sat _ _ _ _ _ Check1 _ _. Proof completed.
< Theorem select_is_clauseUsedness : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L -> is_list (is_pair is_integer is_clauseUsedness) Rest. ============================ forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L -> is_list (is_pair is_integer is_clauseUsedness) Rest
< induction on 2. IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_list (is_pair is_integer is_clauseUsedness) Rest ============================ forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L @ -> is_list (is_pair is_integer is_clauseUsedness) Rest
< intros Is S. Variables: L X Rest IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_list (is_pair is_integer is_clauseUsedness) Rest Is : is_list (is_pair is_integer is_clauseUsedness) L S : select X Rest L @ ============================ is_list (is_pair is_integer is_clauseUsedness) Rest
< S: case S. Subgoal 1: Variables: X Rest IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_list (is_pair is_integer is_clauseUsedness) Rest Is : is_list (is_pair is_integer is_clauseUsedness) (X::Rest) ============================ is_list (is_pair is_integer is_clauseUsedness) Rest
< case Is. Subgoal 1: Variables: X Rest IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_list (is_pair is_integer is_clauseUsedness) Rest H1 : is_pair is_integer is_clauseUsedness X H2 : is_list (is_pair is_integer is_clauseUsedness) Rest ============================ is_list (is_pair is_integer is_clauseUsedness) Rest
< search. Subgoal 2: Variables: X L2 I L1 IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_list (is_pair is_integer is_clauseUsedness) Rest Is : is_list (is_pair is_integer is_clauseUsedness) (I::L2) S : select X L1 L2 * ============================ is_list (is_pair is_integer is_clauseUsedness) (I::L1)
< case Is. Subgoal 2: Variables: X L2 I L1 IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_list (is_pair is_integer is_clauseUsedness) Rest S : select X L1 L2 * H1 : is_pair is_integer is_clauseUsedness I H2 : is_list (is_pair is_integer is_clauseUsedness) L2 ============================ is_list (is_pair is_integer is_clauseUsedness) (I::L1)
< apply IH to _ S. Subgoal 2: Variables: X L2 I L1 IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_list (is_pair is_integer is_clauseUsedness) Rest S : select X L1 L2 * H1 : is_pair is_integer is_clauseUsedness I H2 : is_list (is_pair is_integer is_clauseUsedness) L2 H3 : is_list (is_pair is_integer is_clauseUsedness) L1 ============================ is_list (is_pair is_integer is_clauseUsedness) (I::L1)
< search. Proof completed.
< Theorem select_is_clauseUsedness_item : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L -> is_pair is_integer is_clauseUsedness X. ============================ forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L -> is_pair is_integer is_clauseUsedness X
< induction on 2. IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_pair is_integer is_clauseUsedness X ============================ forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L @ -> is_pair is_integer is_clauseUsedness X
< intros Is S. Variables: L X Rest IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_pair is_integer is_clauseUsedness X Is : is_list (is_pair is_integer is_clauseUsedness) L S : select X Rest L @ ============================ is_pair is_integer is_clauseUsedness X
< S: case S. Subgoal 1: Variables: X Rest IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_pair is_integer is_clauseUsedness X Is : is_list (is_pair is_integer is_clauseUsedness) (X::Rest) ============================ is_pair is_integer is_clauseUsedness X
< case Is. Subgoal 1: Variables: X Rest IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_pair is_integer is_clauseUsedness X H1 : is_pair is_integer is_clauseUsedness X H2 : is_list (is_pair is_integer is_clauseUsedness) Rest ============================ is_pair is_integer is_clauseUsedness X
< search. Subgoal 2: Variables: X L2 I L1 IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_pair is_integer is_clauseUsedness X Is : is_list (is_pair is_integer is_clauseUsedness) (I::L2) S : select X L1 L2 * ============================ is_pair is_integer is_clauseUsedness X
< case Is. Subgoal 2: Variables: X L2 I L1 IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_pair is_integer is_clauseUsedness X S : select X L1 L2 * H1 : is_pair is_integer is_clauseUsedness I H2 : is_list (is_pair is_integer is_clauseUsedness) L2 ============================ is_pair is_integer is_clauseUsedness X
< apply IH to _ S. Subgoal 2: Variables: X L2 I L1 IH : forall L X Rest, is_list (is_pair is_integer is_clauseUsedness) L -> select X Rest L * -> is_pair is_integer is_clauseUsedness X S : select X L1 L2 * H1 : is_pair is_integer is_clauseUsedness I H2 : is_list (is_pair is_integer is_clauseUsedness) L2 H3 : is_pair is_integer is_clauseUsedness X ============================ is_pair is_integer is_clauseUsedness X
< search. Proof completed.
< Theorem makeUsed_is : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U -> is_list (is_pair is_integer is_clauseUsedness) U. ============================ forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U -> is_list (is_pair is_integer is_clauseUsedness) U
< induction on 2. IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U ============================ forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U @ -> is_list (is_pair is_integer is_clauseUsedness) U
< intros Is MU. Variables: L P U IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) L MU : makeUsed L P U @ ============================ is_list (is_pair is_integer is_clauseUsedness) U
< MU: case MU. Subgoal 1: Variables: U IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) U ============================ is_list (is_pair is_integer is_clauseUsedness) U
< search. Subgoal 2: Variables: L KRest KOut ID Rest IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) L MU : select (ID, needed) KRest L MU1 : makeUsed KRest Rest KOut * ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KOut)
< apply select_is_clauseUsedness to _ MU. Subgoal 2: Variables: L KRest KOut ID Rest IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) L MU : select (ID, needed) KRest L MU1 : makeUsed KRest Rest KOut * H1 : is_list (is_pair is_integer is_clauseUsedness) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KOut)
< apply IH to _ MU1. Subgoal 2: Variables: L KRest KOut ID Rest IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) L MU : select (ID, needed) KRest L MU1 : makeUsed KRest Rest KOut * H1 : is_list (is_pair is_integer is_clauseUsedness) KRest H2 : is_list (is_pair is_integer is_clauseUsedness) KOut ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KOut)
< apply select_is_clauseUsedness_item to _ MU. Subgoal 2: Variables: L KRest KOut ID Rest IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) L MU : select (ID, needed) KRest L MU1 : makeUsed KRest Rest KOut * H1 : is_list (is_pair is_integer is_clauseUsedness) KRest H2 : is_list (is_pair is_integer is_clauseUsedness) KOut H3 : is_pair is_integer is_clauseUsedness (ID, needed) ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KOut)
< search. Subgoal 3: Variables: L KRest KOut ID Rest IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) L MU : select (ID, unknown) KRest L MU1 : makeUsed KRest Rest KOut * ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KOut)
< IsPair: apply select_is_clauseUsedness_item to Is MU. Subgoal 3: Variables: L KRest KOut ID Rest IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) L MU : select (ID, unknown) KRest L MU1 : makeUsed KRest Rest KOut * IsPair : is_pair is_integer is_clauseUsedness (ID, unknown) ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KOut)
< I: case IsPair. Subgoal 3: Variables: L KRest KOut ID Rest IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) L MU : select (ID, unknown) KRest L MU1 : makeUsed KRest Rest KOut * I : is_integer ID I1 : is_clauseUsedness unknown ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KOut)
< case I1. Subgoal 3: Variables: L KRest KOut ID Rest IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) L MU : select (ID, unknown) KRest L MU1 : makeUsed KRest Rest KOut * I : is_integer ID ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KOut)
< apply select_is_clauseUsedness to Is MU. Subgoal 3: Variables: L KRest KOut ID Rest IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) L MU : select (ID, unknown) KRest L MU1 : makeUsed KRest Rest KOut * I : is_integer ID H1 : is_list (is_pair is_integer is_clauseUsedness) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KOut)
< apply IH to _ MU1. Subgoal 3: Variables: L KRest KOut ID Rest IH : forall L P U, is_list (is_pair is_integer is_clauseUsedness) L -> makeUsed L P U * -> is_list (is_pair is_integer is_clauseUsedness) U Is : is_list (is_pair is_integer is_clauseUsedness) L MU : select (ID, unknown) KRest L MU1 : makeUsed KRest Rest KOut * I : is_integer ID H1 : is_list (is_pair is_integer is_clauseUsedness) KRest H2 : is_list (is_pair is_integer is_clauseUsedness) KOut ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KOut)
< search. Proof completed.
< Theorem makeUsed_needed : forall L P U ID, makeUsed L P U -> mem ID P -> mem (ID, needed) U. ============================ forall L P U ID, makeUsed L P U -> mem ID P -> mem (ID, needed) U
< induction on 1. IH : forall L P U ID, makeUsed L P U * -> mem ID P -> mem (ID, needed) U ============================ forall L P U ID, makeUsed L P U @ -> mem ID P -> mem (ID, needed) U
< intros MU Mem. Variables: L P U ID IH : forall L P U ID, makeUsed L P U * -> mem ID P -> mem (ID, needed) U MU : makeUsed L P U @ Mem : mem ID P ============================ mem (ID, needed) U
< MU: case MU. Subgoal 1: Variables: U ID IH : forall L P U ID, makeUsed L P U * -> mem ID P -> mem (ID, needed) U Mem : mem ID [] ============================ mem (ID, needed) U
< case Mem. Subgoal 2: Variables: L ID KRest KOut ID1 Rest IH : forall L P U ID, makeUsed L P U * -> mem ID P -> mem (ID, needed) U Mem : mem ID (ID1::Rest) MU : select (ID1, needed) KRest L MU1 : makeUsed KRest Rest KOut * ============================ mem (ID, needed) ((ID1, needed)::KOut)
< Mem: case Mem. Subgoal 2.1: Variables: L KRest KOut ID1 Rest IH : forall L P U ID, makeUsed L P U * -> mem ID P -> mem (ID, needed) U MU : select (ID1, needed) KRest L MU1 : makeUsed KRest Rest KOut * ============================ mem (ID1, needed) ((ID1, needed)::KOut)
< search. Subgoal 2.2: Variables: L ID KRest KOut ID1 Rest IH : forall L P U ID, makeUsed L P U * -> mem ID P -> mem (ID, needed) U MU : select (ID1, needed) KRest L MU1 : makeUsed KRest Rest KOut * Mem : mem ID Rest ============================ mem (ID, needed) ((ID1, needed)::KOut)
< apply IH to MU1 Mem. Subgoal 2.2: Variables: L ID KRest KOut ID1 Rest IH : forall L P U ID, makeUsed L P U * -> mem ID P -> mem (ID, needed) U MU : select (ID1, needed) KRest L MU1 : makeUsed KRest Rest KOut * Mem : mem ID Rest H1 : mem (ID, needed) KOut ============================ mem (ID, needed) ((ID1, needed)::KOut)
< search. Subgoal 3: Variables: L ID KRest KOut ID1 Rest IH : forall L P U ID, makeUsed L P U * -> mem ID P -> mem (ID, needed) U Mem : mem ID (ID1::Rest) MU : select (ID1, unknown) KRest L MU1 : makeUsed KRest Rest KOut * ============================ mem (ID, needed) ((ID1, needed)::KOut)
< Mem: case Mem. Subgoal 3.1: Variables: L KRest KOut ID1 Rest IH : forall L P U ID, makeUsed L P U * -> mem ID P -> mem (ID, needed) U MU : select (ID1, unknown) KRest L MU1 : makeUsed KRest Rest KOut * ============================ mem (ID1, needed) ((ID1, needed)::KOut)
< search. Subgoal 3.2: Variables: L ID KRest KOut ID1 Rest IH : forall L P U ID, makeUsed L P U * -> mem ID P -> mem (ID, needed) U MU : select (ID1, unknown) KRest L MU1 : makeUsed KRest Rest KOut * Mem : mem ID Rest ============================ mem (ID, needed) ((ID1, needed)::KOut)
< apply IH to MU1 Mem. Subgoal 3.2: Variables: L ID KRest KOut ID1 Rest IH : forall L P U ID, makeUsed L P U * -> mem ID P -> mem (ID, needed) U MU : select (ID1, unknown) KRest L MU1 : makeUsed KRest Rest KOut * Mem : mem ID Rest H1 : mem (ID, needed) KOut ============================ mem (ID, needed) ((ID1, needed)::KOut)
< search. Proof completed.
< Extensible_Theorem endKnownClauses_is : forall F K, IsF : is_finalClauses F -> EKC : endKnownClauses F K -> is_list (is_pair is_integer is_clauseUsedness) K on EKC. Subgoal 1: IH : forall F K, is_finalClauses F -> endKnownClauses F K * -> is_list (is_pair is_integer is_clauseUsedness) K IsF : is_finalClauses endFClause EKC : endKnownClauses endFClause [] @ ============================ is_list (is_pair is_integer is_clauseUsedness) []
< search. Subgoal 2: Variables: KRest ID Rest C IH : forall F K, is_finalClauses F -> endKnownClauses F K * -> is_list (is_pair is_integer is_clauseUsedness) K IsF : is_finalClauses (addFClause ID C Rest) EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KRest)
< case IsF. Subgoal 2: Variables: KRest ID Rest C IH : forall F K, is_finalClauses F -> endKnownClauses F K * -> is_list (is_pair is_integer is_clauseUsedness) K EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * H1 : is_integer ID H2 : is_clause C H3 : is_finalClauses Rest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KRest)
< apply IH to _ EKC2. Subgoal 2: Variables: KRest ID Rest C IH : forall F K, is_finalClauses F -> endKnownClauses F K * -> is_list (is_pair is_integer is_clauseUsedness) K EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * H1 : is_integer ID H2 : is_clause C H3 : is_finalClauses Rest H4 : is_list (is_pair is_integer is_clauseUsedness) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::KRest)
< search. Subgoal 3: Variables: KRest ID Rest C IH : forall F K, is_finalClauses F -> endKnownClauses F K * -> is_list (is_pair is_integer is_clauseUsedness) K IsF : is_finalClauses (addFClause ID C Rest) EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::KRest)
< case IsF. Subgoal 3: Variables: KRest ID Rest C IH : forall F K, is_finalClauses F -> endKnownClauses F K * -> is_list (is_pair is_integer is_clauseUsedness) K EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * H1 : is_integer ID H2 : is_clause C H3 : is_finalClauses Rest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::KRest)
< apply IH to _ EKC2. Subgoal 3: Variables: KRest ID Rest C IH : forall F K, is_finalClauses F -> endKnownClauses F K * -> is_list (is_pair is_integer is_clauseUsedness) K EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * H1 : is_integer ID H2 : is_clause C H3 : is_finalClauses Rest H4 : is_list (is_pair is_integer is_clauseUsedness) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::KRest)
< search. Proof completed.
< Extensible_Theorem elaboration_is_needed : forall Known P Needed E, IsKnown : is_list (is_pair is_integer is_clause) Known -> GCL : good_clause_list Known -> IsP : is_proof P -> Ela : elaborate Known P Needed E -> is_list (is_pair is_integer is_clauseUsedness) Needed on Ela. Subgoal 1: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< Is: case IsP. Subgoal 1: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_finalClauses FC ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< IsNeeded: apply endKnownClauses_is to _ Ela1. Subgoal 1: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_finalClauses FC IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply select_is_clauseUsedness to _ Ela2. Subgoal 1: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_finalClauses FC IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed1 H1 : is_list (is_pair is_integer is_clauseUsedness) NRest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply makeUsed_is to _ Ela4. Subgoal 1: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_finalClauses FC IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed1 H1 : is_list (is_pair is_integer is_clauseUsedness) NRest H2 : is_list (is_pair is_integer is_clauseUsedness) Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< search. Subgoal 2: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< Is: case IsP. Subgoal 2: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFratPrf ID Prf FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_list is_integer Prf Is2 : is_finalClauses FC ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< IsNeeded: apply endKnownClauses_is to _ Ela1. Subgoal 2: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFratPrf ID Prf FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_list is_integer Prf Is2 : is_finalClauses FC IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply select_is_clauseUsedness to _ Ela2. Subgoal 2: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFratPrf ID Prf FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_list is_integer Prf Is2 : is_finalClauses FC IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed1 H1 : is_list (is_pair is_integer is_clauseUsedness) NRest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply makeUsed_is to _ Ela3. Subgoal 2: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFratPrf ID Prf FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_list is_integer Prf Is2 : is_finalClauses FC IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed1 H1 : is_list (is_pair is_integer is_clauseUsedness) NRest H2 : is_list (is_pair is_integer is_clauseUsedness) Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< search. Subgoal 3: Variables: Known E KRest Needed1 ID Rest C IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::Needed1)
< Is: case IsP. Subgoal 3: Variables: Known E KRest Needed1 ID Rest C IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::Needed1)
< apply select_is to _ Ela1. Subgoal 3: Variables: Known E KRest Needed1 ID Rest C IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::Needed1)
< apply good_clause_list_select to _ Ela1. Subgoal 3: Variables: Known E KRest Needed1 ID Rest C IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::Needed1)
< apply IH to _ _ _ Ela2. Subgoal 3: Variables: Known E KRest Needed1 ID Rest C IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::Needed1)
< search. Subgoal 4: Variables: Known E C KRest Needed1 ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::Needed1)
< Is: case IsP. Subgoal 4: Variables: Known E C KRest Needed1 ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_proof Rest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::Needed1)
< apply select_is to _ Ela1. Subgoal 4: Variables: Known E C KRest Needed1 ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::Needed1)
< apply good_clause_list_select to _ Ela1. Subgoal 4: Variables: Known E C KRest Needed1 ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::Needed1)
< apply IH to _ _ _ Ela2. Subgoal 4: Variables: Known E C KRest Needed1 ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::Needed1)
< search. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< Is: case IsP. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply remove_all_is to _ Ela1. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply IH to _ _ _ Ela2. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply select_is_clauseUsedness to _ Ela3. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply makeUsed_is to _ Ela4. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest H5 : is_list (is_pair is_integer is_clauseUsedness) Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< search. Subgoal 6: Variables: Known Needed E KRest Needed1 Rest Prf C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< Is: case IsP. Subgoal 6: Variables: Known Needed E KRest Needed1 Rest Prf C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply remove_all_is to _ Ela1. Subgoal 6: Variables: Known Needed E KRest Needed1 Rest Prf C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 6: Variables: Known Needed E KRest Needed1 Rest Prf C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply IH to _ _ _ Ela2. Subgoal 6: Variables: Known Needed E KRest Needed1 Rest Prf C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply select_is_clauseUsedness to _ Ela3. Subgoal 6: Variables: Known Needed E KRest Needed1 Rest Prf C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< search. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< Is: case IsP. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply remove_all_is to _ Ela1. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply IH to _ _ _ Ela2. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply select_is_clauseUsedness to _ Ela3. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply makeUsed_is to _ Ela5. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest H5 : is_list (is_pair is_integer is_clauseUsedness) Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< search. Subgoal 8: Variables: Known Needed E KRest Needed1 Rest C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< Is: case IsP. Subgoal 8: Variables: Known Needed E KRest Needed1 Rest C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply remove_all_is to _ Ela1. Subgoal 8: Variables: Known Needed E KRest Needed1 Rest C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 8: Variables: Known Needed E KRest Needed1 Rest C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply IH to _ _ _ Ela2. Subgoal 8: Variables: Known Needed E KRest Needed1 Rest C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply select_is_clauseUsedness to _ Ela3. Subgoal 8: Variables: Known Needed E KRest Needed1 Rest C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< search. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, needed)::NRest)
< Is: case IsP. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, needed)::NRest)
< apply remove_all_is to _ Ela1. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, needed)::NRest)
< apply select_is to _ Ela2. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, needed)::NRest)
< M: apply select_mem to Ela2. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, needed)::NRest)
< GCLR: apply good_clause_list_remove_all to _ Ela1. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, needed)::NRest)
< GCLS: apply good_clause_list_select to GCLR Ela2. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, needed)::NRest)
< apply good_clause_list_add to GCLS _ with ID = To C = C. Subgoal 9.1: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 ============================ (exists C', mem (To, C') KRest2) -> false
< intros M'. Subgoal 9.1: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : exists C', mem (To, C') KRest2 ============================ false
< M': case M'. Subgoal 9.1: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest C' IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : mem (To, C') KRest2 ============================ false
< M'': apply mem_after_select_before to Ela2 M'. Subgoal 9.1: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest C' IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : mem (To, C') KRest2 M'' : mem (To, C') KRest ============================ false
< apply remove_all_no_mem to Ela1 M''. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C)::KRest2) ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, needed)::NRest)
< apply mem_is to _ M. Subgoal 9: Variables: Known KRest KRest2 Needed1 ERest To NRest Rest ID C1 IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (ID, C1) KRest2 KRest Ela3 : elaborate ((To, C1)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C1) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C1)::KRest2) H4 : is_integer ID H5 : is_clause C1 ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::NRest)
< apply IH to _ _ _ Ela3. Subgoal 9: Variables: Known KRest KRest2 Needed1 ERest To NRest Rest ID C1 IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (ID, C1) KRest2 KRest Ela3 : elaborate ((To, C1)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C1) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C1)::KRest2) H4 : is_integer ID H5 : is_clause C1 H6 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::NRest)
< apply select_is_clauseUsedness to _ Ela4. Subgoal 9: Variables: Known KRest KRest2 Needed1 ERest To NRest Rest ID C1 IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (ID, C1) KRest2 KRest Ela3 : elaborate ((To, C1)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C1) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C1)::KRest2) H4 : is_integer ID H5 : is_clause C1 H6 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H7 : is_list (is_pair is_integer is_clauseUsedness) NRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, needed)::NRest)
< search. Subgoal 10: Variables: Known Needed E Rest ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (relocateClause ID ID Rest) Ela : elaborate Known (relocateClause ID ID Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< Is: case IsP. Subgoal 10: Variables: Known Needed E Rest ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID ID Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply IH to _ _ _ Ela1. Subgoal 10: Variables: Known Needed E Rest ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID ID Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clauseUsedness) Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< search. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, unknown)::NRest)
< Is: case IsP. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, unknown)::NRest)
< apply remove_all_is to _ Ela1. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, unknown)::NRest)
< apply select_is to _ Ela2. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, unknown)::NRest)
< M: apply select_mem to Ela2. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, unknown)::NRest)
< GCLR: apply good_clause_list_remove_all to _ Ela1. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, unknown)::NRest)
< GCLS: apply good_clause_list_select to GCLR Ela2. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, unknown)::NRest)
< apply good_clause_list_add to GCLS _ with ID = To C = C. Subgoal 11.1: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 ============================ (exists C', mem (To, C') KRest2) -> false
< intros M'. Subgoal 11.1: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : exists C', mem (To, C') KRest2 ============================ false
< M': case M'. Subgoal 11.1: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To C' IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : mem (To, C') KRest2 ============================ false
< M'': apply mem_after_select_before to Ela2 M'. Subgoal 11.1: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To C' IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : mem (To, C') KRest2 M'' : mem (To, C') KRest ============================ false
< apply remove_all_no_mem to Ela1 M''. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C)::KRest2) ============================ is_list (is_pair is_integer is_clauseUsedness) ((From, unknown)::NRest)
< apply mem_is to _ M. Subgoal 11: Variables: Known E KRest KRest2 Needed1 NRest Rest To ID C1 IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID To Rest) ((ID, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (ID, C1) KRest2 KRest Ela3 : elaborate ((To, C1)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C1) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C1)::KRest2) H4 : is_integer ID H5 : is_clause C1 ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::NRest)
< apply IH to _ _ _ Ela3. Subgoal 11: Variables: Known E KRest KRest2 Needed1 NRest Rest To ID C1 IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID To Rest) ((ID, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (ID, C1) KRest2 KRest Ela3 : elaborate ((To, C1)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C1) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C1)::KRest2) H4 : is_integer ID H5 : is_clause C1 H6 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::NRest)
< apply select_is_clauseUsedness to _ Ela4. Subgoal 11: Variables: Known E KRest KRest2 Needed1 NRest Rest To ID C1 IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID To Rest) ((ID, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (ID, C1) KRest2 KRest Ela3 : elaborate ((To, C1)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C1) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C1)::KRest2) H4 : is_integer ID H5 : is_clause C1 H6 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H7 : is_list (is_pair is_integer is_clauseUsedness) NRest ============================ is_list (is_pair is_integer is_clauseUsedness) ((ID, unknown)::NRest)
< search. Subgoal 12: Variables: Known Needed E Rest Comment IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (commentProof Comment Rest) Ela : elaborate Known (commentProof Comment Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< case IsP. Subgoal 12: Variables: Known Needed E Rest Comment IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (commentProof Comment Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * H1 : is_string Comment H2 : is_proof Rest ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply IH to _ _ _ Ela1. Subgoal 12: Variables: Known Needed E Rest Comment IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (commentProof Comment Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * H1 : is_string Comment H2 : is_proof Rest H3 : is_list (is_pair is_integer is_clauseUsedness) Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< search. Subgoal 13: Variables: Known Needed E PT IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof <unknown I proof> Ela : elaborate Known <unknown I proof> Needed E @ Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT Needed E * ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply proj_proof_is to Ela1 _ _ _. Subgoal 13: Variables: Known Needed E PT IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof <unknown I proof> Ela : elaborate Known <unknown I proof> Needed E @ Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT Needed E * H1 : is_proof PT ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< apply IH to _ _ _ Ela2. Subgoal 13: Variables: Known Needed E PT IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_list (is_pair is_integer is_clauseUsedness) Needed IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof <unknown I proof> Ela : elaborate Known <unknown I proof> Needed E @ Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT Needed E * H1 : is_proof PT H2 : is_list (is_pair is_integer is_clauseUsedness) Needed ============================ is_list (is_pair is_integer is_clauseUsedness) Needed
< search. Proof completed.
< Extensible_Theorem elaboration_is : forall Known P Needed E, IsKnown : is_list (is_pair is_integer is_clause) Known -> GCL : good_clause_list Known -> IsP : is_proof P -> Ela : elaborate Known P Needed E -> is_proof E on Ela. Subgoal 1: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf Needed ============================ is_proof (emptyLrat ID Prf)
< Is: case IsP. Subgoal 1: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_finalClauses FC ============================ is_proof (emptyLrat ID Prf)
< apply rupProof_is to Ela3 _. Subgoal 1: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_finalClauses FC H1 : is_list is_integer Prf ============================ is_proof (emptyLrat ID Prf)
< search. Subgoal 2: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf Needed ============================ is_proof (emptyLrat ID Prf)
< Is: case IsP. Subgoal 2: Variables: Known Needed Needed1 NRest Prf ID FC IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFratPrf ID Prf FC) Needed (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_list is_integer Prf Is2 : is_finalClauses FC ============================ is_proof (emptyLrat ID Prf)
< search. Subgoal 3: Variables: Known E KRest Needed1 ID Rest C IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * ============================ is_proof E
< Is: case IsP. Subgoal 3: Variables: Known E KRest Needed1 ID Rest C IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ is_proof E
< apply select_is to _ Ela1. Subgoal 3: Variables: Known E KRest Needed1 ID Rest C IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_proof E
< apply good_clause_list_select to _ Ela1. Subgoal 3: Variables: Known E KRest Needed1 ID Rest C IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest ============================ is_proof E
< apply IH to _ _ _ Ela2. Subgoal 3: Variables: Known E KRest Needed1 ID Rest C IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_proof E ============================ is_proof E
< search. Subgoal 4: Variables: Known E C KRest Needed1 ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * ============================ is_proof E
< Is: case IsP. Subgoal 4: Variables: Known E C KRest Needed1 ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_proof Rest ============================ is_proof E
< apply select_is to _ Ela1. Subgoal 4: Variables: Known E C KRest Needed1 ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_proof E
< apply good_clause_list_select to _ Ela1. Subgoal 4: Variables: Known E C KRest Needed1 ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest ============================ is_proof E
< apply IH to _ _ _ Ela2. Subgoal 4: Variables: Known E C KRest Needed1 ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * Is : is_integer ID Is1 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_proof E ============================ is_proof E
< search. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed ============================ is_proof (addLrupProof ID C Prf ERest)
< Is: case IsP. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest ============================ is_proof (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ Ela1. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_proof (addLrupProof ID C Prf ERest)
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ is_proof (addLrupProof ID C Prf ERest)
< apply IH to _ _ _ Ela2. Subgoal 5: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_proof ERest ============================ is_proof (addLrupProof ID C Prf ERest)
< search. Subgoal 6: Variables: Known Needed E KRest Needed1 Rest Prf C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 ============================ is_proof E
< Is: case IsP. Subgoal 6: Variables: Known Needed E KRest Needed1 Rest Prf C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest ============================ is_proof E
< apply remove_all_is to _ Ela1. Subgoal 6: Variables: Known Needed E KRest Needed1 Rest Prf C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_proof E
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 6: Variables: Known Needed E KRest Needed1 Rest Prf C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ is_proof E
< apply IH to _ _ _ Ela2. Subgoal 6: Variables: Known Needed E KRest Needed1 Rest Prf C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_proof E ============================ is_proof E
< search. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed ============================ is_proof (addLrupProof ID C Prf ERest)
< Is: case IsP. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ is_proof (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ Ela1. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_proof (addLrupProof ID C Prf ERest)
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ is_proof (addLrupProof ID C Prf ERest)
< apply IH to _ _ _ Ela2. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_proof ERest ============================ is_proof (addLrupProof ID C Prf ERest)
< apply rupProof_is to Ela4 _. Subgoal 7: Variables: Known Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_proof ERest H4 : is_list is_integer Prf ============================ is_proof (addLrupProof ID C Prf ERest)
< search. Subgoal 8: Variables: Known Needed E KRest Needed1 Rest C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 ============================ is_proof E
< Is: case IsP. Subgoal 8: Variables: Known Needed E KRest Needed1 Rest C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ is_proof E
< apply remove_all_is to _ Ela1. Subgoal 8: Variables: Known Needed E KRest Needed1 Rest C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_proof E
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 8: Variables: Known Needed E KRest Needed1 Rest C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ is_proof E
< apply IH to _ _ _ Ela2. Subgoal 8: Variables: Known Needed E KRest Needed1 Rest C ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) Needed E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) Needed Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_proof E ============================ is_proof E
< search. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 ============================ is_proof (relocateClause From To ERest)
< Is: case IsP. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ is_proof (relocateClause From To ERest)
< apply remove_all_is to _ Ela1. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_proof (relocateClause From To ERest)
< apply select_is to _ Ela2. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 ============================ is_proof (relocateClause From To ERest)
< M: apply select_mem to Ela2. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest ============================ is_proof (relocateClause From To ERest)
< GCLR: apply good_clause_list_remove_all to _ Ela1. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest ============================ is_proof (relocateClause From To ERest)
< GCLS: apply good_clause_list_select to GCLR Ela2. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 ============================ is_proof (relocateClause From To ERest)
< apply good_clause_list_add to GCLS _ with ID = To C = C. Subgoal 9.1: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 ============================ (exists C', mem (To, C') KRest2) -> false
< intros M'. Subgoal 9.1: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : exists C', mem (To, C') KRest2 ============================ false
< M': case M'. Subgoal 9.1: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest C' IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : mem (To, C') KRest2 ============================ false
< M'': apply mem_after_select_before to Ela2 M'. Subgoal 9.1: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest C' IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : mem (To, C') KRest2 M'' : mem (To, C') KRest ============================ false
< apply remove_all_no_mem to Ela1 M''. Subgoal 9: Variables: Known KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C)::KRest2) ============================ is_proof (relocateClause From To ERest)
< apply mem_is to _ M. Subgoal 9: Variables: Known KRest KRest2 Needed1 ERest To NRest Rest ID C1 IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (ID, C1) KRest2 KRest Ela3 : elaborate ((To, C1)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C1) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C1)::KRest2) H4 : is_integer ID H5 : is_clause C1 ============================ is_proof (relocateClause ID To ERest)
< apply IH to _ _ _ Ela3. Subgoal 9: Variables: Known KRest KRest2 Needed1 ERest To NRest Rest ID C1 IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (ID, C1) KRest2 KRest Ela3 : elaborate ((To, C1)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C1) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C1)::KRest2) H4 : is_integer ID H5 : is_clause C1 H6 : is_proof ERest ============================ is_proof (relocateClause ID To ERest)
< search. Subgoal 10: Variables: Known Needed E Rest ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (relocateClause ID ID Rest) Ela : elaborate Known (relocateClause ID ID Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * ============================ is_proof E
< case IsP. Subgoal 10: Variables: Known Needed E Rest ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID ID Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * H1 : is_integer ID H2 : is_integer ID H3 : is_proof Rest ============================ is_proof E
< apply IH to _ _ _ Ela1. Subgoal 10: Variables: Known Needed E Rest ID IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID ID Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * H1 : is_integer ID H2 : is_integer ID H3 : is_proof Rest H4 : is_proof E ============================ is_proof E
< search. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 ============================ is_proof E
< Is: case IsP. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ is_proof E
< apply remove_all_is to _ Ela1. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ is_proof E
< apply select_is to _ Ela2. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 ============================ is_proof E
< M: apply select_mem to Ela2. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest ============================ is_proof E
< GCLR: apply good_clause_list_remove_all to _ Ela1. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest ============================ is_proof E
< GCLS: apply good_clause_list_select to GCLR Ela2. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 ============================ is_proof E
< apply good_clause_list_add to GCLS _ with ID = To C = C. Subgoal 11.1: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 ============================ (exists C', mem (To, C') KRest2) -> false
< intros M'. Subgoal 11.1: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : exists C', mem (To, C') KRest2 ============================ false
< M': case M'. Subgoal 11.1: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To C' IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : mem (To, C') KRest2 ============================ false
< M'': apply mem_after_select_before to Ela2 M'. Subgoal 11.1: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To C' IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 M' : mem (To, C') KRest2 M'' : mem (To, C') KRest ============================ false
< apply remove_all_no_mem to Ela1 M''. Subgoal 11: Variables: Known E KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (From, C) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C)::KRest2) ============================ is_proof E
< apply mem_is to _ M. Subgoal 11: Variables: Known E KRest KRest2 Needed1 NRest Rest To ID C1 IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID To Rest) ((ID, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (ID, C1) KRest2 KRest Ela3 : elaborate ((To, C1)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C1) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C1)::KRest2) H4 : is_integer ID H5 : is_clause C1 ============================ is_proof E
< apply IH to _ _ _ Ela3. Subgoal 11: Variables: Known E KRest KRest2 Needed1 NRest Rest To ID C1 IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID To Rest) ((ID, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (ID, C1) KRest2 KRest Ela3 : elaborate ((To, C1)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C1) KRest GCLR : good_clause_list KRest GCLS : good_clause_list KRest2 H3 : good_clause_list ((To, C1)::KRest2) H4 : is_integer ID H5 : is_clause C1 H6 : is_proof E ============================ is_proof E
< search. Subgoal 12: Variables: Known Needed E Rest Comment IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof (commentProof Comment Rest) Ela : elaborate Known (commentProof Comment Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * ============================ is_proof E
< Is: case IsP. Subgoal 12: Variables: Known Needed E Rest Comment IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (commentProof Comment Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * Is : is_string Comment Is1 : is_proof Rest ============================ is_proof E
< apply IH to _ _ _ Ela1. Subgoal 12: Variables: Known Needed E Rest Comment IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (commentProof Comment Rest) Needed E @ Ela1 : elaborate Known Rest Needed E * Is : is_string Comment Is1 : is_proof Rest H1 : is_proof E ============================ is_proof E
< search. Subgoal 13: Variables: Known Needed E PT IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof <unknown I proof> Ela : elaborate Known <unknown I proof> Needed E @ Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT Needed E * ============================ is_proof E
< apply proj_proof_is to Ela1 _ _ _. Subgoal 13: Variables: Known Needed E PT IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof <unknown I proof> Ela : elaborate Known <unknown I proof> Needed E @ Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT Needed E * H1 : is_proof PT ============================ is_proof E
< apply IH to _ _ _ Ela2. Subgoal 13: Variables: Known Needed E PT IH : forall Known P Needed E, is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> is_proof P -> elaborate Known P Needed E * -> is_proof E IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known IsP : is_proof <unknown I proof> Ela : elaborate Known <unknown I proof> Needed E @ Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT Needed E * H1 : is_proof PT H2 : is_proof E ============================ is_proof E
< search. Proof completed.
< Define gatherNeeded : (list (pair integer clause)) -> (list (pair integer clauseUsedness)) -> (list (pair integer clause)) -> prop by gatherNeeded K [] []; gatherNeeded K ((ID, needed)::CURest) ((ID, C)::NRest) := mem (ID, C) K /\ gatherNeeded K CURest NRest; gatherNeeded K ((ID, NotNeeded)::CURest) NRest := gatherNeeded K CURest NRest /\ (NotNeeded = needed -> false).
< Define good_used_list : (list (pair integer clauseUsedness)) -> prop by good_used_list CU := forall ID U1 CURest U2, select (ID, U1) CURest CU -> mem (ID, U2) CURest -> false.
< Theorem good_used_list_drop : forall L IDN, good_used_list (IDN::L) -> good_used_list L. ============================ forall L IDN, good_used_list (IDN::L) -> good_used_list L
< intros GCL. Variables: L IDN GCL : good_used_list (IDN::L) ============================ good_used_list L
< GCL: case GCL. Variables: L IDN GCL : forall ID U1 CURest U2, select (ID, U1) CURest (IDN::L) -> mem (ID, U2) CURest -> false ============================ good_used_list L
< unfold . Variables: L IDN GCL : forall ID U1 CURest U2, select (ID, U1) CURest (IDN::L) -> mem (ID, U2) CURest -> false ============================ forall ID U1 CURest U2, select (ID, U1) CURest L -> mem (ID, U2) CURest -> false
< intros S M. Variables: L IDN ID U1 CURest U2 GCL : forall ID U1 CURest U2, select (ID, U1) CURest (IDN::L) -> mem (ID, U2) CURest -> false S : select (ID, U1) CURest L M : mem (ID, U2) CURest ============================ false
< backchain GCL to ID = ID U1 = U1. Proof completed.
< Theorem good_used_list_select : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L -> good_used_list Rest. ============================ forall L Rest ID U, good_used_list L -> select (ID, U) Rest L -> good_used_list Rest
< induction on 2. IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest ============================ forall L Rest ID U, good_used_list L -> select (ID, U) Rest L @ -> good_used_list Rest
< intros GCL S. Variables: L Rest ID U IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list L S : select (ID, U) Rest L @ ============================ good_used_list Rest
< S: case S. Subgoal 1: Variables: Rest ID U IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list ((ID, U)::Rest) ============================ good_used_list Rest
< apply good_used_list_drop to GCL. Subgoal 1: Variables: Rest ID U IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list ((ID, U)::Rest) H1 : good_used_list Rest ============================ good_used_list Rest
< search. Subgoal 2: Variables: ID U L2 I L1 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list (I::L2) S : select (ID, U) L1 L2 * ============================ good_used_list (I::L1)
< GCL': apply good_used_list_drop to GCL. Subgoal 2: Variables: ID U L2 I L1 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list (I::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 ============================ good_used_list (I::L1)
< GCL1: apply IH to GCL' S. Subgoal 2: Variables: ID U L2 I L1 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list (I::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 ============================ good_used_list (I::L1)
< unfold . Subgoal 2: Variables: ID U L2 I L1 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list (I::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 ============================ forall ID U1 CURest U2, select (ID, U1) CURest (I::L1) -> mem (ID, U2) CURest -> false
< intros Slct M. Subgoal 2: Variables: ID U L2 I L1 ID1 U1 CURest U2 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list (I::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 Slct : select (ID1, U1) CURest (I::L1) M : mem (ID1, U2) CURest ============================ false
< Slct: case Slct. Subgoal 2.1: Variables: ID U L2 L1 ID1 U1 U2 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list ((ID1, U1)::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 M : mem (ID1, U2) L1 ============================ false
< M': apply mem_after_select_before to S M. Subgoal 2.1: Variables: ID U L2 L1 ID1 U1 U2 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list ((ID1, U1)::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 M : mem (ID1, U2) L1 M' : mem (ID1, U2) L2 ============================ false
< GCL: case GCL. Subgoal 2.1: Variables: ID U L2 L1 ID1 U1 U2 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 M : mem (ID1, U2) L1 M' : mem (ID1, U2) L2 GCL : forall ID U2 CURest U3, select (ID, U2) CURest ((ID1, U1)::L2) -> mem (ID, U3) CURest -> false ============================ false
< apply GCL to _ M'. Subgoal 2.2: Variables: ID U L2 I L1 ID1 U1 U2 L3 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list (I::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 M : mem (ID1, U2) (I::L3) Slct : select (ID1, U1) L3 L1 ============================ false
< M: case M. Subgoal 2.2.1: Variables: ID U L2 L1 ID1 U1 U2 L3 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list ((ID1, U2)::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 Slct : select (ID1, U1) L3 L1 ============================ false
< MS: apply select_mem to Slct. Subgoal 2.2.1: Variables: ID U L2 L1 ID1 U1 U2 L3 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list ((ID1, U2)::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 Slct : select (ID1, U1) L3 L1 MS : mem (ID1, U1) L1 ============================ false
< M': apply mem_after_select_before to S MS. Subgoal 2.2.1: Variables: ID U L2 L1 ID1 U1 U2 L3 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list ((ID1, U2)::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 Slct : select (ID1, U1) L3 L1 MS : mem (ID1, U1) L1 M' : mem (ID1, U1) L2 ============================ false
< GCL: case GCL. Subgoal 2.2.1: Variables: ID U L2 L1 ID1 U1 U2 L3 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 Slct : select (ID1, U1) L3 L1 MS : mem (ID1, U1) L1 M' : mem (ID1, U1) L2 GCL : forall ID U1 CURest U3, select (ID, U1) CURest ((ID1, U2)::L2) -> mem (ID, U3) CURest -> false ============================ false
< backchain GCL. Subgoal 2.2.2: Variables: ID U L2 I L1 ID1 U1 U2 L3 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list (I::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 GCL1 : good_used_list L1 Slct : select (ID1, U1) L3 L1 M : mem (ID1, U2) L3 ============================ false
< GCL1: case GCL1. Subgoal 2.2.2: Variables: ID U L2 I L1 ID1 U1 U2 L3 IH : forall L Rest ID U, good_used_list L -> select (ID, U) Rest L * -> good_used_list Rest GCL : good_used_list (I::L2) S : select (ID, U) L1 L2 * GCL' : good_used_list L2 Slct : select (ID1, U1) L3 L1 M : mem (ID1, U2) L3 GCL1 : forall ID U1 CURest U2, select (ID, U1) CURest L1 -> mem (ID, U2) CURest -> false ============================ false
< apply GCL1 to Slct M. Proof completed.
< Theorem makeUsed_member : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed. ============================ forall Needed Prf Updated ID U, makeUsed Needed Prf Updated -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed
< induction on 1. IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed ============================ forall Needed Prf Updated ID U, makeUsed Needed Prf Updated @ -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed
< intros MU M. Variables: Needed Prf Updated ID U IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed MU : makeUsed Needed Prf Updated @ M : mem (ID, U) Updated ============================ exists U', mem (ID, U') Needed
< MU: case MU. Subgoal 1: Variables: Updated ID U IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed M : mem (ID, U) Updated ============================ exists U', mem (ID, U') Updated
< search. Subgoal 2: Variables: Needed ID U KRest KOut ID1 Rest IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed M : mem (ID, U) ((ID1, needed)::KOut) MU : select (ID1, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * ============================ exists U', mem (ID, U') Needed
< M: case M. Subgoal 2.1: Variables: Needed KRest KOut ID1 Rest IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed MU : select (ID1, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * ============================ exists U', mem (ID1, U') Needed
< apply select_mem to MU. Subgoal 2.1: Variables: Needed KRest KOut ID1 Rest IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed MU : select (ID1, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * H1 : mem (ID1, needed) Needed ============================ exists U', mem (ID1, U') Needed
< search. Subgoal 2.2: Variables: Needed ID U KRest KOut ID1 Rest IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed MU : select (ID1, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * M : mem (ID, U) KOut ============================ exists U', mem (ID, U') Needed
< M': apply IH to MU1 M. Subgoal 2.2: Variables: Needed ID U KRest KOut ID1 Rest U' IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed MU : select (ID1, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * M : mem (ID, U) KOut M' : mem (ID, U') KRest ============================ exists U', mem (ID, U') Needed
< apply mem_after_select_before to MU M'. Subgoal 2.2: Variables: Needed ID U KRest KOut ID1 Rest U' IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed MU : select (ID1, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * M : mem (ID, U) KOut M' : mem (ID, U') KRest H1 : mem (ID, U') Needed ============================ exists U', mem (ID, U') Needed
< search. Subgoal 3: Variables: Needed ID U KRest KOut ID1 Rest IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed M : mem (ID, U) ((ID1, needed)::KOut) MU : select (ID1, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * ============================ exists U', mem (ID, U') Needed
< M: case M. Subgoal 3.1: Variables: Needed KRest KOut ID1 Rest IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed MU : select (ID1, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * ============================ exists U', mem (ID1, U') Needed
< apply select_mem to MU. Subgoal 3.1: Variables: Needed KRest KOut ID1 Rest IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed MU : select (ID1, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * H1 : mem (ID1, unknown) Needed ============================ exists U', mem (ID1, U') Needed
< search. Subgoal 3.2: Variables: Needed ID U KRest KOut ID1 Rest IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed MU : select (ID1, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * M : mem (ID, U) KOut ============================ exists U', mem (ID, U') Needed
< M': apply IH to MU1 M. Subgoal 3.2: Variables: Needed ID U KRest KOut ID1 Rest U' IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed MU : select (ID1, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * M : mem (ID, U) KOut M' : mem (ID, U') KRest ============================ exists U', mem (ID, U') Needed
< apply mem_after_select_before to MU M'. Subgoal 3.2: Variables: Needed ID U KRest KOut ID1 Rest U' IH : forall Needed Prf Updated ID U, makeUsed Needed Prf Updated * -> mem (ID, U) Updated -> exists U', mem (ID, U') Needed MU : select (ID1, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * M : mem (ID, U) KOut M' : mem (ID, U') KRest H1 : mem (ID, U') Needed ============================ exists U', mem (ID, U') Needed
< search. Proof completed.
< Theorem makeUsed_good_used_list : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated -> good_used_list Updated. ============================ forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated -> good_used_list Updated
< induction on 2. IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated ============================ forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated @ -> good_used_list Updated
< intros GUL MU. Variables: Needed Prf Updated IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : makeUsed Needed Prf Updated @ ============================ good_used_list Updated
< MU: case MU. Subgoal 1: Variables: Updated IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Updated ============================ good_used_list Updated
< search. Subgoal 2: Variables: Needed KRest KOut ID Rest IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * ============================ good_used_list ((ID, needed)::KOut)
< GUL': apply good_used_list_select to GUL MU. Subgoal 2: Variables: Needed KRest KOut ID Rest IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest ============================ good_used_list ((ID, needed)::KOut)
< GUL'': apply IH to _ MU1. Subgoal 2: Variables: Needed KRest KOut ID Rest IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut ============================ good_used_list ((ID, needed)::KOut)
< unfold . Subgoal 2: Variables: Needed KRest KOut ID Rest IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut ============================ forall ID1 U1 CURest U2, select (ID1, U1) CURest ((ID, needed)::KOut) -> mem (ID1, U2) CURest -> false
< intros S M. Subgoal 2: Variables: Needed KRest KOut ID Rest ID1 U1 CURest U2 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID1, U1) CURest ((ID, needed)::KOut) M : mem (ID1, U2) CURest ============================ false
< S: case S. Subgoal 2.1: Variables: Needed KRest KOut ID Rest U2 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut M : mem (ID, U2) KOut ============================ false
< M': apply makeUsed_member to MU1 M. Subgoal 2.1: Variables: Needed KRest KOut ID Rest U2 U' IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut M : mem (ID, U2) KOut M' : mem (ID, U') KRest ============================ false
< GUL: case GUL. Subgoal 2.1: Variables: Needed KRest KOut ID Rest U2 U' IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut M : mem (ID, U2) KOut M' : mem (ID, U') KRest GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ false
< apply GUL to MU M'. Subgoal 2.2: Variables: Needed KRest KOut ID Rest ID1 U1 U2 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut M : mem (ID1, U2) ((ID, needed)::L1) S : select (ID1, U1) L1 KOut ============================ false
< M: case M. Subgoal 2.2.1: Variables: Needed KRest KOut ID Rest U1 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID, U1) L1 KOut ============================ false
< M': apply select_mem to S. Subgoal 2.2.1: Variables: Needed KRest KOut ID Rest U1 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID, U1) L1 KOut M' : mem (ID, U1) KOut ============================ false
< M'': apply makeUsed_member to MU1 M'. Subgoal 2.2.1: Variables: Needed KRest KOut ID Rest U1 L1 U' IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID, U1) L1 KOut M' : mem (ID, U1) KOut M'' : mem (ID, U') KRest ============================ false
< GUL: case GUL. Subgoal 2.2.1: Variables: Needed KRest KOut ID Rest U1 L1 U' IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID, U1) L1 KOut M' : mem (ID, U1) KOut M'' : mem (ID, U') KRest GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ false
< apply GUL to MU M''. Subgoal 2.2.2: Variables: Needed KRest KOut ID Rest ID1 U1 U2 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID1, U1) L1 KOut M : mem (ID1, U2) L1 ============================ false
< GUL_Sub: apply IH to _ MU1. Subgoal 2.2.2: Variables: Needed KRest KOut ID Rest ID1 U1 U2 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID1, U1) L1 KOut M : mem (ID1, U2) L1 GUL_Sub : good_used_list KOut ============================ false
< GUL_Sub: case GUL_Sub. Subgoal 2.2.2: Variables: Needed KRest KOut ID Rest ID1 U1 U2 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, needed) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID1, U1) L1 KOut M : mem (ID1, U2) L1 GUL_Sub : forall ID U1 CURest U2, select (ID, U1) CURest KOut -> mem (ID, U2) CURest -> false ============================ false
< backchain GUL_Sub. Subgoal 3: Variables: Needed KRest KOut ID Rest IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * ============================ good_used_list ((ID, needed)::KOut)
< GUL': apply good_used_list_select to GUL MU. Subgoal 3: Variables: Needed KRest KOut ID Rest IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest ============================ good_used_list ((ID, needed)::KOut)
< GUL'': apply IH to _ MU1. Subgoal 3: Variables: Needed KRest KOut ID Rest IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut ============================ good_used_list ((ID, needed)::KOut)
< unfold . Subgoal 3: Variables: Needed KRest KOut ID Rest IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut ============================ forall ID1 U1 CURest U2, select (ID1, U1) CURest ((ID, needed)::KOut) -> mem (ID1, U2) CURest -> false
< intros S M. Subgoal 3: Variables: Needed KRest KOut ID Rest ID1 U1 CURest U2 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID1, U1) CURest ((ID, needed)::KOut) M : mem (ID1, U2) CURest ============================ false
< S: case S. Subgoal 3.1: Variables: Needed KRest KOut ID Rest U2 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut M : mem (ID, U2) KOut ============================ false
< M': apply makeUsed_member to MU1 M. Subgoal 3.1: Variables: Needed KRest KOut ID Rest U2 U' IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut M : mem (ID, U2) KOut M' : mem (ID, U') KRest ============================ false
< GUL: case GUL. Subgoal 3.1: Variables: Needed KRest KOut ID Rest U2 U' IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut M : mem (ID, U2) KOut M' : mem (ID, U') KRest GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ false
< apply GUL to MU M'. Subgoal 3.2: Variables: Needed KRest KOut ID Rest ID1 U1 U2 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut M : mem (ID1, U2) ((ID, needed)::L1) S : select (ID1, U1) L1 KOut ============================ false
< M: case M. Subgoal 3.2.1: Variables: Needed KRest KOut ID Rest U1 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID, U1) L1 KOut ============================ false
< M': apply select_mem to S. Subgoal 3.2.1: Variables: Needed KRest KOut ID Rest U1 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID, U1) L1 KOut M' : mem (ID, U1) KOut ============================ false
< M'': apply makeUsed_member to MU1 M'. Subgoal 3.2.1: Variables: Needed KRest KOut ID Rest U1 L1 U' IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID, U1) L1 KOut M' : mem (ID, U1) KOut M'' : mem (ID, U') KRest ============================ false
< GUL: case GUL. Subgoal 3.2.1: Variables: Needed KRest KOut ID Rest U1 L1 U' IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID, U1) L1 KOut M' : mem (ID, U1) KOut M'' : mem (ID, U') KRest GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ false
< apply GUL to MU M''. Subgoal 3.2.2: Variables: Needed KRest KOut ID Rest ID1 U1 U2 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID1, U1) L1 KOut M : mem (ID1, U2) L1 ============================ false
< GUL_Sub: apply IH to _ MU1. Subgoal 3.2.2: Variables: Needed KRest KOut ID Rest ID1 U1 U2 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID1, U1) L1 KOut M : mem (ID1, U2) L1 GUL_Sub : good_used_list KOut ============================ false
< GUL_Sub: case GUL_Sub. Subgoal 3.2.2: Variables: Needed KRest KOut ID Rest ID1 U1 U2 L1 IH : forall Needed Prf Updated, good_used_list Needed -> makeUsed Needed Prf Updated * -> good_used_list Updated GUL : good_used_list Needed MU : select (ID, unknown) KRest Needed MU1 : makeUsed KRest Rest KOut * GUL' : good_used_list KRest GUL'' : good_used_list KOut S : select (ID1, U1) L1 KOut M : mem (ID1, U2) L1 GUL_Sub : forall ID U1 CURest U2, select (ID, U1) CURest KOut -> mem (ID, U2) CURest -> false ============================ false
< backchain GUL_Sub. Proof completed.
< Theorem domain_is : forall L D, is_list (is_pair is_integer is_clause) L -> domain L D -> is_list is_integer D. ============================ forall L D, is_list (is_pair is_integer is_clause) L -> domain L D -> is_list is_integer D
< induction on 2. IH : forall L D, is_list (is_pair is_integer is_clause) L -> domain L D * -> is_list is_integer D ============================ forall L D, is_list (is_pair is_integer is_clause) L -> domain L D @ -> is_list is_integer D
< intros Is D. Variables: L D IH : forall L D, is_list (is_pair is_integer is_clause) L -> domain L D * -> is_list is_integer D Is : is_list (is_pair is_integer is_clause) L D : domain L D @ ============================ is_list is_integer D
< D: case D. Subgoal 1: IH : forall L D, is_list (is_pair is_integer is_clause) L -> domain L D * -> is_list is_integer D Is : is_list (is_pair is_integer is_clause) [] ============================ is_list is_integer []
< search. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_integer is_clause) L -> domain L D * -> is_list is_integer D Is : is_list (is_pair is_integer is_clause) ((A, B)::Rest) D : domain Rest DRest * ============================ is_list is_integer (A::DRest)
< Is: case Is. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_integer is_clause) L -> domain L D * -> is_list is_integer D D : domain Rest DRest * Is : is_pair is_integer is_clause (A, B) Is1 : is_list (is_pair is_integer is_clause) Rest ============================ is_list is_integer (A::DRest)
< case Is. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_integer is_clause) L -> domain L D * -> is_list is_integer D D : domain Rest DRest * Is1 : is_list (is_pair is_integer is_clause) Rest H1 : is_integer A H2 : is_clause B ============================ is_list is_integer (A::DRest)
< apply IH to _ D. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_integer is_clause) L -> domain L D * -> is_list is_integer D D : domain Rest DRest * Is1 : is_list (is_pair is_integer is_clause) Rest H1 : is_integer A H2 : is_clause B H3 : is_list is_integer DRest ============================ is_list is_integer (A::DRest)
< search. Proof completed.
< Extensible_Theorem endKnownClauses_related : forall Known FC CU DK DCU, IsFC : is_finalClauses FC -> IsKnown : is_list (is_pair is_integer is_clause) Known -> CFC : checkFinalClauses Known FC -> EKC : endKnownClauses FC CU -> DmnCU : domain CU DCU -> DmnK : domain Known DK -> permutation DCU DK on EKC. Subgoal 1: Variables: Known DK DCU IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsFC : is_finalClauses endFClause IsKnown : is_list (is_pair is_integer is_clause) Known CFC : checkFinalClauses Known endFClause EKC : endKnownClauses endFClause [] @ DmnCU : domain [] DCU DmnK : domain Known DK ============================ permutation DCU DK
< CFC: case CFC. Subgoal 1: Variables: DK DCU IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsFC : is_finalClauses endFClause IsKnown : is_list (is_pair is_integer is_clause) [] EKC : endKnownClauses endFClause [] @ DmnCU : domain [] DCU DmnK : domain [] DK ============================ permutation DCU DK
< case DmnCU. Subgoal 1: Variables: DK IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsFC : is_finalClauses endFClause IsKnown : is_list (is_pair is_integer is_clause) [] EKC : endKnownClauses endFClause [] @ DmnK : domain [] DK ============================ permutation [] DK
< case DmnK. Subgoal 1: IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsFC : is_finalClauses endFClause IsKnown : is_list (is_pair is_integer is_clause) [] EKC : endKnownClauses endFClause [] @ ============================ permutation [] []
< search. Subgoal 2: Variables: Known DK DCU KRest ID Rest C IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsFC : is_finalClauses (addFClause ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known CFC : checkFinalClauses Known (addFClause ID C Rest) EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ DmnCU : domain ((ID, needed)::KRest) DCU DmnK : domain Known DK EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * ============================ permutation DCU DK
< CFC: case CFC. Subgoal 2: Variables: Known DK DCU KRest ID Rest C KRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsFC : is_finalClauses (addFClause ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ DmnCU : domain ((ID, needed)::KRest) DCU DmnK : domain Known DK EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest ============================ permutation DCU DK
< Is: case IsFC. Subgoal 2: Variables: Known DK DCU KRest ID Rest C KRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ DmnCU : domain ((ID, needed)::KRest) DCU DmnK : domain Known DK EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest ============================ permutation DCU DK
< DmnCU: case DmnCU. Subgoal 2: Variables: Known DK KRest ID Rest C KRest1 DRest IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ DmnK : domain Known DK EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest DmnCU : domain KRest DRest ============================ permutation (ID::DRest) DK
< DmnK': apply domain_select to DmnK CFC. Subgoal 2: Variables: Known DK KRest ID Rest C KRest1 DRest DRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ DmnK : domain Known DK EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest DmnCU : domain KRest DRest DmnK' : select ID DRest1 DK DmnK'1 : domain KRest1 DRest1 ============================ permutation (ID::DRest) DK
< IsKRest1: apply select_is to _ CFC. Subgoal 2: Variables: Known DK KRest ID Rest C KRest1 DRest DRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ DmnK : domain Known DK EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest DmnCU : domain KRest DRest DmnK' : select ID DRest1 DK DmnK'1 : domain KRest1 DRest1 IsKRest1 : is_list (is_pair is_integer is_clause) KRest1 ============================ permutation (ID::DRest) DK
< P: apply IH to Is2 IsKRest1 CFC1 EKC2 DmnCU DmnK'1. Subgoal 2: Variables: Known DK KRest ID Rest C KRest1 DRest DRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ DmnK : domain Known DK EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest DmnCU : domain KRest DRest DmnK' : select ID DRest1 DK DmnK'1 : domain KRest1 DRest1 IsKRest1 : is_list (is_pair is_integer is_clause) KRest1 P : permutation DRest DRest1 ============================ permutation (ID::DRest) DK
< IsDK: apply domain_is to _ DmnK. Subgoal 2: Variables: Known DK KRest ID Rest C KRest1 DRest DRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ DmnK : domain Known DK EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest DmnCU : domain KRest DRest DmnK' : select ID DRest1 DK DmnK'1 : domain KRest1 DRest1 IsKRest1 : is_list (is_pair is_integer is_clause) KRest1 P : permutation DRest DRest1 IsDK : is_list is_integer DK ============================ permutation (ID::DRest) DK
< search. Subgoal 3: Variables: Known DK DCU KRest ID Rest C IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsFC : is_finalClauses (addFClause ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known CFC : checkFinalClauses Known (addFClause ID C Rest) EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ DmnCU : domain ((ID, unknown)::KRest) DCU DmnK : domain Known DK EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * ============================ permutation DCU DK
< CFC: case CFC. Subgoal 3: Variables: Known DK DCU KRest ID Rest C KRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsFC : is_finalClauses (addFClause ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ DmnCU : domain ((ID, unknown)::KRest) DCU DmnK : domain Known DK EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest ============================ permutation DCU DK
< Is: case IsFC. Subgoal 3: Variables: Known DK DCU KRest ID Rest C KRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ DmnCU : domain ((ID, unknown)::KRest) DCU DmnK : domain Known DK EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest ============================ permutation DCU DK
< DmnCU: case DmnCU. Subgoal 3: Variables: Known DK KRest ID Rest C KRest1 DRest IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ DmnK : domain Known DK EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest DmnCU : domain KRest DRest ============================ permutation (ID::DRest) DK
< DmnK': apply domain_select to DmnK CFC. Subgoal 3: Variables: Known DK KRest ID Rest C KRest1 DRest DRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ DmnK : domain Known DK EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest DmnCU : domain KRest DRest DmnK' : select ID DRest1 DK DmnK'1 : domain KRest1 DRest1 ============================ permutation (ID::DRest) DK
< IsKRest1: apply select_is to _ CFC. Subgoal 3: Variables: Known DK KRest ID Rest C KRest1 DRest DRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ DmnK : domain Known DK EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest DmnCU : domain KRest DRest DmnK' : select ID DRest1 DK DmnK'1 : domain KRest1 DRest1 IsKRest1 : is_list (is_pair is_integer is_clause) KRest1 ============================ permutation (ID::DRest) DK
< P: apply IH to Is2 IsKRest1 CFC1 EKC2 DmnCU DmnK'1. Subgoal 3: Variables: Known DK KRest ID Rest C KRest1 DRest DRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ DmnK : domain Known DK EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest DmnCU : domain KRest DRest DmnK' : select ID DRest1 DK DmnK'1 : domain KRest1 DRest1 IsKRest1 : is_list (is_pair is_integer is_clause) KRest1 P : permutation DRest DRest1 ============================ permutation (ID::DRest) DK
< IsDK: apply domain_is to _ DmnK. Subgoal 3: Variables: Known DK KRest ID Rest C KRest1 DRest DRest1 IH : forall Known FC CU DK DCU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> domain CU DCU -> domain Known DK -> permutation DCU DK IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ DmnK : domain Known DK EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_integer ID Is1 : is_clause C Is2 : is_finalClauses Rest DmnCU : domain KRest DRest DmnK' : select ID DRest1 DK DmnK'1 : domain KRest1 DRest1 IsKRest1 : is_list (is_pair is_integer is_clause) KRest1 P : permutation DRest DRest1 IsDK : is_list is_integer DK ============================ permutation (ID::DRest) DK
< search. Proof completed.
< Theorem mem_is_clauseUsedness : forall CU IDC, is_list (is_pair is_integer is_clauseUsedness) CU -> mem IDC CU -> exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C. ============================ forall CU IDC, is_list (is_pair is_integer is_clauseUsedness) CU -> mem IDC CU -> exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C
< induction on 2. IH : forall CU IDC, is_list (is_pair is_integer is_clauseUsedness) CU -> mem IDC CU * -> exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C ============================ forall CU IDC, is_list (is_pair is_integer is_clauseUsedness) CU -> mem IDC CU @ -> exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C
< intros Is Mem. Variables: CU IDC IH : forall CU IDC, is_list (is_pair is_integer is_clauseUsedness) CU -> mem IDC CU * -> exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C Is : is_list (is_pair is_integer is_clauseUsedness) CU Mem : mem IDC CU @ ============================ exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C
< Mem: case Mem. Subgoal 1: Variables: IDC Rest IH : forall CU IDC, is_list (is_pair is_integer is_clauseUsedness) CU -> mem IDC CU * -> exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C Is : is_list (is_pair is_integer is_clauseUsedness) (IDC::Rest) ============================ exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C
< Is: case Is. Subgoal 1: Variables: IDC Rest IH : forall CU IDC, is_list (is_pair is_integer is_clauseUsedness) CU -> mem IDC CU * -> exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C Is : is_pair is_integer is_clauseUsedness IDC Is1 : is_list (is_pair is_integer is_clauseUsedness) Rest ============================ exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C
< case Is. Subgoal 1: Variables: Rest B A IH : forall CU IDC, is_list (is_pair is_integer is_clauseUsedness) CU -> mem IDC CU * -> exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C Is1 : is_list (is_pair is_integer is_clauseUsedness) Rest H1 : is_integer A H2 : is_clauseUsedness B ============================ exists ID C, ((A, B) = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C
< search. Subgoal 2: Variables: IDC Rest I IH : forall CU IDC, is_list (is_pair is_integer is_clauseUsedness) CU -> mem IDC CU * -> exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C Is : is_list (is_pair is_integer is_clauseUsedness) (I::Rest) Mem : mem IDC Rest * ============================ exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C
< Is: case Is. Subgoal 2: Variables: IDC Rest I IH : forall CU IDC, is_list (is_pair is_integer is_clauseUsedness) CU -> mem IDC CU * -> exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C Mem : mem IDC Rest * Is : is_pair is_integer is_clauseUsedness I Is1 : is_list (is_pair is_integer is_clauseUsedness) Rest ============================ exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C
< apply IH to _ Mem. Subgoal 2: Variables: Rest I ID C IH : forall CU IDC, is_list (is_pair is_integer is_clauseUsedness) CU -> mem IDC CU * -> exists ID C, (IDC = (ID, C) /\ is_integer ID) /\ is_clauseUsedness C Mem : mem (ID, C) Rest * Is : is_pair is_integer is_clauseUsedness I Is1 : is_list (is_pair is_integer is_clauseUsedness) Rest H1 : is_integer ID H2 : is_clauseUsedness C ============================ exists ID1 C1, ((ID, C) = (ID1, C1) /\ is_integer ID1) /\ is_clauseUsedness C1
< search. Proof completed.
< Theorem makeUsed_subset : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' -> mem (ID, needed) CU -> mem (ID, needed) CU'. ============================ forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' -> mem (ID, needed) CU -> mem (ID, needed) CU'
< induction on 3. IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' ============================ forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' @ -> mem (ID, needed) CU -> mem (ID, needed) CU'
< intros IsCU IsID MU Mem. Variables: CU Prf CU' ID IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID MU : makeUsed CU Prf CU' @ Mem : mem (ID, needed) CU ============================ mem (ID, needed) CU'
< MU: case MU. Subgoal 1: Variables: CU' ID IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU' IsID : is_integer ID Mem : mem (ID, needed) CU' ============================ mem (ID, needed) CU'
< search. Subgoal 2: Variables: CU ID KRest KOut ID1 Rest IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID1, needed) KRest CU MU1 : makeUsed KRest Rest KOut * ============================ mem (ID, needed) ((ID1, needed)::KOut)
< MemCU: apply select_mem to MU. Subgoal 2: Variables: CU ID KRest KOut ID1 Rest IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID1, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID1, needed) CU ============================ mem (ID, needed) ((ID1, needed)::KOut)
< Is: apply mem_is_clauseUsedness to _ MemCU. Subgoal 2: Variables: CU ID KRest KOut Rest ID2 IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID2, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID2, needed) CU Is : is_integer ID2 Is1 : is_clauseUsedness needed ============================ mem (ID, needed) ((ID2, needed)::KOut)
< Or: apply is_integer_eq_or_not to Is IsID. Subgoal 2: Variables: CU ID KRest KOut Rest ID2 IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID2, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID2, needed) CU Is : is_integer ID2 Is1 : is_clauseUsedness needed Or : ID2 = ID \/ (ID2 = ID -> false) ============================ mem (ID, needed) ((ID2, needed)::KOut)
< E: case Or. Subgoal 2.1: Variables: CU ID KRest KOut Rest IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID, needed) CU Is : is_integer ID Is1 : is_clauseUsedness needed ============================ mem (ID, needed) ((ID, needed)::KOut)
< search. Subgoal 2.2: Variables: CU ID KRest KOut Rest ID2 IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID2, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID2, needed) CU Is : is_integer ID2 Is1 : is_clauseUsedness needed E : ID2 = ID -> false ============================ mem (ID, needed) ((ID2, needed)::KOut)
< NEq: assert (ID2, needed) = (ID, needed) -> false. Subgoal 2.2.1: Variables: CU ID KRest KOut Rest ID2 IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID2, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID2, needed) CU Is : is_integer ID2 Is1 : is_clauseUsedness needed E : ID2 = ID -> false ============================ (ID2, needed) = (ID, needed) -> false
< intros Eq. Subgoal 2.2.1: Variables: CU ID KRest KOut Rest ID2 IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID2, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID2, needed) CU Is : is_integer ID2 Is1 : is_clauseUsedness needed E : ID2 = ID -> false Eq : (ID2, needed) = (ID, needed) ============================ false
< case Eq. Subgoal 2.2.1: Variables: CU ID KRest KOut Rest IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID, needed) CU Is : is_integer ID Is1 : is_clauseUsedness needed E : ID = ID -> false ============================ false
< backchain E. Subgoal 2.2: Variables: CU ID KRest KOut Rest ID2 IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID2, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID2, needed) CU Is : is_integer ID2 Is1 : is_clauseUsedness needed E : ID2 = ID -> false NEq : (ID2, needed) = (ID, needed) -> false ============================ mem (ID, needed) ((ID2, needed)::KOut)
< MemKRest: apply mem_before_select_after to MU Mem _. Subgoal 2.2: Variables: CU ID KRest KOut Rest ID2 IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID2, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID2, needed) CU Is : is_integer ID2 Is1 : is_clauseUsedness needed E : ID2 = ID -> false NEq : (ID2, needed) = (ID, needed) -> false MemKRest : mem (ID, needed) KRest ============================ mem (ID, needed) ((ID2, needed)::KOut)
< apply select_is_clauseUsedness to _ MU. Subgoal 2.2: Variables: CU ID KRest KOut Rest ID2 IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID2, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID2, needed) CU Is : is_integer ID2 Is1 : is_clauseUsedness needed E : ID2 = ID -> false NEq : (ID2, needed) = (ID, needed) -> false MemKRest : mem (ID, needed) KRest H1 : is_list (is_pair is_integer is_clauseUsedness) KRest ============================ mem (ID, needed) ((ID2, needed)::KOut)
< apply IH to _ IsID MU1 MemKRest. Subgoal 2.2: Variables: CU ID KRest KOut Rest ID2 IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID2, needed) KRest CU MU1 : makeUsed KRest Rest KOut * MemCU : mem (ID2, needed) CU Is : is_integer ID2 Is1 : is_clauseUsedness needed E : ID2 = ID -> false NEq : (ID2, needed) = (ID, needed) -> false MemKRest : mem (ID, needed) KRest H1 : is_list (is_pair is_integer is_clauseUsedness) KRest H2 : mem (ID, needed) KOut ============================ mem (ID, needed) ((ID2, needed)::KOut)
< search. Subgoal 3: Variables: CU ID KRest KOut ID1 Rest IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID1, unknown) KRest CU MU1 : makeUsed KRest Rest KOut * ============================ mem (ID, needed) ((ID1, needed)::KOut)
< apply select_is_clauseUsedness to _ MU. Subgoal 3: Variables: CU ID KRest KOut ID1 Rest IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID1, unknown) KRest CU MU1 : makeUsed KRest Rest KOut * H1 : is_list (is_pair is_integer is_clauseUsedness) KRest ============================ mem (ID, needed) ((ID1, needed)::KOut)
< apply mem_before_select_after to MU Mem _. Subgoal 3: Variables: CU ID KRest KOut ID1 Rest IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID1, unknown) KRest CU MU1 : makeUsed KRest Rest KOut * H1 : is_list (is_pair is_integer is_clauseUsedness) KRest H2 : mem (ID, needed) KRest ============================ mem (ID, needed) ((ID1, needed)::KOut)
< apply IH to _ IsID MU1 _. Subgoal 3: Variables: CU ID KRest KOut ID1 Rest IH : forall CU Prf CU' ID, is_list (is_pair is_integer is_clauseUsedness) CU -> is_integer ID -> makeUsed CU Prf CU' * -> mem (ID, needed) CU -> mem (ID, needed) CU' IsCU : is_list (is_pair is_integer is_clauseUsedness) CU IsID : is_integer ID Mem : mem (ID, needed) CU MU : select (ID1, unknown) KRest CU MU1 : makeUsed KRest Rest KOut * H1 : is_list (is_pair is_integer is_clauseUsedness) KRest H2 : mem (ID, needed) KRest H3 : mem (ID, needed) KOut ============================ mem (ID, needed) ((ID1, needed)::KOut)
< search. Proof completed.
< Extensible_Theorem clauseUsedness_is_needed_or_not : forall CU, Is : is_clauseUsedness CU -> CU = needed \/ (CU = needed -> false) on Is. Subgoal 1: IH : forall CU, is_clauseUsedness CU * -> CU = needed \/ (CU = needed -> false) Is : is_clauseUsedness needed @ ============================ needed = needed \/ (needed = needed -> false)
< search. Subgoal 2: IH : forall CU, is_clauseUsedness CU * -> CU = needed \/ (CU = needed -> false) Is : is_clauseUsedness unknown @ ============================ unknown = needed \/ (unknown = needed -> false)
< right. Subgoal 2: IH : forall CU, is_clauseUsedness CU * -> CU = needed \/ (CU = needed -> false) Is : is_clauseUsedness unknown @ ============================ unknown = needed -> false
< intros E. Subgoal 2: IH : forall CU, is_clauseUsedness CU * -> CU = needed \/ (CU = needed -> false) Is : is_clauseUsedness unknown @ E : unknown = needed ============================ false
< case E. Proof completed.
< Extensible_Theorem endKnownClauses_all_mem : forall Known FC CU ID U, CFC : checkFinalClauses Known FC -> EKC : endKnownClauses FC CU -> Mem : mem (ID, U) CU -> exists C, mem (ID, C) Known on EKC. Subgoal 1: Variables: Known ID U IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known CFC : checkFinalClauses Known endFClause EKC : endKnownClauses endFClause [] @ Mem : mem (ID, U) [] ============================ exists C, mem (ID, C) Known
< case Mem. Subgoal 2: Variables: Known ID U KRest ID1 Rest C IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known CFC : checkFinalClauses Known (addFClause ID1 C Rest) EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, needed)::KRest) @ Mem : mem (ID, U) ((ID1, needed)::KRest) EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * ============================ exists C, mem (ID, C) Known
< Mem: case Mem. Subgoal 2.1: Variables: Known KRest ID1 Rest C IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known CFC : checkFinalClauses Known (addFClause ID1 C Rest) EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * ============================ exists C, mem (ID1, C) Known
< CFC: case CFC. Subgoal 2.1: Variables: Known KRest ID1 Rest C KRest1 IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * CFC : select (ID1, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest ============================ exists C, mem (ID1, C) Known
< apply select_mem to CFC. Subgoal 2.1: Variables: Known KRest ID1 Rest C KRest1 IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * CFC : select (ID1, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest H1 : mem (ID1, C) Known ============================ exists C, mem (ID1, C) Known
< search. Subgoal 2.2: Variables: Known ID U KRest ID1 Rest C IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known CFC : checkFinalClauses Known (addFClause ID1 C Rest) EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * Mem : mem (ID, U) KRest ============================ exists C, mem (ID, C) Known
< CFC: case CFC. Subgoal 2.2: Variables: Known ID U KRest ID1 Rest C KRest1 IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * Mem : mem (ID, U) KRest CFC : select (ID1, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest ============================ exists C, mem (ID, C) Known
< M: apply IH to CFC1 EKC2 _. Subgoal 2.2: Variables: Known ID U KRest ID1 Rest C KRest1 C1 IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * Mem : mem (ID, U) KRest CFC : select (ID1, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest M : mem (ID, C1) KRest1 ============================ exists C, mem (ID, C) Known
< apply mem_after_select_before to CFC M. Subgoal 2.2: Variables: Known ID U KRest ID1 Rest C KRest1 C1 IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * Mem : mem (ID, U) KRest CFC : select (ID1, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest M : mem (ID, C1) KRest1 H1 : mem (ID, C1) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 3: Variables: Known ID U KRest ID1 Rest C IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known CFC : checkFinalClauses Known (addFClause ID1 C Rest) EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, unknown)::KRest) @ Mem : mem (ID, U) ((ID1, unknown)::KRest) EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * ============================ exists C, mem (ID, C) Known
< Mem: case Mem. Subgoal 3.1: Variables: Known KRest ID1 Rest C IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known CFC : checkFinalClauses Known (addFClause ID1 C Rest) EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * ============================ exists C, mem (ID1, C) Known
< CFC: case CFC. Subgoal 3.1: Variables: Known KRest ID1 Rest C KRest1 IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * CFC : select (ID1, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest ============================ exists C, mem (ID1, C) Known
< apply select_mem to CFC. Subgoal 3.1: Variables: Known KRest ID1 Rest C KRest1 IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * CFC : select (ID1, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest H1 : mem (ID1, C) Known ============================ exists C, mem (ID1, C) Known
< search. Subgoal 3.2: Variables: Known ID U KRest ID1 Rest C IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known CFC : checkFinalClauses Known (addFClause ID1 C Rest) EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * Mem : mem (ID, U) KRest ============================ exists C, mem (ID, C) Known
< CFC: case CFC. Subgoal 3.2: Variables: Known ID U KRest ID1 Rest C KRest1 IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * Mem : mem (ID, U) KRest CFC : select (ID1, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest ============================ exists C, mem (ID, C) Known
< M: apply IH to CFC1 EKC2 _. Subgoal 3.2: Variables: Known ID U KRest ID1 Rest C KRest1 C1 IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * Mem : mem (ID, U) KRest CFC : select (ID1, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest M : mem (ID, C1) KRest1 ============================ exists C, mem (ID, C) Known
< apply mem_after_select_before to CFC M. Subgoal 3.2: Variables: Known ID U KRest ID1 Rest C KRest1 C1 IH : forall Known FC CU ID U, checkFinalClauses Known FC -> endKnownClauses FC CU * -> mem (ID, U) CU -> exists C, mem (ID, C) Known EKC : endKnownClauses (addFClause ID1 C Rest) ((ID1, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * Mem : mem (ID, U) KRest CFC : select (ID1, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest M : mem (ID, C1) KRest1 H1 : mem (ID, C1) Known ============================ exists C, mem (ID, C) Known
< search. Proof completed.
< Extensible_Theorem endKnownClauses_good_used_list : forall Known FC CU, IsFC : is_finalClauses FC -> IsKnown : is_list (is_pair is_integer is_clause) Known -> GCL : good_clause_list Known -> CFC : checkFinalClauses Known FC -> EKC : endKnownClauses FC CU -> good_used_list CU on EKC. Subgoal 1: Variables: Known IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsFC : is_finalClauses endFClause IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CFC : checkFinalClauses Known endFClause EKC : endKnownClauses endFClause [] @ ============================ good_used_list []
< unfold . Subgoal 1: Variables: Known IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsFC : is_finalClauses endFClause IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CFC : checkFinalClauses Known endFClause EKC : endKnownClauses endFClause [] @ ============================ forall ID U1 CURest U2, select (ID, U1) CURest [] -> mem (ID, U2) CURest -> false
< intros S. Subgoal 1: Variables: Known ID U1 CURest U2 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsFC : is_finalClauses endFClause IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CFC : checkFinalClauses Known endFClause EKC : endKnownClauses endFClause [] @ S : select (ID, U1) CURest [] H1 : mem (ID, U2) CURest ============================ false
< case S. Subgoal 2: Variables: Known KRest ID Rest C IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsFC : is_finalClauses (addFClause ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CFC : checkFinalClauses Known (addFClause ID C Rest) EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * ============================ good_used_list ((ID, needed)::KRest)
< IsFC: case IsFC. Subgoal 2: Variables: Known KRest ID Rest C IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CFC : checkFinalClauses Known (addFClause ID C Rest) EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest ============================ good_used_list ((ID, needed)::KRest)
< CFC: case CFC. Subgoal 2: Variables: Known KRest ID Rest C KRest1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest ============================ good_used_list ((ID, needed)::KRest)
< Is: apply select_is to _ CFC. Subgoal 2: Variables: Known KRest ID Rest C KRest1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 ============================ good_used_list ((ID, needed)::KRest)
< GCL': apply good_clause_list_select to _ CFC. Subgoal 2: Variables: Known KRest ID Rest C KRest1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 ============================ good_used_list ((ID, needed)::KRest)
< GUL: apply IH to _ _ _ CFC1 EKC2. Subgoal 2: Variables: Known KRest ID Rest C KRest1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest ============================ good_used_list ((ID, needed)::KRest)
< unfold . Subgoal 2: Variables: Known KRest ID Rest C KRest1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest ============================ forall ID1 U1 CURest U2, select (ID1, U1) CURest ((ID, needed)::KRest) -> mem (ID1, U2) CURest -> false
< intros S M. Subgoal 2: Variables: Known KRest ID Rest C KRest1 ID1 U1 CURest U2 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID1, U1) CURest ((ID, needed)::KRest) M : mem (ID1, U2) CURest ============================ false
< S: case S. Subgoal 2.1: Variables: Known KRest ID Rest C KRest1 U2 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest M : mem (ID, U2) KRest ============================ false
< MKR1: apply endKnownClauses_all_mem to CFC1 EKC2 M. Subgoal 2.1: Variables: Known KRest ID Rest C KRest1 U2 C1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest M : mem (ID, U2) KRest MKR1 : mem (ID, C1) KRest1 ============================ false
< GCL: case GCL. Subgoal 2.1: Variables: Known KRest ID Rest C KRest1 U2 C1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest M : mem (ID, U2) KRest MKR1 : mem (ID, C1) KRest1 GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to CFC MKR1. Subgoal 2.2: Variables: Known KRest ID Rest C KRest1 ID1 U1 U2 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest M : mem (ID1, U2) ((ID, needed)::L1) S : select (ID1, U1) L1 KRest ============================ false
< M: case M. Subgoal 2.2.1: Variables: Known KRest ID Rest C KRest1 U1 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID, U1) L1 KRest ============================ false
< M: apply select_mem to S. Subgoal 2.2.1: Variables: Known KRest ID Rest C KRest1 U1 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID, U1) L1 KRest M : mem (ID, U1) KRest ============================ false
< GCL: case GCL. Subgoal 2.2.1: Variables: Known KRest ID Rest C KRest1 U1 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID, U1) L1 KRest M : mem (ID, U1) KRest GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< MKR1: apply endKnownClauses_all_mem to CFC1 EKC2 M. Subgoal 2.2.1: Variables: Known KRest ID Rest C KRest1 U1 L1 C1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID, U1) L1 KRest M : mem (ID, U1) KRest GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false MKR1 : mem (ID, C1) KRest1 ============================ false
< apply GCL to CFC MKR1. Subgoal 2.2.2: Variables: Known KRest ID Rest C KRest1 ID1 U1 U2 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID1, U1) L1 KRest M : mem (ID1, U2) L1 ============================ false
< GUL: case GUL. Subgoal 2.2.2: Variables: Known KRest ID Rest C KRest1 ID1 U1 U2 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, needed)::KRest) @ EKC1 : isEmpty C EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 S : select (ID1, U1) L1 KRest M : mem (ID1, U2) L1 GUL : forall ID U1 CURest U2, select (ID, U1) CURest KRest -> mem (ID, U2) CURest -> false ============================ false
< backchain GUL. Subgoal 3: Variables: Known KRest ID Rest C IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsFC : is_finalClauses (addFClause ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CFC : checkFinalClauses Known (addFClause ID C Rest) EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * ============================ good_used_list ((ID, unknown)::KRest)
< IsFC: case IsFC. Subgoal 3: Variables: Known KRest ID Rest C IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CFC : checkFinalClauses Known (addFClause ID C Rest) EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest ============================ good_used_list ((ID, unknown)::KRest)
< CFC: case CFC. Subgoal 3: Variables: Known KRest ID Rest C KRest1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest ============================ good_used_list ((ID, unknown)::KRest)
< Is: apply select_is to _ CFC. Subgoal 3: Variables: Known KRest ID Rest C KRest1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 ============================ good_used_list ((ID, unknown)::KRest)
< GCL': apply good_clause_list_select to _ CFC. Subgoal 3: Variables: Known KRest ID Rest C KRest1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 ============================ good_used_list ((ID, unknown)::KRest)
< GUL: apply IH to _ _ _ CFC1 EKC2. Subgoal 3: Variables: Known KRest ID Rest C KRest1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest ============================ good_used_list ((ID, unknown)::KRest)
< unfold . Subgoal 3: Variables: Known KRest ID Rest C KRest1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest ============================ forall ID1 U1 CURest U2, select (ID1, U1) CURest ((ID, unknown)::KRest) -> mem (ID1, U2) CURest -> false
< intros S M. Subgoal 3: Variables: Known KRest ID Rest C KRest1 ID1 U1 CURest U2 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID1, U1) CURest ((ID, unknown)::KRest) M : mem (ID1, U2) CURest ============================ false
< S: case S. Subgoal 3.1: Variables: Known KRest ID Rest C KRest1 U2 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest M : mem (ID, U2) KRest ============================ false
< MKR1: apply endKnownClauses_all_mem to CFC1 EKC2 M. Subgoal 3.1: Variables: Known KRest ID Rest C KRest1 U2 C1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest M : mem (ID, U2) KRest MKR1 : mem (ID, C1) KRest1 ============================ false
< GCL: case GCL. Subgoal 3.1: Variables: Known KRest ID Rest C KRest1 U2 C1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest M : mem (ID, U2) KRest MKR1 : mem (ID, C1) KRest1 GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to CFC MKR1. Subgoal 3.2: Variables: Known KRest ID Rest C KRest1 ID1 U1 U2 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest M : mem (ID1, U2) ((ID, unknown)::L1) S : select (ID1, U1) L1 KRest ============================ false
< M: case M. Subgoal 3.2.1: Variables: Known KRest ID Rest C KRest1 U1 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID, U1) L1 KRest ============================ false
< M: apply select_mem to S. Subgoal 3.2.1: Variables: Known KRest ID Rest C KRest1 U1 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID, U1) L1 KRest M : mem (ID, U1) KRest ============================ false
< GCL: case GCL. Subgoal 3.2.1: Variables: Known KRest ID Rest C KRest1 U1 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID, U1) L1 KRest M : mem (ID, U1) KRest GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< MKR1: apply endKnownClauses_all_mem to CFC1 EKC2 M. Subgoal 3.2.1: Variables: Known KRest ID Rest C KRest1 U1 L1 C1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID, U1) L1 KRest M : mem (ID, U1) KRest GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false MKR1 : mem (ID, C1) KRest1 ============================ false
< apply GCL to CFC MKR1. Subgoal 3.2.2: Variables: Known KRest ID Rest C KRest1 ID1 U1 U2 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 GUL : good_used_list KRest S : select (ID1, U1) L1 KRest M : mem (ID1, U2) L1 ============================ false
< GUL: case GUL. Subgoal 3.2.2: Variables: Known KRest ID Rest C KRest1 ID1 U1 U2 L1 IH : forall Known FC CU, is_finalClauses FC -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkFinalClauses Known FC -> endKnownClauses FC CU * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known EKC : endKnownClauses (addFClause ID C Rest) ((ID, unknown)::KRest) @ EKC1 : isEmpty C -> false EKC2 : endKnownClauses Rest KRest * IsFC : is_integer ID IsFC1 : is_clause C IsFC2 : is_finalClauses Rest CFC : select (ID, C) KRest1 Known CFC1 : checkFinalClauses KRest1 Rest Is : is_list (is_pair is_integer is_clause) KRest1 GCL' : good_clause_list KRest1 S : select (ID1, U1) L1 KRest M : mem (ID1, U2) L1 GUL : forall ID U1 CURest U2, select (ID, U1) CURest KRest -> mem (ID, U2) CURest -> false ============================ false
< backchain GUL. Proof completed.
< Theorem good_clause_list_double_select : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K -> select (ID, CB) RB K -> CA = CB /\ RA = RB. ============================ forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K -> select (ID, CB) RB K -> CA = CB /\ RA = RB
< induction on 3. IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB ============================ forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K @ -> select (ID, CB) RB K -> CA = CB /\ RA = RB
< intros Is GCL SA SB. Variables: K ID CA CB RA RB IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB Is : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K SA : select (ID, CA) RA K @ SB : select (ID, CB) RB K ============================ CA = CB /\ RA = RB
< SA: case SA. Subgoal 1: Variables: ID CA CB RA RB IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB Is : is_list (is_pair is_integer is_clause) ((ID, CA)::RA) GCL : good_clause_list ((ID, CA)::RA) SB : select (ID, CB) RB ((ID, CA)::RA) ============================ CA = CB /\ RA = RB
< SB: case SB. Subgoal 1.1: Variables: ID CA RA IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB Is : is_list (is_pair is_integer is_clause) ((ID, CA)::RA) GCL : good_clause_list ((ID, CA)::RA) ============================ CA = CA /\ RA = RA
< search. Subgoal 1.2: Variables: ID CA CB RA L1 IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB Is : is_list (is_pair is_integer is_clause) ((ID, CA)::RA) GCL : good_clause_list ((ID, CA)::RA) SB : select (ID, CB) L1 RA ============================ CA = CB /\ RA = (ID, CA)::L1
< M: apply select_mem to SB. Subgoal 1.2: Variables: ID CA CB RA L1 IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB Is : is_list (is_pair is_integer is_clause) ((ID, CA)::RA) GCL : good_clause_list ((ID, CA)::RA) SB : select (ID, CB) L1 RA M : mem (ID, CB) RA ============================ CA = CB /\ RA = (ID, CA)::L1
< GCL: case GCL. Subgoal 1.2: Variables: ID CA CB RA L1 IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB Is : is_list (is_pair is_integer is_clause) ((ID, CA)::RA) SB : select (ID, CB) L1 RA M : mem (ID, CB) RA GCL : forall ID1 C1 KRest C2, select (ID1, C1) KRest ((ID, CA)::RA) -> mem (ID1, C2) KRest -> false ============================ CA = CB /\ RA = (ID, CA)::L1
< apply GCL to _ M. Subgoal 2: Variables: ID CA CB RB L2 I L1 IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB Is : is_list (is_pair is_integer is_clause) (I::L2) GCL : good_clause_list (I::L2) SB : select (ID, CB) RB (I::L2) SA : select (ID, CA) L1 L2 * ============================ CA = CB /\ I::L1 = RB
< SB: case SB. Subgoal 2.1: Variables: ID CA CB L2 L1 IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB Is : is_list (is_pair is_integer is_clause) ((ID, CB)::L2) GCL : good_clause_list ((ID, CB)::L2) SA : select (ID, CA) L1 L2 * ============================ CA = CB /\ (ID, CB)::L1 = L2
< M: apply select_mem to SA. Subgoal 2.1: Variables: ID CA CB L2 L1 IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB Is : is_list (is_pair is_integer is_clause) ((ID, CB)::L2) GCL : good_clause_list ((ID, CB)::L2) SA : select (ID, CA) L1 L2 * M : mem (ID, CA) L2 ============================ CA = CB /\ (ID, CB)::L1 = L2
< GCL: case GCL. Subgoal 2.1: Variables: ID CA CB L2 L1 IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB Is : is_list (is_pair is_integer is_clause) ((ID, CB)::L2) SA : select (ID, CA) L1 L2 * M : mem (ID, CA) L2 GCL : forall ID1 C1 KRest C2, select (ID1, C1) KRest ((ID, CB)::L2) -> mem (ID1, C2) KRest -> false ============================ CA = CB /\ (ID, CB)::L1 = L2
< apply GCL to _ M. Subgoal 2.2: Variables: ID CA CB L2 I L1 L3 IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB Is : is_list (is_pair is_integer is_clause) (I::L2) GCL : good_clause_list (I::L2) SA : select (ID, CA) L1 L2 * SB : select (ID, CB) L3 L2 ============================ CA = CB /\ I::L1 = I::L3
< Is: case Is. Subgoal 2.2: Variables: ID CA CB L2 I L1 L3 IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB GCL : good_clause_list (I::L2) SA : select (ID, CA) L1 L2 * SB : select (ID, CB) L3 L2 Is : is_pair is_integer is_clause I Is1 : is_list (is_pair is_integer is_clause) L2 ============================ CA = CB /\ I::L1 = I::L3
< case Is. Subgoal 2.2: Variables: ID CA CB L2 L1 L3 B A IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB GCL : good_clause_list ((A, B)::L2) SA : select (ID, CA) L1 L2 * SB : select (ID, CB) L3 L2 Is1 : is_list (is_pair is_integer is_clause) L2 H1 : is_integer A H2 : is_clause B ============================ CA = CB /\ (A, B)::L1 = (A, B)::L3
< apply good_clause_list_select to GCL _. Subgoal 2.2: Variables: ID CA CB L2 L1 L3 B A IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB GCL : good_clause_list ((A, B)::L2) SA : select (ID, CA) L1 L2 * SB : select (ID, CB) L3 L2 Is1 : is_list (is_pair is_integer is_clause) L2 H1 : is_integer A H2 : is_clause B H3 : good_clause_list L2 ============================ CA = CB /\ (A, B)::L1 = (A, B)::L3
< apply IH to _ _ SA SB. Subgoal 2.2: Variables: ID CB L2 L3 B A IH : forall K ID CA CB RA RB, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> select (ID, CA) RA K * -> select (ID, CB) RB K -> CA = CB /\ RA = RB GCL : good_clause_list ((A, B)::L2) SA : select (ID, CB) L3 L2 * SB : select (ID, CB) L3 L2 Is1 : is_list (is_pair is_integer is_clause) L2 H1 : is_integer A H2 : is_clause B H3 : good_clause_list L2 ============================ CB = CB /\ (A, B)::L3 = (A, B)::L3
< search. Proof completed.
< Theorem remove_all_unique : forall K ID RA RB, remove_all K ID RA -> remove_all K ID RB -> RA = RB. ============================ forall K ID RA RB, remove_all K ID RA -> remove_all K ID RB -> RA = RB
< induction on 1. IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB ============================ forall K ID RA RB, remove_all K ID RA @ -> remove_all K ID RB -> RA = RB
< intros RA RB. Variables: K ID RA RB IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB RA : remove_all K ID RA @ RB : remove_all K ID RB ============================ RA = RB
< RA: case RA. Subgoal 1: Variables: ID RB IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB RB : remove_all [] ID RB ============================ [] = RB
< case RB. Subgoal 1: Variables: ID IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB ============================ [] = []
< search. Subgoal 2: Variables: ID RA RB IRest C IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB RB : remove_all ((ID, C)::IRest) ID RB RA : remove_all IRest ID RA * ============================ RA = RB
< RB: case RB. Subgoal 2.1: Variables: ID RA RB IRest C IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB RA : remove_all IRest ID RA * RB : remove_all IRest ID RB ============================ RA = RB
< apply IH to RA RB. Subgoal 2.1: Variables: ID RB IRest C IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB RA : remove_all IRest ID RB * RB : remove_all IRest ID RB ============================ RB = RB
< search. Subgoal 2.2: Variables: ID RA IRest C Rest IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB RA : remove_all IRest ID RA * RB : ID = ID -> false RB1 : remove_all IRest ID Rest ============================ RA = (ID, C)::Rest
< apply RB to _. Subgoal 3: Variables: ID RB Rest C A IRest IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB RB : remove_all ((A, C)::IRest) ID RB RA : A = ID -> false RA1 : remove_all IRest ID Rest * ============================ (A, C)::Rest = RB
< RB: case RB. Subgoal 3.1: Variables: ID RB Rest C IRest IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB RA : ID = ID -> false RA1 : remove_all IRest ID Rest * RB : remove_all IRest ID RB ============================ (ID, C)::Rest = RB
< apply RA to _. Subgoal 3.2: Variables: ID Rest C A IRest Rest1 IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB RA : A = ID -> false RA1 : remove_all IRest ID Rest * RB : A = ID -> false RB1 : remove_all IRest ID Rest1 ============================ (A, C)::Rest = (A, C)::Rest1
< apply IH to RA1 RB1. Subgoal 3.2: Variables: ID C A IRest Rest1 IH : forall K ID RA RB, remove_all K ID RA * -> remove_all K ID RB -> RA = RB RA : A = ID -> false RA1 : remove_all IRest ID Rest1 * RB : A = ID -> false RB1 : remove_all IRest ID Rest1 ============================ (A, C)::Rest1 = (A, C)::Rest1
< search. Proof completed.
< Theorem good_clause_list_selects : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L -> select (X, CB) LB L -> LA = LB /\ CA = CB. ============================ forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L -> select (X, CB) LB L -> LA = LB /\ CA = CB
< induction on 2. IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB ============================ forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L @ -> select (X, CB) LB L -> LA = LB /\ CA = CB
< intros GCL SA SB. Variables: L X CA CB LA LB IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB GCL : good_clause_list L SA : select (X, CA) LA L @ SB : select (X, CB) LB L ============================ LA = LB /\ CA = CB
< SA: case SA. Subgoal 1: Variables: X CA CB LA LB IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB GCL : good_clause_list ((X, CA)::LA) SB : select (X, CB) LB ((X, CA)::LA) ============================ LA = LB /\ CA = CB
< SB: case SB. Subgoal 1.1: Variables: X CA LA IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB GCL : good_clause_list ((X, CA)::LA) ============================ LA = LA /\ CA = CA
< search. Subgoal 1.2: Variables: X CA CB LA L1 IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB GCL : good_clause_list ((X, CA)::LA) SB : select (X, CB) L1 LA ============================ LA = (X, CA)::L1 /\ CA = CB
< M: apply select_mem to SB. Subgoal 1.2: Variables: X CA CB LA L1 IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB GCL : good_clause_list ((X, CA)::LA) SB : select (X, CB) L1 LA M : mem (X, CB) LA ============================ LA = (X, CA)::L1 /\ CA = CB
< GCL: case GCL. Subgoal 1.2: Variables: X CA CB LA L1 IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB SB : select (X, CB) L1 LA M : mem (X, CB) LA GCL : forall ID C1 KRest C2, select (ID, C1) KRest ((X, CA)::LA) -> mem (ID, C2) KRest -> false ============================ LA = (X, CA)::L1 /\ CA = CB
< apply GCL to _ M. Subgoal 2: Variables: X CA CB LB L2 I L1 IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB GCL : good_clause_list (I::L2) SB : select (X, CB) LB (I::L2) SA : select (X, CA) L1 L2 * ============================ I::L1 = LB /\ CA = CB
< SB: case SB. Subgoal 2.1: Variables: X CA CB L2 L1 IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB GCL : good_clause_list ((X, CB)::L2) SA : select (X, CA) L1 L2 * ============================ (X, CB)::L1 = L2 /\ CA = CB
< M: apply select_mem to SA. Subgoal 2.1: Variables: X CA CB L2 L1 IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB GCL : good_clause_list ((X, CB)::L2) SA : select (X, CA) L1 L2 * M : mem (X, CA) L2 ============================ (X, CB)::L1 = L2 /\ CA = CB
< GCL: case GCL. Subgoal 2.1: Variables: X CA CB L2 L1 IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB SA : select (X, CA) L1 L2 * M : mem (X, CA) L2 GCL : forall ID C1 KRest C2, select (ID, C1) KRest ((X, CB)::L2) -> mem (ID, C2) KRest -> false ============================ (X, CB)::L1 = L2 /\ CA = CB
< apply GCL to _ M. Subgoal 2.2: Variables: X CA CB L2 I L1 L3 IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB GCL : good_clause_list (I::L2) SA : select (X, CA) L1 L2 * SB : select (X, CB) L3 L2 ============================ I::L1 = I::L3 /\ CA = CB
< apply good_clause_list_drop to GCL. Subgoal 2.2: Variables: X CA CB L2 I L1 L3 IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB GCL : good_clause_list (I::L2) SA : select (X, CA) L1 L2 * SB : select (X, CB) L3 L2 H1 : good_clause_list L2 ============================ I::L1 = I::L3 /\ CA = CB
< apply IH to _ SA SB. Subgoal 2.2: Variables: X CB L2 I L3 IH : forall L X CA CB LA LB, good_clause_list L -> select (X, CA) LA L * -> select (X, CB) LB L -> LA = LB /\ CA = CB GCL : good_clause_list (I::L2) SA : select (X, CB) L3 L2 * SB : select (X, CB) L3 L2 H1 : good_clause_list L2 ============================ I::L3 = I::L3 /\ CB = CB
< search. Proof completed.
< Theorem mem_needed_is : forall L I, is_list (is_pair is_integer is_clauseUsedness) L -> mem I L -> is_pair is_integer is_clauseUsedness I. ============================ forall L I, is_list (is_pair is_integer is_clauseUsedness) L -> mem I L -> is_pair is_integer is_clauseUsedness I
< induction on 2. IH : forall L I, is_list (is_pair is_integer is_clauseUsedness) L -> mem I L * -> is_pair is_integer is_clauseUsedness I ============================ forall L I, is_list (is_pair is_integer is_clauseUsedness) L -> mem I L @ -> is_pair is_integer is_clauseUsedness I
< intros IsL M. Variables: L I IH : forall L I, is_list (is_pair is_integer is_clauseUsedness) L -> mem I L * -> is_pair is_integer is_clauseUsedness I IsL : is_list (is_pair is_integer is_clauseUsedness) L M : mem I L @ ============================ is_pair is_integer is_clauseUsedness I
< M: case M. Subgoal 1: Variables: I Rest IH : forall L I, is_list (is_pair is_integer is_clauseUsedness) L -> mem I L * -> is_pair is_integer is_clauseUsedness I IsL : is_list (is_pair is_integer is_clauseUsedness) (I::Rest) ============================ is_pair is_integer is_clauseUsedness I
< case IsL. Subgoal 1: Variables: I Rest IH : forall L I, is_list (is_pair is_integer is_clauseUsedness) L -> mem I L * -> is_pair is_integer is_clauseUsedness I H1 : is_pair is_integer is_clauseUsedness I H2 : is_list (is_pair is_integer is_clauseUsedness) Rest ============================ is_pair is_integer is_clauseUsedness I
< search. Subgoal 2: Variables: I Rest I1 IH : forall L I, is_list (is_pair is_integer is_clauseUsedness) L -> mem I L * -> is_pair is_integer is_clauseUsedness I IsL : is_list (is_pair is_integer is_clauseUsedness) (I1::Rest) M : mem I Rest * ============================ is_pair is_integer is_clauseUsedness I
< case IsL. Subgoal 2: Variables: I Rest I1 IH : forall L I, is_list (is_pair is_integer is_clauseUsedness) L -> mem I L * -> is_pair is_integer is_clauseUsedness I M : mem I Rest * H1 : is_pair is_integer is_clauseUsedness I1 H2 : is_list (is_pair is_integer is_clauseUsedness) Rest ============================ is_pair is_integer is_clauseUsedness I
< apply IH to _ M. Subgoal 2: Variables: I Rest I1 IH : forall L I, is_list (is_pair is_integer is_clauseUsedness) L -> mem I L * -> is_pair is_integer is_clauseUsedness I M : mem I Rest * H1 : is_pair is_integer is_clauseUsedness I1 H2 : is_list (is_pair is_integer is_clauseUsedness) Rest H3 : is_pair is_integer is_clauseUsedness I ============================ is_pair is_integer is_clauseUsedness I
< search. Proof completed.
< Extensible_Theorem elaboration_all_mem : forall Known P CU E ID U, IsP : is_proof P -> GCL : good_clause_list Known -> IsKnown : is_list (is_pair is_integer is_clause) Known -> CP : checkProof Known P -> Ela : elaborate Known P CU E -> Mem : mem (ID, U) CU -> exists C, mem (ID, C) Known on Ela, elaboration_good_used_list : forall Known P CU E, IsP : is_proof P -> IsKnown : is_list (is_pair is_integer is_clause) Known -> GCL : good_clause_list Known -> CP : checkProof Known P -> Ela : elaborate Known P CU E -> good_used_list CU on Ela. Subgoal 1.1: Variables: Known CU ID U Needed NRest Prf ID1 FC IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (endFrat ID1 FC) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFrat ID1 FC) Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.1: Variables: Known CU ID U Needed NRest Prf ID1 FC IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFrat ID1 FC) Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.1: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC ============================ exists C, mem (ID, C) Known
< M: apply makeUsed_member to Ela4 Mem. Subgoal 1.1: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID, U') NRest ============================ exists C, mem (ID, C) Known
< M': apply mem_after_select_before to Ela2 M. Subgoal 1.1: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID, U') NRest M' : mem (ID, U') Needed ============================ exists C, mem (ID, C) Known
< M+: apply endKnownClauses_all_mem to CP2 Ela1 M'. Subgoal 1.1: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest Prf1 U' C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID, U') NRest M' : mem (ID, U') Needed M+ : mem (ID, C) ((ID1, emptyClause)::KRest) ============================ exists C, mem (ID, C) Known
< M2: case M+. Subgoal 1.1.1: Variables: Known CU U Needed NRest Prf ID1 FC KRest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID1, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID1, U') NRest M' : mem (ID1, U') Needed ============================ exists C, mem (ID1, C) Known
< apply good_clause_list_remove_all_add to _ CP with C = emptyClause. Subgoal 1.1.1: Variables: Known CU U Needed NRest Prf ID1 FC KRest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID1, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID1, U') NRest M' : mem (ID1, U') Needed H1 : good_clause_list ((ID1, emptyClause)::KRest) ============================ exists C, mem (ID1, C) Known
< apply remove_all_is to _ CP. Subgoal 1.1.1: Variables: Known CU U Needed NRest Prf ID1 FC KRest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID1, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID1, U') NRest M' : mem (ID1, U') Needed H1 : good_clause_list ((ID1, emptyClause)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest ============================ exists C, mem (ID1, C) Known
< GUL: apply endKnownClauses_good_used_list to _ _ _ CP2 Ela1. Subgoal 1.1.1: Variables: Known CU U Needed NRest Prf ID1 FC KRest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID1, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID1, U') NRest M' : mem (ID1, U') Needed H1 : good_clause_list ((ID1, emptyClause)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed ============================ exists C, mem (ID1, C) Known
< GUL: case GUL. Subgoal 1.1.1: Variables: Known CU U Needed NRest Prf ID1 FC KRest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID1, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID1, U') NRest M' : mem (ID1, U') Needed H1 : good_clause_list ((ID1, emptyClause)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ exists C, mem (ID1, C) Known
< apply GUL to Ela2 M. Subgoal 1.1.2: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest Prf1 U' C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID, U') NRest M' : mem (ID, U') Needed M2 : mem (ID, C) KRest ============================ exists C, mem (ID, C) Known
< apply remove_all_mem_after to CP M2. Subgoal 1.1.2: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest Prf1 U' C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFrat ID1 FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID, U') NRest M' : mem (ID, U') Needed M2 : mem (ID, C) KRest H1 : mem (ID, C) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.2: Variables: Known CU ID U Needed NRest Prf ID1 FC IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (endFratPrf ID1 Prf FC) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFratPrf ID1 Prf FC) Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.2: Variables: Known CU ID U Needed NRest Prf ID1 FC IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (endFratPrf ID1 Prf FC) Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.2: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC ============================ exists C, mem (ID, C) Known
< M: apply makeUsed_member to Ela3 Mem. Subgoal 1.2: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID, U') NRest ============================ exists C, mem (ID, C) Known
< M': apply mem_after_select_before to Ela2 M. Subgoal 1.2: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID, U') NRest M' : mem (ID, U') Needed ============================ exists C, mem (ID, C) Known
< M+: apply endKnownClauses_all_mem to CP2 Ela1 M'. Subgoal 1.2: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest U' C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID, U') NRest M' : mem (ID, U') Needed M+ : mem (ID, C) ((ID1, emptyClause)::KRest) ============================ exists C, mem (ID, C) Known
< M2: case M+. Subgoal 1.2.1: Variables: Known CU U Needed NRest Prf ID1 FC KRest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID1, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID1, U') NRest M' : mem (ID1, U') Needed ============================ exists C, mem (ID1, C) Known
< apply good_clause_list_remove_all_add to _ CP with C = emptyClause. Subgoal 1.2.1: Variables: Known CU U Needed NRest Prf ID1 FC KRest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID1, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID1, U') NRest M' : mem (ID1, U') Needed H1 : good_clause_list ((ID1, emptyClause)::KRest) ============================ exists C, mem (ID1, C) Known
< apply remove_all_is to _ CP. Subgoal 1.2.1: Variables: Known CU U Needed NRest Prf ID1 FC KRest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID1, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID1, U') NRest M' : mem (ID1, U') Needed H1 : good_clause_list ((ID1, emptyClause)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest ============================ exists C, mem (ID1, C) Known
< GUL: apply endKnownClauses_good_used_list to _ _ _ CP2 Ela1. Subgoal 1.2.1: Variables: Known CU U Needed NRest Prf ID1 FC KRest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID1, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID1, U') NRest M' : mem (ID1, U') Needed H1 : good_clause_list ((ID1, emptyClause)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed ============================ exists C, mem (ID1, C) Known
< GUL: case GUL. Subgoal 1.2.1: Variables: Known CU U Needed NRest Prf ID1 FC KRest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID1, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID1, U') NRest M' : mem (ID1, U') Needed H1 : good_clause_list ((ID1, emptyClause)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ exists C, mem (ID1, C) Known
< apply GUL to Ela2 M. Subgoal 1.2.2: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest U' C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID, U') NRest M' : mem (ID, U') Needed M2 : mem (ID, C) KRest ============================ exists C, mem (ID, C) Known
< apply remove_all_mem_after to CP M2. Subgoal 1.2.2: Variables: Known CU ID U Needed NRest Prf ID1 FC KRest U' C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (endFratPrf ID1 Prf FC) CU (emptyLrat ID1 Prf) @ Mem : mem (ID, U) CU Ela1 : endKnownClauses FC Needed Ela2 : select (ID1, needed) NRest Needed Ela3 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_list is_integer Prf Is2 : is_finalClauses FC CP : remove_all Known ID1 KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID1, emptyClause)::KRest) FC M : mem (ID, U') NRest M' : mem (ID, U') Needed M2 : mem (ID, C) KRest H1 : mem (ID, C) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.3: Variables: Known E ID U KRest Needed ID1 Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (deleteFrat ID1 C Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID1 C Rest) Ela : elaborate Known (deleteFrat ID1 C Rest) ((ID1, unknown)::Needed) E @ Mem : mem (ID, U) ((ID1, unknown)::Needed) Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.3: Variables: Known E ID U KRest Needed ID1 Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteFrat ID1 C Rest) Ela : elaborate Known (deleteFrat ID1 C Rest) ((ID1, unknown)::Needed) E @ Mem : mem (ID, U) ((ID1, unknown)::Needed) Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.3: Variables: Known E ID U KRest Needed ID1 Rest C KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteFrat ID1 C Rest) ((ID1, unknown)::Needed) E @ Mem : mem (ID, U) ((ID1, unknown)::Needed) Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : select (ID1, C) KRest1 Known CP1 : checkProof KRest1 Rest ============================ exists C, mem (ID, C) Known
< Mem: case Mem. Subgoal 1.3.1: Variables: Known E KRest Needed ID1 Rest C KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteFrat ID1 C Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : select (ID1, C) KRest1 Known CP1 : checkProof KRest1 Rest ============================ exists C, mem (ID1, C) Known
< apply select_mem to CP. Subgoal 1.3.1: Variables: Known E KRest Needed ID1 Rest C KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteFrat ID1 C Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : select (ID1, C) KRest1 Known CP1 : checkProof KRest1 Rest H1 : mem (ID1, C) Known ============================ exists C, mem (ID1, C) Known
< search. Subgoal 1.3.2: Variables: Known E ID U KRest Needed ID1 Rest C KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteFrat ID1 C Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : select (ID1, C) KRest1 Known CP1 : checkProof KRest1 Rest Mem : mem (ID, U) Needed ============================ exists C, mem (ID, C) Known
< apply good_clause_list_double_select to _ _ CP Ela1. Subgoal 1.3.2: Variables: Known E ID U KRest Needed ID1 Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteFrat ID1 C Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : select (ID1, C) KRest Known CP1 : checkProof KRest Rest Mem : mem (ID, U) Needed ============================ exists C, mem (ID, C) Known
< apply select_is to _ CP. Subgoal 1.3.2: Variables: Known E ID U KRest Needed ID1 Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteFrat ID1 C Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : select (ID1, C) KRest Known CP1 : checkProof KRest Rest Mem : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest ============================ exists C, mem (ID, C) Known
< apply good_clause_list_select to _ CP. Subgoal 1.3.2: Variables: Known E ID U KRest Needed ID1 Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteFrat ID1 C Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : select (ID1, C) KRest Known CP1 : checkProof KRest Rest Mem : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest ============================ exists C, mem (ID, C) Known
< M: apply IH to _ _ _ CP1 Ela2 Mem. Subgoal 1.3.2: Variables: Known E ID U KRest Needed ID1 Rest C C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteFrat ID1 C Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : select (ID1, C) KRest Known CP1 : checkProof KRest Rest Mem : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest M : mem (ID, C1) KRest ============================ exists C, mem (ID, C) Known
< apply mem_after_select_before to CP M. Subgoal 1.3.2: Variables: Known E ID U KRest Needed ID1 Rest C C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteFrat ID1 C Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : select (ID1, C) KRest Known CP1 : checkProof KRest Rest Mem : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest M : mem (ID, C1) KRest H3 : mem (ID, C1) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.4: Variables: Known E ID U C KRest Needed ID1 Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (deleteLratProof ID1 Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteLratProof ID1 Rest) Ela : elaborate Known (deleteLratProof ID1 Rest) ((ID1, unknown)::Needed) E @ Mem : mem (ID, U) ((ID1, unknown)::Needed) Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.4: Variables: Known E ID U C KRest Needed ID1 Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (deleteLratProof ID1 Rest) Ela : elaborate Known (deleteLratProof ID1 Rest) ((ID1, unknown)::Needed) E @ Mem : mem (ID, U) ((ID1, unknown)::Needed) Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_proof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.4: Variables: Known E ID U C KRest Needed ID1 Rest C1 KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteLratProof ID1 Rest) ((ID1, unknown)::Needed) E @ Mem : mem (ID, U) ((ID1, unknown)::Needed) Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_proof Rest CP : select (ID1, C1) KRest1 Known CP1 : checkProof KRest1 Rest ============================ exists C, mem (ID, C) Known
< Mem: case Mem. Subgoal 1.4.1: Variables: Known E C KRest Needed ID1 Rest C1 KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteLratProof ID1 Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_proof Rest CP : select (ID1, C1) KRest1 Known CP1 : checkProof KRest1 Rest ============================ exists C, mem (ID1, C) Known
< apply select_mem to CP. Subgoal 1.4.1: Variables: Known E C KRest Needed ID1 Rest C1 KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteLratProof ID1 Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_proof Rest CP : select (ID1, C1) KRest1 Known CP1 : checkProof KRest1 Rest H1 : mem (ID1, C1) Known ============================ exists C, mem (ID1, C) Known
< search. Subgoal 1.4.2: Variables: Known E ID U C KRest Needed ID1 Rest C1 KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteLratProof ID1 Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_proof Rest CP : select (ID1, C1) KRest1 Known CP1 : checkProof KRest1 Rest Mem : mem (ID, U) Needed ============================ exists C, mem (ID, C) Known
< apply good_clause_list_double_select to _ _ CP Ela1. Subgoal 1.4.2: Variables: Known E ID U C KRest Needed ID1 Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteLratProof ID1 Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_proof Rest CP : select (ID1, C) KRest Known CP1 : checkProof KRest Rest Mem : mem (ID, U) Needed ============================ exists C, mem (ID, C) Known
< apply select_is to _ CP. Subgoal 1.4.2: Variables: Known E ID U C KRest Needed ID1 Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteLratProof ID1 Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_proof Rest CP : select (ID1, C) KRest Known CP1 : checkProof KRest Rest Mem : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest ============================ exists C, mem (ID, C) Known
< apply good_clause_list_select to _ CP. Subgoal 1.4.2: Variables: Known E ID U C KRest Needed ID1 Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteLratProof ID1 Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_proof Rest CP : select (ID1, C) KRest Known CP1 : checkProof KRest Rest Mem : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest ============================ exists C, mem (ID, C) Known
< M: apply IH to _ _ _ CP1 Ela2 Mem. Subgoal 1.4.2: Variables: Known E ID U C KRest Needed ID1 Rest C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteLratProof ID1 Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_proof Rest CP : select (ID1, C) KRest Known CP1 : checkProof KRest Rest Mem : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest M : mem (ID, C2) KRest ============================ exists C, mem (ID, C) Known
< apply mem_after_select_before to CP M. Subgoal 1.4.2: Variables: Known E ID U C KRest Needed ID1 Rest C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteLratProof ID1 Rest) ((ID1, unknown)::Needed) E @ Ela1 : select (ID1, C) KRest Known Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID1 Is1 : is_proof Rest CP : select (ID1, C) KRest Known CP1 : checkProof KRest Rest Mem : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest M : mem (ID, C2) KRest H3 : mem (ID, C2) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.5: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (addLrupProof ID1 C Prf Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addLrupProof ID1 C Prf Rest) Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.5: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addLrupProof ID1 C Prf Rest) Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.5: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest1 CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest1) Rest ============================ exists C, mem (ID, C) Known
< apply remove_all_unique to CP Ela1. Subgoal 1.5: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest ============================ exists C, mem (ID, C) Known
< MNR: apply makeUsed_member to Ela4 Mem. Subgoal 1.5: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest ============================ exists C, mem (ID, C) Known
< MN: apply mem_after_select_before to Ela3 MNR. Subgoal 1.5: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed ============================ exists C, mem (ID, C) Known
< apply remove_all_is to _ CP. Subgoal 1.5: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest ============================ exists C, mem (ID, C) Known
< apply good_clause_list_remove_all_add to _ CP with C = C. Subgoal 1.5: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) ============================ exists C, mem (ID, C) Known
< M: apply IH to _ _ _ CP2 Ela2 MN. Subgoal 1.5: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest U' C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) ((ID1, C)::KRest) ============================ exists C, mem (ID, C) Known
< M: case M. Subgoal 1.5.1: Variables: Known CU U KRest Needed NRest ERest Prf C ID1 Rest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID1, U') NRest MN : mem (ID1, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) ============================ exists C, mem (ID1, C) Known
< GUL: apply IH1 to _ _ _ CP2 Ela2. Subgoal 1.5.1: Variables: Known CU U KRest Needed NRest ERest Prf C ID1 Rest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID1, U') NRest MN : mem (ID1, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) GUL : good_used_list Needed ============================ exists C, mem (ID1, C) Known
< GUL: case GUL. Subgoal 1.5.1: Variables: Known CU U KRest Needed NRest ERest Prf C ID1 Rest U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID1, U') NRest MN : mem (ID1, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ exists C, mem (ID1, C) Known
< apply GUL to Ela3 MNR. Subgoal 1.5.2: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest U' C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) KRest ============================ exists C, mem (ID, C) Known
< apply remove_all_mem_after to CP M. Subgoal 1.5.2: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest U' C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) KRest H3 : mem (ID, C1) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.6: Variables: Known CU E ID U KRest Needed Rest Prf C ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (addLrupProof ID1 C Prf Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addLrupProof ID1 C Prf Rest) Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.6: Variables: Known CU E ID U KRest Needed Rest Prf C ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addLrupProof ID1 C Prf Rest) Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.6: Variables: Known CU E ID U KRest Needed Rest Prf C ID1 KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest1 CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest1) Rest ============================ exists C, mem (ID, C) Known
< apply remove_all_unique to CP Ela1. Subgoal 1.6: Variables: Known CU E ID U KRest Needed Rest Prf C ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest ============================ exists C, mem (ID, C) Known
< MN: apply mem_after_select_before to Ela3 Mem. Subgoal 1.6: Variables: Known CU E ID U KRest Needed Rest Prf C ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed ============================ exists C, mem (ID, C) Known
< apply remove_all_is to _ CP. Subgoal 1.6: Variables: Known CU E ID U KRest Needed Rest Prf C ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest ============================ exists C, mem (ID, C) Known
< apply good_clause_list_remove_all_add to _ CP with C = C. Subgoal 1.6: Variables: Known CU E ID U KRest Needed Rest Prf C ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) ============================ exists C, mem (ID, C) Known
< M: apply IH to _ _ _ CP2 Ela2 MN. Subgoal 1.6: Variables: Known CU E ID U KRest Needed Rest Prf C ID1 C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) ((ID1, C)::KRest) ============================ exists C, mem (ID, C) Known
< M: case M. Subgoal 1.6.1: Variables: Known CU E U KRest Needed Rest Prf C ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID1, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) ============================ exists C, mem (ID1, C) Known
< GUL: apply IH1 to _ _ _ CP2 Ela2. Subgoal 1.6.1: Variables: Known CU E U KRest Needed Rest Prf C ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID1, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) GUL : good_used_list Needed ============================ exists C, mem (ID1, C) Known
< GUL: case GUL. Subgoal 1.6.1: Variables: Known CU E U KRest Needed Rest Prf C ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID1, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ exists C, mem (ID1, C) Known
< apply GUL to Ela3 Mem. Subgoal 1.6.2: Variables: Known CU E ID U KRest Needed Rest Prf C ID1 C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) KRest ============================ exists C, mem (ID, C) Known
< apply remove_all_mem_after to CP M. Subgoal 1.6.2: Variables: Known CU E ID U KRest Needed Rest Prf C ID1 C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addLrupProof ID1 C Prf Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) KRest H3 : mem (ID, C1) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.7: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (addProofless ID1 C Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID1 C Rest) Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.7: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID1 C Rest) Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.7: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest KRest1 Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest1 CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest1) Rest ============================ exists C, mem (ID, C) Known
< apply remove_all_unique to CP Ela1. Subgoal 1.7: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest) Rest ============================ exists C, mem (ID, C) Known
< MNR: apply makeUsed_member to Ela5 Mem. Subgoal 1.7: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest ============================ exists C, mem (ID, C) Known
< MN: apply mem_after_select_before to Ela3 MNR. Subgoal 1.7: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed ============================ exists C, mem (ID, C) Known
< apply remove_all_is to _ CP. Subgoal 1.7: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest ============================ exists C, mem (ID, C) Known
< apply good_clause_list_remove_all_add to _ CP with C = C. Subgoal 1.7: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) ============================ exists C, mem (ID, C) Known
< M: apply IH to _ _ _ CP2 Ela2 MN. Subgoal 1.7: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest Prf1 U' C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) ((ID1, C)::KRest) ============================ exists C, mem (ID, C) Known
< M: case M. Subgoal 1.7.1: Variables: Known CU U KRest Needed NRest ERest Prf C ID1 Rest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID1, U') NRest MN : mem (ID1, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) ============================ exists C, mem (ID1, C) Known
< GUL: apply IH1 to _ _ _ CP2 Ela2. Subgoal 1.7.1: Variables: Known CU U KRest Needed NRest ERest Prf C ID1 Rest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID1, U') NRest MN : mem (ID1, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) GUL : good_used_list Needed ============================ exists C, mem (ID1, C) Known
< GUL: case GUL. Subgoal 1.7.1: Variables: Known CU U KRest Needed NRest ERest Prf C ID1 Rest Prf1 U' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID1, U') NRest MN : mem (ID1, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ exists C, mem (ID1, C) Known
< apply GUL to Ela3 MNR. Subgoal 1.7.2: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest Prf1 U' C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) KRest ============================ exists C, mem (ID, C) Known
< apply remove_all_mem_after to CP M. Subgoal 1.7.2: Variables: Known CU ID U KRest Needed NRest ERest Prf C ID1 Rest Prf1 U' C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID1, C)::KRest) Rest MNR : mem (ID, U') NRest MN : mem (ID, U') Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) KRest H3 : mem (ID, C1) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.8: Variables: Known CU E ID U KRest Needed Rest C ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (addProofless ID1 C Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID1 C Rest) Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.8: Variables: Known CU E ID U KRest Needed Rest C ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (addProofless ID1 C Rest) Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.8: Variables: Known CU E ID U KRest Needed Rest C ID1 KRest1 Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest1 CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest1) Rest ============================ exists C, mem (ID, C) Known
< apply remove_all_unique to CP Ela1. Subgoal 1.8: Variables: Known CU E ID U KRest Needed Rest C ID1 Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest ============================ exists C, mem (ID, C) Known
< MN: apply mem_after_select_before to Ela3 Mem. Subgoal 1.8: Variables: Known CU E ID U KRest Needed Rest C ID1 Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed ============================ exists C, mem (ID, C) Known
< apply remove_all_is to _ CP. Subgoal 1.8: Variables: Known CU E ID U KRest Needed Rest C ID1 Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest ============================ exists C, mem (ID, C) Known
< apply good_clause_list_remove_all_add to _ CP with C = C. Subgoal 1.8: Variables: Known CU E ID U KRest Needed Rest C ID1 Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) ============================ exists C, mem (ID, C) Known
< M: apply IH to _ _ _ CP2 Ela2 MN. Subgoal 1.8: Variables: Known CU E ID U KRest Needed Rest C ID1 Prf C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) ((ID1, C)::KRest) ============================ exists C, mem (ID, C) Known
< M: case M. Subgoal 1.8.1: Variables: Known CU E U KRest Needed Rest C ID1 Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID1, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) ============================ exists C, mem (ID1, C) Known
< GUL: apply IH1 to _ _ _ CP2 Ela2. Subgoal 1.8.1: Variables: Known CU E U KRest Needed Rest C ID1 Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID1, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) GUL : good_used_list Needed ============================ exists C, mem (ID1, C) Known
< GUL: case GUL. Subgoal 1.8.1: Variables: Known CU E U KRest Needed Rest C ID1 Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID1, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID1, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ exists C, mem (ID1, C) Known
< apply GUL to Ela3 Mem. Subgoal 1.8.2: Variables: Known CU E ID U KRest Needed Rest C ID1 Prf C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) KRest ============================ exists C, mem (ID, C) Known
< apply remove_all_mem_after to CP M. Subgoal 1.8.2: Variables: Known CU E ID U KRest Needed Rest C ID1 Prf C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (addProofless ID1 C Rest) CU E @ Mem : mem (ID, U) CU Ela1 : remove_all Known ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP : remove_all Known ID1 KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID1, C)::KRest) Rest MN : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID1, C)::KRest) M : mem (ID, C1) KRest H3 : mem (ID, C1) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.9: Variables: Known ID U KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (relocateClause From To Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Mem : mem (ID, U) ((From, needed)::NRest) Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.9: Variables: Known ID U KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Mem : mem (ID, U) ((From, needed)::NRest) Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.9.1: Variables: Known ID U KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Mem : mem (ID, U) ((From, needed)::NRest) Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest ============================ exists C, mem (ID, C) Known
< Mem: case Mem. Subgoal 1.9.1.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest ============================ exists C, mem (From, C) Known
< M: apply select_mem to CP2. Subgoal 1.9.1.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest M : mem (From, C1) KRest1 ============================ exists C, mem (From, C) Known
< apply remove_all_mem_after to CP1 M. Subgoal 1.9.1.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest M : mem (From, C1) KRest1 H1 : mem (From, C1) Known ============================ exists C, mem (From, C) Known
< search. Subgoal 1.9.1.2: Variables: Known ID U KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest ============================ exists C, mem (ID, C) Known
< apply remove_all_unique to CP1 Ela1. Subgoal 1.9.1.2: Variables: Known ID U KRest C KRest2 Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest ============================ exists C, mem (ID, C) Known
< GCLR: apply good_clause_list_remove_all to _ Ela1. Subgoal 1.9.1.2: Variables: Known ID U KRest C KRest2 Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest ============================ exists C, mem (ID, C) Known
< apply good_clause_list_selects to _ Ela2 CP2. Subgoal 1.9.1.2: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest ============================ exists C, mem (ID, C) Known
< Mem': apply mem_after_select_before to Ela4 Mem. Subgoal 1.9.1.2: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed ============================ exists C, mem (ID, C) Known
< apply remove_all_is to _ Ela1. Subgoal 1.9.1.2: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest ============================ exists C, mem (ID, C) Known
< apply select_is to _ Ela2. Subgoal 1.9.1.2: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 ============================ exists C, mem (ID, C) Known
< Is': apply select_is_picked to _ Ela2. Subgoal 1.9.1.2: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_pair is_integer is_clause (From, C1) ============================ exists C, mem (ID, C) Known
< case Is'. Subgoal 1.9.1.2: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 ============================ exists C, mem (ID, C) Known
< GCLS: apply good_clause_list_select to GCLR Ela2. Subgoal 1.9.1.2: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 ============================ exists C, mem (ID, C) Known
< apply good_clause_list_add to GCLS _ with ID = To C = C1. Subgoal 1.9.1.2.1: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 ============================ (exists C', mem (To, C') KRest3) -> false
< intros M. Subgoal 1.9.1.2.1: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 M : exists C', mem (To, C') KRest3 ============================ false
< M: case M. Subgoal 1.9.1.2.1: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 C' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 M : mem (To, C') KRest3 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 1.9.1.2.1: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 C' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 M : mem (To, C') KRest3 M' : mem (To, C') KRest ============================ false
< apply remove_all_no_mem to Ela1 M'. Subgoal 1.9.1.2: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) ============================ exists C, mem (ID, C) Known
< IsNeeded: apply elaboration_is_needed to _ _ _ Ela3. Subgoal 1.9.1.2: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed ============================ exists C, mem (ID, C) Known
< apply mem_needed_is to IsNeeded Mem'. Subgoal 1.9.1.2: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (ID, U) ============================ exists C, mem (ID, C) Known
< M: apply IH to _ _ _ CP3 Ela3 Mem'. Subgoal 1.9.1.2: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (ID, U) M : mem (ID, C2) ((To, C1)::KRest3) ============================ exists C, mem (ID, C) Known
< M: case M. Subgoal 1.9.1.2.2: Variables: Known U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (To, U) NRest GCLR : good_clause_list KRest Mem' : mem (To, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (To, U) ============================ exists C, mem (To, C) Known
< GUL: apply IH1 to _ _ _ CP3 Ela3. Subgoal 1.9.1.2.2: Variables: Known U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (To, U) NRest GCLR : good_clause_list KRest Mem' : mem (To, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (To, U) GUL : good_used_list Needed ============================ exists C, mem (To, C) Known
< GUL: case GUL. Subgoal 1.9.1.2.2: Variables: Known U KRest Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (To, U) NRest GCLR : good_clause_list KRest Mem' : mem (To, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (To, U) GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ exists C, mem (To, C) Known
< apply GUL to Ela4 _. Subgoal 1.9.1.2.3: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (ID, U) M : mem (ID, C2) KRest3 ============================ exists C, mem (ID, C) Known
< M': apply mem_after_select_before to Ela2 M. Subgoal 1.9.1.2.3: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (ID, U) M : mem (ID, C2) KRest3 M' : mem (ID, C2) KRest ============================ exists C, mem (ID, C) Known
< apply remove_all_mem_after to Ela1 M'. Subgoal 1.9.1.2.3: Variables: Known ID U KRest Needed ERest To From NRest Rest C1 KRest3 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (ID, U) M : mem (ID, C2) KRest3 M' : mem (ID, C2) KRest H7 : mem (ID, C2) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.9.2: Variables: Known ID U KRest C KRest2 Needed ERest To NRest Rest C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause To To Rest) ((To, needed)::NRest) (relocateClause To To ERest) @ Mem : mem (ID, U) ((To, needed)::NRest) Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer To Is1 : is_integer To Is2 : is_proof Rest CP : mem (To, C1) Known CP1 : checkProof Known Rest ============================ exists C, mem (ID, C) Known
< M: apply select_mem to Ela2. Subgoal 1.9.2: Variables: Known ID U KRest C KRest2 Needed ERest To NRest Rest C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause To To Rest) ((To, needed)::NRest) (relocateClause To To ERest) @ Mem : mem (ID, U) ((To, needed)::NRest) Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer To Is1 : is_integer To Is2 : is_proof Rest CP : mem (To, C1) Known CP1 : checkProof Known Rest M : mem (To, C) KRest ============================ exists C, mem (ID, C) Known
< apply remove_all_no_mem to Ela1 M. Subgoal 1.10: Variables: Known CU E ID U Rest ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (relocateClause ID1 ID1 Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause ID1 ID1 Rest) Ela : elaborate Known (relocateClause ID1 ID1 Rest) CU E @ Mem : mem (ID, U) CU Ela1 : elaborate Known Rest CU E * ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.10: Variables: Known CU E ID U Rest ID1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause ID1 ID1 Rest) Ela : elaborate Known (relocateClause ID1 ID1 Rest) CU E @ Mem : mem (ID, U) CU Ela1 : elaborate Known Rest CU E * Is : is_integer ID1 Is1 : is_integer ID1 Is2 : is_proof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.10.1: Variables: Known CU E ID U Rest ID1 KRest C KRest2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause ID1 ID1 Rest) CU E @ Mem : mem (ID, U) CU Ela1 : elaborate Known Rest CU E * Is : is_integer ID1 Is1 : is_integer ID1 Is2 : is_proof Rest CP : ID1 = ID1 -> false CP1 : remove_all Known ID1 KRest CP2 : select (ID1, C) KRest2 KRest CP3 : checkProof ((ID1, C)::KRest2) Rest ============================ exists C, mem (ID, C) Known
< apply CP to _. Subgoal 1.10.2: Variables: Known CU E ID U Rest ID1 C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause ID1 ID1 Rest) CU E @ Mem : mem (ID, U) CU Ela1 : elaborate Known Rest CU E * Is : is_integer ID1 Is1 : is_integer ID1 Is2 : is_proof Rest CP : mem (ID1, C) Known CP1 : checkProof Known Rest ============================ exists C, mem (ID, C) Known
< apply IH to _ _ _ CP1 Ela1 Mem. Subgoal 1.10.2: Variables: Known CU E ID U Rest ID1 C C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause ID1 ID1 Rest) CU E @ Mem : mem (ID, U) CU Ela1 : elaborate Known Rest CU E * Is : is_integer ID1 Is1 : is_integer ID1 Is2 : is_proof Rest CP : mem (ID1, C) Known CP1 : checkProof Known Rest H1 : mem (ID, C1) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.11: Variables: Known E ID U KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (relocateClause From To Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Mem : mem (ID, U) ((From, unknown)::NRest) Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.11: Variables: Known E ID U KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Mem : mem (ID, U) ((From, unknown)::NRest) Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.11.1: Variables: Known E ID U KRest C KRest2 Needed NRest From Rest To KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Mem : mem (ID, U) ((From, unknown)::NRest) Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest ============================ exists C, mem (ID, C) Known
< Mem: case Mem. Subgoal 1.11.1.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest ============================ exists C, mem (From, C) Known
< M: apply select_mem to CP2. Subgoal 1.11.1.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest M : mem (From, C1) KRest1 ============================ exists C, mem (From, C) Known
< apply remove_all_mem_after to CP1 M. Subgoal 1.11.1.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest M : mem (From, C1) KRest1 H1 : mem (From, C1) Known ============================ exists C, mem (From, C) Known
< search. Subgoal 1.11.1.2: Variables: Known E ID U KRest C KRest2 Needed NRest From Rest To KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest ============================ exists C, mem (ID, C) Known
< apply remove_all_unique to CP1 Ela1. Subgoal 1.11.1.2: Variables: Known E ID U KRest C KRest2 Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest ============================ exists C, mem (ID, C) Known
< GCLR: apply good_clause_list_remove_all to _ Ela1. Subgoal 1.11.1.2: Variables: Known E ID U KRest C KRest2 Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest ============================ exists C, mem (ID, C) Known
< apply good_clause_list_selects to _ Ela2 CP2. Subgoal 1.11.1.2: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest ============================ exists C, mem (ID, C) Known
< Mem': apply mem_after_select_before to Ela4 Mem. Subgoal 1.11.1.2: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed ============================ exists C, mem (ID, C) Known
< apply remove_all_is to _ Ela1. Subgoal 1.11.1.2: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest ============================ exists C, mem (ID, C) Known
< apply select_is to _ Ela2. Subgoal 1.11.1.2: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 ============================ exists C, mem (ID, C) Known
< Is': apply select_is_picked to _ Ela2. Subgoal 1.11.1.2: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_pair is_integer is_clause (From, C1) ============================ exists C, mem (ID, C) Known
< case Is'. Subgoal 1.11.1.2: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 ============================ exists C, mem (ID, C) Known
< GCLS: apply good_clause_list_select to GCLR Ela2. Subgoal 1.11.1.2: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 ============================ exists C, mem (ID, C) Known
< apply good_clause_list_add to GCLS _ with ID = To C = C1. Subgoal 1.11.1.2.1: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 ============================ (exists C', mem (To, C') KRest3) -> false
< intros M. Subgoal 1.11.1.2.1: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 M : exists C', mem (To, C') KRest3 ============================ false
< M: case M. Subgoal 1.11.1.2.1: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 C' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 M : mem (To, C') KRest3 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 1.11.1.2.1: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 C' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 M : mem (To, C') KRest3 M' : mem (To, C') KRest ============================ false
< apply remove_all_no_mem to Ela1 M'. Subgoal 1.11.1.2: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) ============================ exists C, mem (ID, C) Known
< IsNeeded: apply elaboration_is_needed to _ _ _ Ela3. Subgoal 1.11.1.2: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed ============================ exists C, mem (ID, C) Known
< apply mem_needed_is to IsNeeded Mem'. Subgoal 1.11.1.2: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (ID, U) ============================ exists C, mem (ID, C) Known
< M: apply IH to _ _ _ CP3 Ela3 Mem'. Subgoal 1.11.1.2: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (ID, U) M : mem (ID, C2) ((To, C1)::KRest3) ============================ exists C, mem (ID, C) Known
< M: case M. Subgoal 1.11.1.2.2: Variables: Known E U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (To, U) NRest GCLR : good_clause_list KRest Mem' : mem (To, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (To, U) ============================ exists C, mem (To, C) Known
< GUL: apply IH1 to _ _ _ CP3 Ela3. Subgoal 1.11.1.2.2: Variables: Known E U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (To, U) NRest GCLR : good_clause_list KRest Mem' : mem (To, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (To, U) GUL : good_used_list Needed ============================ exists C, mem (To, C) Known
< GUL: case GUL. Subgoal 1.11.1.2.2: Variables: Known E U KRest Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (To, U) NRest GCLR : good_clause_list KRest Mem' : mem (To, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (To, U) GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ exists C, mem (To, C) Known
< apply GUL to Ela4 _. Subgoal 1.11.1.2.3: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (ID, U) M : mem (ID, C2) KRest3 ============================ exists C, mem (ID, C) Known
< M': apply mem_after_select_before to Ela2 M. Subgoal 1.11.1.2.3: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (ID, U) M : mem (ID, C2) KRest3 M' : mem (ID, C2) KRest ============================ exists C, mem (ID, C) Known
< apply remove_all_mem_after to Ela1 M'. Subgoal 1.11.1.2.3: Variables: Known E ID U KRest Needed NRest From Rest To C1 KRest3 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest Mem : mem (ID, U) NRest GCLR : good_clause_list KRest Mem' : mem (ID, U) Needed H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest3 H3 : is_integer From H4 : is_clause C1 GCLS : good_clause_list KRest3 H5 : good_clause_list ((To, C1)::KRest3) IsNeeded : is_list (is_pair is_integer is_clauseUsedness) Needed H6 : is_pair is_integer is_clauseUsedness (ID, U) M : mem (ID, C2) KRest3 M' : mem (ID, C2) KRest H7 : mem (ID, C2) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.11.2: Variables: Known E ID U KRest C KRest2 Needed NRest Rest To C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause To To Rest) ((To, unknown)::NRest) E @ Mem : mem (ID, U) ((To, unknown)::NRest) Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer To Is1 : is_integer To Is2 : is_proof Rest CP : mem (To, C1) Known CP1 : checkProof Known Rest ============================ exists C, mem (ID, C) Known
< M: apply select_mem to Ela2. Subgoal 1.11.2: Variables: Known E ID U KRest C KRest2 Needed NRest Rest To C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (relocateClause To To Rest) ((To, unknown)::NRest) E @ Mem : mem (ID, U) ((To, unknown)::NRest) Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer To Is1 : is_integer To Is2 : is_proof Rest CP : mem (To, C1) Known CP1 : checkProof Known Rest M : mem (To, C) KRest ============================ exists C, mem (ID, C) Known
< apply remove_all_no_mem to Ela1 M. Subgoal 1.12: Variables: Known CU E ID U Rest Comment IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (commentProof Comment Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (commentProof Comment Rest) Ela : elaborate Known (commentProof Comment Rest) CU E @ Mem : mem (ID, U) CU Ela1 : elaborate Known Rest CU E * ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.12: Variables: Known CU E ID U Rest Comment IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known (commentProof Comment Rest) Ela : elaborate Known (commentProof Comment Rest) CU E @ Mem : mem (ID, U) CU Ela1 : elaborate Known Rest CU E * Is : is_string Comment Is1 : is_proof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.12: Variables: Known CU E ID U Rest Comment IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (commentProof Comment Rest) CU E @ Mem : mem (ID, U) CU Ela1 : elaborate Known Rest CU E * Is : is_string Comment Is1 : is_proof Rest CP : checkProof Known Rest ============================ exists C, mem (ID, C) Known
< apply IH to _ _ _ CP Ela1 _. Subgoal 1.12: Variables: Known CU E ID U Rest Comment C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (commentProof Comment Rest) CU E @ Mem : mem (ID, U) CU Ela1 : elaborate Known Rest CU E * Is : is_string Comment Is1 : is_proof Rest CP : checkProof Known Rest H1 : mem (ID, C) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.13: Variables: Known CU E ID U PT IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof <unknown I proof> GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ Mem : mem (ID, U) CU Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * ============================ exists C, mem (ID, C) Known
< Is: apply proj_proof_is to Ela1 IsP IsKnown _. Subgoal 1.13: Variables: Known CU E ID U PT IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof <unknown I proof> GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ Mem : mem (ID, U) CU Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * Is : is_proof PT ============================ exists C, mem (ID, C) Known
< CP': apply proj_checkProof to Ela1 CP _ _. Subgoal 1.13: Variables: Known CU E ID U PT IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof <unknown I proof> GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ Mem : mem (ID, U) CU Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * Is : is_proof PT CP' : checkProof Known PT ============================ exists C, mem (ID, C) Known
< apply IH to _ _ _ _ Ela2 Mem. Subgoal 1.13: Variables: Known CU E ID U PT C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof <unknown I proof> GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ Mem : mem (ID, U) CU Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * Is : is_proof PT CP' : checkProof Known PT H1 : mem (ID, C) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 2.1: Variables: Known CU Needed NRest Prf ID FC IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (endFrat ID FC) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU ============================ good_used_list CU
< case IsP. Subgoal 2.1: Variables: Known CU Needed NRest Prf ID FC IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC ============================ good_used_list CU
< CP: case CP. Subgoal 2.1: Variables: Known CU Needed NRest Prf ID FC KRest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC ============================ good_used_list CU
< apply good_clause_list_remove_all_add to _ CP with C = emptyClause. Subgoal 2.1: Variables: Known CU Needed NRest Prf ID FC KRest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC H3 : good_clause_list ((ID, emptyClause)::KRest) ============================ good_used_list CU
< apply remove_all_is to _ CP. Subgoal 2.1: Variables: Known CU Needed NRest Prf ID FC KRest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC H3 : good_clause_list ((ID, emptyClause)::KRest) H4 : is_list (is_pair is_integer is_clause) KRest ============================ good_used_list CU
< apply endKnownClauses_good_used_list to _ _ _ CP2 Ela1. Subgoal 2.1: Variables: Known CU Needed NRest Prf ID FC KRest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC H3 : good_clause_list ((ID, emptyClause)::KRest) H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_used_list Needed ============================ good_used_list CU
< apply good_used_list_select to _ Ela2. Subgoal 2.1: Variables: Known CU Needed NRest Prf ID FC KRest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC H3 : good_clause_list ((ID, emptyClause)::KRest) H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_used_list Needed H6 : good_used_list NRest ============================ good_used_list CU
< apply makeUsed_good_used_list to _ Ela4. Subgoal 2.1: Variables: Known CU Needed NRest Prf ID FC KRest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf1 CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC H3 : good_clause_list ((ID, emptyClause)::KRest) H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_used_list Needed H6 : good_used_list NRest H7 : good_used_list CU ============================ good_used_list CU
< search. Subgoal 2.2: Variables: Known CU Needed NRest Prf ID FC IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (endFratPrf ID Prf FC) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : makeUsed NRest Prf CU ============================ good_used_list CU
< case IsP. Subgoal 2.2: Variables: Known CU Needed NRest Prf ID FC IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC ============================ good_used_list CU
< CP: case CP. Subgoal 2.2: Variables: Known CU Needed NRest Prf ID FC KRest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC ============================ good_used_list CU
< apply good_clause_list_remove_all_add to _ CP with C = emptyClause. Subgoal 2.2: Variables: Known CU Needed NRest Prf ID FC KRest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC H4 : good_clause_list ((ID, emptyClause)::KRest) ============================ good_used_list CU
< apply remove_all_is to _ CP. Subgoal 2.2: Variables: Known CU Needed NRest Prf ID FC KRest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC H4 : good_clause_list ((ID, emptyClause)::KRest) H5 : is_list (is_pair is_integer is_clause) KRest ============================ good_used_list CU
< apply endKnownClauses_good_used_list to _ _ _ CP2 Ela1. Subgoal 2.2: Variables: Known CU Needed NRest Prf ID FC KRest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC H4 : good_clause_list ((ID, emptyClause)::KRest) H5 : is_list (is_pair is_integer is_clause) KRest H6 : good_used_list Needed ============================ good_used_list CU
< apply good_used_list_select to _ Ela2. Subgoal 2.2: Variables: Known CU Needed NRest Prf ID FC KRest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC H4 : good_clause_list ((ID, emptyClause)::KRest) H5 : is_list (is_pair is_integer is_clause) KRest H6 : good_used_list Needed H7 : good_used_list NRest ============================ good_used_list CU
< apply makeUsed_good_used_list to _ Ela3. Subgoal 2.2: Variables: Known CU Needed NRest Prf ID FC KRest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP : remove_all Known ID KRest CP1 : rupProof Known emptyClause Prf CP2 : checkFinalClauses ((ID, emptyClause)::KRest) FC H4 : good_clause_list ((ID, emptyClause)::KRest) H5 : is_list (is_pair is_integer is_clause) KRest H6 : good_used_list Needed H7 : good_used_list NRest H8 : good_used_list CU ============================ good_used_list CU
< search. Subgoal 2.3: Variables: Known E KRest Needed ID Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (deleteFrat ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * ============================ good_used_list ((ID, unknown)::Needed)
< case IsP. Subgoal 2.3: Variables: Known E KRest Needed ID Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest ============================ good_used_list ((ID, unknown)::Needed)
< CP: case CP. Subgoal 2.3: Variables: Known E KRest Needed ID Rest C KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest1 Known CP1 : checkProof KRest1 Rest ============================ good_used_list ((ID, unknown)::Needed)
< apply good_clause_list_selects to _ CP Ela1. Subgoal 2.3: Variables: Known E KRest Needed ID Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest ============================ good_used_list ((ID, unknown)::Needed)
< apply select_is to _ Ela1. Subgoal 2.3: Variables: Known E KRest Needed ID Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest ============================ good_used_list ((ID, unknown)::Needed)
< apply good_clause_list_select to _ CP. Subgoal 2.3: Variables: Known E KRest Needed ID Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest ============================ good_used_list ((ID, unknown)::Needed)
< GUL: apply IH1 to _ _ _ CP1 Ela2. Subgoal 2.3: Variables: Known E KRest Needed ID Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed ============================ good_used_list ((ID, unknown)::Needed)
< unfold . Subgoal 2.3: Variables: Known E KRest Needed ID Rest C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed ============================ forall ID1 U1 CURest U2, select (ID1, U1) CURest ((ID, unknown)::Needed) -> mem (ID1, U2) CURest -> false
< intros S M. Subgoal 2.3: Variables: Known E KRest Needed ID Rest C ID1 U1 CURest U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed S : select (ID1, U1) CURest ((ID, unknown)::Needed) M : mem (ID1, U2) CURest ============================ false
< S: case S. Subgoal 2.3.1: Variables: Known E KRest Needed ID Rest C U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed M : mem (ID, U2) Needed ============================ false
< MKR: apply IH to _ _ _ CP1 Ela2 M. Subgoal 2.3.1: Variables: Known E KRest Needed ID Rest C U2 C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed M : mem (ID, U2) Needed MKR : mem (ID, C1) KRest ============================ false
< GCL: case GCL. Subgoal 2.3.1: Variables: Known E KRest Needed ID Rest C U2 C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed M : mem (ID, U2) Needed MKR : mem (ID, C1) KRest GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to Ela1 MKR. Subgoal 2.3.2: Variables: Known E KRest Needed ID Rest C ID1 U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed M : mem (ID1, U2) ((ID, unknown)::L1) S : select (ID1, U1) L1 Needed ============================ false
< M: case M. Subgoal 2.3.2.1: Variables: Known E KRest Needed ID Rest C U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed S : select (ID, U1) L1 Needed ============================ false
< Mem: apply select_mem to S. Subgoal 2.3.2.1: Variables: Known E KRest Needed ID Rest C U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed S : select (ID, U1) L1 Needed Mem : mem (ID, U1) Needed ============================ false
< MKR: apply IH to _ _ _ CP1 Ela2 Mem. Subgoal 2.3.2.1: Variables: Known E KRest Needed ID Rest C U1 L1 C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed S : select (ID, U1) L1 Needed Mem : mem (ID, U1) Needed MKR : mem (ID, C1) KRest ============================ false
< GCL: case GCL. Subgoal 2.3.2.1: Variables: Known E KRest Needed ID Rest C U1 L1 C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed S : select (ID, U1) L1 Needed Mem : mem (ID, U1) Needed MKR : mem (ID, C1) KRest GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to Ela1 MKR. Subgoal 2.3.2.2: Variables: Known E KRest Needed ID Rest C ID1 U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest GUL : good_used_list Needed S : select (ID1, U1) L1 Needed M : mem (ID1, U2) L1 ============================ false
< GUL: case GUL. Subgoal 2.3.2.2: Variables: Known E KRest Needed ID Rest C ID1 U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest S : select (ID1, U1) L1 Needed M : mem (ID1, U2) L1 GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ false
< apply GUL to S M. Subgoal 2.4: Variables: Known E C KRest Needed ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (deleteLratProof ID Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * ============================ good_used_list ((ID, unknown)::Needed)
< case IsP. Subgoal 2.4: Variables: Known E C KRest Needed ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest ============================ good_used_list ((ID, unknown)::Needed)
< CP: case CP. Subgoal 2.4: Variables: Known E C KRest Needed ID Rest C1 KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C1) KRest1 Known CP1 : checkProof KRest1 Rest ============================ good_used_list ((ID, unknown)::Needed)
< apply good_clause_list_selects to _ CP Ela1. Subgoal 2.4: Variables: Known E C KRest Needed ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest ============================ good_used_list ((ID, unknown)::Needed)
< apply good_clause_list_select to _ Ela1. Subgoal 2.4: Variables: Known E C KRest Needed ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest ============================ good_used_list ((ID, unknown)::Needed)
< apply select_is to _ Ela1. Subgoal 2.4: Variables: Known E C KRest Needed ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest ============================ good_used_list ((ID, unknown)::Needed)
< GUL: apply IH1 to _ _ _ CP1 Ela2. Subgoal 2.4: Variables: Known E C KRest Needed ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed ============================ good_used_list ((ID, unknown)::Needed)
< unfold . Subgoal 2.4: Variables: Known E C KRest Needed ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed ============================ forall ID1 U1 CURest U2, select (ID1, U1) CURest ((ID, unknown)::Needed) -> mem (ID1, U2) CURest -> false
< intros S M. Subgoal 2.4: Variables: Known E C KRest Needed ID Rest ID1 U1 CURest U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed S : select (ID1, U1) CURest ((ID, unknown)::Needed) M : mem (ID1, U2) CURest ============================ false
< S: case S. Subgoal 2.4.1: Variables: Known E C KRest Needed ID Rest U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed M : mem (ID, U2) Needed ============================ false
< MKR: apply IH to _ _ _ CP1 Ela2 M. Subgoal 2.4.1: Variables: Known E C KRest Needed ID Rest U2 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed M : mem (ID, U2) Needed MKR : mem (ID, C2) KRest ============================ false
< GCL: case GCL. Subgoal 2.4.1: Variables: Known E C KRest Needed ID Rest U2 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed M : mem (ID, U2) Needed MKR : mem (ID, C2) KRest GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to Ela1 MKR. Subgoal 2.4.2: Variables: Known E C KRest Needed ID Rest ID1 U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed M : mem (ID1, U2) ((ID, unknown)::L1) S : select (ID1, U1) L1 Needed ============================ false
< M: case M. Subgoal 2.4.2.1: Variables: Known E C KRest Needed ID Rest U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed S : select (ID, U1) L1 Needed ============================ false
< Mem: apply select_mem to S. Subgoal 2.4.2.1: Variables: Known E C KRest Needed ID Rest U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed S : select (ID, U1) L1 Needed Mem : mem (ID, U1) Needed ============================ false
< MKR: apply IH to _ _ _ CP1 Ela2 Mem. Subgoal 2.4.2.1: Variables: Known E C KRest Needed ID Rest U1 L1 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed S : select (ID, U1) L1 Needed Mem : mem (ID, U1) Needed MKR : mem (ID, C2) KRest ============================ false
< GCL: case GCL. Subgoal 2.4.2.1: Variables: Known E C KRest Needed ID Rest U1 L1 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed S : select (ID, U1) L1 Needed Mem : mem (ID, U1) Needed MKR : mem (ID, C2) KRest GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to Ela1 MKR. Subgoal 2.4.2.2: Variables: Known E C KRest Needed ID Rest ID1 U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list Needed S : select (ID1, U1) L1 Needed M : mem (ID1, U2) L1 ============================ false
< GUL: case GUL. Subgoal 2.4.2.2: Variables: Known E C KRest Needed ID Rest ID1 U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed E * H1 : is_integer ID H2 : is_proof Rest CP : select (ID, C) KRest Known CP1 : checkProof KRest Rest H3 : good_clause_list KRest H4 : is_list (is_pair is_integer is_clause) KRest S : select (ID1, U1) L1 Needed M : mem (ID1, U2) L1 GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ false
< apply GUL to S M. Subgoal 2.5: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (addLrupProof ID C Prf Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU ============================ good_used_list CU
< case IsP. Subgoal 2.5: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest ============================ good_used_list CU
< CP: case CP. Subgoal 2.5: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest1 CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest1) Rest ============================ good_used_list CU
< apply remove_all_is to _ CP. Subgoal 2.5: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest1 CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest1) Rest H5 : is_list (is_pair is_integer is_clause) KRest1 ============================ good_used_list CU
< apply good_clause_list_remove_all_add to _ CP with C = C. Subgoal 2.5: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest1 CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest1) Rest H5 : is_list (is_pair is_integer is_clause) KRest1 H6 : good_clause_list ((ID, C)::KRest1) ============================ good_used_list CU
< apply remove_all_unique to CP Ela1. Subgoal 2.5: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H5 : is_list (is_pair is_integer is_clause) KRest H6 : good_clause_list ((ID, C)::KRest) ============================ good_used_list CU
< GUL: apply IH1 to _ _ _ CP2 Ela2. Subgoal 2.5: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H5 : is_list (is_pair is_integer is_clause) KRest H6 : good_clause_list ((ID, C)::KRest) GUL : good_used_list Needed ============================ good_used_list CU
< apply good_used_list_select to _ Ela3. Subgoal 2.5: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H5 : is_list (is_pair is_integer is_clause) KRest H6 : good_clause_list ((ID, C)::KRest) GUL : good_used_list Needed H7 : good_used_list NRest ============================ good_used_list CU
< apply makeUsed_good_used_list to _ Ela4. Subgoal 2.5: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H5 : is_list (is_pair is_integer is_clause) KRest H6 : good_clause_list ((ID, C)::KRest) GUL : good_used_list Needed H7 : good_used_list NRest H8 : good_used_list CU ============================ good_used_list CU
< search. Subgoal 2.6: Variables: Known CU E KRest Needed Rest Prf C ID IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (addLrupProof ID C Prf Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed ============================ good_used_list CU
< case IsP. Subgoal 2.6: Variables: Known CU E KRest Needed Rest Prf C ID IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest ============================ good_used_list CU
< CP: case CP. Subgoal 2.6: Variables: Known CU E KRest Needed Rest Prf C ID KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest1 CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest1) Rest ============================ good_used_list CU
< apply remove_all_is to _ CP. Subgoal 2.6: Variables: Known CU E KRest Needed Rest Prf C ID KRest1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest1 CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest1) Rest H5 : is_list (is_pair is_integer is_clause) KRest1 ============================ good_used_list CU
< apply remove_all_unique to CP Ela1. Subgoal 2.6: Variables: Known CU E KRest Needed Rest Prf C ID IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H5 : is_list (is_pair is_integer is_clause) KRest ============================ good_used_list CU
< apply good_clause_list_remove_all_add to _ CP with C = C. Subgoal 2.6: Variables: Known CU E KRest Needed Rest Prf C ID IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H5 : is_list (is_pair is_integer is_clause) KRest H6 : good_clause_list ((ID, C)::KRest) ============================ good_used_list CU
< GUL: apply IH1 to _ _ _ CP2 Ela2. Subgoal 2.6: Variables: Known CU E KRest Needed Rest Prf C ID IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H5 : is_list (is_pair is_integer is_clause) KRest H6 : good_clause_list ((ID, C)::KRest) GUL : good_used_list Needed ============================ good_used_list CU
< apply good_used_list_select to _ Ela3. Subgoal 2.6: Variables: Known CU E KRest Needed Rest Prf C ID IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_list is_integer Prf H4 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H5 : is_list (is_pair is_integer is_clause) KRest H6 : good_clause_list ((ID, C)::KRest) GUL : good_used_list Needed H7 : good_used_list CU ============================ good_used_list CU
< search. Subgoal 2.7: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (addProofless ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU ============================ good_used_list CU
< case IsP. Subgoal 2.7: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest ============================ good_used_list CU
< CP: case CP. Subgoal 2.7: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest KRest1 Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest1 CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID, C)::KRest1) Rest ============================ good_used_list CU
< apply remove_all_is to _ CP. Subgoal 2.7: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest KRest1 Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest1 CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID, C)::KRest1) Rest H4 : is_list (is_pair is_integer is_clause) KRest1 ============================ good_used_list CU
< apply good_clause_list_remove_all_add to _ CP with C = C. Subgoal 2.7: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest KRest1 Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest1 CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID, C)::KRest1) Rest H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : good_clause_list ((ID, C)::KRest1) ============================ good_used_list CU
< apply remove_all_unique to CP Ela1. Subgoal 2.7: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID, C)::KRest) Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list ((ID, C)::KRest) ============================ good_used_list CU
< GUL: apply IH1 to _ _ _ CP2 Ela2. Subgoal 2.7: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID, C)::KRest) Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list ((ID, C)::KRest) GUL : good_used_list Needed ============================ good_used_list CU
< apply good_used_list_select to _ Ela3. Subgoal 2.7: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID, C)::KRest) Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list ((ID, C)::KRest) GUL : good_used_list Needed H6 : good_used_list NRest ============================ good_used_list CU
< apply makeUsed_good_used_list to _ Ela5. Subgoal 2.7: Variables: Known CU KRest Needed NRest ERest Prf C ID Rest Prf1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf1 CP2 : checkProof ((ID, C)::KRest) Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list ((ID, C)::KRest) GUL : good_used_list Needed H6 : good_used_list NRest H7 : good_used_list CU ============================ good_used_list CU
< search. Subgoal 2.8: Variables: Known CU E KRest Needed Rest C ID IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (addProofless ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed ============================ good_used_list CU
< case IsP. Subgoal 2.8: Variables: Known CU E KRest Needed Rest C ID IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest ============================ good_used_list CU
< CP: case CP. Subgoal 2.8: Variables: Known CU E KRest Needed Rest C ID KRest1 Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest1 CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest1) Rest ============================ good_used_list CU
< apply remove_all_is to _ CP. Subgoal 2.8: Variables: Known CU E KRest Needed Rest C ID KRest1 Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest1 CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest1) Rest H4 : is_list (is_pair is_integer is_clause) KRest1 ============================ good_used_list CU
< apply remove_all_unique to CP Ela1. Subgoal 2.8: Variables: Known CU E KRest Needed Rest C ID Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H4 : is_list (is_pair is_integer is_clause) KRest ============================ good_used_list CU
< apply good_clause_list_remove_all_add to _ CP with C = C. Subgoal 2.8: Variables: Known CU E KRest Needed Rest C ID Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list ((ID, C)::KRest) ============================ good_used_list CU
< GUL: apply IH1 to _ _ _ CP2 Ela2. Subgoal 2.8: Variables: Known CU E KRest Needed Rest C ID Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list ((ID, C)::KRest) GUL : good_used_list Needed ============================ good_used_list CU
< apply good_used_list_select to _ Ela3. Subgoal 2.8: Variables: Known CU E KRest Needed Rest C ID Prf IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP : remove_all Known ID KRest CP1 : rupProof Known C Prf CP2 : checkProof ((ID, C)::KRest) Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list ((ID, C)::KRest) GUL : good_used_list Needed H6 : good_used_list CU ============================ good_used_list CU
< search. Subgoal 2.9: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (relocateClause From To Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed ============================ good_used_list ((From, needed)::NRest)
< case IsP. Subgoal 2.9: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest ============================ good_used_list ((From, needed)::NRest)
< CP: case CP. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest ============================ good_used_list ((From, needed)::NRest)
< apply remove_all_unique to CP1 Ela1. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest ============================ good_used_list ((From, needed)::NRest)
< apply remove_all_is to _ CP1. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest H4 : is_list (is_pair is_integer is_clause) KRest ============================ good_used_list ((From, needed)::NRest)
< GCL': apply good_clause_list_remove_all to _ Ela1. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest ============================ good_used_list ((From, needed)::NRest)
< apply good_clause_list_selects to _ CP2 Ela2. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest ============================ good_used_list ((From, needed)::NRest)
< apply select_is to _ CP2. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 ============================ good_used_list ((From, needed)::NRest)
< GCLS: apply good_clause_list_select to _ CP2. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 ============================ good_used_list ((From, needed)::NRest)
< apply good_clause_list_add to GCLS _ with ID = To C = C. Subgoal 2.9.1.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 ============================ (exists C', mem (To, C') KRest2) -> false
< intros M. Subgoal 2.9.1.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 M : exists C', mem (To, C') KRest2 ============================ false
< M: case M. Subgoal 2.9.1.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest C' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 M : mem (To, C') KRest2 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 2.9.1.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest C' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 M : mem (To, C') KRest2 M' : mem (To, C') KRest ============================ false
< apply remove_all_no_mem to Ela1 M'. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) ============================ good_used_list ((From, needed)::NRest)
< IsPr: apply select_is_picked to _ Ela2. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) IsPr : is_pair is_integer is_clause (From, C) ============================ good_used_list ((From, needed)::NRest)
< case IsPr. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C ============================ good_used_list ((From, needed)::NRest)
< GUL: apply IH1 to _ _ _ CP3 Ela3. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed ============================ good_used_list ((From, needed)::NRest)
< GUL': apply good_used_list_select to _ Ela4. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest ============================ good_used_list ((From, needed)::NRest)
< unfold . Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest ============================ forall ID U1 CURest U2, select (ID, U1) CURest ((From, needed)::NRest) -> mem (ID, U2) CURest -> false
< intros S M. Subgoal 2.9.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest ID U1 CURest U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (ID, U1) CURest ((From, needed)::NRest) M : mem (ID, U2) CURest ============================ false
< S: case S. Subgoal 2.9.1.2: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (From, U2) NRest ============================ false
< MN: apply mem_after_select_before to Ela4 M. Subgoal 2.9.1.2: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (From, U2) NRest MN : mem (From, U2) Needed ============================ false
< MKR+: apply IH to _ _ _ CP3 Ela3 MN. Subgoal 2.9.1.2: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest U2 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (From, U2) NRest MN : mem (From, U2) Needed MKR+ : mem (From, C2) ((To, C)::KRest2) ============================ false
< MKR2: case MKR+. Subgoal 2.9.1.2.1: Variables: Known KRest C KRest2 Needed ERest To NRest Rest U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause To To Rest) ((To, needed)::NRest) (relocateClause To To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer To H2 : is_integer To H3 : is_proof Rest CP : To = To -> false CP1 : remove_all Known To KRest CP2 : select (To, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer To H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (To, U2) NRest MN : mem (To, U2) Needed ============================ false
< apply CP to _. Subgoal 2.9.1.2.2: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest U2 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (From, U2) NRest MN : mem (From, U2) Needed MKR2 : mem (From, C2) KRest2 ============================ false
< GCL': case GCL'. Subgoal 2.9.1.2.2: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest U2 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (From, U2) NRest MN : mem (From, U2) Needed MKR2 : mem (From, C2) KRest2 GCL' : forall ID C1 KRest1 C2, select (ID, C1) KRest1 KRest -> mem (ID, C2) KRest1 -> false ============================ false
< apply GCL' to Ela2 MKR2. Subgoal 2.9.1.3: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest ID U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (ID, U2) ((From, needed)::L1) S : select (ID, U1) L1 NRest ============================ false
< M: case M. Subgoal 2.9.1.3.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest ============================ false
< MNR: apply select_mem to S. Subgoal 2.9.1.3.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest MNR : mem (From, U1) NRest ============================ false
< MN: apply mem_after_select_before to Ela4 MNR. Subgoal 2.9.1.3.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest MNR : mem (From, U1) NRest MN : mem (From, U1) Needed ============================ false
< MKR+: apply IH to _ _ _ CP3 Ela3 MN. Subgoal 2.9.1.3.1: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest U1 L1 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest MNR : mem (From, U1) NRest MN : mem (From, U1) Needed MKR+ : mem (From, C2) ((To, C)::KRest2) ============================ false
< MKR2: case MKR+. Subgoal 2.9.1.3.1.1: Variables: Known KRest C KRest2 Needed ERest To NRest Rest U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause To To Rest) ((To, needed)::NRest) (relocateClause To To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer To H2 : is_integer To H3 : is_proof Rest CP : To = To -> false CP1 : remove_all Known To KRest CP2 : select (To, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer To H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (To, U1) L1 NRest MNR : mem (To, U1) NRest MN : mem (To, U1) Needed ============================ false
< apply CP to _. Subgoal 2.9.1.3.1.2: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest U1 L1 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest MNR : mem (From, U1) NRest MN : mem (From, U1) Needed MKR2 : mem (From, C2) KRest2 ============================ false
< GCL': case GCL'. Subgoal 2.9.1.3.1.2: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest U1 L1 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest MNR : mem (From, U1) NRest MN : mem (From, U1) Needed MKR2 : mem (From, C2) KRest2 GCL' : forall ID C1 KRest1 C2, select (ID, C1) KRest1 KRest -> mem (ID, C2) KRest1 -> false ============================ false
< apply GCL' to Ela2 MKR2. Subgoal 2.9.1.3.2: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest ID U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (ID, U1) L1 NRest M : mem (ID, U2) L1 ============================ false
< GUL': case GUL'. Subgoal 2.9.1.3.2: Variables: Known KRest C KRest2 Needed ERest To From NRest Rest ID U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed S : select (ID, U1) L1 NRest M : mem (ID, U2) L1 GUL' : forall ID U1 CURest U2, select (ID, U1) CURest NRest -> mem (ID, U2) CURest -> false ============================ false
< apply GUL' to S M. Subgoal 2.9.2: Variables: Known KRest C KRest2 Needed ERest To NRest Rest C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause To To Rest) ((To, needed)::NRest) (relocateClause To To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer To H2 : is_integer To H3 : is_proof Rest CP : mem (To, C1) Known CP1 : checkProof Known Rest ============================ good_used_list ((To, needed)::NRest)
< M: apply select_mem to Ela2. Subgoal 2.9.2: Variables: Known KRest C KRest2 Needed ERest To NRest Rest C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause To To Rest) ((To, needed)::NRest) (relocateClause To To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed H1 : is_integer To H2 : is_integer To H3 : is_proof Rest CP : mem (To, C1) Known CP1 : checkProof Known Rest M : mem (To, C) KRest ============================ good_used_list ((To, needed)::NRest)
< apply remove_all_no_mem to Ela1 M. Subgoal 2.10: Variables: Known CU E Rest ID IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (relocateClause ID ID Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (relocateClause ID ID Rest) Ela : elaborate Known (relocateClause ID ID Rest) CU E @ Ela1 : elaborate Known Rest CU E * ============================ good_used_list CU
< case IsP. Subgoal 2.10: Variables: Known CU E Rest ID IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (relocateClause ID ID Rest) Ela : elaborate Known (relocateClause ID ID Rest) CU E @ Ela1 : elaborate Known Rest CU E * H1 : is_integer ID H2 : is_integer ID H3 : is_proof Rest ============================ good_used_list CU
< CP: case CP. Subgoal 2.10.1: Variables: Known CU E Rest ID KRest C KRest2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID ID Rest) CU E @ Ela1 : elaborate Known Rest CU E * H1 : is_integer ID H2 : is_integer ID H3 : is_proof Rest CP : ID = ID -> false CP1 : remove_all Known ID KRest CP2 : select (ID, C) KRest2 KRest CP3 : checkProof ((ID, C)::KRest2) Rest ============================ good_used_list CU
< apply CP to _. Subgoal 2.10.2: Variables: Known CU E Rest ID C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID ID Rest) CU E @ Ela1 : elaborate Known Rest CU E * H1 : is_integer ID H2 : is_integer ID H3 : is_proof Rest CP : mem (ID, C) Known CP1 : checkProof Known Rest ============================ good_used_list CU
< apply IH1 to _ _ _ CP1 Ela1. Subgoal 2.10.2: Variables: Known CU E Rest ID C IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause ID ID Rest) CU E @ Ela1 : elaborate Known Rest CU E * H1 : is_integer ID H2 : is_integer ID H3 : is_proof Rest CP : mem (ID, C) Known CP1 : checkProof Known Rest H4 : good_used_list CU ============================ good_used_list CU
< search. Subgoal 2.11: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (relocateClause From To Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed ============================ good_used_list ((From, unknown)::NRest)
< case IsP. Subgoal 2.11: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest ============================ good_used_list ((From, unknown)::NRest)
< CP: case CP. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To KRest1 C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest1 CP2 : select (From, C1) KRest3 KRest1 CP3 : checkProof ((To, C1)::KRest3) Rest ============================ good_used_list ((From, unknown)::NRest)
< apply remove_all_unique to CP1 Ela1. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest ============================ good_used_list ((From, unknown)::NRest)
< apply remove_all_is to _ CP1. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest H4 : is_list (is_pair is_integer is_clause) KRest ============================ good_used_list ((From, unknown)::NRest)
< GCL': apply good_clause_list_remove_all to _ Ela1. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To C1 KRest3 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C1) KRest3 KRest CP3 : checkProof ((To, C1)::KRest3) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest ============================ good_used_list ((From, unknown)::NRest)
< apply good_clause_list_selects to _ CP2 Ela2. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest ============================ good_used_list ((From, unknown)::NRest)
< apply select_is to _ CP2. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 ============================ good_used_list ((From, unknown)::NRest)
< GCLS: apply good_clause_list_select to _ CP2. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 ============================ good_used_list ((From, unknown)::NRest)
< apply good_clause_list_add to GCLS _ with ID = To C = C. Subgoal 2.11.1.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 ============================ (exists C', mem (To, C') KRest2) -> false
< intros M. Subgoal 2.11.1.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 M : exists C', mem (To, C') KRest2 ============================ false
< M: case M. Subgoal 2.11.1.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To C' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 M : mem (To, C') KRest2 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 2.11.1.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To C' IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 M : mem (To, C') KRest2 M' : mem (To, C') KRest ============================ false
< apply remove_all_no_mem to Ela1 M'. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) ============================ good_used_list ((From, unknown)::NRest)
< IsPr: apply select_is_picked to _ Ela2. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) IsPr : is_pair is_integer is_clause (From, C) ============================ good_used_list ((From, unknown)::NRest)
< case IsPr. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C ============================ good_used_list ((From, unknown)::NRest)
< GUL: apply IH1 to _ _ _ CP3 Ela3. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed ============================ good_used_list ((From, unknown)::NRest)
< GUL': apply good_used_list_select to _ Ela4. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest ============================ good_used_list ((From, unknown)::NRest)
< unfold . Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest ============================ forall ID U1 CURest U2, select (ID, U1) CURest ((From, unknown)::NRest) -> mem (ID, U2) CURest -> false
< intros S M. Subgoal 2.11.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To ID U1 CURest U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (ID, U1) CURest ((From, unknown)::NRest) M : mem (ID, U2) CURest ============================ false
< S: case S. Subgoal 2.11.1.2: Variables: Known E KRest C KRest2 Needed NRest From Rest To U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (From, U2) NRest ============================ false
< MN: apply mem_after_select_before to Ela4 M. Subgoal 2.11.1.2: Variables: Known E KRest C KRest2 Needed NRest From Rest To U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (From, U2) NRest MN : mem (From, U2) Needed ============================ false
< MKR+: apply IH to _ _ _ CP3 Ela3 MN. Subgoal 2.11.1.2: Variables: Known E KRest C KRest2 Needed NRest From Rest To U2 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (From, U2) NRest MN : mem (From, U2) Needed MKR+ : mem (From, C2) ((To, C)::KRest2) ============================ false
< MKR2: case MKR+. Subgoal 2.11.1.2.1: Variables: Known E KRest C KRest2 Needed NRest Rest To U2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause To To Rest) ((To, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer To H2 : is_integer To H3 : is_proof Rest CP : To = To -> false CP1 : remove_all Known To KRest CP2 : select (To, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer To H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (To, U2) NRest MN : mem (To, U2) Needed ============================ false
< apply CP to _. Subgoal 2.11.1.2.2: Variables: Known E KRest C KRest2 Needed NRest From Rest To U2 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (From, U2) NRest MN : mem (From, U2) Needed MKR2 : mem (From, C2) KRest2 ============================ false
< GCL': case GCL'. Subgoal 2.11.1.2.2: Variables: Known E KRest C KRest2 Needed NRest From Rest To U2 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (From, U2) NRest MN : mem (From, U2) Needed MKR2 : mem (From, C2) KRest2 GCL' : forall ID C1 KRest1 C2, select (ID, C1) KRest1 KRest -> mem (ID, C2) KRest1 -> false ============================ false
< apply GCL' to Ela2 MKR2. Subgoal 2.11.1.3: Variables: Known E KRest C KRest2 Needed NRest From Rest To ID U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest M : mem (ID, U2) ((From, unknown)::L1) S : select (ID, U1) L1 NRest ============================ false
< M: case M. Subgoal 2.11.1.3.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest ============================ false
< MNR: apply select_mem to S. Subgoal 2.11.1.3.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest MNR : mem (From, U1) NRest ============================ false
< MN: apply mem_after_select_before to Ela4 MNR. Subgoal 2.11.1.3.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest MNR : mem (From, U1) NRest MN : mem (From, U1) Needed ============================ false
< MKR+: apply IH to _ _ _ CP3 Ela3 MN. Subgoal 2.11.1.3.1: Variables: Known E KRest C KRest2 Needed NRest From Rest To U1 L1 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest MNR : mem (From, U1) NRest MN : mem (From, U1) Needed MKR+ : mem (From, C2) ((To, C)::KRest2) ============================ false
< MKR2: case MKR+. Subgoal 2.11.1.3.1.1: Variables: Known E KRest C KRest2 Needed NRest Rest To U1 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause To To Rest) ((To, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer To H2 : is_integer To H3 : is_proof Rest CP : To = To -> false CP1 : remove_all Known To KRest CP2 : select (To, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer To H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (To, U1) L1 NRest MNR : mem (To, U1) NRest MN : mem (To, U1) Needed ============================ false
< apply CP to _. Subgoal 2.11.1.3.1.2: Variables: Known E KRest C KRest2 Needed NRest From Rest To U1 L1 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest MNR : mem (From, U1) NRest MN : mem (From, U1) Needed MKR2 : mem (From, C2) KRest2 ============================ false
< GCL': case GCL'. Subgoal 2.11.1.3.1.2: Variables: Known E KRest C KRest2 Needed NRest From Rest To U1 L1 C2 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (From, U1) L1 NRest MNR : mem (From, U1) NRest MN : mem (From, U1) Needed MKR2 : mem (From, C2) KRest2 GCL' : forall ID C1 KRest1 C2, select (ID, C1) KRest1 KRest -> mem (ID, C2) KRest1 -> false ============================ false
< apply GCL' to Ela2 MKR2. Subgoal 2.11.1.3.2: Variables: Known E KRest C KRest2 Needed NRest From Rest To ID U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed GUL' : good_used_list NRest S : select (ID, U1) L1 NRest M : mem (ID, U2) L1 ============================ false
< GUL': case GUL'. Subgoal 2.11.1.3.2: Variables: Known E KRest C KRest2 Needed NRest From Rest To ID U1 U2 L1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer From H2 : is_integer To H3 : is_proof Rest CP : To = From -> false CP1 : remove_all Known To KRest CP2 : select (From, C) KRest2 KRest CP3 : checkProof ((To, C)::KRest2) Rest H4 : is_list (is_pair is_integer is_clause) KRest GCL' : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest2 GCLS : good_clause_list KRest2 H6 : good_clause_list ((To, C)::KRest2) H7 : is_integer From H8 : is_clause C GUL : good_used_list Needed S : select (ID, U1) L1 NRest M : mem (ID, U2) L1 GUL' : forall ID U1 CURest U2, select (ID, U1) CURest NRest -> mem (ID, U2) CURest -> false ============================ false
< apply GUL' to S M. Subgoal 2.11.2: Variables: Known E KRest C KRest2 Needed NRest Rest To C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause To To Rest) ((To, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer To H2 : is_integer To H3 : is_proof Rest CP : mem (To, C1) Known CP1 : checkProof Known Rest ============================ good_used_list ((To, unknown)::NRest)
< M: apply select_mem to Ela2. Subgoal 2.11.2: Variables: Known E KRest C KRest2 Needed NRest Rest To C1 IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (relocateClause To To Rest) ((To, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed H1 : is_integer To H2 : is_integer To H3 : is_proof Rest CP : mem (To, C1) Known CP1 : checkProof Known Rest M : mem (To, C) KRest ============================ good_used_list ((To, unknown)::NRest)
< apply remove_all_no_mem to Ela1 M. Subgoal 2.12: Variables: Known CU E Rest Comment IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof (commentProof Comment Rest) IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (commentProof Comment Rest) Ela : elaborate Known (commentProof Comment Rest) CU E @ Ela1 : elaborate Known Rest CU E * ============================ good_used_list CU
< case IsP. Subgoal 2.12: Variables: Known CU E Rest Comment IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known (commentProof Comment Rest) Ela : elaborate Known (commentProof Comment Rest) CU E @ Ela1 : elaborate Known Rest CU E * H1 : is_string Comment H2 : is_proof Rest ============================ good_used_list CU
< CP: case CP. Subgoal 2.12: Variables: Known CU E Rest Comment IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (commentProof Comment Rest) CU E @ Ela1 : elaborate Known Rest CU E * H1 : is_string Comment H2 : is_proof Rest CP : checkProof Known Rest ============================ good_used_list CU
< apply IH1 to _ _ _ CP Ela1. Subgoal 2.12: Variables: Known CU E Rest Comment IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known Ela : elaborate Known (commentProof Comment Rest) CU E @ Ela1 : elaborate Known Rest CU E * H1 : is_string Comment H2 : is_proof Rest CP : checkProof Known Rest H3 : good_used_list CU ============================ good_used_list CU
< search. Subgoal 2.13: Variables: Known CU E PT IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof <unknown I proof> IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * ============================ good_used_list CU
< Is: apply proj_proof_is to Ela1 IsP IsKnown _. Subgoal 2.13: Variables: Known CU E PT IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof <unknown I proof> IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * Is : is_proof PT ============================ good_used_list CU
< CP': apply proj_checkProof to Ela1 CP _ _. Subgoal 2.13: Variables: Known CU E PT IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof <unknown I proof> IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * Is : is_proof PT CP' : checkProof Known PT ============================ good_used_list CU
< apply IH1 to _ _ _ CP' Ela2. Subgoal 2.13: Variables: Known CU E PT IH : forall Known P CU E ID U, is_proof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> checkProof Known P -> elaborate Known P CU E * -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Known P CU E, is_proof P -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Known -> checkProof Known P -> elaborate Known P CU E * -> good_used_list CU IsP : is_proof <unknown I proof> IsKnown : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * Is : is_proof PT CP' : checkProof Known PT H1 : good_used_list CU ============================ good_used_list CU
< search. Proof completed.
< Theorem select_mem_or [A] : forall (A : A) (B : A) K KRest, select A KRest K -> mem B K -> B = A \/ mem B KRest. ============================ forall A B K KRest, select A KRest K -> mem B K -> B = A \/ mem B KRest
< induction on 1. IH : forall A B K KRest, select A KRest K * -> mem B K -> B = A \/ mem B KRest ============================ forall A B K KRest, select A KRest K @ -> mem B K -> B = A \/ mem B KRest
< intros S M. Variables: A B K KRest IH : forall A B K KRest, select A KRest K * -> mem B K -> B = A \/ mem B KRest S : select A KRest K @ M : mem B K ============================ B = A \/ mem B KRest
< S: case S. Subgoal 1: Variables: A B KRest IH : forall A B K KRest, select A KRest K * -> mem B K -> B = A \/ mem B KRest M : mem B (A::KRest) ============================ B = A \/ mem B KRest
< M: case M. Subgoal 1.1: Variables: A KRest IH : forall A B K KRest, select A KRest K * -> mem B K -> B = A \/ mem B KRest ============================ A = A \/ mem A KRest
< search. Subgoal 1.2: Variables: A B KRest IH : forall A B K KRest, select A KRest K * -> mem B K -> B = A \/ mem B KRest M : mem B KRest ============================ B = A \/ mem B KRest
< search. Subgoal 2: Variables: A B L2 I L1 IH : forall A B K KRest, select A KRest K * -> mem B K -> B = A \/ mem B KRest M : mem B (I::L2) S : select A L1 L2 * ============================ B = A \/ mem B (I::L1)
< M: case M. Subgoal 2.1: Variables: A L2 I L1 IH : forall A B K KRest, select A KRest K * -> mem B K -> B = A \/ mem B KRest S : select A L1 L2 * ============================ I = A \/ mem I (I::L1)
< search. Subgoal 2.2: Variables: A B L2 I L1 IH : forall A B K KRest, select A KRest K * -> mem B K -> B = A \/ mem B KRest S : select A L1 L2 * M : mem B L2 ============================ B = A \/ mem B (I::L1)
< Or: apply IH to S M. Subgoal 2.2: Variables: A B L2 I L1 IH : forall A B K KRest, select A KRest K * -> mem B K -> B = A \/ mem B KRest S : select A L1 L2 * M : mem B L2 Or : B = A \/ mem B L1 ============================ B = A \/ mem B (I::L1)
< case Or. Subgoal 2.2.1: Variables: A L2 I L1 IH : forall A B K KRest, select A KRest K * -> mem B K -> B = A \/ mem B KRest S : select A L1 L2 * M : mem A L2 ============================ A = A \/ mem A (I::L1)
< search. Subgoal 2.2.2: Variables: A B L2 I L1 IH : forall A B K KRest, select A KRest K * -> mem B K -> B = A \/ mem B KRest S : select A L1 L2 * M : mem B L2 H1 : mem B L1 ============================ B = A \/ mem B (I::L1)
< search. Proof completed.
< Theorem remove_all_exists : forall K ID, is_list (is_pair is_integer is_clause) K -> is_integer ID -> exists KR, remove_all K ID KR. ============================ forall K ID, is_list (is_pair is_integer is_clause) K -> is_integer ID -> exists KR, remove_all K ID KR
< induction on 1. IH : forall K ID, is_list (is_pair is_integer is_clause) K * -> is_integer ID -> exists KR, remove_all K ID KR ============================ forall K ID, is_list (is_pair is_integer is_clause) K @ -> is_integer ID -> exists KR, remove_all K ID KR
< intros IsK IsID. Variables: K ID IH : forall K ID, is_list (is_pair is_integer is_clause) K * -> is_integer ID -> exists KR, remove_all K ID KR IsK : is_list (is_pair is_integer is_clause) K @ IsID : is_integer ID ============================ exists KR, remove_all K ID KR
< IsK: case IsK. Subgoal 1: Variables: ID IH : forall K ID, is_list (is_pair is_integer is_clause) K * -> is_integer ID -> exists KR, remove_all K ID KR IsID : is_integer ID ============================ exists KR, remove_all [] ID KR
< search. Subgoal 2: Variables: ID T H IH : forall K ID, is_list (is_pair is_integer is_clause) K * -> is_integer ID -> exists KR, remove_all K ID KR IsID : is_integer ID IsK : is_pair is_integer is_clause H IsK1 : is_list (is_pair is_integer is_clause) T * ============================ exists KR, remove_all (H::T) ID KR
< apply IH to IsK1 IsID. Subgoal 2: Variables: ID T H KR IH : forall K ID, is_list (is_pair is_integer is_clause) K * -> is_integer ID -> exists KR, remove_all K ID KR IsID : is_integer ID IsK : is_pair is_integer is_clause H IsK1 : is_list (is_pair is_integer is_clause) T * H1 : remove_all T ID KR ============================ exists KR, remove_all (H::T) ID KR
< IsP: case IsK. Subgoal 2: Variables: ID T KR B A IH : forall K ID, is_list (is_pair is_integer is_clause) K * -> is_integer ID -> exists KR, remove_all K ID KR IsID : is_integer ID IsK1 : is_list (is_pair is_integer is_clause) T * H1 : remove_all T ID KR IsP : is_integer A IsP1 : is_clause B ============================ exists KR, remove_all ((A, B)::T) ID KR
< Or: apply is_integer_eq_or_not to IsP IsID. Subgoal 2: Variables: ID T KR B A IH : forall K ID, is_list (is_pair is_integer is_clause) K * -> is_integer ID -> exists KR, remove_all K ID KR IsID : is_integer ID IsK1 : is_list (is_pair is_integer is_clause) T * H1 : remove_all T ID KR IsP : is_integer A IsP1 : is_clause B Or : A = ID \/ (A = ID -> false) ============================ exists KR, remove_all ((A, B)::T) ID KR
< case Or. Subgoal 2.1: Variables: ID T KR B IH : forall K ID, is_list (is_pair is_integer is_clause) K * -> is_integer ID -> exists KR, remove_all K ID KR IsID : is_integer ID IsK1 : is_list (is_pair is_integer is_clause) T * H1 : remove_all T ID KR IsP : is_integer ID IsP1 : is_clause B ============================ exists KR, remove_all ((ID, B)::T) ID KR
< search. Subgoal 2.2: Variables: ID T KR B A IH : forall K ID, is_list (is_pair is_integer is_clause) K * -> is_integer ID -> exists KR, remove_all K ID KR IsID : is_integer ID IsK1 : is_list (is_pair is_integer is_clause) T * H1 : remove_all T ID KR IsP : is_integer A IsP1 : is_clause B H2 : A = ID -> false ============================ exists KR, remove_all ((A, B)::T) ID KR
< search. Proof completed.
< Theorem permutation_transitive_clauses : forall A B C, is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> is_list (is_pair is_integer is_clause) C -> permutation A B -> permutation B C -> permutation A C. ============================ forall A B C, is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> is_list (is_pair is_integer is_clause) C -> permutation A B -> permutation B C -> permutation A C
< intros IsA IsB IsC PAB PBC. Variables: A B C IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B IsC : is_list (is_pair is_integer is_clause) C PAB : permutation A B PBC : permutation B C ============================ permutation A C
< assert forall I N1 N2, is_pair is_integer is_clause I -> count I A N1 -> count I C N2 -> N1 = N2. Subgoal 1: Variables: A B C IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B IsC : is_list (is_pair is_integer is_clause) C PAB : permutation A B PBC : permutation B C ============================ forall I N1 N2, is_pair is_integer is_clause I -> count I A N1 -> count I C N2 -> N1 = N2
< intros IsI CA CC. Subgoal 1: Variables: A B C I N1 N2 IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B IsC : is_list (is_pair is_integer is_clause) C PAB : permutation A B PBC : permutation B C IsI : is_pair is_integer is_clause I CA : count I A N1 CC : count I C N2 ============================ N1 = N2
< CB: apply is_count_exists to IsB IsI. Subgoal 1: Variables: A B C I N1 N2 N IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B IsC : is_list (is_pair is_integer is_clause) C PAB : permutation A B PBC : permutation B C IsI : is_pair is_integer is_clause I CA : count I A N1 CC : count I C N2 CB : count I B N ============================ N1 = N2
< apply permutation_counts to PAB CA CB. Subgoal 1: Variables: A B C I N2 N IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B IsC : is_list (is_pair is_integer is_clause) C PAB : permutation A B PBC : permutation B C IsI : is_pair is_integer is_clause I CA : count I A N CC : count I C N2 CB : count I B N ============================ N = N2
< apply permutation_counts to PBC CB CC. Subgoal 1: Variables: A B C I N2 IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B IsC : is_list (is_pair is_integer is_clause) C PAB : permutation A B PBC : permutation B C IsI : is_pair is_integer is_clause I CA : count I A N2 CC : count I C N2 CB : count I B N2 ============================ N2 = N2
< search. Variables: A B C IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B IsC : is_list (is_pair is_integer is_clause) C PAB : permutation A B PBC : permutation B C H1 : forall I N1 N2, is_pair is_integer is_clause I -> count I A N1 -> count I C N2 -> N1 = N2 ============================ permutation A C
< apply counts_permutation to IsA IsC _. Variables: A B C IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B IsC : is_list (is_pair is_integer is_clause) C PAB : permutation A B PBC : permutation B C H1 : forall I N1 N2, is_pair is_integer is_clause I -> count I A N1 -> count I C N2 -> N1 = N2 H2 : permutation A C ============================ permutation A C
< search. Proof completed.
< Extensible_Theorem checkFinalClauses_perm_help : forall A B FC, IsFC : is_finalClauses FC -> IsA : is_list (is_pair is_integer is_clause) A -> IsB : is_list (is_pair is_integer is_clause) B -> CFCA : checkFinalClauses A FC -> CFCB : checkFinalClauses B FC -> exists L, permutation L A /\ permutation L B on CFCA. Subgoal 1: Variables: A B KRest Rest C ID IH : forall A B FC, is_finalClauses FC -> is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> checkFinalClauses A FC * -> checkFinalClauses B FC -> exists L, permutation L A /\ permutation L B IsFC : is_finalClauses (addFClause ID C Rest) IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A (addFClause ID C Rest) @ CFCB : checkFinalClauses B (addFClause ID C Rest) CFCA1 : select (ID, C) KRest A CFCA2 : checkFinalClauses KRest Rest * ============================ exists L, permutation L A /\ permutation L B
< case IsFC. Subgoal 1: Variables: A B KRest Rest C ID IH : forall A B FC, is_finalClauses FC -> is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> checkFinalClauses A FC * -> checkFinalClauses B FC -> exists L, permutation L A /\ permutation L B IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A (addFClause ID C Rest) @ CFCB : checkFinalClauses B (addFClause ID C Rest) CFCA1 : select (ID, C) KRest A CFCA2 : checkFinalClauses KRest Rest * H1 : is_integer ID H2 : is_clause C H3 : is_finalClauses Rest ============================ exists L, permutation L A /\ permutation L B
< CFCB: case CFCB. Subgoal 1: Variables: A B KRest Rest C ID KRest1 IH : forall A B FC, is_finalClauses FC -> is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> checkFinalClauses A FC * -> checkFinalClauses B FC -> exists L, permutation L A /\ permutation L B IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A (addFClause ID C Rest) @ CFCA1 : select (ID, C) KRest A CFCA2 : checkFinalClauses KRest Rest * H1 : is_integer ID H2 : is_clause C H3 : is_finalClauses Rest CFCB : select (ID, C) KRest1 B CFCB1 : checkFinalClauses KRest1 Rest ============================ exists L, permutation L A /\ permutation L B
< apply select_is to _ CFCA1. Subgoal 1: Variables: A B KRest Rest C ID KRest1 IH : forall A B FC, is_finalClauses FC -> is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> checkFinalClauses A FC * -> checkFinalClauses B FC -> exists L, permutation L A /\ permutation L B IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A (addFClause ID C Rest) @ CFCA1 : select (ID, C) KRest A CFCA2 : checkFinalClauses KRest Rest * H1 : is_integer ID H2 : is_clause C H3 : is_finalClauses Rest CFCB : select (ID, C) KRest1 B CFCB1 : checkFinalClauses KRest1 Rest H4 : is_list (is_pair is_integer is_clause) KRest ============================ exists L, permutation L A /\ permutation L B
< apply select_is to _ CFCB. Subgoal 1: Variables: A B KRest Rest C ID KRest1 IH : forall A B FC, is_finalClauses FC -> is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> checkFinalClauses A FC * -> checkFinalClauses B FC -> exists L, permutation L A /\ permutation L B IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A (addFClause ID C Rest) @ CFCA1 : select (ID, C) KRest A CFCA2 : checkFinalClauses KRest Rest * H1 : is_integer ID H2 : is_clause C H3 : is_finalClauses Rest CFCB : select (ID, C) KRest1 B CFCB1 : checkFinalClauses KRest1 Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : is_list (is_pair is_integer is_clause) KRest1 ============================ exists L, permutation L A /\ permutation L B
< apply IH to _ _ _ CFCA2 CFCB1. Subgoal 1: Variables: A B KRest Rest C ID KRest1 L IH : forall A B FC, is_finalClauses FC -> is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> checkFinalClauses A FC * -> checkFinalClauses B FC -> exists L, permutation L A /\ permutation L B IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A (addFClause ID C Rest) @ CFCA1 : select (ID, C) KRest A CFCA2 : checkFinalClauses KRest Rest * H1 : is_integer ID H2 : is_clause C H3 : is_finalClauses Rest CFCB : select (ID, C) KRest1 B CFCB1 : checkFinalClauses KRest1 Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : is_list (is_pair is_integer is_clause) KRest1 H6 : permutation L KRest H7 : permutation L KRest1 ============================ exists L, permutation L A /\ permutation L B
< exists (ID, C)::L. Subgoal 1: Variables: A B KRest Rest C ID KRest1 L IH : forall A B FC, is_finalClauses FC -> is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> checkFinalClauses A FC * -> checkFinalClauses B FC -> exists L, permutation L A /\ permutation L B IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A (addFClause ID C Rest) @ CFCA1 : select (ID, C) KRest A CFCA2 : checkFinalClauses KRest Rest * H1 : is_integer ID H2 : is_clause C H3 : is_finalClauses Rest CFCB : select (ID, C) KRest1 B CFCB1 : checkFinalClauses KRest1 Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : is_list (is_pair is_integer is_clause) KRest1 H6 : permutation L KRest H7 : permutation L KRest1 ============================ permutation ((ID, C)::L) A /\ permutation ((ID, C)::L) B
< search. Subgoal 2: Variables: B IH : forall A B FC, is_finalClauses FC -> is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> checkFinalClauses A FC * -> checkFinalClauses B FC -> exists L, permutation L A /\ permutation L B IsFC : is_finalClauses endFClause IsA : is_list (is_pair is_integer is_clause) [] IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses [] endFClause @ CFCB : checkFinalClauses B endFClause ============================ exists L, permutation L [] /\ permutation L B
< case CFCB. Subgoal 2: IH : forall A B FC, is_finalClauses FC -> is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> checkFinalClauses A FC * -> checkFinalClauses B FC -> exists L, permutation L A /\ permutation L B IsFC : is_finalClauses endFClause IsA : is_list (is_pair is_integer is_clause) [] IsB : is_list (is_pair is_integer is_clause) [] CFCA : checkFinalClauses [] endFClause @ ============================ exists L, permutation L [] /\ permutation L []
< search. Proof completed.
< Theorem checkFinalClauses_perm : forall A B FC, is_finalClauses FC -> is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> checkFinalClauses A FC -> checkFinalClauses B FC -> permutation A B. ============================ forall A B FC, is_finalClauses FC -> is_list (is_pair is_integer is_clause) A -> is_list (is_pair is_integer is_clause) B -> checkFinalClauses A FC -> checkFinalClauses B FC -> permutation A B
< intros IsFC IsA IsB CFCA CFCB. Variables: A B FC IsFC : is_finalClauses FC IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A FC CFCB : checkFinalClauses B FC ============================ permutation A B
< P: apply checkFinalClauses_perm_help to _ _ _ CFCA CFCB. Variables: A B FC L IsFC : is_finalClauses FC IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A FC CFCB : checkFinalClauses B FC P : permutation L A P1 : permutation L B ============================ permutation A B
< P': apply permutation_symmetric to P. Variables: A B FC L IsFC : is_finalClauses FC IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A FC CFCB : checkFinalClauses B FC P : permutation L A P1 : permutation L B P' : permutation A L ============================ permutation A B
< apply permutation_is to _ P1. Variables: A B FC L IsFC : is_finalClauses FC IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A FC CFCB : checkFinalClauses B FC P : permutation L A P1 : permutation L B P' : permutation A L H1 : is_list (is_pair is_integer is_clause) L ============================ permutation A B
< apply permutation_transitive_clauses to _ _ _ P' P1. Variables: A B FC L IsFC : is_finalClauses FC IsA : is_list (is_pair is_integer is_clause) A IsB : is_list (is_pair is_integer is_clause) B CFCA : checkFinalClauses A FC CFCB : checkFinalClauses B FC P : permutation L A P1 : permutation L B P' : permutation A L H1 : is_list (is_pair is_integer is_clause) L H2 : permutation A B ============================ permutation A B
< search. Proof completed.
< Define hasNeeded : (list (pair integer clause)) -> (list (pair integer clauseUsedness)) -> (list (pair integer clause)) -> prop by hasNeeded K CU N := (forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N) /\ (forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK).
< Theorem hasNeeded_mem : forall K CU N ID, hasNeeded K CU N -> mem (ID, needed) CU -> exists C, mem (ID, C) N. ============================ forall K CU N ID, hasNeeded K CU N -> mem (ID, needed) CU -> exists C, mem (ID, C) N
< intros HN M. Variables: K CU N ID HN : hasNeeded K CU N M : mem (ID, needed) CU ============================ exists C, mem (ID, C) N
< HN: case HN. Variables: K CU N ID M : mem (ID, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK ============================ exists C, mem (ID, C) N
< apply HN to M. Variables: K CU N ID C M : mem (ID, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK H1 : mem (ID, C) N ============================ exists C, mem (ID, C) N
< search. Proof completed.
< Theorem hasNeeded_lookup : forall K CU N ID C, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> is_list (is_pair is_integer is_clause) N -> good_clause_list N -> good_used_list CU -> hasNeeded K CU N -> lookup K ID C -> mem (ID, needed) CU -> lookup N ID C. ============================ forall K CU N ID C, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> is_list (is_pair is_integer is_clause) N -> good_clause_list N -> good_used_list CU -> hasNeeded K CU N -> lookup K ID C -> mem (ID, needed) CU -> lookup N ID C
< intros IsK GCLK IsN GCLN GUL HN Lkp Mem. Variables: K CU N ID C IsK : is_list (is_pair is_integer is_clause) K GCLK : good_clause_list K IsN : is_list (is_pair is_integer is_clause) N GCLN : good_clause_list N GUL : good_used_list CU HN : hasNeeded K CU N Lkp : lookup K ID C Mem : mem (ID, needed) CU ============================ lookup N ID C
< HN: case HN. Variables: K CU N ID C IsK : is_list (is_pair is_integer is_clause) K GCLK : good_clause_list K IsN : is_list (is_pair is_integer is_clause) N GCLN : good_clause_list N GUL : good_used_list CU Lkp : lookup K ID C Mem : mem (ID, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK ============================ lookup N ID C
< MN: apply HN to Mem. Variables: K CU N ID C C1 IsK : is_list (is_pair is_integer is_clause) K GCLK : good_clause_list K IsN : is_list (is_pair is_integer is_clause) N GCLN : good_clause_list N GUL : good_used_list CU Lkp : lookup K ID C Mem : mem (ID, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK MN : mem (ID, C1) N ============================ lookup N ID C
< LN: apply mem_lookup to _ MN. Variables: K CU N ID C C1 C' IsK : is_list (is_pair is_integer is_clause) K GCLK : good_clause_list K IsN : is_list (is_pair is_integer is_clause) N GCLN : good_clause_list N GUL : good_used_list CU Lkp : lookup K ID C Mem : mem (ID, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK MN : mem (ID, C1) N LN : lookup N ID C' ============================ lookup N ID C
< MK: apply lookup_mem to Lkp. Variables: K CU N ID C C1 C' IsK : is_list (is_pair is_integer is_clause) K GCLK : good_clause_list K IsN : is_list (is_pair is_integer is_clause) N GCLN : good_clause_list N GUL : good_used_list CU Lkp : lookup K ID C Mem : mem (ID, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK MN : mem (ID, C1) N LN : lookup N ID C' MK : mem (ID, C) K ============================ lookup N ID C
< MN': apply lookup_mem to LN. Variables: K CU N ID C C1 C' IsK : is_list (is_pair is_integer is_clause) K GCLK : good_clause_list K IsN : is_list (is_pair is_integer is_clause) N GCLN : good_clause_list N GUL : good_used_list CU Lkp : lookup K ID C Mem : mem (ID, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK MN : mem (ID, C1) N LN : lookup N ID C' MK : mem (ID, C) K MN' : mem (ID, C') N ============================ lookup N ID C
< apply HN1 to MN' MK. Variables: K CU N ID C C1 IsK : is_list (is_pair is_integer is_clause) K GCLK : good_clause_list K IsN : is_list (is_pair is_integer is_clause) N GCLN : good_clause_list N GUL : good_used_list CU Lkp : lookup K ID C Mem : mem (ID, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK MN : mem (ID, C1) N LN : lookup N ID C MK : mem (ID, C) K MN' : mem (ID, C) N ============================ lookup N ID C
< search. Proof completed.
< Theorem hasNeeded_drop : forall K ID U CU N, hasNeeded K ((ID, U)::CU) N -> hasNeeded K CU N. ============================ forall K ID U CU N, hasNeeded K ((ID, U)::CU) N -> hasNeeded K CU N
< intros HN. Variables: K ID U CU N HN : hasNeeded K ((ID, U)::CU) N ============================ hasNeeded K CU N
< HN: case HN. Variables: K ID U CU N HN : forall ID1, mem (ID1, needed) ((ID, U)::CU) -> exists C, mem (ID1, C) N HN1 : forall ID1 CN CK, mem (ID1, CN) N -> mem (ID1, CK) K -> CN = CK ============================ hasNeeded K CU N
< unfold . Subgoal 1: Variables: K ID U CU N HN : forall ID1, mem (ID1, needed) ((ID, U)::CU) -> exists C, mem (ID1, C) N HN1 : forall ID1 CN CK, mem (ID1, CN) N -> mem (ID1, CK) K -> CN = CK ============================ forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N
< intros M. Subgoal 1: Variables: K ID U CU N ID1 HN : forall ID1, mem (ID1, needed) ((ID, U)::CU) -> exists C, mem (ID1, C) N HN1 : forall ID1 CN CK, mem (ID1, CN) N -> mem (ID1, CK) K -> CN = CK M : mem (ID1, needed) CU ============================ exists C, mem (ID1, C) N
< backchain HN. Subgoal 2: Variables: K ID U CU N HN : forall ID1, mem (ID1, needed) ((ID, U)::CU) -> exists C, mem (ID1, C) N HN1 : forall ID1 CN CK, mem (ID1, CN) N -> mem (ID1, CK) K -> CN = CK ============================ forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK
< search. Proof completed.
< Theorem rupProof_help_hasNeeded : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf. ============================ forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf
< induction on 6. IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf ============================ forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf @ -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf
< intros IsK GCL GUL IsKN GCL_KN RUPPH MU HN. Variables: K A Prf Needed Updated KN IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN RUPPH : rupProof_help K A Prf @ MU : makeUsed Needed Prf Updated HN : hasNeeded K Updated KN ============================ rupProof_help KN A Prf
< GUL': apply makeUsed_good_used_list to GUL MU. Variables: K A Prf Needed Updated KN IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN RUPPH : rupProof_help K A Prf @ MU : makeUsed Needed Prf Updated HN : hasNeeded K Updated KN GUL' : good_used_list Updated ============================ rupProof_help KN A Prf
< RUP: case RUPPH. Subgoal 1: Variables: K A Needed Updated KN C ID IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed [ID] Updated HN : hasNeeded K Updated KN GUL' : good_used_list Updated RUP : lookup K ID C RUP1 : unsat_clause A C ============================ rupProof_help KN A [ID]
< M: assert mem ID [ID]. Subgoal 1: Variables: K A Needed Updated KN C ID IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed [ID] Updated HN : hasNeeded K Updated KN GUL' : good_used_list Updated RUP : lookup K ID C RUP1 : unsat_clause A C M : mem ID [ID] ============================ rupProof_help KN A [ID]
< M': apply makeUsed_needed to MU M. Subgoal 1: Variables: K A Needed Updated KN C ID IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed [ID] Updated HN : hasNeeded K Updated KN GUL' : good_used_list Updated RUP : lookup K ID C RUP1 : unsat_clause A C M : mem ID [ID] M' : mem (ID, needed) Updated ============================ rupProof_help KN A [ID]
< apply hasNeeded_mem to HN M'. Subgoal 1: Variables: K A Needed Updated KN C ID C1 IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed [ID] Updated HN : hasNeeded K Updated KN GUL' : good_used_list Updated RUP : lookup K ID C RUP1 : unsat_clause A C M : mem ID [ID] M' : mem (ID, needed) Updated H1 : mem (ID, C1) KN ============================ rupProof_help KN A [ID]
< apply hasNeeded_lookup to _ _ _ _ _ HN RUP _. Subgoal 1: Variables: K A Needed Updated KN C ID C1 IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed [ID] Updated HN : hasNeeded K Updated KN GUL' : good_used_list Updated RUP : lookup K ID C RUP1 : unsat_clause A C M : mem ID [ID] M' : mem (ID, needed) Updated H1 : mem (ID, C1) KN H2 : lookup KN ID C ============================ rupProof_help KN A [ID]
< search. Subgoal 2: Variables: K A Needed Updated KN C L Prf1 ID IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) Updated HN : hasNeeded K Updated KN GUL' : good_used_list Updated RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * ============================ rupProof_help KN A (ID::Prf1)
< M: assert mem ID (ID::Prf1). Subgoal 2: Variables: K A Needed Updated KN C L Prf1 ID IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) Updated HN : hasNeeded K Updated KN GUL' : good_used_list Updated RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) ============================ rupProof_help KN A (ID::Prf1)
< M': apply makeUsed_needed to MU M. Subgoal 2: Variables: K A Needed Updated KN C L Prf1 ID IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) Updated HN : hasNeeded K Updated KN GUL' : good_used_list Updated RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) Updated ============================ rupProof_help KN A (ID::Prf1)
< apply hasNeeded_mem to HN M'. Subgoal 2: Variables: K A Needed Updated KN C L Prf1 ID C1 IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) Updated HN : hasNeeded K Updated KN GUL' : good_used_list Updated RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) Updated H1 : mem (ID, C1) KN ============================ rupProof_help KN A (ID::Prf1)
< L: apply hasNeeded_lookup to _ _ _ _ _ HN RUP _. Subgoal 2: Variables: K A Needed Updated KN C L Prf1 ID C1 IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) Updated HN : hasNeeded K Updated KN GUL' : good_used_list Updated RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) Updated H1 : mem (ID, C1) KN L : lookup KN ID C ============================ rupProof_help KN A (ID::Prf1)
< MU': case MU (keep). Subgoal 2.1: Variables: K A Needed KN C L Prf1 ID C1 KRest KOut IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) ((ID, needed)::KOut) HN : hasNeeded K ((ID, needed)::KOut) KN GUL' : good_used_list ((ID, needed)::KOut) RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) ((ID, needed)::KOut) H1 : mem (ID, C1) KN L : lookup KN ID C MU' : select (ID, needed) KRest Needed MU'1 : makeUsed KRest Prf1 KOut ============================ rupProof_help KN A (ID::Prf1)
< apply good_used_list_select to GUL MU'. Subgoal 2.1: Variables: K A Needed KN C L Prf1 ID C1 KRest KOut IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) ((ID, needed)::KOut) HN : hasNeeded K ((ID, needed)::KOut) KN GUL' : good_used_list ((ID, needed)::KOut) RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) ((ID, needed)::KOut) H1 : mem (ID, C1) KN L : lookup KN ID C MU' : select (ID, needed) KRest Needed MU'1 : makeUsed KRest Prf1 KOut H2 : good_used_list KRest ============================ rupProof_help KN A (ID::Prf1)
< HN': apply hasNeeded_drop to HN. Subgoal 2.1: Variables: K A Needed KN C L Prf1 ID C1 KRest KOut IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) ((ID, needed)::KOut) HN : hasNeeded K ((ID, needed)::KOut) KN GUL' : good_used_list ((ID, needed)::KOut) RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) ((ID, needed)::KOut) H1 : mem (ID, C1) KN L : lookup KN ID C MU' : select (ID, needed) KRest Needed MU'1 : makeUsed KRest Prf1 KOut H2 : good_used_list KRest HN' : hasNeeded K KOut KN ============================ rupProof_help KN A (ID::Prf1)
< R: apply IH to _ _ _ _ _ RUP2 MU'1 HN'. Subgoal 2.1: Variables: K A Needed KN C L Prf1 ID C1 KRest KOut IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) ((ID, needed)::KOut) HN : hasNeeded K ((ID, needed)::KOut) KN GUL' : good_used_list ((ID, needed)::KOut) RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) ((ID, needed)::KOut) H1 : mem (ID, C1) KN L : lookup KN ID C MU' : select (ID, needed) KRest Needed MU'1 : makeUsed KRest Prf1 KOut H2 : good_used_list KRest HN' : hasNeeded K KOut KN R : rupProof_help KN (L::A) Prf1 ============================ rupProof_help KN A (ID::Prf1)
< R': apply rupProof_help_orderless to _ _ GCL_KN R _. Subgoal 2.1: Variables: K A Needed KN C L Prf1 ID C1 KRest KOut IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) ((ID, needed)::KOut) HN : hasNeeded K ((ID, needed)::KOut) KN GUL' : good_used_list ((ID, needed)::KOut) RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) ((ID, needed)::KOut) H1 : mem (ID, C1) KN L : lookup KN ID C MU' : select (ID, needed) KRest Needed MU'1 : makeUsed KRest Prf1 KOut H2 : good_used_list KRest HN' : hasNeeded K KOut KN R : rupProof_help KN (L::A) Prf1 R' : rupProof_help KN (L::A) Prf1 ============================ rupProof_help KN A (ID::Prf1)
< search. Subgoal 2.2: Variables: K A Needed KN C L Prf1 ID C1 KRest KOut IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) ((ID, needed)::KOut) HN : hasNeeded K ((ID, needed)::KOut) KN GUL' : good_used_list ((ID, needed)::KOut) RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) ((ID, needed)::KOut) H1 : mem (ID, C1) KN L : lookup KN ID C MU' : select (ID, unknown) KRest Needed MU'1 : makeUsed KRest Prf1 KOut ============================ rupProof_help KN A (ID::Prf1)
< apply good_used_list_select to GUL MU'. Subgoal 2.2: Variables: K A Needed KN C L Prf1 ID C1 KRest KOut IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) ((ID, needed)::KOut) HN : hasNeeded K ((ID, needed)::KOut) KN GUL' : good_used_list ((ID, needed)::KOut) RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) ((ID, needed)::KOut) H1 : mem (ID, C1) KN L : lookup KN ID C MU' : select (ID, unknown) KRest Needed MU'1 : makeUsed KRest Prf1 KOut H2 : good_used_list KRest ============================ rupProof_help KN A (ID::Prf1)
< HN': apply hasNeeded_drop to HN. Subgoal 2.2: Variables: K A Needed KN C L Prf1 ID C1 KRest KOut IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) ((ID, needed)::KOut) HN : hasNeeded K ((ID, needed)::KOut) KN GUL' : good_used_list ((ID, needed)::KOut) RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) ((ID, needed)::KOut) H1 : mem (ID, C1) KN L : lookup KN ID C MU' : select (ID, unknown) KRest Needed MU'1 : makeUsed KRest Prf1 KOut H2 : good_used_list KRest HN' : hasNeeded K KOut KN ============================ rupProof_help KN A (ID::Prf1)
< R: apply IH to _ _ _ _ _ RUP2 MU'1 HN'. Subgoal 2.2: Variables: K A Needed KN C L Prf1 ID C1 KRest KOut IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) ((ID, needed)::KOut) HN : hasNeeded K ((ID, needed)::KOut) KN GUL' : good_used_list ((ID, needed)::KOut) RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) ((ID, needed)::KOut) H1 : mem (ID, C1) KN L : lookup KN ID C MU' : select (ID, unknown) KRest Needed MU'1 : makeUsed KRest Prf1 KOut H2 : good_used_list KRest HN' : hasNeeded K KOut KN R : rupProof_help KN (L::A) Prf1 ============================ rupProof_help KN A (ID::Prf1)
< R': apply rupProof_help_orderless to _ _ GCL_KN R _. Subgoal 2.2: Variables: K A Needed KN C L Prf1 ID C1 KRest KOut IH : forall K A Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof_help K A Prf * -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof_help KN A Prf IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed (ID::Prf1) ((ID, needed)::KOut) HN : hasNeeded K ((ID, needed)::KOut) KN GUL' : good_used_list ((ID, needed)::KOut) RUP : lookup K ID C RUP1 : unit_clause A C L RUP2 : rupProof_help K (L::A) Prf1 * M : mem ID (ID::Prf1) M' : mem (ID, needed) ((ID, needed)::KOut) H1 : mem (ID, C1) KN L : lookup KN ID C MU' : select (ID, unknown) KRest Needed MU'1 : makeUsed KRest Prf1 KOut H2 : good_used_list KRest HN' : hasNeeded K KOut KN R : rupProof_help KN (L::A) Prf1 R' : rupProof_help KN (L::A) Prf1 ============================ rupProof_help KN A (ID::Prf1)
< search. Proof completed.
< Theorem rupProof_hasNeeded : forall K C Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof K C Prf -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof KN C Prf. ============================ forall K C Prf Needed Updated KN, is_list (is_pair is_integer is_clause) K -> good_clause_list K -> good_used_list Needed -> is_list (is_pair is_integer is_clause) KN -> good_clause_list KN -> rupProof K C Prf -> makeUsed Needed Prf Updated -> hasNeeded K Updated KN -> rupProof KN C Prf
< intros IsK GCL GUL IsKN GCL_KN RUP MU HN. Variables: K C Prf Needed Updated KN IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN RUP : rupProof K C Prf MU : makeUsed Needed Prf Updated HN : hasNeeded K Updated KN ============================ rupProof KN C Prf
< RUP: case RUP. Variables: K C Prf Needed Updated KN Lits A IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed Prf Updated HN : hasNeeded K Updated KN RUP : gatherLits C Lits RUP1 : negateLitList Lits A RUP2 : rupProof_help K A Prf ============================ rupProof KN C Prf
< apply rupProof_help_hasNeeded to IsK GCL GUL IsKN GCL_KN RUP2 MU HN. Variables: K C Prf Needed Updated KN Lits A IsK : is_list (is_pair is_integer is_clause) K GCL : good_clause_list K GUL : good_used_list Needed IsKN : is_list (is_pair is_integer is_clause) KN GCL_KN : good_clause_list KN MU : makeUsed Needed Prf Updated HN : hasNeeded K Updated KN RUP : gatherLits C Lits RUP1 : negateLitList Lits A RUP2 : rupProof_help K A Prf H1 : rupProof_help KN A Prf ============================ rupProof KN C Prf
< search. Proof completed.
< Theorem hasNeeded_select_known : forall K CU N ID C KRest, hasNeeded K ((ID, unknown)::CU) N -> select (ID, C) KRest K -> good_used_list ((ID, unknown)::CU) -> hasNeeded KRest CU N. ============================ forall K CU N ID C KRest, hasNeeded K ((ID, unknown)::CU) N -> select (ID, C) KRest K -> good_used_list ((ID, unknown)::CU) -> hasNeeded KRest CU N
< intros HN S GUL. Variables: K CU N ID C KRest HN : hasNeeded K ((ID, unknown)::CU) N S : select (ID, C) KRest K GUL : good_used_list ((ID, unknown)::CU) ============================ hasNeeded KRest CU N
< HN': apply hasNeeded_drop to HN. Variables: K CU N ID C KRest HN : hasNeeded K ((ID, unknown)::CU) N S : select (ID, C) KRest K GUL : good_used_list ((ID, unknown)::CU) HN' : hasNeeded K CU N ============================ hasNeeded KRest CU N
< HN': case HN'. Variables: K CU N ID C KRest HN : hasNeeded K ((ID, unknown)::CU) N S : select (ID, C) KRest K GUL : good_used_list ((ID, unknown)::CU) HN' : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN'1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK ============================ hasNeeded KRest CU N
< unfold . Subgoal 1: Variables: K CU N ID C KRest HN : hasNeeded K ((ID, unknown)::CU) N S : select (ID, C) KRest K GUL : good_used_list ((ID, unknown)::CU) HN' : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN'1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK ============================ forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N
< search. Subgoal 2: Variables: K CU N ID C KRest HN : hasNeeded K ((ID, unknown)::CU) N S : select (ID, C) KRest K GUL : good_used_list ((ID, unknown)::CU) HN' : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN'1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK ============================ forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) KRest -> CN = CK
< intros MN MKR. Subgoal 2: Variables: K CU N ID C KRest ID1 CN CK HN : hasNeeded K ((ID, unknown)::CU) N S : select (ID, C) KRest K GUL : good_used_list ((ID, unknown)::CU) HN' : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN'1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK MN : mem (ID1, CN) N MKR : mem (ID1, CK) KRest ============================ CN = CK
< MK: apply mem_after_select_before to S MKR. Subgoal 2: Variables: K CU N ID C KRest ID1 CN CK HN : hasNeeded K ((ID, unknown)::CU) N S : select (ID, C) KRest K GUL : good_used_list ((ID, unknown)::CU) HN' : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN'1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK MN : mem (ID1, CN) N MKR : mem (ID1, CK) KRest MK : mem (ID1, CK) K ============================ CN = CK
< apply HN'1 to MN MK. Subgoal 2: Variables: K CU N ID C KRest ID1 CK HN : hasNeeded K ((ID, unknown)::CU) N S : select (ID, C) KRest K GUL : good_used_list ((ID, unknown)::CU) HN' : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) N HN'1 : forall ID CN CK, mem (ID, CN) N -> mem (ID, CK) K -> CN = CK MN : mem (ID1, CK) N MKR : mem (ID1, CK) KRest MK : mem (ID1, CK) K ============================ CK = CK
< search. Proof completed.
< Theorem good_used_list_mems : forall L X UA UB, good_used_list L -> mem (X, UA) L -> mem (X, UB) L -> UA = UB. ============================ forall L X UA UB, good_used_list L -> mem (X, UA) L -> mem (X, UB) L -> UA = UB
< induction on 2. IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB ============================ forall L X UA UB, good_used_list L -> mem (X, UA) L @ -> mem (X, UB) L -> UA = UB
< intros GUL MA MB. Variables: L X UA UB IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB GUL : good_used_list L MA : mem (X, UA) L @ MB : mem (X, UB) L ============================ UA = UB
< MA: case MA. Subgoal 1: Variables: X UA UB Rest IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB GUL : good_used_list ((X, UA)::Rest) MB : mem (X, UB) ((X, UA)::Rest) ============================ UA = UB
< MB: case MB. Subgoal 1.1: Variables: X UA Rest IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB GUL : good_used_list ((X, UA)::Rest) ============================ UA = UA
< search. Subgoal 1.2: Variables: X UA UB Rest IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB GUL : good_used_list ((X, UA)::Rest) MB : mem (X, UB) Rest ============================ UA = UB
< GUL: case GUL. Subgoal 1.2: Variables: X UA UB Rest IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB MB : mem (X, UB) Rest GUL : forall ID U1 CURest U2, select (ID, U1) CURest ((X, UA)::Rest) -> mem (ID, U2) CURest -> false ============================ UA = UB
< apply GUL to _ MB. Subgoal 2: Variables: X UA UB Rest I IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB GUL : good_used_list (I::Rest) MB : mem (X, UB) (I::Rest) MA : mem (X, UA) Rest * ============================ UA = UB
< MB: case MB. Subgoal 2.1: Variables: X UA UB Rest IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB GUL : good_used_list ((X, UB)::Rest) MA : mem (X, UA) Rest * ============================ UA = UB
< GUL: case GUL. Subgoal 2.1: Variables: X UA UB Rest IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB MA : mem (X, UA) Rest * GUL : forall ID U1 CURest U2, select (ID, U1) CURest ((X, UB)::Rest) -> mem (ID, U2) CURest -> false ============================ UA = UB
< apply GUL to _ MA. Subgoal 2.2: Variables: X UA UB Rest I IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB GUL : good_used_list (I::Rest) MA : mem (X, UA) Rest * MB : mem (X, UB) Rest ============================ UA = UB
< GUL': apply good_used_list_drop to GUL. Subgoal 2.2: Variables: X UA UB Rest I IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB GUL : good_used_list (I::Rest) MA : mem (X, UA) Rest * MB : mem (X, UB) Rest GUL' : good_used_list Rest ============================ UA = UB
< apply IH to GUL' MA MB. Subgoal 2.2: Variables: X UB Rest I IH : forall L X UA UB, good_used_list L -> mem (X, UA) L * -> mem (X, UB) L -> UA = UB GUL : good_used_list (I::Rest) MA : mem (X, UB) Rest * MB : mem (X, UB) Rest GUL' : good_used_list Rest ============================ UB = UB
< search. Proof completed.
< Extensible_Theorem elaboration_check_add : forall KA KB KC P CU E, IsP : is_proof P -> IsKA : is_list (is_pair is_integer is_clause) KA -> IsKB : is_list (is_pair is_integer is_clause) KB -> IsKC : is_list (is_pair is_integer is_clause) KC -> GCLA : good_clause_list KA -> GCLB : good_clause_list KB -> GCLC : good_clause_list KC -> Ela : elaborate KA P CU E -> CP : checkProof KB E -> Mems : (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E on Ela. Subgoal 1: Variables: KA KB KC CU Needed NRest Prf ID FC IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (endFrat ID FC) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (endFrat ID FC) CU (emptyLrat ID Prf) @ CP : checkProof KB (emptyLrat ID Prf) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : rupProof KA emptyClause Prf Ela4 : makeUsed NRest Prf CU ============================ checkProof KC (emptyLrat ID Prf)
< CP: case CP (keep). Subgoal 1: Variables: KA KB KC CU Needed NRest Prf ID FC IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (endFrat ID FC) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (endFrat ID FC) CU (emptyLrat ID Prf) @ CP : checkProof KB (emptyLrat ID Prf) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : rupProof KA emptyClause Prf Ela4 : makeUsed NRest Prf CU CP1 : rupProof KB emptyClause Prf ============================ checkProof KC (emptyLrat ID Prf)
< apply rupProof_orderless to _ _ _ CP1 _ with K2 = KC. Subgoal 1: Variables: KA KB KC CU Needed NRest Prf ID FC IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (endFrat ID FC) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (endFrat ID FC) CU (emptyLrat ID Prf) @ CP : checkProof KB (emptyLrat ID Prf) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : rupProof KA emptyClause Prf Ela4 : makeUsed NRest Prf CU CP1 : rupProof KB emptyClause Prf H1 : rupProof KC emptyClause Prf ============================ checkProof KC (emptyLrat ID Prf)
< search. Subgoal 2: Variables: KA KB KC CU Needed NRest Prf ID FC IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (endFratPrf ID Prf FC) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ CP : checkProof KB (emptyLrat ID Prf) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : makeUsed NRest Prf CU ============================ checkProof KC (emptyLrat ID Prf)
< CP: case CP (keep). Subgoal 2: Variables: KA KB KC CU Needed NRest Prf ID FC IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (endFratPrf ID Prf FC) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ CP : checkProof KB (emptyLrat ID Prf) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : makeUsed NRest Prf CU CP1 : rupProof KB emptyClause Prf ============================ checkProof KC (emptyLrat ID Prf)
< apply rupProof_orderless to _ _ _ CP1 _ with K2 = KC. Subgoal 2: Variables: KA KB KC CU Needed NRest Prf ID FC IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (endFratPrf ID Prf FC) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ CP : checkProof KB (emptyLrat ID Prf) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : endKnownClauses FC Needed Ela2 : select (ID, needed) NRest Needed Ela3 : makeUsed NRest Prf CU CP1 : rupProof KB emptyClause Prf H1 : rupProof KC emptyClause Prf ============================ checkProof KC (emptyLrat ID Prf)
< search. Subgoal 3: Variables: KA KB KC E KRest Needed ID Rest C IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (deleteFrat ID C Rest) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : select (ID, C) KRest KA Ela2 : elaborate KRest Rest Needed E * ============================ checkProof KC E
< Is: case IsP. Subgoal 3: Variables: KA KB KC E KRest Needed ID Rest C IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : select (ID, C) KRest KA Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ checkProof KC E
< apply good_clause_list_select to _ Ela1. Subgoal 3: Variables: KA KB KC E KRest Needed ID Rest C IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : select (ID, C) KRest KA Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : good_clause_list KRest ============================ checkProof KC E
< apply select_is to _ Ela1. Subgoal 3: Variables: KA KB KC E KRest Needed ID Rest C IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : select (ID, C) KRest KA Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : good_clause_list KRest H2 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof KC E
< apply IH to _ _ _ _ _ _ _ Ela2 CP _. Subgoal 3: Variables: KA KB KC E KRest Needed ID Rest C IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (deleteFrat ID C Rest) ((ID, unknown)::Needed) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : select (ID, C) KRest KA Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : good_clause_list KRest H2 : is_list (is_pair is_integer is_clause) KRest H3 : checkProof KC E ============================ checkProof KC E
< search. Subgoal 4: Variables: KA KB KC E C KRest Needed ID Rest IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (deleteLratProof ID Rest) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : select (ID, C) KRest KA Ela2 : elaborate KRest Rest Needed E * ============================ checkProof KC E
< Is: case IsP. Subgoal 4: Variables: KA KB KC E C KRest Needed ID Rest IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : select (ID, C) KRest KA Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID Is1 : is_proof Rest ============================ checkProof KC E
< apply good_clause_list_select to _ Ela1. Subgoal 4: Variables: KA KB KC E C KRest Needed ID Rest IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : select (ID, C) KRest KA Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID Is1 : is_proof Rest H1 : good_clause_list KRest ============================ checkProof KC E
< apply select_is to _ Ela1. Subgoal 4: Variables: KA KB KC E C KRest Needed ID Rest IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : select (ID, C) KRest KA Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID Is1 : is_proof Rest H1 : good_clause_list KRest H2 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof KC E
< apply IH to _ _ _ _ _ _ _ Ela2 CP _. Subgoal 4: Variables: KA KB KC E C KRest Needed ID Rest IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (deleteLratProof ID Rest) ((ID, unknown)::Needed) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : select (ID, C) KRest KA Ela2 : elaborate KRest Rest Needed E * Is : is_integer ID Is1 : is_proof Rest H1 : good_clause_list KRest H2 : is_list (is_pair is_integer is_clause) KRest H3 : checkProof KC E ============================ checkProof KC E
< search. Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (addLrupProof ID C Prf Rest) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU ============================ checkProof KC (addLrupProof ID C Prf ERest)
< Is: case IsP. Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest ============================ checkProof KC (addLrupProof ID C Prf ERest)
< CP: case CP (keep). Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ Ela1. Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply good_clause_list_remove_all_add to _ CP1 with C = C. Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ CP1. Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 ============================ checkProof KC (addLrupProof ID C Prf ERest)
< RAC: apply remove_all_exists to IsKC Is. Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR ============================ checkProof KC (addLrupProof ID C Prf ERest)
< GCLC': apply good_clause_list_remove_all_add to _ RAC with C = C. Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ RAC. Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply IH to _ _ _ _ _ _ GCLC' Ela2 CP3 _. Subgoal 5.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR ============================ forall ID1 C1, mem (ID1, C1) ((ID, C)::KRest1) -> mem (ID1, C1) ((ID, C)::KR)
< intros MKR1+. Subgoal 5.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1+ : mem (ID1, C1) ((ID, C)::KRest1) ============================ mem (ID1, C1) ((ID, C)::KR)
< MKR1: case MKR1+. Subgoal 5.1.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR ============================ mem (ID, C) ((ID, C)::KR)
< search. Subgoal 5.1.2: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 ============================ mem (ID1, C1) ((ID, C)::KR)
< MB: apply remove_all_mem_after to CP1 MKR1. Subgoal 5.1.2: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB ============================ mem (ID1, C1) ((ID, C)::KR)
< MC: apply Mems to MB. Subgoal 5.1.2: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB MC : mem (ID1, C1) KC ============================ mem (ID1, C1) ((ID, C)::KR)
< apply remove_all_still_mem to RAC MC _. Subgoal 5.1.2.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB MC : mem (ID1, C1) KC ============================ ID = ID1 -> false
< intros E. Subgoal 5.1.2.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB MC : mem (ID1, C1) KC E : ID = ID1 ============================ false
< case E. Subgoal 5.1.2.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID1 C Prf Rest) CU (addLrupProof ID1 C Prf ERest) @ CP : checkProof KB (addLrupProof ID1 C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID1 KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID1, C)::KRest1) ERest H1 : good_clause_list ((ID1, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID1, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID1 KR GCLC' : good_clause_list ((ID1, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB MC : mem (ID1, C1) KC ============================ false
< apply remove_all_no_mem to CP1 MKR1. Subgoal 5.1.2: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB MC : mem (ID1, C1) KC H6 : mem (ID1, C1) KR ============================ mem (ID1, C1) ((ID, C)::KR)
< search. Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR H6 : checkProof ((ID, C)::KR) ERest ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply rupProof_orderless to _ _ _ CP2 Mems. Subgoal 5: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR H6 : checkProof ((ID, C)::KR) ERest H7 : rupProof KC C Prf ============================ checkProof KC (addLrupProof ID C Prf ERest)
< search. Subgoal 6: Variables: KA KB KC CU E KRest Needed Rest Prf C ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (addLrupProof ID C Prf Rest) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed ============================ checkProof KC E
< Is: case IsP. Subgoal 6: Variables: KA KB KC CU E KRest Needed Rest Prf C ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest ============================ checkProof KC E
< apply remove_all_is to _ Ela1. Subgoal 6: Variables: KA KB KC CU E KRest Needed Rest Prf C ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof KC E
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 6: Variables: KA KB KC CU E KRest Needed Rest Prf C ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ checkProof KC E
< apply IH to _ _ _ _ _ _ GCLC Ela2 CP _. Subgoal 6: Variables: KA KB KC CU E KRest Needed Rest Prf C ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addLrupProof ID C Prf Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : checkProof KC E ============================ checkProof KC E
< search. Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (addProofless ID C Rest) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU ============================ checkProof KC (addLrupProof ID C Prf ERest)
< Is: case IsP. Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ checkProof KC (addLrupProof ID C Prf ERest)
< CP: case CP (keep). Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ Ela1. Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply good_clause_list_remove_all_add to _ CP1 with C = C. Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ CP1. Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 ============================ checkProof KC (addLrupProof ID C Prf ERest)
< RAC: apply remove_all_exists to IsKC Is. Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR ============================ checkProof KC (addLrupProof ID C Prf ERest)
< GCLC': apply good_clause_list_remove_all_add to _ RAC with C = C. Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ RAC. Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply IH to _ _ _ _ _ _ GCLC' Ela2 CP3 _. Subgoal 7.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR ============================ forall ID1 C1, mem (ID1, C1) ((ID, C)::KRest1) -> mem (ID1, C1) ((ID, C)::KR)
< intros MKR1+. Subgoal 7.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1+ : mem (ID1, C1) ((ID, C)::KRest1) ============================ mem (ID1, C1) ((ID, C)::KR)
< MKR1: case MKR1+. Subgoal 7.1.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR ============================ mem (ID, C) ((ID, C)::KR)
< search. Subgoal 7.1.2: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 ============================ mem (ID1, C1) ((ID, C)::KR)
< MB: apply remove_all_mem_after to CP1 MKR1. Subgoal 7.1.2: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB ============================ mem (ID1, C1) ((ID, C)::KR)
< MC: apply Mems to MB. Subgoal 7.1.2: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB MC : mem (ID1, C1) KC ============================ mem (ID1, C1) ((ID, C)::KR)
< apply remove_all_still_mem to RAC MC _. Subgoal 7.1.2.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB MC : mem (ID1, C1) KC ============================ ID = ID1 -> false
< intros E. Subgoal 7.1.2.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB MC : mem (ID1, C1) KC E : ID = ID1 ============================ false
< case E. Subgoal 7.1.2.1: Variables: KA KB KC CU KRest Needed NRest ERest Prf C Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID1 C Rest) CU (addLrupProof ID1 C Prf ERest) @ CP : checkProof KB (addLrupProof ID1 C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID1 KRest Ela2 : elaborate ((ID1, C)::KRest) Rest Needed ERest * Ela3 : select (ID1, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID1 Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID1 KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID1, C)::KRest1) ERest H1 : good_clause_list ((ID1, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID1, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID1 KR GCLC' : good_clause_list ((ID1, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB MC : mem (ID1, C1) KC ============================ false
< apply remove_all_no_mem to CP1 MKR1. Subgoal 7.1.2: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR ID1 C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR MKR1 : mem (ID1, C1) KRest1 MB : mem (ID1, C1) KB MC : mem (ID1, C1) KC H6 : mem (ID1, C1) KR ============================ mem (ID1, C1) ((ID, C)::KR)
< search. Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR H6 : checkProof ((ID, C)::KR) ERest ============================ checkProof KC (addLrupProof ID C Prf ERest)
< apply rupProof_orderless to _ _ _ CP2 Mems. Subgoal 7: Variables: KA KB KC CU KRest Needed NRest ERest Prf C ID Rest KRest1 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ CP : checkProof KB (addLrupProof ID C Prf ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed ERest * Ela3 : select (ID, needed) NRest Needed Ela4 : rupProof KA C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all KB ID KRest1 CP2 : rupProof KB C Prf CP3 : checkProof ((ID, C)::KRest1) ERest H1 : good_clause_list ((ID, C)::KRest) H2 : is_list (is_pair is_integer is_clause) KRest H3 : good_clause_list ((ID, C)::KRest1) H4 : is_list (is_pair is_integer is_clause) KRest1 RAC : remove_all KC ID KR GCLC' : good_clause_list ((ID, C)::KR) H5 : is_list (is_pair is_integer is_clause) KR H6 : checkProof ((ID, C)::KR) ERest H7 : rupProof KC C Prf ============================ checkProof KC (addLrupProof ID C Prf ERest)
< search. Subgoal 8: Variables: KA KB KC CU E KRest Needed Rest C ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (addProofless ID C Rest) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed ============================ checkProof KC E
< Is: case IsP. Subgoal 8: Variables: KA KB KC CU E KRest Needed Rest C ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ checkProof KC E
< apply remove_all_is to _ Ela1. Subgoal 8: Variables: KA KB KC CU E KRest Needed Rest C ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof KC E
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 8: Variables: KA KB KC CU E KRest Needed Rest C ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ checkProof KC E
< apply IH to _ _ _ _ _ _ GCLC Ela2 CP _. Subgoal 8: Variables: KA KB KC CU E KRest Needed Rest C ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (addProofless ID C Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : checkProof KC E ============================ checkProof KC E
< search. Subgoal 9: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (relocateClause From To Rest) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed ============================ checkProof KC (relocateClause From To ERest)
< Is: case IsP. Subgoal 9: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ checkProof KC (relocateClause From To ERest)
< CP: case CP (keep). Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest ============================ checkProof KC (relocateClause From To ERest)
< apply remove_all_is to _ Ela1. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof KC (relocateClause From To ERest)
< apply select_is to _ Ela2. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 ============================ checkProof KC (relocateClause From To ERest)
< assert good_clause_list ((To, C)::KRest2). Subgoal 9.1.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 ============================ good_clause_list ((To, C)::KRest2)
< unfold . Subgoal 9.1.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 ============================ forall ID C1 KRest C2, select (ID, C1) KRest ((To, C)::KRest2) -> mem (ID, C2) KRest -> false
< intros S M. Subgoal 9.1.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 KRest4 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (ID, C2) KRest4 ((To, C)::KRest2) M : mem (ID, C3) KRest4 ============================ false
< S: case S. Subgoal 9.1.1.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (To, C3) KRest2 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 9.1.1.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (To, C3) KRest2 M' : mem (To, C3) KRest ============================ false
< apply remove_all_no_mem to Ela1 M'. Subgoal 9.1.1.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C3) ((To, C)::L1) S : select (ID, C2) L1 KRest2 ============================ false
< M: case M. Subgoal 9.1.1.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (To, C2) L1 KRest2 ============================ false
< M: apply select_mem to S. Subgoal 9.1.1.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (To, C2) L1 KRest2 M : mem (To, C2) KRest2 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 9.1.1.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (To, C2) L1 KRest2 M : mem (To, C2) KRest2 M' : mem (To, C2) KRest ============================ false
< M'': apply remove_all_no_mem to Ela1 M'. Subgoal 9.1.1.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (ID, C2) L1 KRest2 M : mem (ID, C3) L1 ============================ false
< apply good_clause_list_remove_all to _ Ela1. Subgoal 9.1.1.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (ID, C2) L1 KRest2 M : mem (ID, C3) L1 H3 : good_clause_list KRest ============================ false
< GCL': apply good_clause_list_select to _ Ela2. Subgoal 9.1.1.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (ID, C2) L1 KRest2 M : mem (ID, C3) L1 H3 : good_clause_list KRest GCL' : good_clause_list KRest2 ============================ false
< GCL': case GCL'. Subgoal 9.1.1.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (ID, C2) L1 KRest2 M : mem (ID, C3) L1 H3 : good_clause_list KRest GCL' : forall ID C1 KRest C2, select (ID, C1) KRest KRest2 -> mem (ID, C2) KRest -> false ============================ false
< apply GCL' to S M. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) ============================ checkProof KC (relocateClause From To ERest)
< apply remove_all_is to _ CP2. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 ============================ checkProof KC (relocateClause From To ERest)
< apply select_is to _ CP3. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 ============================ checkProof KC (relocateClause From To ERest)
< assert good_clause_list ((To, C1)::KRest3). Subgoal 9.1.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 ============================ good_clause_list ((To, C1)::KRest3)
< unfold . Subgoal 9.1.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 ============================ forall ID C2 KRest C3, select (ID, C2) KRest ((To, C1)::KRest3) -> mem (ID, C3) KRest -> false
< intros S M. Subgoal 9.1.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 KRest4 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 S : select (ID, C2) KRest4 ((To, C1)::KRest3) M : mem (ID, C3) KRest4 ============================ false
< S: case S. Subgoal 9.1.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 M : mem (To, C3) KRest3 ============================ false
< M': apply mem_after_select_before to CP3 M. Subgoal 9.1.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 M : mem (To, C3) KRest3 M' : mem (To, C3) KRest1 ============================ false
< apply remove_all_no_mem to CP2 M'. Subgoal 9.1.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 M : mem (ID, C3) ((To, C1)::L1) S : select (ID, C2) L1 KRest3 ============================ false
< M: case M. Subgoal 9.1.2.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 S : select (To, C2) L1 KRest3 ============================ false
< M: apply select_mem to S. Subgoal 9.1.2.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 S : select (To, C2) L1 KRest3 M : mem (To, C2) KRest3 ============================ false
< M': apply mem_after_select_before to CP3 M. Subgoal 9.1.2.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 S : select (To, C2) L1 KRest3 M : mem (To, C2) KRest3 M' : mem (To, C2) KRest1 ============================ false
< M'': apply remove_all_no_mem to CP2 M'. Subgoal 9.1.2.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 ============================ false
< apply good_clause_list_remove_all to _ CP2. Subgoal 9.1.2.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 H6 : good_clause_list KRest1 ============================ false
< GCL': apply good_clause_list_select to _ CP3. Subgoal 9.1.2.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 H6 : good_clause_list KRest1 GCL' : good_clause_list KRest3 ============================ false
< GCL': case GCL'. Subgoal 9.1.2.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 H6 : good_clause_list KRest1 GCL' : forall ID C1 KRest C2, select (ID, C1) KRest KRest3 -> mem (ID, C2) KRest -> false ============================ false
< apply GCL' to S M. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) ============================ checkProof KC (relocateClause From To ERest)
< RAC: apply remove_all_exists to IsKC Is1. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR ============================ checkProof KC (relocateClause From To ERest)
< MKR1: apply select_mem to CP3. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 ============================ checkProof KC (relocateClause From To ERest)
< MB: apply remove_all_mem_after to CP2 MKR1. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB ============================ checkProof KC (relocateClause From To ERest)
< MC: apply Mems to MB. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC ============================ checkProof KC (relocateClause From To ERest)
< MKR: apply remove_all_still_mem to RAC MC _. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR ============================ checkProof KC (relocateClause From To ERest)
< SC: apply mem_select to MKR. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR ============================ checkProof KC (relocateClause From To ERest)
< apply remove_all_is to _ RAC. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR ============================ checkProof KC (relocateClause From To ERest)
< apply select_is to _ SC. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' ============================ checkProof KC (relocateClause From To ERest)
< GCLC': assert good_clause_list ((To, C1)::L'). Subgoal 9.1.3: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' ============================ good_clause_list ((To, C1)::L')
< unfold . Subgoal 9.1.3: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' ============================ forall ID C2 KRest C3, select (ID, C2) KRest ((To, C1)::L') -> mem (ID, C3) KRest -> false
< intros S M. Subgoal 9.1.3: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' ID C2 KRest4 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' S : select (ID, C2) KRest4 ((To, C1)::L') M : mem (ID, C3) KRest4 ============================ false
< S: case S. Subgoal 9.1.3.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' M : mem (To, C3) L' ============================ false
< M': apply mem_after_select_before to SC M. Subgoal 9.1.3.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' M : mem (To, C3) L' M' : mem (To, C3) KR ============================ false
< apply remove_all_no_mem to RAC M'. Subgoal 9.1.3.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' M : mem (ID, C3) ((To, C1)::L1) S : select (ID, C2) L1 L' ============================ false
< M: case M. Subgoal 9.1.3.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' S : select (To, C2) L1 L' ============================ false
< M: apply select_mem to S. Subgoal 9.1.3.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' S : select (To, C2) L1 L' M : mem (To, C2) L' ============================ false
< M': apply mem_after_select_before to SC M. Subgoal 9.1.3.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' S : select (To, C2) L1 L' M : mem (To, C2) L' M' : mem (To, C2) KR ============================ false
< M'': apply remove_all_no_mem to RAC M'. Subgoal 9.1.3.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' S : select (ID, C2) L1 L' M : mem (ID, C3) L1 ============================ false
< apply good_clause_list_remove_all to _ RAC. Subgoal 9.1.3.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' S : select (ID, C2) L1 L' M : mem (ID, C3) L1 H9 : good_clause_list KR ============================ false
< GCL': apply good_clause_list_select to _ SC. Subgoal 9.1.3.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' S : select (ID, C2) L1 L' M : mem (ID, C3) L1 H9 : good_clause_list KR GCL' : good_clause_list L' ============================ false
< GCL': case GCL'. Subgoal 9.1.3.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' ID C2 C3 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' S : select (ID, C2) L1 L' M : mem (ID, C3) L1 H9 : good_clause_list KR GCL' : forall ID C1 KRest C2, select (ID, C1) KRest L' -> mem (ID, C2) KRest -> false ============================ false
< apply GCL' to S M. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To From NRest Rest KRest1 C1 KRest3 KR L' IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ CP : checkProof KB (relocateClause From To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all KB To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C1)::KRest3) RAC : remove_all KC To KR MKR1 : mem (From, C1) KRest1 MB : mem (From, C1) KB MC : mem (From, C1) KC MKR : mem (From, C1) KR SC : select (From, C1) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C1)::L') ============================ checkProof KC (relocateClause From To ERest)
< apply mem_is to _ MC. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR MKR1 : mem (ID, C2) KRest1 MB : mem (ID, C2) KB MC : mem (ID, C2) KC MKR : mem (ID, C2) KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 ============================ checkProof KC (relocateClause ID To ERest)
< Is': apply select_is_picked to _ Ela2. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR MKR1 : mem (ID, C2) KRest1 MB : mem (ID, C2) KB MC : mem (ID, C2) KC MKR : mem (ID, C2) KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 Is' : is_pair is_integer is_clause (ID, C) ============================ checkProof KC (relocateClause ID To ERest)
< case Is'. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR MKR1 : mem (ID, C2) KRest1 MB : mem (ID, C2) KB MC : mem (ID, C2) KC MKR : mem (ID, C2) KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C ============================ checkProof KC (relocateClause ID To ERest)
< apply IH to _ _ _ _ _ _ GCLC' Ela3 CP4 _. Subgoal 9.1.4: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR MKR1 : mem (ID, C2) KRest1 MB : mem (ID, C2) KB MC : mem (ID, C2) KC MKR : mem (ID, C2) KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C ============================ forall ID C, mem (ID, C) ((To, C2)::KRest3) -> mem (ID, C) ((To, C2)::L')
< intros M. Subgoal 9.1.4: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID1 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR MKR1 : mem (ID, C2) KRest1 MB : mem (ID, C2) KB MC : mem (ID, C2) KC MKR : mem (ID, C2) KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID1, C3) ((To, C2)::KRest3) ============================ mem (ID1, C3) ((To, C2)::L')
< M: case M. Subgoal 9.1.4.1: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR MKR1 : mem (ID, C2) KRest1 MB : mem (ID, C2) KB MC : mem (ID, C2) KC MKR : mem (ID, C2) KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C ============================ mem (To, C2) ((To, C2)::L')
< search. Subgoal 9.1.4.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID1 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR MKR1 : mem (ID, C2) KRest1 MB : mem (ID, C2) KB MC : mem (ID, C2) KC MKR : mem (ID, C2) KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID1, C3) KRest3 ============================ mem (ID1, C3) ((To, C2)::L')
< clear MKR1 MB MC MKR. Subgoal 9.1.4.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID1 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID1, C3) KRest3 ============================ mem (ID1, C3) ((To, C2)::L')
< MKR1: apply mem_after_select_before to CP3 M. Subgoal 9.1.4.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID1 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID1, C3) KRest3 MKR1 : mem (ID1, C3) KRest1 ============================ mem (ID1, C3) ((To, C2)::L')
< MB: apply remove_all_mem_after to CP2 MKR1. Subgoal 9.1.4.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID1 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID1, C3) KRest3 MKR1 : mem (ID1, C3) KRest1 MB : mem (ID1, C3) KB ============================ mem (ID1, C3) ((To, C2)::L')
< MC: apply Mems to MB. Subgoal 9.1.4.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID1 C3 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID1, C3) KRest3 MKR1 : mem (ID1, C3) KRest1 MB : mem (ID1, C3) KB MC : mem (ID1, C3) KC ============================ mem (ID1, C3) ((To, C2)::L')
< Is': apply mem_is to _ MB. Subgoal 9.1.4.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 ============================ mem (ID2, C4) ((To, C2)::L')
< Or: apply is_integer_eq_or_not to Is1 Is'. Subgoal 9.1.4.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 Or : To = ID2 \/ (To = ID2 -> false) ============================ mem (ID2, C4) ((To, C2)::L')
< N: case Or. Subgoal 9.1.4.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest NRest Rest KRest1 KRest3 KR L' ID C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID ID2 Rest) ((ID, needed)::NRest) (relocateClause ID ID2 ERest) @ CP : checkProof KB (relocateClause ID ID2 ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA ID2 KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((ID2, C)::KRest2) Rest Needed ERest * Ela4 : select (ID2, needed) NRest Needed Is : is_integer ID Is1 : is_integer ID2 Is2 : is_proof Rest CP1 : ID2 = ID -> false CP2 : remove_all KB ID2 KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((ID2, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((ID2, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((ID2, C2)::KRest3) RAC : remove_all KC ID2 KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((ID2, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 ============================ mem (ID2, C4) ((ID2, C2)::L')
< apply remove_all_no_mem to CP2 _. Subgoal 9.1.4.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 N : To = ID2 -> false ============================ mem (ID2, C4) ((To, C2)::L')
< MKR: apply remove_all_still_mem to RAC MC _. Subgoal 9.1.4.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 N : To = ID2 -> false MKR : mem (ID2, C4) KR ============================ mem (ID2, C4) ((To, C2)::L')
< Or: apply is_integer_eq_or_not to Is Is'. Subgoal 9.1.4.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 N : To = ID2 -> false MKR : mem (ID2, C4) KR Or : ID = ID2 \/ (ID = ID2 -> false) ============================ mem (ID2, C4) ((To, C2)::L')
< N': case Or. Subgoal 9.1.4.2.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID2 To Rest) ((ID2, needed)::NRest) (relocateClause ID2 To ERest) @ CP : checkProof KB (relocateClause ID2 To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID2, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID2 Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID2 -> false CP2 : remove_all KB To KRest1 CP3 : select (ID2, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID2, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID2 H10 : is_clause C2 H11 : is_integer ID2 H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 N : To = ID2 -> false MKR : mem (ID2, C4) KR ============================ mem (ID2, C4) ((To, C2)::L')
< GCL: apply good_clause_list_remove_all to _ CP2. Subgoal 9.1.4.2.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID2 To Rest) ((ID2, needed)::NRest) (relocateClause ID2 To ERest) @ CP : checkProof KB (relocateClause ID2 To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID2, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID2 Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID2 -> false CP2 : remove_all KB To KRest1 CP3 : select (ID2, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID2, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID2 H10 : is_clause C2 H11 : is_integer ID2 H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 N : To = ID2 -> false MKR : mem (ID2, C4) KR GCL : good_clause_list KRest1 ============================ mem (ID2, C4) ((To, C2)::L')
< GCL: case GCL. Subgoal 9.1.4.2.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID2 To Rest) ((ID2, needed)::NRest) (relocateClause ID2 To ERest) @ CP : checkProof KB (relocateClause ID2 To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID2, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID2 Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID2 -> false CP2 : remove_all KB To KRest1 CP3 : select (ID2, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID2, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID2 H10 : is_clause C2 H11 : is_integer ID2 H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 N : To = ID2 -> false MKR : mem (ID2, C4) KR GCL : forall ID C1 KRest C2, select (ID, C1) KRest KRest1 -> mem (ID, C2) KRest -> false ============================ mem (ID2, C4) ((To, C2)::L')
< apply GCL to CP3 _. Subgoal 9.1.4.2.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 N : To = ID2 -> false MKR : mem (ID2, C4) KR N' : ID = ID2 -> false ============================ mem (ID2, C4) ((To, C2)::L')
< apply mem_before_select_after to SC MKR _. Subgoal 9.1.4.2.2.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 N : To = ID2 -> false MKR : mem (ID2, C4) KR N' : ID = ID2 -> false ============================ (ID, C2) = (ID2, C4) -> false
< intros E. Subgoal 9.1.4.2.2.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 N : To = ID2 -> false MKR : mem (ID2, C4) KR N' : ID = ID2 -> false E : (ID, C2) = (ID2, C4) ============================ false
< case E. Subgoal 9.1.4.2.2.2.1: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID2 To Rest) ((ID2, needed)::NRest) (relocateClause ID2 To ERest) @ CP : checkProof KB (relocateClause ID2 To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID2, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID2 Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID2 -> false CP2 : remove_all KB To KRest1 CP3 : select (ID2, C4) KRest3 KRest1 CP4 : checkProof ((To, C4)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C4)::KRest3) RAC : remove_all KC To KR SC : select (ID2, C4) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C4)::L') H9 : is_integer ID2 H10 : is_clause C4 H11 : is_integer ID2 H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 N : To = ID2 -> false MKR : mem (ID2, C4) KR N' : ID2 = ID2 -> false ============================ false
< backchain N'. Subgoal 9.1.4.2.2.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 ID2 C4 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C M : mem (ID2, C4) KRest3 MKR1 : mem (ID2, C4) KRest1 MB : mem (ID2, C4) KB MC : mem (ID2, C4) KC Is' : is_integer ID2 Is'1 : is_clause C4 N : To = ID2 -> false MKR : mem (ID2, C4) KR N' : ID = ID2 -> false H13 : mem (ID2, C4) L' ============================ mem (ID2, C4) ((To, C2)::L')
< search. Subgoal 9.1: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest KRest1 KRest3 KR L' ID C2 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID To Rest) ((ID, needed)::NRest) (relocateClause ID To ERest) @ CP : checkProof KB (relocateClause ID To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (ID, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer ID Is1 : is_integer To Is2 : is_proof Rest CP1 : To = ID -> false CP2 : remove_all KB To KRest1 CP3 : select (ID, C2) KRest3 KRest1 CP4 : checkProof ((To, C2)::KRest3) ERest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_list (is_pair is_integer is_clause) KRest1 H5 : is_list (is_pair is_integer is_clause) KRest3 H6 : good_clause_list ((To, C2)::KRest3) RAC : remove_all KC To KR MKR1 : mem (ID, C2) KRest1 MB : mem (ID, C2) KB MC : mem (ID, C2) KC MKR : mem (ID, C2) KR SC : select (ID, C2) L' KR H7 : is_list (is_pair is_integer is_clause) KR H8 : is_list (is_pair is_integer is_clause) L' GCLC' : good_clause_list ((To, C2)::L') H9 : is_integer ID H10 : is_clause C2 H11 : is_integer ID H12 : is_clause C H13 : checkProof ((To, C2)::L') ERest ============================ checkProof KC (relocateClause ID To ERest)
< search. Subgoal 9.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause To To Rest) ((To, needed)::NRest) (relocateClause To To ERest) @ CP : checkProof KB (relocateClause To To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer To Is1 : is_integer To Is2 : is_proof Rest CP1 : mem (To, C1) KB CP2 : checkProof KB ERest ============================ checkProof KC (relocateClause To To ERest)
< M: apply select_mem to Ela2. Subgoal 9.2: Variables: KA KB KC KRest C KRest2 Needed ERest To NRest Rest C1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause To To Rest) ((To, needed)::NRest) (relocateClause To To ERest) @ CP : checkProof KB (relocateClause To To ERest) Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed ERest * Ela4 : select (To, needed) NRest Needed Is : is_integer To Is1 : is_integer To Is2 : is_proof Rest CP1 : mem (To, C1) KB CP2 : checkProof KB ERest M : mem (To, C) KRest ============================ checkProof KC (relocateClause To To ERest)
< apply remove_all_no_mem to Ela1 M. Subgoal 10: Variables: KA KB KC CU E Rest ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (relocateClause ID ID Rest) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID ID Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : elaborate KA Rest CU E * ============================ checkProof KC E
< Is: case IsP. Subgoal 10: Variables: KA KB KC CU E Rest ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID ID Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : elaborate KA Rest CU E * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest ============================ checkProof KC E
< apply IH to _ _ _ _ _ _ GCLC Ela1 CP _. Subgoal 10: Variables: KA KB KC CU E Rest ID IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause ID ID Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : elaborate KA Rest CU E * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest H1 : checkProof KC E ============================ checkProof KC E
< search. Subgoal 11: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (relocateClause From To Rest) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed ============================ checkProof KC E
< Is: case IsP. Subgoal 11: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ checkProof KC E
< apply remove_all_is to _ Ela1. Subgoal 11: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof KC E
< apply select_is to _ Ela2. Subgoal 11: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 ============================ checkProof KC E
< assert good_clause_list ((To, C)::KRest2). Subgoal 11.1: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 ============================ good_clause_list ((To, C)::KRest2)
< unfold . Subgoal 11.1: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 ============================ forall ID C1 KRest C2, select (ID, C1) KRest ((To, C)::KRest2) -> mem (ID, C2) KRest -> false
< intros S M. Subgoal 11.1: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To ID C1 KRest1 C2 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (ID, C1) KRest1 ((To, C)::KRest2) M : mem (ID, C2) KRest1 ============================ false
< S: case S. Subgoal 11.1.1: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To C2 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (To, C2) KRest2 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 11.1.1: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To C2 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (To, C2) KRest2 M' : mem (To, C2) KRest ============================ false
< apply remove_all_no_mem to Ela1 M'. Subgoal 11.1.2: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To ID C1 C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 M : mem (ID, C2) ((To, C)::L1) S : select (ID, C1) L1 KRest2 ============================ false
< M: case M. Subgoal 11.1.2.1: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To C1 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (To, C1) L1 KRest2 ============================ false
< M: apply select_mem to S. Subgoal 11.1.2.1: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To C1 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (To, C1) L1 KRest2 M : mem (To, C1) KRest2 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 11.1.2.1: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To C1 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (To, C1) L1 KRest2 M : mem (To, C1) KRest2 M' : mem (To, C1) KRest ============================ false
< M'': apply remove_all_no_mem to Ela1 M'. Subgoal 11.1.2.2: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To ID C1 C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (ID, C1) L1 KRest2 M : mem (ID, C2) L1 ============================ false
< apply good_clause_list_remove_all to _ Ela1. Subgoal 11.1.2.2: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To ID C1 C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (ID, C1) L1 KRest2 M : mem (ID, C2) L1 H3 : good_clause_list KRest ============================ false
< GCL': apply good_clause_list_select to _ Ela2. Subgoal 11.1.2.2: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To ID C1 C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (ID, C1) L1 KRest2 M : mem (ID, C2) L1 H3 : good_clause_list KRest GCL' : good_clause_list KRest2 ============================ false
< GCL': case GCL'. Subgoal 11.1.2.2: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To ID C1 C2 L1 IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 S : select (ID, C1) L1 KRest2 M : mem (ID, C2) L1 H3 : good_clause_list KRest GCL' : forall ID C1 KRest C2, select (ID, C1) KRest KRest2 -> mem (ID, C2) KRest -> false ============================ false
< apply GCL' to S M. Subgoal 11: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) ============================ checkProof KC E
< IsP: apply select_is_picked to _ Ela2. Subgoal 11: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) IsP : is_pair is_integer is_clause (From, C) ============================ checkProof KC E
< case IsP. Subgoal 11: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_integer From H5 : is_clause C ============================ checkProof KC E
< apply IH to _ _ _ _ _ _ GCLC Ela3 CP _. Subgoal 11: Variables: KA KB KC E KRest C KRest2 Needed NRest From Rest To IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (relocateClause From To Rest) ((From, unknown)::NRest) E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : remove_all KA To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed E * Ela4 : select (To, unknown) NRest Needed Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : is_list (is_pair is_integer is_clause) KRest2 H3 : good_clause_list ((To, C)::KRest2) H4 : is_integer From H5 : is_clause C H6 : checkProof KC E ============================ checkProof KC E
< search. Subgoal 12: Variables: KA KB KC CU E Rest Comment IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof (commentProof Comment Rest) IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (commentProof Comment Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : elaborate KA Rest CU E * ============================ checkProof KC E
< case IsP. Subgoal 12: Variables: KA KB KC CU E Rest Comment IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (commentProof Comment Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : elaborate KA Rest CU E * H1 : is_string Comment H2 : is_proof Rest ============================ checkProof KC E
< apply IH to _ _ _ _ _ _ GCLC Ela1 CP _. Subgoal 12: Variables: KA KB KC CU E Rest Comment IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA (commentProof Comment Rest) CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : elaborate KA Rest CU E * H1 : is_string Comment H2 : is_proof Rest H3 : checkProof KC E ============================ checkProof KC E
< search. Subgoal 13: Variables: KA KB KC CU E PT IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof <unknown I proof> IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA <unknown I proof> CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : KA |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate KA PT CU E * ============================ checkProof KC E
< apply proj_proof_is to Ela1 _ _ _. Subgoal 13: Variables: KA KB KC CU E PT IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof <unknown I proof> IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA <unknown I proof> CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : KA |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate KA PT CU E * H1 : is_proof PT ============================ checkProof KC E
< apply IH to _ _ _ _ _ _ GCLC Ela2 CP _. Subgoal 13: Variables: KA KB KC CU E PT IH : forall KA KB KC P CU E, is_proof P -> is_list (is_pair is_integer is_clause) KA -> is_list (is_pair is_integer is_clause) KB -> is_list (is_pair is_integer is_clause) KC -> good_clause_list KA -> good_clause_list KB -> good_clause_list KC -> elaborate KA P CU E * -> checkProof KB E -> (forall ID C, mem (ID, C) KB -> mem (ID, C) KC) -> checkProof KC E IsP : is_proof <unknown I proof> IsKA : is_list (is_pair is_integer is_clause) KA IsKB : is_list (is_pair is_integer is_clause) KB IsKC : is_list (is_pair is_integer is_clause) KC GCLA : good_clause_list KA GCLB : good_clause_list KB GCLC : good_clause_list KC Ela : elaborate KA <unknown I proof> CU E @ CP : checkProof KB E Mems : forall ID C, mem (ID, C) KB -> mem (ID, C) KC Ela1 : KA |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate KA PT CU E * H1 : is_proof PT H2 : checkProof KC E ============================ checkProof KC E
< search. Proof completed.
< Extensible_Theorem elaboration_valid : forall Known P CU E Needed, IsP : is_proof P -> IsKnown : is_list (is_pair is_integer is_clause) Known -> IsNeeded : is_list (is_pair is_integer is_clause) Needed -> GCL : good_clause_list Known -> GCL_N : good_clause_list Needed -> CP : checkProof Known P -> Ela : elaborate Known P CU E -> HN : hasNeeded Known CU Needed -> checkProof Needed E on Ela. Subgoal 1: Variables: Known CU Needed Needed1 NRest Prf ID FC IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (endFrat ID FC) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU ============================ checkProof Needed (emptyLrat ID Prf)
< case IsP. Subgoal 1: Variables: Known CU Needed Needed1 NRest Prf ID FC IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC ============================ checkProof Needed (emptyLrat ID Prf)
< CP: case CP (keep). Subgoal 1: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC ============================ checkProof Needed (emptyLrat ID Prf)
< IsKR: apply remove_all_is to _ CP1. Subgoal 1: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC IsKR : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed (emptyLrat ID Prf)
< GCLKR: apply good_clause_list_remove_all_add to _ CP1 with C = emptyClause. Subgoal 1: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC IsKR : is_list (is_pair is_integer is_clause) KRest GCLKR : good_clause_list ((ID, emptyClause)::KRest) ============================ checkProof Needed (emptyLrat ID Prf)
< GULN1: apply endKnownClauses_good_used_list to _ _ _ CP3 Ela1. Subgoal 1: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC IsKR : is_list (is_pair is_integer is_clause) KRest GCLKR : good_clause_list ((ID, emptyClause)::KRest) GULN1 : good_used_list Needed1 ============================ checkProof Needed (emptyLrat ID Prf)
< apply good_used_list_select to _ Ela2. Subgoal 1: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC IsKR : is_list (is_pair is_integer is_clause) KRest GCLKR : good_clause_list ((ID, emptyClause)::KRest) GULN1 : good_used_list Needed1 H3 : good_used_list NRest ============================ checkProof Needed (emptyLrat ID Prf)
< apply rupProof_hasNeeded to _ _ _ _ _ Ela3 Ela4 HN. Subgoal 1: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFrat ID FC) Ela : elaborate Known (endFrat ID FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : rupProof Known emptyClause Prf Ela4 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf1 CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC IsKR : is_list (is_pair is_integer is_clause) KRest GCLKR : good_clause_list ((ID, emptyClause)::KRest) GULN1 : good_used_list Needed1 H3 : good_used_list NRest H4 : rupProof Needed emptyClause Prf ============================ checkProof Needed (emptyLrat ID Prf)
< search. Subgoal 2: Variables: Known CU Needed Needed1 NRest Prf ID FC IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (endFratPrf ID Prf FC) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf CU ============================ checkProof Needed (emptyLrat ID Prf)
< case IsP. Subgoal 2: Variables: Known CU Needed Needed1 NRest Prf ID FC IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC ============================ checkProof Needed (emptyLrat ID Prf)
< CP: case CP (keep). Subgoal 2: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC ============================ checkProof Needed (emptyLrat ID Prf)
< IsKR: apply remove_all_is to _ CP1. Subgoal 2: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC IsKR : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed (emptyLrat ID Prf)
< GCLKR: apply good_clause_list_remove_all_add to _ CP1 with C = emptyClause. Subgoal 2: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC IsKR : is_list (is_pair is_integer is_clause) KRest GCLKR : good_clause_list ((ID, emptyClause)::KRest) ============================ checkProof Needed (emptyLrat ID Prf)
< GULN1: apply endKnownClauses_good_used_list to _ _ _ CP3 Ela1. Subgoal 2: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC IsKR : is_list (is_pair is_integer is_clause) KRest GCLKR : good_clause_list ((ID, emptyClause)::KRest) GULN1 : good_used_list Needed1 ============================ checkProof Needed (emptyLrat ID Prf)
< apply good_used_list_select to _ Ela2. Subgoal 2: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC IsKR : is_list (is_pair is_integer is_clause) KRest GCLKR : good_clause_list ((ID, emptyClause)::KRest) GULN1 : good_used_list Needed1 H4 : good_used_list NRest ============================ checkProof Needed (emptyLrat ID Prf)
< apply rupProof_hasNeeded to _ _ _ _ _ CP2 Ela3 HN. Subgoal 2: Variables: Known CU Needed Needed1 NRest Prf ID FC KRest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (endFratPrf ID Prf FC) Ela : elaborate Known (endFratPrf ID Prf FC) CU (emptyLrat ID Prf) @ HN : hasNeeded Known CU Needed Ela1 : endKnownClauses FC Needed1 Ela2 : select (ID, needed) NRest Needed1 Ela3 : makeUsed NRest Prf CU H1 : is_integer ID H2 : is_list is_integer Prf H3 : is_finalClauses FC CP1 : remove_all Known ID KRest CP2 : rupProof Known emptyClause Prf CP3 : checkFinalClauses ((ID, emptyClause)::KRest) FC IsKR : is_list (is_pair is_integer is_clause) KRest GCLKR : good_clause_list ((ID, emptyClause)::KRest) GULN1 : good_used_list Needed1 H4 : good_used_list NRest H5 : rupProof Needed emptyClause Prf ============================ checkProof Needed (emptyLrat ID Prf)
< search. Subgoal 3: Variables: Known E Needed KRest Needed1 ID Rest C IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (deleteFrat ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * ============================ checkProof Needed E
< case IsP. Subgoal 3: Variables: Known E Needed KRest Needed1 ID Rest C IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest ============================ checkProof Needed E
< CP: case CP (keep). Subgoal 3: Variables: Known E Needed KRest Needed1 ID Rest C KRest1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP1 : select (ID, C) KRest1 Known CP2 : checkProof KRest1 Rest ============================ checkProof Needed E
< apply select_is to _ CP1. Subgoal 3: Variables: Known E Needed KRest Needed1 ID Rest C KRest1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP1 : select (ID, C) KRest1 Known CP2 : checkProof KRest1 Rest H4 : is_list (is_pair is_integer is_clause) KRest1 ============================ checkProof Needed E
< apply good_clause_list_selects to GCL CP1 Ela1. Subgoal 3: Variables: Known E Needed KRest Needed1 ID Rest C IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed E
< apply good_clause_list_select to _ Ela1. Subgoal 3: Variables: Known E Needed KRest Needed1 ID Rest C IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest ============================ checkProof Needed E
< apply select_is to _ Ela1. Subgoal 3: Variables: Known E Needed KRest Needed1 ID Rest C IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest H6 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed E
< GUL: apply elaboration_good_used_list to _ _ _ CP Ela. Subgoal 3: Variables: Known E Needed KRest Needed1 ID Rest C IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest H6 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list ((ID, unknown)::Needed1) ============================ checkProof Needed E
< HN': apply hasNeeded_select_known to HN _ _. Subgoal 3: Variables: Known E Needed KRest Needed1 ID Rest C IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest H6 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list ((ID, unknown)::Needed1) HN' : hasNeeded KRest Needed1 Needed ============================ checkProof Needed E
< apply IH to _ _ _ _ _ CP2 Ela2 HN'. Subgoal 3: Variables: Known E Needed KRest Needed1 ID Rest C IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteFrat ID C Rest) Ela : elaborate Known (deleteFrat ID C Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_clause C H3 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H4 : is_list (is_pair is_integer is_clause) KRest H5 : good_clause_list KRest H6 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list ((ID, unknown)::Needed1) HN' : hasNeeded KRest Needed1 Needed H7 : checkProof Needed E ============================ checkProof Needed E
< search. Subgoal 4: Variables: Known E Needed C KRest Needed1 ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (deleteLratProof ID Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * ============================ checkProof Needed E
< case IsP. Subgoal 4: Variables: Known E Needed C KRest Needed1 ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_proof Rest ============================ checkProof Needed E
< CP: case CP (keep). Subgoal 4: Variables: Known E Needed C KRest Needed1 ID Rest C1 KRest1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_proof Rest CP1 : select (ID, C1) KRest1 Known CP2 : checkProof KRest1 Rest ============================ checkProof Needed E
< apply select_is to _ CP1. Subgoal 4: Variables: Known E Needed C KRest Needed1 ID Rest C1 KRest1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_proof Rest CP1 : select (ID, C1) KRest1 Known CP2 : checkProof KRest1 Rest H3 : is_list (is_pair is_integer is_clause) KRest1 ============================ checkProof Needed E
< apply good_clause_list_selects to GCL CP1 Ela1. Subgoal 4: Variables: Known E Needed C KRest Needed1 ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H3 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed E
< apply good_clause_list_select to _ Ela1. Subgoal 4: Variables: Known E Needed C KRest Needed1 ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H3 : is_list (is_pair is_integer is_clause) KRest H4 : good_clause_list KRest ============================ checkProof Needed E
< apply select_is to _ Ela1. Subgoal 4: Variables: Known E Needed C KRest Needed1 ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H3 : is_list (is_pair is_integer is_clause) KRest H4 : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed E
< GUL: apply elaboration_good_used_list to _ _ _ CP Ela. Subgoal 4: Variables: Known E Needed C KRest Needed1 ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H3 : is_list (is_pair is_integer is_clause) KRest H4 : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list ((ID, unknown)::Needed1) ============================ checkProof Needed E
< HN': apply hasNeeded_select_known to HN _ _. Subgoal 4: Variables: Known E Needed C KRest Needed1 ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H3 : is_list (is_pair is_integer is_clause) KRest H4 : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list ((ID, unknown)::Needed1) HN' : hasNeeded KRest Needed1 Needed ============================ checkProof Needed E
< apply IH to _ _ _ _ _ CP2 Ela2 HN'. Subgoal 4: Variables: Known E Needed C KRest Needed1 ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (deleteLratProof ID Rest) Ela : elaborate Known (deleteLratProof ID Rest) ((ID, unknown)::Needed1) E @ HN : hasNeeded Known ((ID, unknown)::Needed1) Needed Ela1 : select (ID, C) KRest Known Ela2 : elaborate KRest Rest Needed1 E * H1 : is_integer ID H2 : is_proof Rest CP1 : select (ID, C) KRest Known CP2 : checkProof KRest Rest H3 : is_list (is_pair is_integer is_clause) KRest H4 : good_clause_list KRest H5 : is_list (is_pair is_integer is_clause) KRest GUL : good_used_list ((ID, unknown)::Needed1) HN' : hasNeeded KRest Needed1 Needed H6 : checkProof Needed E ============================ checkProof Needed E
< search. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (addLrupProof ID C Prf Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< Is: case IsP. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< CP: case CP (keep). Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KRest1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest1 CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest1) Rest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply remove_all_unique to CP1 Ela1. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ Ela1. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply elaboration_is_needed to _ _ _ Ela2. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply select_is_clauseUsedness to _ Ela3. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< RA: apply remove_all_exists to IsNeeded Is. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ RA. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply good_clause_list_remove_all_add to _ RA with C = C. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< GUL: apply elaboration_good_used_list to _ _ _ CP3 Ela2. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply good_used_list_select to GUL Ela3. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply IH to _ _ _ _ _ CP3 Ela2 _ with Needed = (ID, C)::KR. Subgoal 5.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest ============================ hasNeeded ((ID, C)::KRest) Needed1 ((ID, C)::KR)
< unfold . Subgoal 5.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest ============================ forall ID1, mem (ID1, needed) Needed1 -> exists C1, mem (ID1, C1) ((ID, C)::KR)
< intros MN1. Subgoal 5.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID1, needed) Needed1 ============================ exists C1, mem (ID1, C1) ((ID, C)::KR)
< apply mem_is_clauseUsedness to _ MN1. Subgoal 5.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< Or: apply is_integer_eq_or_not to Is _ with I2 = ID2. Subgoal 5.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed Or : ID = ID2 \/ (ID = ID2 -> false) ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< N: case Or. Subgoal 5.1.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C Rest KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID2 C Prf Rest) Ela : elaborate Known (addLrupProof ID2 C Prf Rest) CU (addLrupProof ID2 C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID2 KRest Ela2 : elaborate ((ID2, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID2, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID2 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID2 KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID2, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID2, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID2 KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID2, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed ============================ exists C1, mem (ID2, C1) ((ID2, C)::KR)
< search. Subgoal 5.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< MNR: apply mem_before_select_after to Ela3 MN1 _. Subgoal 5.1.1.2.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false ============================ (ID, needed) = (ID2, needed) -> false
< intros E. Subgoal 5.1.1.2.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false E : (ID, needed) = (ID2, needed) ============================ false
< case E. Subgoal 5.1.1.2.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C Rest KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID2 C Prf Rest) Ela : elaborate Known (addLrupProof ID2 C Prf Rest) CU (addLrupProof ID2 C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID2 KRest Ela2 : elaborate ((ID2, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID2, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID2 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID2 KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID2, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID2, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID2 KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID2, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID2 = ID2 -> false ============================ false
< backchain N. Subgoal 5.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MNR : mem (ID2, needed) NRest ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< MCU: apply makeUsed_subset to _ _ Ela4 MNR. Subgoal 5.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MNR : mem (ID2, needed) NRest MCU : mem (ID2, needed) CU ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< HN: case HN. Subgoal 5.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MNR : mem (ID2, needed) NRest MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< MN: apply HN to MCU. Subgoal 5.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID2 C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MNR : mem (ID2, needed) NRest MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (ID2, C2) Needed ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< apply remove_all_still_mem to RA MN _. Subgoal 5.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID2 C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MNR : mem (ID2, needed) NRest MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (ID2, C2) Needed H10 : mem (ID2, C2) KR ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< search. Subgoal 5.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest ============================ forall ID1 CN CK, mem (ID1, CN) ((ID, C)::KR) -> mem (ID1, CK) ((ID, C)::KRest) -> CN = CK
< intros MKR+ MKRest+. Subgoal 5.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR+ : mem (ID1, CN) ((ID, C)::KR) MKRest+ : mem (ID1, CK) ((ID, C)::KRest) ============================ CN = CK
< MKR: case MKR+. Subgoal 5.1.2.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKRest+ : mem (ID, CK) ((ID, C)::KRest) ============================ C = CK
< MKRest: case MKRest+. Subgoal 5.1.2.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest ============================ C = C
< search. Subgoal 5.1.2.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKRest : mem (ID, CK) KRest ============================ C = CK
< apply remove_all_no_mem to Ela1 MKRest. Subgoal 5.1.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKRest+ : mem (ID1, CK) ((ID, C)::KRest) MKR : mem (ID1, CN) KR ============================ CN = CK
< MKRest: case MKRest+. Subgoal 5.1.2.2.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR CN IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID, CN) KR ============================ CN = C
< apply remove_all_no_mem to RA MKR. Subgoal 5.1.2.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest ============================ CN = CK
< MN: apply remove_all_mem_after to RA MKR. Subgoal 5.1.2.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MN : mem (ID1, CN) Needed ============================ CN = CK
< MK: apply remove_all_mem_after to Ela1 MKRest. Subgoal 5.1.2.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MN : mem (ID1, CN) Needed MK : mem (ID1, CK) Known ============================ CN = CK
< HN: case HN. Subgoal 5.1.2.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MN : mem (ID1, CN) Needed MK : mem (ID1, CK) Known HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CN = CK
< apply HN1 to MN MK. Subgoal 5.1.2.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR ID1 CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID1, CK) KR MKRest : mem (ID1, CK) KRest MN : mem (ID1, CK) Needed MK : mem (ID1, CK) Known HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CK = CK
< search. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest H8 : checkProof ((ID, C)::KR) ERest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply rupProof_hasNeeded to _ _ _ _ _ CP2 Ela4 HN. Subgoal 5: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest H8 : checkProof ((ID, C)::KR) ERest H9 : rupProof Needed C Prf ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< search. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (addLrupProof ID C Prf Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 ============================ checkProof Needed E
< Is: case IsP. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest ============================ checkProof Needed E
< CP: case CP (keep). Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KRest1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest1 CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest1) Rest ============================ checkProof Needed E
< apply remove_all_unique to CP1 Ela1. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest ============================ checkProof Needed E
< apply remove_all_is to _ Ela1. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed E
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ checkProof Needed E
< apply elaboration_is_needed to _ _ _ Ela2. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ checkProof Needed E
< apply select_is_clauseUsedness to _ Ela3. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU ============================ checkProof Needed E
< GUL: apply elaboration_good_used_list to _ _ _ CP3 Ela2. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 ============================ checkProof Needed E
< apply good_used_list_select to GUL Ela3. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU ============================ checkProof Needed E
< RA: apply remove_all_exists to IsNeeded Is. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR ============================ checkProof Needed E
< apply good_clause_list_remove_all to _ RA. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR ============================ checkProof Needed E
< apply remove_all_is to _ RA. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ============================ checkProof Needed E
< CP': apply IH to _ _ _ _ _ CP3 Ela2 _ with Needed = KR. Subgoal 6.1: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ============================ hasNeeded ((ID, C)::KRest) Needed1 KR
< unfold . Subgoal 6.1.1: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ============================ forall ID1, mem (ID1, needed) Needed1 -> exists C1, mem (ID1, C1) KR
< intros MN1. Subgoal 6.1.1: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID1, needed) Needed1 ============================ exists C1, mem (ID1, C1) KR
< apply mem_is_clauseUsedness to _ MN1. Subgoal 6.1.1: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed ============================ exists C1, mem (ID2, C1) KR
< Or: apply is_integer_eq_or_not to Is _ with I2 = ID2. Subgoal 6.1.1: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed Or : ID = ID2 \/ (ID = ID2 -> false) ============================ exists C1, mem (ID2, C1) KR
< N: case Or. Subgoal 6.1.1.1: Variables: Known CU E Needed KRest Needed1 Rest Prf C KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID2 C Prf Rest) Ela : elaborate Known (addLrupProof ID2 C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID2 KRest Ela2 : elaborate ((ID2, C)::KRest) Rest Needed1 E * Ela3 : select (ID2, unknown) CU Needed1 Is : is_integer ID2 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID2 KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID2, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID2, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID2 KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed ============================ exists C1, mem (ID2, C1) KR
< MN1': apply select_mem to Ela3. Subgoal 6.1.1.1: Variables: Known CU E Needed KRest Needed1 Rest Prf C KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID2 C Prf Rest) Ela : elaborate Known (addLrupProof ID2 C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID2 KRest Ela2 : elaborate ((ID2, C)::KRest) Rest Needed1 E * Ela3 : select (ID2, unknown) CU Needed1 Is : is_integer ID2 Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID2 KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID2, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID2, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID2 KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed MN1' : mem (ID2, unknown) Needed1 ============================ exists C1, mem (ID2, C1) KR
< apply good_used_list_mems to GUL MN1 MN1'. Subgoal 6.1.1.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false ============================ exists C1, mem (ID2, C1) KR
< MCU: apply mem_before_select_after to Ela3 MN1 _. Subgoal 6.1.1.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MCU : mem (ID2, needed) CU ============================ exists C1, mem (ID2, C1) KR
< HN: case HN. Subgoal 6.1.1.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ exists C1, mem (ID2, C1) KR
< MN: apply HN to MCU. Subgoal 6.1.1.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID2 C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (ID2, C2) Needed ============================ exists C1, mem (ID2, C1) KR
< apply remove_all_still_mem to RA MN _. Subgoal 6.1.1.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID2 C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (ID2, C2) Needed H10 : mem (ID2, C2) KR ============================ exists C1, mem (ID2, C1) KR
< search. Subgoal 6.1.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ============================ forall ID1 CN CK, mem (ID1, CN) KR -> mem (ID1, CK) ((ID, C)::KRest) -> CN = CK
< intros ML' MKRest+. Subgoal 6.1.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CN) KR MKRest+ : mem (ID1, CK) ((ID, C)::KRest) ============================ CN = CK
< MKRest: case MKRest+. Subgoal 6.1.2.1: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR CN IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID, CN) KR ============================ CN = C
< apply remove_all_no_mem to RA ML'. Subgoal 6.1.2.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest ============================ CN = CK
< MK: apply remove_all_mem_after to Ela1 MKRest. Subgoal 6.1.2.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MK : mem (ID1, CK) Known ============================ CN = CK
< MN: apply remove_all_mem_after to RA ML'. Subgoal 6.1.2.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MK : mem (ID1, CK) Known MN : mem (ID1, CN) Needed ============================ CN = CK
< HN: case HN. Subgoal 6.1.2.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MK : mem (ID1, CK) Known MN : mem (ID1, CN) Needed HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CN = CK
< apply HN1 to MN MK. Subgoal 6.1.2.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID1 CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CK) KR MKRest : mem (ID1, CK) KRest MK : mem (ID1, CK) Known MN : mem (ID1, CK) Needed HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CK = CK
< search. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR CP' : checkProof KR E ============================ checkProof Needed E
< apply elaboration_check_add to _ _ _ _ _ _ GCL_N Ela2 CP' _. Subgoal 6.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR CP' : checkProof KR E ============================ forall ID C, mem (ID, C) KR -> mem (ID, C) Needed
< intros MKR. Subgoal 6.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID1 C1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR CP' : checkProof KR E MKR : mem (ID1, C1) KR ============================ mem (ID1, C1) Needed
< apply remove_all_mem_after to RA MKR. Subgoal 6.2: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR ID1 C1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR CP' : checkProof KR E MKR : mem (ID1, C1) KR H8 : mem (ID1, C1) Needed ============================ mem (ID1, C1) Needed
< search. Subgoal 6: Variables: Known CU E Needed KRest Needed1 Rest Prf C ID KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addLrupProof ID C Prf Rest) Ela : elaborate Known (addLrupProof ID C Prf Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_list is_integer Prf Is3 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR CP' : checkProof KR E H8 : checkProof Needed E ============================ checkProof Needed E
< search. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (addProofless ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< Is: case IsP. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< CP: case CP (keep). Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest KRest1 Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest1 CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest1) Rest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply remove_all_unique to CP1 Ela1. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ Ela1. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply elaboration_is_needed to _ _ _ Ela2. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply select_is_clauseUsedness to _ Ela3. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< RA: apply remove_all_exists to IsNeeded Is. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply remove_all_is to _ RA. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply good_clause_list_remove_all_add to _ RA with C = C. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< GUL: apply elaboration_good_used_list to _ _ _ CP3 Ela2. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply good_used_list_select to GUL Ela3. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply IH to _ _ _ _ _ CP3 Ela2 _ with Needed = (ID, C)::KR. Subgoal 7.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest ============================ hasNeeded ((ID, C)::KRest) Needed1 ((ID, C)::KR)
< unfold . Subgoal 7.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest ============================ forall ID1, mem (ID1, needed) Needed1 -> exists C1, mem (ID1, C1) ((ID, C)::KR)
< intros MN1. Subgoal 7.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID1, needed) Needed1 ============================ exists C1, mem (ID1, C1) ((ID, C)::KR)
< apply mem_is_clauseUsedness to _ MN1. Subgoal 7.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< Or: apply is_integer_eq_or_not to Is _ with I2 = ID2. Subgoal 7.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed Or : ID = ID2 \/ (ID = ID2 -> false) ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< N: case Or. Subgoal 7.1.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C Rest Prf1 KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID2 C Rest) Ela : elaborate Known (addProofless ID2 C Rest) CU (addLrupProof ID2 C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID2 KRest Ela2 : elaborate ((ID2, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID2, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID2 Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID2 KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID2, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID2, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID2 KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID2, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed ============================ exists C1, mem (ID2, C1) ((ID2, C)::KR)
< search. Subgoal 7.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< MNR: apply mem_before_select_after to Ela3 MN1 _. Subgoal 7.1.1.2.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false ============================ (ID, needed) = (ID2, needed) -> false
< intros E. Subgoal 7.1.1.2.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false E : (ID, needed) = (ID2, needed) ============================ false
< case E. Subgoal 7.1.1.2.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C Rest Prf1 KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID2 C Rest) Ela : elaborate Known (addProofless ID2 C Rest) CU (addLrupProof ID2 C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID2 KRest Ela2 : elaborate ((ID2, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID2, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID2 Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID2 KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID2, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID2, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID2 KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID2, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID2 = ID2 -> false ============================ false
< backchain N. Subgoal 7.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MNR : mem (ID2, needed) NRest ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< MCU: apply makeUsed_subset to _ _ Ela5 MNR. Subgoal 7.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MNR : mem (ID2, needed) NRest MCU : mem (ID2, needed) CU ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< HN: case HN. Subgoal 7.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MNR : mem (ID2, needed) NRest MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< MN: apply HN to MCU. Subgoal 7.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID2 C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MNR : mem (ID2, needed) NRest MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (ID2, C2) Needed ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< apply remove_all_still_mem to RA MN _. Subgoal 7.1.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID2 C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MNR : mem (ID2, needed) NRest MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (ID2, C2) Needed H10 : mem (ID2, C2) KR ============================ exists C1, mem (ID2, C1) ((ID, C)::KR)
< search. Subgoal 7.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest ============================ forall ID1 CN CK, mem (ID1, CN) ((ID, C)::KR) -> mem (ID1, CK) ((ID, C)::KRest) -> CN = CK
< intros MKR+ MKRest+. Subgoal 7.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR+ : mem (ID1, CN) ((ID, C)::KR) MKRest+ : mem (ID1, CK) ((ID, C)::KRest) ============================ CN = CK
< MKR: case MKR+. Subgoal 7.1.2.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKRest+ : mem (ID, CK) ((ID, C)::KRest) ============================ C = CK
< MKRest: case MKRest+. Subgoal 7.1.2.1.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest ============================ C = C
< search. Subgoal 7.1.2.1.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKRest : mem (ID, CK) KRest ============================ C = CK
< apply remove_all_no_mem to Ela1 MKRest. Subgoal 7.1.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKRest+ : mem (ID1, CK) ((ID, C)::KRest) MKR : mem (ID1, CN) KR ============================ CN = CK
< MKRest: case MKRest+. Subgoal 7.1.2.2.1: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR CN IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID, CN) KR ============================ CN = C
< apply remove_all_no_mem to RA MKR. Subgoal 7.1.2.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest ============================ CN = CK
< MN: apply remove_all_mem_after to RA MKR. Subgoal 7.1.2.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MN : mem (ID1, CN) Needed ============================ CN = CK
< MK: apply remove_all_mem_after to Ela1 MKRest. Subgoal 7.1.2.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MN : mem (ID1, CN) Needed MK : mem (ID1, CK) Known ============================ CN = CK
< HN: case HN. Subgoal 7.1.2.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MN : mem (ID1, CN) Needed MK : mem (ID1, CK) Known HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CN = CK
< apply HN1 to MN MK. Subgoal 7.1.2.2.2: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR ID1 CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest MKR : mem (ID1, CK) KR MKRest : mem (ID1, CK) KRest MN : mem (ID1, CK) Needed MK : mem (ID1, CK) Known HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CK = CK
< search. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest H8 : checkProof ((ID, C)::KR) ERest ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< apply rupProof_hasNeeded to _ _ _ _ _ Ela4 Ela5 HN. Subgoal 7: Variables: Known CU Needed KRest Needed1 NRest ERest Prf C ID Rest Prf1 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU (addLrupProof ID C Prf ERest) @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 ERest * Ela3 : select (ID, needed) NRest Needed1 Ela4 : rupProof Known C Prf Ela5 : makeUsed NRest Prf CU Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf1 CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) NRest RA : remove_all Needed ID KR H5 : is_list (is_pair is_integer is_clause) KR H6 : good_clause_list ((ID, C)::KR) GUL : good_used_list Needed1 H7 : good_used_list NRest H8 : checkProof ((ID, C)::KR) ERest H9 : rupProof Needed C Prf ============================ checkProof Needed (addLrupProof ID C Prf ERest)
< search. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (addProofless ID C Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 ============================ checkProof Needed E
< Is: case IsP. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest ============================ checkProof Needed E
< CP: case CP (keep). Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID KRest1 Prf IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest1 CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest1) Rest ============================ checkProof Needed E
< apply remove_all_unique to CP1 Ela1. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest ============================ checkProof Needed E
< apply remove_all_is to _ Ela1. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed E
< apply good_clause_list_remove_all_add to _ Ela1 with C = C. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) ============================ checkProof Needed E
< apply elaboration_is_needed to _ _ _ Ela2. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 ============================ checkProof Needed E
< apply select_is_clauseUsedness to _ Ela3. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU ============================ checkProof Needed E
< GUL: apply elaboration_good_used_list to _ _ _ CP3 Ela2. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 ============================ checkProof Needed E
< apply good_used_list_select to GUL Ela3. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU ============================ checkProof Needed E
< RA: apply remove_all_exists to IsNeeded Is. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR ============================ checkProof Needed E
< apply good_clause_list_remove_all to _ RA. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR ============================ checkProof Needed E
< apply remove_all_is to _ RA. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ============================ checkProof Needed E
< CP': apply IH to _ _ _ _ _ CP3 Ela2 _ with Needed = KR. Subgoal 8.1: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ============================ hasNeeded ((ID, C)::KRest) Needed1 KR
< unfold . Subgoal 8.1.1: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ============================ forall ID1, mem (ID1, needed) Needed1 -> exists C1, mem (ID1, C1) KR
< intros MN1. Subgoal 8.1.1: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID1, needed) Needed1 ============================ exists C1, mem (ID1, C1) KR
< apply mem_is_clauseUsedness to _ MN1. Subgoal 8.1.1: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed ============================ exists C1, mem (ID2, C1) KR
< Or: apply is_integer_eq_or_not to Is _ with I2 = ID2. Subgoal 8.1.1: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed Or : ID = ID2 \/ (ID = ID2 -> false) ============================ exists C1, mem (ID2, C1) KR
< N: case Or. Subgoal 8.1.1.1: Variables: Known CU E Needed KRest Needed1 Rest C Prf KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID2 C Rest) Ela : elaborate Known (addProofless ID2 C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID2 KRest Ela2 : elaborate ((ID2, C)::KRest) Rest Needed1 E * Ela3 : select (ID2, unknown) CU Needed1 Is : is_integer ID2 Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID2 KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID2, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID2, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID2 KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed ============================ exists C1, mem (ID2, C1) KR
< MN1': apply select_mem to Ela3. Subgoal 8.1.1.1: Variables: Known CU E Needed KRest Needed1 Rest C Prf KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID2 C Rest) Ela : elaborate Known (addProofless ID2 C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID2 KRest Ela2 : elaborate ((ID2, C)::KRest) Rest Needed1 E * Ela3 : select (ID2, unknown) CU Needed1 Is : is_integer ID2 Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID2 KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID2, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID2, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID2 KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed MN1' : mem (ID2, unknown) Needed1 ============================ exists C1, mem (ID2, C1) KR
< apply good_used_list_mems to GUL MN1 MN1'. Subgoal 8.1.1.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false ============================ exists C1, mem (ID2, C1) KR
< MCU: apply mem_before_select_after to Ela3 MN1 _. Subgoal 8.1.1.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MCU : mem (ID2, needed) CU ============================ exists C1, mem (ID2, C1) KR
< HN: case HN. Subgoal 8.1.1.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ exists C1, mem (ID2, C1) KR
< MN: apply HN to MCU. Subgoal 8.1.1.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID2 C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (ID2, C2) Needed ============================ exists C1, mem (ID2, C1) KR
< apply remove_all_still_mem to RA MN _. Subgoal 8.1.1.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID2 C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR MN1 : mem (ID2, needed) Needed1 H8 : is_integer ID2 H9 : is_clauseUsedness needed N : ID = ID2 -> false MCU : mem (ID2, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (ID2, C2) Needed H10 : mem (ID2, C2) KR ============================ exists C1, mem (ID2, C1) KR
< search. Subgoal 8.1.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ============================ forall ID1 CN CK, mem (ID1, CN) KR -> mem (ID1, CK) ((ID, C)::KRest) -> CN = CK
< intros ML' MKRest+. Subgoal 8.1.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CN) KR MKRest+ : mem (ID1, CK) ((ID, C)::KRest) ============================ CN = CK
< MKRest: case MKRest+. Subgoal 8.1.2.1: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR CN IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID, CN) KR ============================ CN = C
< apply remove_all_no_mem to RA ML'. Subgoal 8.1.2.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest ============================ CN = CK
< MK: apply remove_all_mem_after to Ela1 MKRest. Subgoal 8.1.2.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MK : mem (ID1, CK) Known ============================ CN = CK
< MN: apply remove_all_mem_after to RA ML'. Subgoal 8.1.2.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MK : mem (ID1, CK) Known MN : mem (ID1, CN) Needed ============================ CN = CK
< HN: case HN. Subgoal 8.1.2.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID1 CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CN) KR MKRest : mem (ID1, CK) KRest MK : mem (ID1, CK) Known MN : mem (ID1, CN) Needed HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CN = CK
< apply HN1 to MN MK. Subgoal 8.1.2.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID1 CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR ML' : mem (ID1, CK) KR MKRest : mem (ID1, CK) KRest MK : mem (ID1, CK) Known MN : mem (ID1, CK) Needed HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CK = CK
< search. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR CP' : checkProof KR E ============================ checkProof Needed E
< apply elaboration_check_add to _ _ _ _ _ _ GCL_N Ela2 CP' _. Subgoal 8.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR CP' : checkProof KR E ============================ forall ID C, mem (ID, C) KR -> mem (ID, C) Needed
< intros MKR. Subgoal 8.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID1 C1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR CP' : checkProof KR E MKR : mem (ID1, C1) KR ============================ mem (ID1, C1) Needed
< apply remove_all_mem_after to RA MKR. Subgoal 8.2: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR ID1 C1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR CP' : checkProof KR E MKR : mem (ID1, C1) KR H8 : mem (ID1, C1) Needed ============================ mem (ID1, C1) Needed
< search. Subgoal 8: Variables: Known CU E Needed KRest Needed1 Rest C ID Prf KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (addProofless ID C Rest) Ela : elaborate Known (addProofless ID C Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : remove_all Known ID KRest Ela2 : elaborate ((ID, C)::KRest) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_proof Rest CP1 : remove_all Known ID KRest CP2 : rupProof Known C Prf CP3 : checkProof ((ID, C)::KRest) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list ((ID, C)::KRest) H3 : is_list (is_pair is_integer is_clauseUsedness) Needed1 H4 : is_list (is_pair is_integer is_clauseUsedness) CU GUL : good_used_list Needed1 H5 : good_used_list CU RA : remove_all Needed ID KR H6 : good_clause_list KR H7 : is_list (is_pair is_integer is_clause) KR CP' : checkProof KR E H8 : checkProof Needed E ============================ checkProof Needed E
< search. Subgoal 9: Variables: Known Needed KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (relocateClause From To Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 ============================ checkProof Needed (relocateClause From To ERest)
< Is: case IsP. Subgoal 9: Variables: Known Needed KRest C KRest2 Needed1 ERest To From NRest Rest IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ checkProof Needed (relocateClause From To ERest)
< CP: case CP (keep). Subgoal 9.1: Variables: Known Needed KRest C KRest2 Needed1 ERest To From NRest Rest KRest1 C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) Rest ============================ checkProof Needed (relocateClause From To ERest)
< apply remove_all_is to _ Ela1. Subgoal 9.1: Variables: Known Needed KRest C KRest2 Needed1 ERest To From NRest Rest KRest1 C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed (relocateClause From To ERest)
< apply remove_all_unique to CP2 Ela1. Subgoal 9.1: Variables: Known Needed KRest C KRest2 Needed1 ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed (relocateClause From To ERest)
< apply good_clause_list_remove_all to _ CP2. Subgoal 9.1: Variables: Known Needed KRest C KRest2 Needed1 ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest ============================ checkProof Needed (relocateClause From To ERest)
< apply good_clause_list_selects to _ Ela2 CP3. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest ============================ checkProof Needed (relocateClause From To ERest)
< apply select_is to _ Ela2. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 ============================ checkProof Needed (relocateClause From To ERest)
< IsP: apply select_is_picked to _ Ela2. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 IsP : is_pair is_integer is_clause (From, C1) ============================ checkProof Needed (relocateClause From To ERest)
< Is': case IsP. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 ============================ checkProof Needed (relocateClause From To ERest)
< GCLKR+: assert good_clause_list ((To, C1)::KRest3). Subgoal 9.1.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 ============================ good_clause_list ((To, C1)::KRest3)
< unfold . Subgoal 9.1.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 ============================ forall ID C2 KRest C3, select (ID, C2) KRest ((To, C1)::KRest3) -> mem (ID, C3) KRest -> false
< intros S M. Subgoal 9.1.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 ID C2 KRest4 C3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (ID, C2) KRest4 ((To, C1)::KRest3) M : mem (ID, C3) KRest4 ============================ false
< S: case S. Subgoal 9.1.1.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 C3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 M : mem (To, C3) KRest3 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 9.1.1.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 C3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 M : mem (To, C3) KRest3 M' : mem (To, C3) KRest ============================ false
< apply remove_all_no_mem to Ela1 M'. Subgoal 9.1.1.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 ID C2 C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 M : mem (ID, C3) ((To, C1)::L1) S : select (ID, C2) L1 KRest3 ============================ false
< M: case M. Subgoal 9.1.1.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 C2 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (To, C2) L1 KRest3 ============================ false
< M: apply select_mem to S. Subgoal 9.1.1.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 C2 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (To, C2) L1 KRest3 M : mem (To, C2) KRest3 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 9.1.1.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 C2 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (To, C2) L1 KRest3 M : mem (To, C2) KRest3 M' : mem (To, C2) KRest ============================ false
< M'': apply remove_all_no_mem to Ela1 M'. Subgoal 9.1.1.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 ID C2 C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 ============================ false
< apply good_clause_list_remove_all to _ Ela1. Subgoal 9.1.1.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 ID C2 C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 H4 : good_clause_list KRest ============================ false
< GCL': apply good_clause_list_select to _ Ela2. Subgoal 9.1.1.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 ID C2 C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 H4 : good_clause_list KRest GCL' : good_clause_list KRest3 ============================ false
< GCL': case GCL'. Subgoal 9.1.1.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 ID C2 C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 H4 : good_clause_list KRest GCL' : forall ID C1 KRest C2, select (ID, C1) KRest KRest3 -> mem (ID, C2) KRest -> false ============================ false
< apply GCL' to S M. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) ============================ checkProof Needed (relocateClause From To ERest)
< RA: apply remove_all_exists to IsNeeded Is1. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR ============================ checkProof Needed (relocateClause From To ERest)
< apply good_clause_list_remove_all to _ RA. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR ============================ checkProof Needed (relocateClause From To ERest)
< apply remove_all_is to _ RA. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR ============================ checkProof Needed (relocateClause From To ERest)
< MKRest: apply select_mem to Ela2. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest ============================ checkProof Needed (relocateClause From To ERest)
< MK: apply remove_all_mem_after to Ela1 MKRest. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known ============================ checkProof Needed (relocateClause From To ERest)
< HN': case HN (keep). Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ checkProof Needed (relocateClause From To ERest)
< MN: apply HN' to _ with ID = From. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C2) Needed ============================ checkProof Needed (relocateClause From To ERest)
< apply HN'1 to MN MK. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed ============================ checkProof Needed (relocateClause From To ERest)
< MKR: apply remove_all_still_mem to RA MN _. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR ============================ checkProof Needed (relocateClause From To ERest)
< SN: apply mem_select to MKR. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR ============================ checkProof Needed (relocateClause From To ERest)
< apply select_is to _ SN. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' ============================ checkProof Needed (relocateClause From To ERest)
< GCLL'+: assert good_clause_list ((To, C1)::L'). Subgoal 9.1.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' ============================ good_clause_list ((To, C1)::L')
< unfold . Subgoal 9.1.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' ============================ forall ID C2 KRest C3, select (ID, C2) KRest ((To, C1)::L') -> mem (ID, C3) KRest -> false
< intros S M. Subgoal 9.1.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID C3 KRest4 C4 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' S : select (ID, C3) KRest4 ((To, C1)::L') M : mem (ID, C4) KRest4 ============================ false
< S: case S. Subgoal 9.1.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' C4 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' M : mem (To, C4) L' ============================ false
< M': apply mem_after_select_before to SN M. Subgoal 9.1.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' C4 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' M : mem (To, C4) L' M' : mem (To, C4) KR ============================ false
< apply remove_all_no_mem to RA M'. Subgoal 9.1.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID C3 C4 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' M : mem (ID, C4) ((To, C1)::L1) S : select (ID, C3) L1 L' ============================ false
< M: case M. Subgoal 9.1.2.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' S : select (To, C3) L1 L' ============================ false
< M: apply select_mem to S. Subgoal 9.1.2.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' S : select (To, C3) L1 L' M : mem (To, C3) L' ============================ false
< M': apply mem_after_select_before to SN M. Subgoal 9.1.2.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' S : select (To, C3) L1 L' M : mem (To, C3) L' M' : mem (To, C3) KR ============================ false
< M'': apply remove_all_no_mem to RA M'. Subgoal 9.1.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID C3 C4 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' S : select (ID, C3) L1 L' M : mem (ID, C4) L1 ============================ false
< apply good_clause_list_remove_all to _ RA. Subgoal 9.1.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID C3 C4 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' S : select (ID, C3) L1 L' M : mem (ID, C4) L1 H7 : good_clause_list KR ============================ false
< GCL': apply good_clause_list_select to _ SN. Subgoal 9.1.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID C3 C4 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' S : select (ID, C3) L1 L' M : mem (ID, C4) L1 H7 : good_clause_list KR GCL' : good_clause_list L' ============================ false
< GCL': case GCL'. Subgoal 9.1.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID C3 C4 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' S : select (ID, C3) L1 L' M : mem (ID, C4) L1 H7 : good_clause_list KR GCL' : forall ID C1 KRest C2, select (ID, C1) KRest L' -> mem (ID, C2) KRest -> false ============================ false
< apply GCL' to S M. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR MKRest : mem (From, C1) KRest MK : mem (From, C1) Known HN' : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN'1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MN : mem (From, C1) Needed MKR : mem (From, C1) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') ============================ checkProof Needed (relocateClause From To ERest)
< clear MN MKR MK MKRest HN' HN'1. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') ============================ checkProof Needed (relocateClause From To ERest)
< GUL: apply elaboration_good_used_list to _ _ _ CP Ela. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ============================ checkProof Needed (relocateClause From To ERest)
< assert hasNeeded ((To, C1)::KRest3) Needed1 ((To, C1)::L'). Subgoal 9.1.3: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ============================ hasNeeded ((To, C1)::KRest3) Needed1 ((To, C1)::L')
< unfold . Subgoal 9.1.3.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ============================ forall ID, mem (ID, needed) Needed1 -> exists C, mem (ID, C) ((To, C1)::L')
< intros MN. Subgoal 9.1.3.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID, needed) Needed1 ============================ exists C, mem (ID, C) ((To, C1)::L')
< Or: apply select_mem_or to Ela4 MN. Subgoal 9.1.3.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID, needed) Needed1 Or : (ID, needed) = (To, needed) \/ mem (ID, needed) NRest ============================ exists C, mem (ID, C) ((To, C1)::L')
< MNR: case Or. Subgoal 9.1.3.1.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (To, needed) Needed1 ============================ exists C, mem (To, C) ((To, C1)::L')
< search. Subgoal 9.1.3.1.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID, needed) Needed1 MNR : mem (ID, needed) NRest ============================ exists C, mem (ID, C) ((To, C1)::L')
< HN: case HN. Subgoal 9.1.3.1.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID, needed) Needed1 MNR : mem (ID, needed) NRest HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ exists C, mem (ID, C) ((To, C1)::L')
< MNeeded: apply HN to _ with ID = ID. Subgoal 9.1.3.1.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID C3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID, needed) Needed1 MNR : mem (ID, needed) NRest HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNeeded : mem (ID, C3) Needed ============================ exists C, mem (ID, C) ((To, C1)::L')
< Is'': apply mem_is to _ MNeeded. Subgoal 9.1.3.1.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID1 C4 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID1, needed) Needed1 MNR : mem (ID1, needed) NRest HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNeeded : mem (ID1, C4) Needed Is'' : is_integer ID1 Is''1 : is_clause C4 ============================ exists C, mem (ID1, C) ((To, C1)::L')
< Or: apply is_integer_eq_or_not to Is1 Is''. Subgoal 9.1.3.1.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID1 C4 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID1, needed) Needed1 MNR : mem (ID1, needed) NRest HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNeeded : mem (ID1, C4) Needed Is'' : is_integer ID1 Is''1 : is_clause C4 Or : To = ID1 \/ (To = ID1 -> false) ============================ exists C, mem (ID1, C) ((To, C1)::L')
< case Or. Subgoal 9.1.3.1.2.1: Variables: Known Needed KRest Needed1 ERest From NRest Rest C1 KRest3 KR L' ID1 C4 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From ID1 Rest) Ela : elaborate Known (relocateClause From ID1 Rest) ((From, needed)::NRest) (relocateClause From ID1 ERest) @ Ela1 : remove_all Known ID1 KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((ID1, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (ID1, needed) NRest Needed1 Is : is_integer From Is1 : is_integer ID1 Is2 : is_proof Rest CP1 : ID1 = From -> false CP2 : remove_all Known ID1 KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((ID1, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((ID1, C1)::KRest3) RA : remove_all Needed ID1 KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((ID1, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID1, needed) Needed1 MNR : mem (ID1, needed) NRest HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNeeded : mem (ID1, C4) Needed Is'' : is_integer ID1 Is''1 : is_clause C4 ============================ exists C, mem (ID1, C) ((ID1, C1)::L')
< search. Subgoal 9.1.3.1.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID1 C4 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID1, needed) Needed1 MNR : mem (ID1, needed) NRest HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNeeded : mem (ID1, C4) Needed Is'' : is_integer ID1 Is''1 : is_clause C4 H7 : To = ID1 -> false ============================ exists C, mem (ID1, C) ((To, C1)::L')
< MKR: apply remove_all_still_mem to RA MNeeded _. Subgoal 9.1.3.1.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID1 C4 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID1, needed) Needed1 MNR : mem (ID1, needed) NRest HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNeeded : mem (ID1, C4) Needed Is'' : is_integer ID1 Is''1 : is_clause C4 H7 : To = ID1 -> false MKR : mem (ID1, C4) KR ============================ exists C, mem (ID1, C) ((To, C1)::L')
< Or: apply select_mem_or to SN MKR. Subgoal 9.1.3.1.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID1 C4 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID1, needed) Needed1 MNR : mem (ID1, needed) NRest HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNeeded : mem (ID1, C4) Needed Is'' : is_integer ID1 Is''1 : is_clause C4 H7 : To = ID1 -> false MKR : mem (ID1, C4) KR Or : (ID1, C4) = (From, C1) \/ mem (ID1, C4) L' ============================ exists C, mem (ID1, C) ((To, C1)::L')
< case Or. Subgoal 9.1.3.1.2.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (From, needed) Needed1 MNR : mem (From, needed) NRest HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNeeded : mem (From, C1) Needed Is'' : is_integer From Is''1 : is_clause C1 H7 : To = From -> false MKR : mem (From, C1) KR ============================ exists C, mem (From, C) ((To, C1)::L')
< GUL: case GUL. Subgoal 9.1.3.1.2.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') MN : mem (From, needed) Needed1 MNR : mem (From, needed) NRest HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNeeded : mem (From, C1) Needed Is'' : is_integer From Is''1 : is_clause C1 H7 : To = From -> false MKR : mem (From, C1) KR GUL : forall ID U1 CURest U2, select (ID, U1) CURest ((From, needed)::NRest) -> mem (ID, U2) CURest -> false ============================ exists C, mem (From, C) ((To, C1)::L')
< apply GUL to _ MNR. Subgoal 9.1.3.1.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID1 C4 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MN : mem (ID1, needed) Needed1 MNR : mem (ID1, needed) NRest HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNeeded : mem (ID1, C4) Needed Is'' : is_integer ID1 Is''1 : is_clause C4 H7 : To = ID1 -> false MKR : mem (ID1, C4) KR H8 : mem (ID1, C4) L' ============================ exists C, mem (ID1, C) ((To, C1)::L')
< search. Subgoal 9.1.3.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ============================ forall ID CN CK, mem (ID, CN) ((To, C1)::L') -> mem (ID, CK) ((To, C1)::KRest3) -> CN = CK
< intros ML'+ MKR3+. Subgoal 9.1.3.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ML'+ : mem (ID, CN) ((To, C1)::L') MKR3+ : mem (ID, CK) ((To, C1)::KRest3) ============================ CN = CK
< ML': case ML'+. Subgoal 9.1.3.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MKR3+ : mem (To, CK) ((To, C1)::KRest3) ============================ C1 = CK
< MKR3: case MKR3+. Subgoal 9.1.3.2.1.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ============================ C1 = C1
< search. Subgoal 9.1.3.2.1.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MKR3 : mem (To, CK) KRest3 ============================ C1 = CK
< GCL': case GCLKR+. Subgoal 9.1.3.2.1.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MKR3 : mem (To, CK) KRest3 GCL' : forall ID C2 KRest C3, select (ID, C2) KRest ((To, C1)::KRest3) -> mem (ID, C3) KRest -> false ============================ C1 = CK
< apply GCL' to _ MKR3. Subgoal 9.1.3.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) MKR3+ : mem (ID, CK) ((To, C1)::KRest3) ML' : mem (ID, CN) L' ============================ CN = CK
< MKR3: case MKR3+. Subgoal 9.1.3.2.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' CN IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ML' : mem (To, CN) L' ============================ CN = C1
< GCL': case GCLL'+. Subgoal 9.1.3.2.2.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' CN IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GUL : good_used_list ((From, needed)::NRest) ML' : mem (To, CN) L' GCL' : forall ID C2 KRest C3, select (ID, C2) KRest ((To, C1)::L') -> mem (ID, C3) KRest -> false ============================ CN = C1
< apply GCL' to _ ML'. Subgoal 9.1.3.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ML' : mem (ID, CN) L' MKR3 : mem (ID, CK) KRest3 ============================ CN = CK
< MKR: apply mem_after_select_before to SN ML'. Subgoal 9.1.3.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ML' : mem (ID, CN) L' MKR3 : mem (ID, CK) KRest3 MKR : mem (ID, CN) KR ============================ CN = CK
< MN: apply remove_all_mem_after to RA MKR. Subgoal 9.1.3.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ML' : mem (ID, CN) L' MKR3 : mem (ID, CK) KRest3 MKR : mem (ID, CN) KR MN : mem (ID, CN) Needed ============================ CN = CK
< MKRest: apply mem_after_select_before to Ela2 MKR3. Subgoal 9.1.3.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ML' : mem (ID, CN) L' MKR3 : mem (ID, CK) KRest3 MKR : mem (ID, CN) KR MN : mem (ID, CN) Needed MKRest : mem (ID, CK) KRest ============================ CN = CK
< MK: apply remove_all_mem_after to Ela1 MKRest. Subgoal 9.1.3.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ML' : mem (ID, CN) L' MKR3 : mem (ID, CK) KRest3 MKR : mem (ID, CN) KR MN : mem (ID, CN) Needed MKRest : mem (ID, CK) KRest MK : mem (ID, CK) Known ============================ CN = CK
< HN: case HN. Subgoal 9.1.3.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ML' : mem (ID, CN) L' MKR3 : mem (ID, CK) KRest3 MKR : mem (ID, CN) KR MN : mem (ID, CN) Needed MKRest : mem (ID, CK) KRest MK : mem (ID, CK) Known HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CN = CK
< apply HN1 to MN MK. Subgoal 9.1.3.2.2.2: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' ID CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) ML' : mem (ID, CK) L' MKR3 : mem (ID, CK) KRest3 MKR : mem (ID, CK) KR MN : mem (ID, CK) Needed MKRest : mem (ID, CK) KRest MK : mem (ID, CK) Known HN : forall ID, mem (ID, needed) ((From, needed)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CK = CK
< search. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) H7 : hasNeeded ((To, C1)::KRest3) Needed1 ((To, C1)::L') ============================ checkProof Needed (relocateClause From To ERest)
< apply IH to _ _ _ _ _ CP4 Ela3 _ with Needed = (To, C1)::L'. Subgoal 9.1: Variables: Known Needed KRest Needed1 ERest To From NRest Rest C1 KRest3 KR L' IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, needed)::NRest) (relocateClause From To ERest) @ HN : hasNeeded Known ((From, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR SN : select (From, C1) L' KR H6 : is_list (is_pair is_integer is_clause) L' GCLL'+ : good_clause_list ((To, C1)::L') GUL : good_used_list ((From, needed)::NRest) H7 : hasNeeded ((To, C1)::KRest3) Needed1 ((To, C1)::L') H8 : checkProof ((To, C1)::L') ERest ============================ checkProof Needed (relocateClause From To ERest)
< search. Subgoal 9.2: Variables: Known Needed KRest C KRest2 Needed1 ERest To NRest Rest C1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause To To Rest) Ela : elaborate Known (relocateClause To To Rest) ((To, needed)::NRest) (relocateClause To To ERest) @ HN : hasNeeded Known ((To, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer To Is1 : is_integer To Is2 : is_proof Rest CP1 : mem (To, C1) Known CP2 : checkProof Known Rest ============================ checkProof Needed (relocateClause To To ERest)
< M: apply select_mem to Ela2. Subgoal 9.2: Variables: Known Needed KRest C KRest2 Needed1 ERest To NRest Rest C1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause To To Rest) Ela : elaborate Known (relocateClause To To Rest) ((To, needed)::NRest) (relocateClause To To ERest) @ HN : hasNeeded Known ((To, needed)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 ERest * Ela4 : select (To, needed) NRest Needed1 Is : is_integer To Is1 : is_integer To Is2 : is_proof Rest CP1 : mem (To, C1) Known CP2 : checkProof Known Rest M : mem (To, C) KRest ============================ checkProof Needed (relocateClause To To ERest)
< apply remove_all_no_mem to Ela1 M. Subgoal 10: Variables: Known CU E Needed Rest ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (relocateClause ID ID Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause ID ID Rest) Ela : elaborate Known (relocateClause ID ID Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : elaborate Known Rest CU E * ============================ checkProof Needed E
< Is: case IsP. Subgoal 10: Variables: Known CU E Needed Rest ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause ID ID Rest) Ela : elaborate Known (relocateClause ID ID Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : elaborate Known Rest CU E * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest ============================ checkProof Needed E
< CP: case CP (keep). Subgoal 10.1: Variables: Known CU E Needed Rest ID KRest C KRest2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause ID ID Rest) Ela : elaborate Known (relocateClause ID ID Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : elaborate Known Rest CU E * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest CP1 : ID = ID -> false CP2 : remove_all Known ID KRest CP3 : select (ID, C) KRest2 KRest CP4 : checkProof ((ID, C)::KRest2) Rest ============================ checkProof Needed E
< apply CP1 to _. Subgoal 10.2: Variables: Known CU E Needed Rest ID C IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause ID ID Rest) Ela : elaborate Known (relocateClause ID ID Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : elaborate Known Rest CU E * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest CP1 : mem (ID, C) Known CP2 : checkProof Known Rest ============================ checkProof Needed E
< apply IH to _ _ _ _ _ CP2 Ela1 HN. Subgoal 10.2: Variables: Known CU E Needed Rest ID C IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause ID ID Rest) Ela : elaborate Known (relocateClause ID ID Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : elaborate Known Rest CU E * Is : is_integer ID Is1 : is_integer ID Is2 : is_proof Rest CP1 : mem (ID, C) Known CP2 : checkProof Known Rest H1 : checkProof Needed E ============================ checkProof Needed E
< search. Subgoal 11: Variables: Known E Needed KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (relocateClause From To Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 ============================ checkProof Needed E
< Is: case IsP. Subgoal 11: Variables: Known E Needed KRest C KRest2 Needed1 NRest From Rest To IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest ============================ checkProof Needed E
< CP: case CP (keep). Subgoal 11.1: Variables: Known E Needed KRest C KRest2 Needed1 NRest From Rest To KRest1 C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) Rest ============================ checkProof Needed E
< apply remove_all_is to _ Ela1. Subgoal 11.1: Variables: Known E Needed KRest C KRest2 Needed1 NRest From Rest To KRest1 C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest1 CP3 : select (From, C1) KRest3 KRest1 CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed E
< apply remove_all_unique to CP2 Ela1. Subgoal 11.1: Variables: Known E Needed KRest C KRest2 Needed1 NRest From Rest To C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest ============================ checkProof Needed E
< apply good_clause_list_remove_all to _ CP2. Subgoal 11.1: Variables: Known E Needed KRest C KRest2 Needed1 NRest From Rest To C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest ============================ checkProof Needed E
< apply good_clause_list_selects to _ Ela2 CP3. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest ============================ checkProof Needed E
< apply select_is to _ Ela2. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 ============================ checkProof Needed E
< IsP: apply select_is_picked to _ Ela2. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 IsP : is_pair is_integer is_clause (From, C1) ============================ checkProof Needed E
< Is': case IsP. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 ============================ checkProof Needed E
< GCLKR+: assert good_clause_list ((To, C1)::KRest3). Subgoal 11.1.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 ============================ good_clause_list ((To, C1)::KRest3)
< unfold . Subgoal 11.1.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 ============================ forall ID C2 KRest C3, select (ID, C2) KRest ((To, C1)::KRest3) -> mem (ID, C3) KRest -> false
< intros S M. Subgoal 11.1.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 ID C2 KRest4 C3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (ID, C2) KRest4 ((To, C1)::KRest3) M : mem (ID, C3) KRest4 ============================ false
< S: case S. Subgoal 11.1.1.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 C3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 M : mem (To, C3) KRest3 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 11.1.1.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 C3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 M : mem (To, C3) KRest3 M' : mem (To, C3) KRest ============================ false
< apply remove_all_no_mem to Ela1 M'. Subgoal 11.1.1.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 ID C2 C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 M : mem (ID, C3) ((To, C1)::L1) S : select (ID, C2) L1 KRest3 ============================ false
< M: case M. Subgoal 11.1.1.2.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 C2 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (To, C2) L1 KRest3 ============================ false
< M: apply select_mem to S. Subgoal 11.1.1.2.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 C2 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (To, C2) L1 KRest3 M : mem (To, C2) KRest3 ============================ false
< M': apply mem_after_select_before to Ela2 M. Subgoal 11.1.1.2.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 C2 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (To, C2) L1 KRest3 M : mem (To, C2) KRest3 M' : mem (To, C2) KRest ============================ false
< M'': apply remove_all_no_mem to Ela1 M'. Subgoal 11.1.1.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 ID C2 C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 ============================ false
< apply good_clause_list_remove_all to _ Ela1. Subgoal 11.1.1.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 ID C2 C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 H4 : good_clause_list KRest ============================ false
< GCL': apply good_clause_list_select to _ Ela2. Subgoal 11.1.1.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 ID C2 C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 H4 : good_clause_list KRest GCL' : good_clause_list KRest3 ============================ false
< GCL': case GCL'. Subgoal 11.1.1.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 ID C2 C3 L1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 S : select (ID, C2) L1 KRest3 M : mem (ID, C3) L1 H4 : good_clause_list KRest GCL' : forall ID C1 KRest C2, select (ID, C1) KRest KRest3 -> mem (ID, C2) KRest -> false ============================ false
< apply GCL' to S M. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) ============================ checkProof Needed E
< RA: apply remove_all_exists to IsNeeded Is1. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR ============================ checkProof Needed E
< apply good_clause_list_remove_all to _ RA. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR ============================ checkProof Needed E
< apply remove_all_is to _ RA. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR ============================ checkProof Needed E
< GUL: apply elaboration_good_used_list to _ _ _ CP4 Ela3. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 ============================ checkProof Needed E
< HN': assert hasNeeded ((To, C1)::KRest3) Needed1 KR. Subgoal 11.1.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 ============================ hasNeeded ((To, C1)::KRest3) Needed1 KR
< unfold . Subgoal 11.1.2.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 ============================ forall ID, mem (ID, needed) Needed1 -> exists C, mem (ID, C) KR
< intros MN1. Subgoal 11.1.2.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MN1 : mem (ID, needed) Needed1 ============================ exists C, mem (ID, C) KR
< HN: case HN. Subgoal 11.1.2.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MN1 : mem (ID, needed) Needed1 HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ exists C, mem (ID, C) KR
< Or: apply select_mem_or to Ela4 MN1. Subgoal 11.1.2.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MN1 : mem (ID, needed) Needed1 HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK Or : (ID, needed) = (To, unknown) \/ mem (ID, needed) NRest ============================ exists C, mem (ID, C) KR
< MNR: case Or. Subgoal 11.1.2.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MN1 : mem (ID, needed) Needed1 HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNR : mem (ID, needed) NRest ============================ exists C, mem (ID, C) KR
< MN: apply HN to _ with ID = ID. Subgoal 11.1.2.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MN1 : mem (ID, needed) Needed1 HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNR : mem (ID, needed) NRest MN : mem (ID, C2) Needed ============================ exists C, mem (ID, C) KR
< apply remove_all_still_mem to RA MN _. Subgoal 11.1.2.1.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MN1 : mem (ID, needed) Needed1 HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNR : mem (ID, needed) NRest MN : mem (ID, C2) Needed ============================ To = ID -> false
< intros E. Subgoal 11.1.2.1.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MN1 : mem (ID, needed) Needed1 HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNR : mem (ID, needed) NRest MN : mem (ID, C2) Needed E : To = ID ============================ false
< case E. Subgoal 11.1.2.1.1: Variables: Known E Needed KRest Needed1 NRest From Rest C1 KRest3 KR ID C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From ID Rest) Ela : elaborate Known (relocateClause From ID Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known ID KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((ID, C1)::KRest3) Rest Needed1 E * Ela4 : select (ID, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer ID Is2 : is_proof Rest CP1 : ID = From -> false CP2 : remove_all Known ID KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((ID, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((ID, C1)::KRest3) RA : remove_all Needed ID KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MN1 : mem (ID, needed) Needed1 HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNR : mem (ID, needed) NRest MN : mem (ID, C2) Needed ============================ false
< MN': apply mem_after_select_before to Ela4 MNR. Subgoal 11.1.2.1.1: Variables: Known E Needed KRest Needed1 NRest From Rest C1 KRest3 KR ID C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From ID Rest) Ela : elaborate Known (relocateClause From ID Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known ID KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((ID, C1)::KRest3) Rest Needed1 E * Ela4 : select (ID, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer ID Is2 : is_proof Rest CP1 : ID = From -> false CP2 : remove_all Known ID KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((ID, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((ID, C1)::KRest3) RA : remove_all Needed ID KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MN1 : mem (ID, needed) Needed1 HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNR : mem (ID, needed) NRest MN : mem (ID, C2) Needed MN' : mem (ID, needed) Needed1 ============================ false
< MN'': apply select_mem to Ela4. Subgoal 11.1.2.1.1: Variables: Known E Needed KRest Needed1 NRest From Rest C1 KRest3 KR ID C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From ID Rest) Ela : elaborate Known (relocateClause From ID Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known ID KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((ID, C1)::KRest3) Rest Needed1 E * Ela4 : select (ID, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer ID Is2 : is_proof Rest CP1 : ID = From -> false CP2 : remove_all Known ID KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((ID, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((ID, C1)::KRest3) RA : remove_all Needed ID KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MN1 : mem (ID, needed) Needed1 HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNR : mem (ID, needed) NRest MN : mem (ID, C2) Needed MN' : mem (ID, needed) Needed1 MN'' : mem (ID, unknown) Needed1 ============================ false
< apply good_used_list_mems to _ MN' MN''. Subgoal 11.1.2.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MN1 : mem (ID, needed) Needed1 HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK MNR : mem (ID, needed) NRest MN : mem (ID, C2) Needed H6 : mem (ID, C2) KR ============================ exists C, mem (ID, C) KR
< search. Subgoal 11.1.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 ============================ forall ID CN CK, mem (ID, CN) KR -> mem (ID, CK) ((To, C1)::KRest3) -> CN = CK
< intros MKR MKR3+. Subgoal 11.1.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MKR : mem (ID, CN) KR MKR3+ : mem (ID, CK) ((To, C1)::KRest3) ============================ CN = CK
< MKR3: case MKR3+. Subgoal 11.1.2.2.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR CN IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MKR : mem (To, CN) KR ============================ CN = C1
< apply remove_all_no_mem to RA MKR. Subgoal 11.1.2.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MKR : mem (ID, CN) KR MKR3 : mem (ID, CK) KRest3 ============================ CN = CK
< MKRest: apply mem_after_select_before to Ela2 MKR3. Subgoal 11.1.2.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MKR : mem (ID, CN) KR MKR3 : mem (ID, CK) KRest3 MKRest : mem (ID, CK) KRest ============================ CN = CK
< MK: apply remove_all_mem_after to Ela1 MKRest. Subgoal 11.1.2.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MKR : mem (ID, CN) KR MKR3 : mem (ID, CK) KRest3 MKRest : mem (ID, CK) KRest MK : mem (ID, CK) Known ============================ CN = CK
< MN: apply remove_all_mem_after to RA MKR. Subgoal 11.1.2.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MKR : mem (ID, CN) KR MKR3 : mem (ID, CK) KRest3 MKRest : mem (ID, CK) KRest MK : mem (ID, CK) Known MN : mem (ID, CN) Needed ============================ CN = CK
< HN: case HN. Subgoal 11.1.2.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID CN CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MKR : mem (ID, CN) KR MKR3 : mem (ID, CK) KRest3 MKRest : mem (ID, CK) KRest MK : mem (ID, CK) Known MN : mem (ID, CN) Needed HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CN = CK
< apply HN1 to MN MK. Subgoal 11.1.2.2.2: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID CK IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 MKR : mem (ID, CK) KR MKR3 : mem (ID, CK) KRest3 MKRest : mem (ID, CK) KRest MK : mem (ID, CK) Known MN : mem (ID, CK) Needed HN : forall ID, mem (ID, needed) ((From, unknown)::NRest) -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CK = CK
< search. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 HN' : hasNeeded ((To, C1)::KRest3) Needed1 KR ============================ checkProof Needed E
< CP': apply IH to _ _ _ _ _ CP4 Ela3 HN'. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 HN' : hasNeeded ((To, C1)::KRest3) Needed1 KR CP' : checkProof KR E ============================ checkProof Needed E
< apply elaboration_check_add to _ _ _ _ _ _ GCL_N Ela3 CP' _. Subgoal 11.1.3: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 HN' : hasNeeded ((To, C1)::KRest3) Needed1 KR CP' : checkProof KR E ============================ forall ID C, mem (ID, C) KR -> mem (ID, C) Needed
< intros M. Subgoal 11.1.3: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 HN' : hasNeeded ((To, C1)::KRest3) Needed1 KR CP' : checkProof KR E M : mem (ID, C2) KR ============================ mem (ID, C2) Needed
< apply remove_all_mem_after to RA M. Subgoal 11.1.3: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR ID C2 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 HN' : hasNeeded ((To, C1)::KRest3) Needed1 KR CP' : checkProof KR E M : mem (ID, C2) KR H6 : mem (ID, C2) Needed ============================ mem (ID, C2) Needed
< search. Subgoal 11.1: Variables: Known E Needed KRest Needed1 NRest From Rest To C1 KRest3 KR IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause From To Rest) Ela : elaborate Known (relocateClause From To Rest) ((From, unknown)::NRest) E @ HN : hasNeeded Known ((From, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (From, C1) KRest3 KRest Ela3 : elaborate ((To, C1)::KRest3) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer From Is1 : is_integer To Is2 : is_proof Rest CP1 : To = From -> false CP2 : remove_all Known To KRest CP3 : select (From, C1) KRest3 KRest CP4 : checkProof ((To, C1)::KRest3) Rest H1 : is_list (is_pair is_integer is_clause) KRest H2 : good_clause_list KRest H3 : is_list (is_pair is_integer is_clause) KRest3 Is' : is_integer From Is'1 : is_clause C1 GCLKR+ : good_clause_list ((To, C1)::KRest3) RA : remove_all Needed To KR H4 : good_clause_list KR H5 : is_list (is_pair is_integer is_clause) KR GUL : good_used_list Needed1 HN' : hasNeeded ((To, C1)::KRest3) Needed1 KR CP' : checkProof KR E H6 : checkProof Needed E ============================ checkProof Needed E
< search. Subgoal 11.2: Variables: Known E Needed KRest C KRest2 Needed1 NRest Rest To C1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause To To Rest) Ela : elaborate Known (relocateClause To To Rest) ((To, unknown)::NRest) E @ HN : hasNeeded Known ((To, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer To Is1 : is_integer To Is2 : is_proof Rest CP1 : mem (To, C1) Known CP2 : checkProof Known Rest ============================ checkProof Needed E
< M: apply select_mem to Ela2. Subgoal 11.2: Variables: Known E Needed KRest C KRest2 Needed1 NRest Rest To C1 IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (relocateClause To To Rest) Ela : elaborate Known (relocateClause To To Rest) ((To, unknown)::NRest) E @ HN : hasNeeded Known ((To, unknown)::NRest) Needed Ela1 : remove_all Known To KRest Ela2 : select (To, C) KRest2 KRest Ela3 : elaborate ((To, C)::KRest2) Rest Needed1 E * Ela4 : select (To, unknown) NRest Needed1 Is : is_integer To Is1 : is_integer To Is2 : is_proof Rest CP1 : mem (To, C1) Known CP2 : checkProof Known Rest M : mem (To, C) KRest ============================ checkProof Needed E
< apply remove_all_no_mem to Ela1 M. Subgoal 12: Variables: Known CU E Needed Rest Comment IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof (commentProof Comment Rest) IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (commentProof Comment Rest) Ela : elaborate Known (commentProof Comment Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : elaborate Known Rest CU E * ============================ checkProof Needed E
< case IsP. Subgoal 12: Variables: Known CU E Needed Rest Comment IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known (commentProof Comment Rest) Ela : elaborate Known (commentProof Comment Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : elaborate Known Rest CU E * H1 : is_string Comment H2 : is_proof Rest ============================ checkProof Needed E
< CP: case CP. Subgoal 12: Variables: Known CU E Needed Rest Comment IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed Ela : elaborate Known (commentProof Comment Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : elaborate Known Rest CU E * H1 : is_string Comment H2 : is_proof Rest CP : checkProof Known Rest ============================ checkProof Needed E
< apply IH to _ _ _ _ _ CP Ela1 HN. Subgoal 12: Variables: Known CU E Needed Rest Comment IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed Ela : elaborate Known (commentProof Comment Rest) CU E @ HN : hasNeeded Known CU Needed Ela1 : elaborate Known Rest CU E * H1 : is_string Comment H2 : is_proof Rest CP : checkProof Known Rest H3 : checkProof Needed E ============================ checkProof Needed E
< search. Subgoal 13: Variables: Known CU E Needed PT IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof <unknown I proof> IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ HN : hasNeeded Known CU Needed Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * ============================ checkProof Needed E
< apply proj_proof_is to Ela1 _ _ _. Subgoal 13: Variables: Known CU E Needed PT IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof <unknown I proof> IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ HN : hasNeeded Known CU Needed Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * H1 : is_proof PT ============================ checkProof Needed E
< CP': apply proj_checkProof to Ela1 CP _ _. Subgoal 13: Variables: Known CU E Needed PT IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof <unknown I proof> IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ HN : hasNeeded Known CU Needed Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * H1 : is_proof PT CP' : checkProof Known PT ============================ checkProof Needed E
< apply IH to _ _ _ _ _ CP' Ela2 HN. Subgoal 13: Variables: Known CU E Needed PT IH : forall Known P CU E Needed, is_proof P -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Known -> good_clause_list Needed -> checkProof Known P -> elaborate Known P CU E * -> hasNeeded Known CU Needed -> checkProof Needed E IsP : is_proof <unknown I proof> IsKnown : is_list (is_pair is_integer is_clause) Known IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_N : good_clause_list Needed CP : checkProof Known <unknown I proof> Ela : elaborate Known <unknown I proof> CU E @ HN : hasNeeded Known CU Needed Ela1 : Known |{proof}- <unknown I proof> ~~> PT Ela2 : elaborate Known PT CU E * H1 : is_proof PT CP' : checkProof Known PT H2 : checkProof Needed E ============================ checkProof Needed E
< search. Proof completed.
< Theorem full_elaboration_valid : forall F P P', is_formula F -> is_proof P -> proveFormula F P -> fullElaborate F P P' -> proveFormula F P'. ============================ forall F P P', is_formula F -> is_proof P -> proveFormula F P -> fullElaborate F P P' -> proveFormula F P'
< intros IsF IsP PF FE. Variables: F P P' IsF : is_formula F IsP : is_proof P PF : proveFormula F P FE : fullElaborate F P P' ============================ proveFormula F P'
< PF: case PF. Variables: F P P' KnownClauses IsF : is_formula F IsP : is_proof P FE : fullElaborate F P P' PF : formulaToKnown 1 F KnownClauses PF1 : checkProof KnownClauses P ============================ proveFormula F P'
< FE: case FE. Variables: F P P' KnownClauses Known Needed IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F KnownClauses PF1 : checkProof KnownClauses P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' ============================ proveFormula F P'
< apply formulaToKnown_is to _ _ PF. Variables: F P P' KnownClauses Known Needed IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F KnownClauses PF1 : checkProof KnownClauses P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) KnownClauses ============================ proveFormula F P'
< GCL: assert good_clause_list KnownClauses. Subgoal 1: Variables: F P P' KnownClauses Known Needed IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F KnownClauses PF1 : checkProof KnownClauses P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) KnownClauses ============================ good_clause_list KnownClauses
< unfold . Subgoal 1: Variables: F P P' KnownClauses Known Needed IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F KnownClauses PF1 : checkProof KnownClauses P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) KnownClauses ============================ forall ID C1 KRest C2, select (ID, C1) KRest KnownClauses -> mem (ID, C2) KRest -> false
< intros S M. Subgoal 1: Variables: F P P' KnownClauses Known Needed ID C1 KRest C2 IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F KnownClauses PF1 : checkProof KnownClauses P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) KnownClauses S : select (ID, C1) KRest KnownClauses M : mem (ID, C2) KRest ============================ false
< backchain formulaToKnown_all_unique. Variables: F P P' KnownClauses Known Needed IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F KnownClauses PF1 : checkProof KnownClauses P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) KnownClauses GCL : good_clause_list KnownClauses ============================ proveFormula F P'
< apply formulaToKnown_unique to _ _ PF FE. Variables: F P P' Known Needed IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F Known PF1 : checkProof Known P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ proveFormula F P'
< HN: assert hasNeeded Known Needed Known. Subgoal 2: Variables: F P P' Known Needed IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F Known PF1 : checkProof Known P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ hasNeeded Known Needed Known
< unfold . Subgoal 2.1: Variables: F P P' Known Needed IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F Known PF1 : checkProof Known P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ forall ID, mem (ID, needed) Needed -> exists C, mem (ID, C) Known
< intros M. Subgoal 2.1: Variables: F P P' Known Needed ID IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F Known PF1 : checkProof Known P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, needed) Needed ============================ exists C, mem (ID, C) Known
< apply elaboration_all_mem to _ _ _ PF1 FE1 M. Subgoal 2.1: Variables: F P P' Known Needed ID C IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F Known PF1 : checkProof Known P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, needed) Needed H2 : mem (ID, C) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 2.2: Variables: F P P' Known Needed IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F Known PF1 : checkProof Known P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ forall ID CN CK, mem (ID, CN) Known -> mem (ID, CK) Known -> CN = CK
< intros M M'. Subgoal 2.2: Variables: F P P' Known Needed ID CN CK IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F Known PF1 : checkProof Known P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, CN) Known M' : mem (ID, CK) Known ============================ CN = CK
< apply good_clause_list_mems to _ M M'. Subgoal 2.2: Variables: F P P' Known Needed ID CK IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F Known PF1 : checkProof Known P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, CK) Known M' : mem (ID, CK) Known ============================ CK = CK
< search. Variables: F P P' Known Needed IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F Known PF1 : checkProof Known P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known ============================ proveFormula F P'
< apply elaboration_valid to _ _ _ _ _ PF1 FE1 HN. Variables: F P P' Known Needed IsF : is_formula F IsP : is_proof P PF : formulaToKnown 1 F Known PF1 : checkProof Known P FE : formulaToKnown 1 F Known FE1 : elaborate Known P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : checkProof Known P' ============================ proveFormula F P'
< search. Proof completed.
< Extensible_Theorem elaborationFrat_all_mem : forall Clauses Known P CU E ID U, IsP : is_fratProof P -> GCL : good_clause_list Known -> IsKnown : is_list (is_pair is_integer is_clause) Known -> GCLC : good_clause_list Clauses -> IsClauses : is_list (is_pair is_integer is_clause) Clauses -> CP : checkFratProof Clauses Known P -> Ela : elaborateFratProof Clauses Known P CU E -> NoMem : (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> Mem : mem (ID, U) CU -> exists C, mem (ID, C) Known on Ela, elaborationFrat_good_used_list : forall Clauses Known P CU E, IsP : is_fratProof P -> GCL : good_clause_list Known -> IsKnown : is_list (is_pair is_integer is_clause) Known -> GCLC : good_clause_list Clauses -> IsClauses : is_list (is_pair is_integer is_clause) Clauses -> CP : checkFratProof Clauses Known P -> Ela : elaborateFratProof Clauses Known P CU E -> NoMem : (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU on Ela. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU IsP : is_fratProof (addOriginal ID1 C Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (addOriginal ID1 C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (addOriginal ID1 C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID1, C)::Known) Rest ============================ exists C, mem (ID, C) Known
< apply select_is to _ Ela1. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest ============================ exists C, mem (ID, C) Known
< Is': apply select_is_picked to _ Ela1. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest Is' : is_pair is_integer is_clause (ID1, C) ============================ exists C, mem (ID, C) Known
< case Is'. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C ============================ exists C, mem (ID, C) Known
< apply good_clause_list_select to _ Ela1. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest ============================ exists C, mem (ID, C) Known
< apply good_clause_list_selects to _ CP Ela1. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest ============================ exists C, mem (ID, C) Known
< assert good_clause_list ((ID1, C)::Known). Subgoal 1.1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest ============================ good_clause_list ((ID1, C)::Known)
< unfold . Subgoal 1.1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest ============================ forall ID C1 KRest C2, select (ID, C1) KRest ((ID1, C)::Known) -> mem (ID, C2) KRest -> false
< intros S M'. Subgoal 1.1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest ID2 C1 KRest C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID2, C1) KRest ((ID1, C)::Known) M' : mem (ID2, C2) KRest ============================ false
< S: case S. Subgoal 1.1.1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest M' : mem (ID1, C2) Known ============================ false
< M'': apply select_mem to Ela1. Subgoal 1.1.1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest M' : mem (ID1, C2) Known M'' : mem (ID1, C) Clauses ============================ false
< apply NoMem to M' M''. Subgoal 1.1.1.2: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest ID2 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest M' : mem (ID2, C2) ((ID1, C)::L1) S : select (ID2, C1) L1 Known ============================ false
< M': case M'. Subgoal 1.1.1.2.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) L1 Known ============================ false
< MS: apply select_mem to S. Subgoal 1.1.1.2.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) L1 Known MS : mem (ID1, C1) Known ============================ false
< M'': apply select_mem to Ela1. Subgoal 1.1.1.2.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) L1 Known MS : mem (ID1, C1) Known M'' : mem (ID1, C) Clauses ============================ false
< apply NoMem to MS M''. Subgoal 1.1.1.2.2: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest ID2 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID2, C1) L1 Known M' : mem (ID2, C2) L1 ============================ false
< GCL: case GCL. Subgoal 1.1.1.2.2: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest ID2 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID2, C1) L1 Known M' : mem (ID2, C2) L1 GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to S M'. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) ============================ exists C, mem (ID, C) Known
< assert forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false. Subgoal 1.1.2: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) ============================ forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false
< intros MK+ MCR. Subgoal 1.1.2: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest ID2 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) MK+ : mem (ID2, CK) ((ID1, C)::Known) MCR : mem (ID2, CC) CRest ============================ false
< MK: case MK+. Subgoal 1.1.2.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) MCR : mem (ID1, CC) CRest ============================ false
< GCLC: case GCLC. Subgoal 1.1.2.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) MCR : mem (ID1, CC) CRest GCLC : forall ID C1 KRest C2, select (ID, C1) KRest Clauses -> mem (ID, C2) KRest -> false ============================ false
< apply GCLC to Ela1 MCR. Subgoal 1.1.2.2: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest ID2 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) MCR : mem (ID2, CC) CRest MK : mem (ID2, CK) Known ============================ false
< MC: apply mem_after_select_before to Ela1 MCR. Subgoal 1.1.2.2: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest ID2 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) MCR : mem (ID2, CC) CRest MK : mem (ID2, CK) Known MC : mem (ID2, CC) Clauses ============================ false
< apply NoMem to MK MC. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false ============================ exists C, mem (ID, C) Known
< GUL: apply IH1 to _ _ _ _ _ CP1 Ela2 _. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false GUL : good_used_list Needed ============================ exists C, mem (ID, C) Known
< MN: apply mem_after_select_before to Ela3 Mem. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false GUL : good_used_list Needed MN : mem (ID, U) Needed ============================ exists C, mem (ID, C) Known
< MK+: apply IH to _ _ _ _ _ CP1 Ela2 _ MN. Subgoal 1.1: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest C1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false GUL : good_used_list Needed MN : mem (ID, U) Needed MK+ : mem (ID, C1) ((ID1, C)::Known) ============================ exists C, mem (ID, C) Known
< MK: case MK+. Subgoal 1.1.3: Variables: Clauses Known CU U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID1, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false GUL : good_used_list Needed MN : mem (ID1, U) Needed ============================ exists C, mem (ID1, C) Known
< GUL: case GUL. Subgoal 1.1.3: Variables: Clauses Known CU U CRest Needed E1 C ID1 Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID1, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false MN : mem (ID1, U) Needed GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ exists C, mem (ID1, C) Known
< apply GUL to Ela3 Mem. Subgoal 1.1.4: Variables: Clauses Known CU ID U CRest Needed E1 C ID1 Rest C1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU (addOriginal ID1 C E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E1 * Ela3 : select (ID1, needed) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false GUL : good_used_list Needed MN : mem (ID, U) Needed MK : mem (ID, C1) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU IsP : is_fratProof (addOriginal ID1 C Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (addOriginal ID1 C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (addOriginal ID1 C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID1, C)::Known) Rest ============================ exists C, mem (ID, C) Known
< apply select_is to _ Ela1. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest ============================ exists C, mem (ID, C) Known
< Is': apply select_is_picked to _ Ela1. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest Is' : is_pair is_integer is_clause (ID1, C) ============================ exists C, mem (ID, C) Known
< case Is'. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C ============================ exists C, mem (ID, C) Known
< apply good_clause_list_select to _ Ela1. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest ============================ exists C, mem (ID, C) Known
< apply good_clause_list_selects to _ CP Ela1. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest ============================ exists C, mem (ID, C) Known
< assert good_clause_list ((ID1, C)::Known). Subgoal 1.2.1: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest ============================ good_clause_list ((ID1, C)::Known)
< unfold . Subgoal 1.2.1: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest ============================ forall ID C1 KRest C2, select (ID, C1) KRest ((ID1, C)::Known) -> mem (ID, C2) KRest -> false
< intros S M'. Subgoal 1.2.1: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 ID2 C1 KRest C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID2, C1) KRest ((ID1, C)::Known) M' : mem (ID2, C2) KRest ============================ false
< S: case S. Subgoal 1.2.1.1: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest M' : mem (ID1, C2) Known ============================ false
< M'': apply select_mem to Ela1. Subgoal 1.2.1.1: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest M' : mem (ID1, C2) Known M'' : mem (ID1, C) Clauses ============================ false
< apply NoMem to M' M''. Subgoal 1.2.1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 ID2 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest M' : mem (ID2, C2) ((ID1, C)::L1) S : select (ID2, C1) L1 Known ============================ false
< M': case M'. Subgoal 1.2.1.2.1: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) L1 Known ============================ false
< MS: apply select_mem to S. Subgoal 1.2.1.2.1: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) L1 Known MS : mem (ID1, C1) Known ============================ false
< M'': apply select_mem to Ela1. Subgoal 1.2.1.2.1: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) L1 Known MS : mem (ID1, C1) Known M'' : mem (ID1, C) Clauses ============================ false
< apply NoMem to MS M''. Subgoal 1.2.1.2.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 ID2 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID2, C1) L1 Known M' : mem (ID2, C2) L1 ============================ false
< GCL: case GCL. Subgoal 1.2.1.2.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 ID2 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest S : select (ID2, C1) L1 Known M' : mem (ID2, C2) L1 GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to S M'. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) ============================ exists C, mem (ID, C) Known
< assert forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false. Subgoal 1.2.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) ============================ forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false
< intros MK+ MCR. Subgoal 1.2.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 ID2 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) MK+ : mem (ID2, CK) ((ID1, C)::Known) MCR : mem (ID2, CC) CRest ============================ false
< MK: case MK+. Subgoal 1.2.2.1: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) MCR : mem (ID1, CC) CRest ============================ false
< GCLC: case GCLC. Subgoal 1.2.2.1: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) MCR : mem (ID1, CC) CRest GCLC : forall ID C1 KRest C2, select (ID, C1) KRest Clauses -> mem (ID, C2) KRest -> false ============================ false
< apply GCLC to Ela1 MCR. Subgoal 1.2.2.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 ID2 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) MCR : mem (ID2, CC) CRest MK : mem (ID2, CK) Known ============================ false
< MC: apply mem_after_select_before to Ela1 MCR. Subgoal 1.2.2.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 ID2 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) MCR : mem (ID2, CC) CRest MK : mem (ID2, CK) Known MC : mem (ID2, CC) Clauses ============================ false
< apply NoMem to MK MC. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false ============================ exists C, mem (ID, C) Known
< GUL: apply IH1 to _ _ _ _ _ CP1 Ela2 _. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false GUL : good_used_list Needed ============================ exists C, mem (ID, C) Known
< MN: apply mem_after_select_before to Ela3 Mem. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false GUL : good_used_list Needed MN : mem (ID, U) Needed ============================ exists C, mem (ID, C) Known
< MK+: apply IH to _ _ _ _ _ CP1 Ela2 _ MN. Subgoal 1.2: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 C1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false GUL : good_used_list Needed MN : mem (ID, U) Needed MK+ : mem (ID, C1) ((ID1, C)::Known) ============================ exists C, mem (ID, C) Known
< MK: case MK+. Subgoal 1.2.3: Variables: Clauses Known CU E U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID1, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false GUL : good_used_list Needed MN : mem (ID1, U) Needed ============================ exists C, mem (ID1, C) Known
< GUL: case GUL. Subgoal 1.2.3: Variables: Clauses Known CU E U CRest Needed Rest C ID1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID1, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false MN : mem (ID1, U) Needed GUL : forall ID U1 CURest U2, select (ID, U1) CURest Needed -> mem (ID, U2) CURest -> false ============================ exists C, mem (ID1, C) Known
< apply GUL to Ela3 Mem. Subgoal 1.2.4: Variables: Clauses Known CU E ID U CRest Needed Rest C ID1 C1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID1 C Rest) CU E @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : select (ID1, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID1, C)::Known) Rest Needed E * Ela3 : select (ID1, unknown) CU Needed Is : is_integer ID1 Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID1, C) CRest Clauses CP1 : checkFratProof CRest ((ID1, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID1 H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID1, C)::Known) H6 : forall ID CK CC, mem (ID, CK) ((ID1, C)::Known) -> mem (ID, CC) CRest -> false GUL : good_used_list Needed MN : mem (ID, U) Needed MK : mem (ID, C1) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 1.3: Variables: Clauses Known CU ID U E1 P1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU IsP : is_fratProof (endOriginal P1) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (endOriginal P1) Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : elaborate Known P1 CU E1 ============================ exists C, mem (ID, C) Known
< Is: case IsP. Subgoal 1.3: Variables: Clauses Known CU ID U E1 P1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (endOriginal P1) Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : elaborate Known P1 CU E1 Is : is_proof P1 ============================ exists C, mem (ID, C) Known
< CP: case CP. Subgoal 1.3: Variables: Clauses Known CU ID U E1 P1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : elaborate Known P1 CU E1 Is : is_proof P1 CP : checkProof Known P1 ============================ exists C, mem (ID, C) Known
< apply elaboration_all_mem to _ _ _ CP Ela1 Mem. Subgoal 1.3: Variables: Clauses Known CU ID U E1 P1 C IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false Mem : mem (ID, U) CU Ela1 : elaborate Known P1 CU E1 Is : is_proof P1 CP : checkProof Known P1 H1 : mem (ID, C) Known ============================ exists C, mem (ID, C) Known
< search. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU IsP : is_fratProof (addOriginal ID C Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed ============================ good_used_list CU
< Is: case IsP. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest ============================ good_used_list CU
< CP: case CP. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID, C)::Known) Rest ============================ good_used_list CU
< apply select_is to _ Ela1. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest ============================ good_used_list CU
< Is': apply select_is_picked to _ Ela1. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest Is' : is_pair is_integer is_clause (ID, C) ============================ good_used_list CU
< case Is'. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C ============================ good_used_list CU
< apply good_clause_list_select to _ Ela1. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest ============================ good_used_list CU
< apply good_clause_list_selects to _ CP Ela1. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest ============================ good_used_list CU
< assert good_clause_list ((ID, C)::Known). Subgoal 2.1.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest ============================ good_clause_list ((ID, C)::Known)
< unfold . Subgoal 2.1.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest ============================ forall ID1 C1 KRest C2, select (ID1, C1) KRest ((ID, C)::Known) -> mem (ID1, C2) KRest -> false
< intros S M. Subgoal 2.1.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest ID1 C1 KRest C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) KRest ((ID, C)::Known) M : mem (ID1, C2) KRest ============================ false
< S: case S. Subgoal 2.1.1.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest M : mem (ID, C2) Known ============================ false
< M': apply select_mem to Ela1. Subgoal 2.1.1.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest M : mem (ID, C2) Known M' : mem (ID, C) Clauses ============================ false
< apply NoMem to M M'. Subgoal 2.1.1.2: Variables: Clauses Known CU CRest Needed E1 C ID Rest ID1 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest M : mem (ID1, C2) ((ID, C)::L1) S : select (ID1, C1) L1 Known ============================ false
< M: case M. Subgoal 2.1.1.2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID, C1) L1 Known ============================ false
< MS: apply select_mem to S. Subgoal 2.1.1.2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID, C1) L1 Known MS : mem (ID, C1) Known ============================ false
< M': apply select_mem to Ela1. Subgoal 2.1.1.2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID, C1) L1 Known MS : mem (ID, C1) Known M' : mem (ID, C) Clauses ============================ false
< apply NoMem to MS M'. Subgoal 2.1.1.2.2: Variables: Clauses Known CU CRest Needed E1 C ID Rest ID1 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) L1 Known M : mem (ID1, C2) L1 ============================ false
< GCL: case GCL. Subgoal 2.1.1.2.2: Variables: Clauses Known CU CRest Needed E1 C ID Rest ID1 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) L1 Known M : mem (ID1, C2) L1 GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to S M. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) ============================ good_used_list CU
< assert forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false. Subgoal 2.1.2: Variables: Clauses Known CU CRest Needed E1 C ID Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) ============================ forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false
< intros MK+ MCR. Subgoal 2.1.2: Variables: Clauses Known CU CRest Needed E1 C ID Rest ID1 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MK+ : mem (ID1, CK) ((ID, C)::Known) MCR : mem (ID1, CC) CRest ============================ false
< MK: case MK+. Subgoal 2.1.2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID, CC) CRest ============================ false
< GCLC: case GCLC. Subgoal 2.1.2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID, CC) CRest GCLC : forall ID C1 KRest C2, select (ID, C1) KRest Clauses -> mem (ID, C2) KRest -> false ============================ false
< apply GCLC to Ela1 MCR. Subgoal 2.1.2.2: Variables: Clauses Known CU CRest Needed E1 C ID Rest ID1 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID1, CC) CRest MK : mem (ID1, CK) Known ============================ false
< MC: apply mem_after_select_before to Ela1 MCR. Subgoal 2.1.2.2: Variables: Clauses Known CU CRest Needed E1 C ID Rest ID1 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID1, CC) CRest MK : mem (ID1, CK) Known MC : mem (ID1, CC) Clauses ============================ false
< apply NoMem to MK MC. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false ============================ good_used_list CU
< GUL: apply IH1 to _ _ _ _ _ CP1 Ela2 _. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false GUL : good_used_list Needed ============================ good_used_list CU
< apply good_used_list_select to GUL Ela3. Subgoal 2.1: Variables: Clauses Known CU CRest Needed E1 C ID Rest IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E1 * Ela3 : select (ID, needed) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false GUL : good_used_list Needed H7 : good_used_list CU ============================ good_used_list CU
< search. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU IsP : is_fratProof (addOriginal ID C Rest) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed ============================ good_used_list CU
< Is: case IsP. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest ============================ good_used_list CU
< CP: case CP. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID, C)::Known) Rest ============================ good_used_list CU
< apply select_is to _ Ela1. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest ============================ good_used_list CU
< Is': apply select_is_picked to _ Ela1. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest Is' : is_pair is_integer is_clause (ID, C) ============================ good_used_list CU
< case Is'. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C ============================ good_used_list CU
< apply good_clause_list_select to _ Ela1. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID CRest1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest1 Clauses CP1 : checkFratProof CRest1 ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest ============================ good_used_list CU
< apply good_clause_list_selects to _ CP Ela1. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest ============================ good_used_list CU
< assert good_clause_list ((ID, C)::Known). Subgoal 2.2.1: Variables: Clauses Known CU E CRest Needed Rest C ID IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest ============================ good_clause_list ((ID, C)::Known)
< unfold . Subgoal 2.2.1: Variables: Clauses Known CU E CRest Needed Rest C ID IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest ============================ forall ID1 C1 KRest C2, select (ID1, C1) KRest ((ID, C)::Known) -> mem (ID1, C2) KRest -> false
< intros S M. Subgoal 2.2.1: Variables: Clauses Known CU E CRest Needed Rest C ID ID1 C1 KRest C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) KRest ((ID, C)::Known) M : mem (ID1, C2) KRest ============================ false
< S: case S. Subgoal 2.2.1.1: Variables: Clauses Known CU E CRest Needed Rest C ID C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest M : mem (ID, C2) Known ============================ false
< M': apply select_mem to Ela1. Subgoal 2.2.1.1: Variables: Clauses Known CU E CRest Needed Rest C ID C2 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest M : mem (ID, C2) Known M' : mem (ID, C) Clauses ============================ false
< apply NoMem to M M'. Subgoal 2.2.1.2: Variables: Clauses Known CU E CRest Needed Rest C ID ID1 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest M : mem (ID1, C2) ((ID, C)::L1) S : select (ID1, C1) L1 Known ============================ false
< M: case M. Subgoal 2.2.1.2.1: Variables: Clauses Known CU E CRest Needed Rest C ID C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID, C1) L1 Known ============================ false
< MS: apply select_mem to S. Subgoal 2.2.1.2.1: Variables: Clauses Known CU E CRest Needed Rest C ID C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID, C1) L1 Known MS : mem (ID, C1) Known ============================ false
< M': apply select_mem to Ela1. Subgoal 2.2.1.2.1: Variables: Clauses Known CU E CRest Needed Rest C ID C1 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID, C1) L1 Known MS : mem (ID, C1) Known M' : mem (ID, C) Clauses ============================ false
< apply NoMem to MS M'. Subgoal 2.2.1.2.2: Variables: Clauses Known CU E CRest Needed Rest C ID ID1 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) L1 Known M : mem (ID1, C2) L1 ============================ false
< GCL: case GCL. Subgoal 2.2.1.2.2: Variables: Clauses Known CU E CRest Needed Rest C ID ID1 C1 C2 L1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest S : select (ID1, C1) L1 Known M : mem (ID1, C2) L1 GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to S M. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) ============================ good_used_list CU
< assert forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false. Subgoal 2.2.2: Variables: Clauses Known CU E CRest Needed Rest C ID IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) ============================ forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false
< intros MK+ MCR. Subgoal 2.2.2: Variables: Clauses Known CU E CRest Needed Rest C ID ID1 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MK+ : mem (ID1, CK) ((ID, C)::Known) MCR : mem (ID1, CC) CRest ============================ false
< MK: case MK+. Subgoal 2.2.2.1: Variables: Clauses Known CU E CRest Needed Rest C ID CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID, CC) CRest ============================ false
< GCLC: case GCLC. Subgoal 2.2.2.1: Variables: Clauses Known CU E CRest Needed Rest C ID CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID, CC) CRest GCLC : forall ID C1 KRest C2, select (ID, C1) KRest Clauses -> mem (ID, C2) KRest -> false ============================ false
< apply GCLC to Ela1 MCR. Subgoal 2.2.2.2: Variables: Clauses Known CU E CRest Needed Rest C ID ID1 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID1, CC) CRest MK : mem (ID1, CK) Known ============================ false
< MC: apply mem_after_select_before to Ela1 MCR. Subgoal 2.2.2.2: Variables: Clauses Known CU E CRest Needed Rest C ID ID1 CK CC IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID1, CC) CRest MK : mem (ID1, CK) Known MC : mem (ID1, CC) Clauses ============================ false
< apply NoMem to MK MC. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false ============================ good_used_list CU
< GUL: apply IH1 to _ _ _ _ _ CP1 Ela2 _. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false GUL : good_used_list Needed ============================ good_used_list CU
< apply good_used_list_select to GUL Ela3. Subgoal 2.2: Variables: Clauses Known CU E CRest Needed Rest C ID IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed E * Ela3 : select (ID, unknown) CU Needed Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP : select (ID, C) CRest Clauses CP1 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list CRest H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false GUL : good_used_list Needed H7 : good_used_list CU ============================ good_used_list CU
< search. Subgoal 2.3: Variables: Clauses Known CU E1 P1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU IsP : is_fratProof (endOriginal P1) GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (endOriginal P1) Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : elaborate Known P1 CU E1 ============================ good_used_list CU
< case IsP. Subgoal 2.3: Variables: Clauses Known CU E1 P1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses CP : checkFratProof Clauses Known (endOriginal P1) Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : elaborate Known P1 CU E1 H1 : is_proof P1 ============================ good_used_list CU
< CP: case CP. Subgoal 2.3: Variables: Clauses Known CU E1 P1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : elaborate Known P1 CU E1 H1 : is_proof P1 CP : checkProof Known P1 ============================ good_used_list CU
< apply elaboration_good_used_list to _ _ _ CP Ela1. Subgoal 2.3: Variables: Clauses Known CU E1 P1 IH : forall Clauses Known P CU E ID U, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID1 CK CC, mem (ID1, CK) Known -> mem (ID1, CC) Clauses -> false) -> mem (ID, U) CU -> exists C, mem (ID, C) Known IH1 : forall Clauses Known P CU E, is_fratProof P -> good_clause_list Known -> is_list (is_pair is_integer is_clause) Known -> good_clause_list Clauses -> is_list (is_pair is_integer is_clause) Clauses -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> good_used_list CU GCL : good_clause_list Known IsKnown : is_list (is_pair is_integer is_clause) Known GCLC : good_clause_list Clauses IsClauses : is_list (is_pair is_integer is_clause) Clauses Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false Ela1 : elaborate Known P1 CU E1 H1 : is_proof P1 CP : checkProof Known P1 H2 : good_used_list CU ============================ good_used_list CU
< search. Proof completed.
< Extensible_Theorem elaborationFrat_valid : forall Clauses Known P CU E Needed Clauses', IsP : is_fratProof P -> IsClauses : is_list (is_pair is_integer is_clause) Clauses -> IsKnown : is_list (is_pair is_integer is_clause) Known -> IsClauses' : is_list (is_pair is_integer is_clause) Clauses' -> IsNeeded : is_list (is_pair is_integer is_clause) Needed -> GCL_C : good_clause_list Clauses -> GCL : good_clause_list Known -> GCL_C' : good_clause_list Clauses' -> GCL_N : good_clause_list Needed -> CP : checkFratProof Clauses Known P -> Ela : elaborateFratProof Clauses Known P CU E -> NoMem : (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> NoMemN : (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> MemsC : (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> HN : hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E on Ela. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsP : is_fratProof (addOriginal ID C Rest) IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< Is: case IsP. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< CP: case CP (keep). Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest CRest1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest1 Clauses CP2 : checkFratProof CRest1 ((ID, C)::Known) Rest ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< apply select_is to _ CP1. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest CRest1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest1 Clauses CP2 : checkFratProof CRest1 ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest1 ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< apply good_clause_list_selects to _ CP1 Ela1. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< Is': apply select_is_picked to _ CP1. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest Is' : is_pair is_integer is_clause (ID, C) ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< case Is'. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< MC: apply select_mem to Ela1. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< MC': apply MemsC to MC. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< S: apply mem_select to MC'. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< apply select_is to _ S. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< assert good_clause_list ((ID, C)::Known). Subgoal 1.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' ============================ good_clause_list ((ID, C)::Known)
< unfold . Subgoal 1.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' ============================ forall ID1 C1 KRest C2, select (ID1, C1) KRest ((ID, C)::Known) -> mem (ID1, C2) KRest -> false
< intros S' M. Subgoal 1.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 KRest C2 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' S' : select (ID1, C1) KRest ((ID, C)::Known) M : mem (ID1, C2) KRest ============================ false
< S': case S'. Subgoal 1.1.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' C2 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' M : mem (ID, C2) Known ============================ false
< M': apply select_mem to Ela1. Subgoal 1.1.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' C2 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' M : mem (ID, C2) Known M' : mem (ID, C) Clauses ============================ false
< apply NoMem to M M'. Subgoal 1.1.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 C2 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' M : mem (ID1, C2) ((ID, C)::L1) S' : select (ID1, C1) L1 Known ============================ false
< M: case M. Subgoal 1.1.2.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' C1 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' S' : select (ID, C1) L1 Known ============================ false
< MS: apply select_mem to S'. Subgoal 1.1.2.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' C1 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' S' : select (ID, C1) L1 Known MS : mem (ID, C1) Known ============================ false
< M': apply select_mem to Ela1. Subgoal 1.1.2.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' C1 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' S' : select (ID, C1) L1 Known MS : mem (ID, C1) Known M' : mem (ID, C) Clauses ============================ false
< apply NoMem to MS M'. Subgoal 1.1.2.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 C2 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' S' : select (ID1, C1) L1 Known M : mem (ID1, C2) L1 ============================ false
< GCL: case GCL. Subgoal 1.1.2.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 C2 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' S' : select (ID1, C1) L1 Known M : mem (ID1, C2) L1 GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to S' M. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< assert forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false. Subgoal 1.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) ============================ forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false
< intros MK+ MCR. Subgoal 1.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 CK CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) MK+ : mem (ID1, CK) ((ID, C)::Known) MCR : mem (ID1, CC) CRest ============================ false
< MK: case MK+. Subgoal 1.2.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID, CC) CRest ============================ false
< GCLC: case GCL_C. Subgoal 1.2.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID, CC) CRest GCLC : forall ID C1 KRest C2, select (ID, C1) KRest Clauses -> mem (ID, C2) KRest -> false ============================ false
< apply GCLC to Ela1 MCR. Subgoal 1.2.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 CK CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID1, CC) CRest MK : mem (ID1, CK) Known ============================ false
< MC'': apply mem_after_select_before to Ela1 MCR. Subgoal 1.2.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 CK CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) MCR : mem (ID1, CC) CRest MK : mem (ID1, CK) Known MC'' : mem (ID1, CC) Clauses ============================ false
< apply NoMem to MK MC''. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< apply good_clause_list_select to _ Ela1. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< assert hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed). Subgoal 1.3: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest ============================ hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed)
< unfold . Subgoal 1.3.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest ============================ forall ID1, mem (ID1, needed) Needed1 -> exists C1, mem (ID1, C1) ((ID, C)::Needed)
< intros MN. Subgoal 1.3.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MN : mem (ID1, needed) Needed1 ============================ exists C1, mem (ID1, C1) ((ID, C)::Needed)
< Or: apply select_mem_or to Ela3 MN. Subgoal 1.3.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MN : mem (ID1, needed) Needed1 Or : (ID1, needed) = (ID, needed) \/ mem (ID1, needed) CU ============================ exists C1, mem (ID1, C1) ((ID, C)::Needed)
< MCU: case Or. Subgoal 1.3.1.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MN : mem (ID, needed) Needed1 ============================ exists C1, mem (ID, C1) ((ID, C)::Needed)
< search. Subgoal 1.3.1.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MN : mem (ID1, needed) Needed1 MCU : mem (ID1, needed) CU ============================ exists C1, mem (ID1, C1) ((ID, C)::Needed)
< HN: case HN. Subgoal 1.3.1.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MN : mem (ID1, needed) Needed1 MCU : mem (ID1, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ exists C1, mem (ID1, C1) ((ID, C)::Needed)
< apply HN to MCU. Subgoal 1.3.1.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MN : mem (ID1, needed) Needed1 MCU : mem (ID1, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK H8 : mem (ID1, C1) Needed ============================ exists C1, mem (ID1, C1) ((ID, C)::Needed)
< search. Subgoal 1.3.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest ============================ forall ID1 CN CK, mem (ID1, CN) ((ID, C)::Needed) -> mem (ID1, CK) ((ID, C)::Known) -> CN = CK
< intros MN+ MK+. Subgoal 1.3.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 CN CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MN+ : mem (ID1, CN) ((ID, C)::Needed) MK+ : mem (ID1, CK) ((ID, C)::Known) ============================ CN = CK
< MN: case MN+. Subgoal 1.3.2.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MK+ : mem (ID, CK) ((ID, C)::Known) ============================ C = CK
< MK: case MK+. Subgoal 1.3.2.1.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest ============================ C = C
< search. Subgoal 1.3.2.1.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MK : mem (ID, CK) Known ============================ C = CK
< apply NoMem to MK MC. Subgoal 1.3.2.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 CN CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MK+ : mem (ID1, CK) ((ID, C)::Known) MN : mem (ID1, CN) Needed ============================ CN = CK
< MK: case MK+. Subgoal 1.3.2.2.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' CN IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MN : mem (ID, CN) Needed ============================ CN = C
< apply NoMemN to MN MC. Subgoal 1.3.2.2.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 CN CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MN : mem (ID1, CN) Needed MK : mem (ID1, CK) Known ============================ CN = CK
< HN: case HN. Subgoal 1.3.2.2.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 CN CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MN : mem (ID1, CN) Needed MK : mem (ID1, CK) Known HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CN = CK
< apply HN1 to MN MK. Subgoal 1.3.2.2.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest MN : mem (ID1, CK) Needed MK : mem (ID1, CK) Known HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CK = CK
< search. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< assert forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L'. Subgoal 1.4: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) ============================ forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L'
< intros MCR. Subgoal 1.4: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MCR : mem (ID1, C1) CRest ============================ mem (ID1, C1) L'
< MCl: apply mem_after_select_before to _ MCR. Subgoal 1.4: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MCR : mem (ID1, C1) CRest MCl : mem (ID1, C1) Clauses ============================ mem (ID1, C1) L'
< MCl': apply MemsC to MCl. Subgoal 1.4: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MCR : mem (ID1, C1) CRest MCl : mem (ID1, C1) Clauses MCl' : mem (ID1, C1) Clauses' ============================ mem (ID1, C1) L'
< Or: apply select_mem_or to S MCl'. Subgoal 1.4: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MCR : mem (ID1, C1) CRest MCl : mem (ID1, C1) Clauses MCl' : mem (ID1, C1) Clauses' Or : (ID1, C1) = (ID, C) \/ mem (ID1, C1) L' ============================ mem (ID1, C1) L'
< ML': case Or. Subgoal 1.4.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MCR : mem (ID, C) CRest MCl : mem (ID, C) Clauses MCl' : mem (ID, C) Clauses' ============================ mem (ID, C) L'
< GCL_C: case GCL_C. Subgoal 1.4.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MCR : mem (ID, C) CRest MCl : mem (ID, C) Clauses MCl' : mem (ID, C) Clauses' GCL_C : forall ID C1 KRest C2, select (ID, C1) KRest Clauses -> mem (ID, C2) KRest -> false ============================ mem (ID, C) L'
< apply GCL_C to _ MCR. Subgoal 1.4.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MCR : mem (ID1, C1) CRest MCl : mem (ID1, C1) Clauses MCl' : mem (ID1, C1) Clauses' ML' : mem (ID1, C1) L' ============================ mem (ID1, C1) L'
< search. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< assert forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false. Subgoal 1.5: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' ============================ forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false
< intros MN+ MCR. Subgoal 1.5: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 CK CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' MN+ : mem (ID1, CK) ((ID, C)::Needed) MCR : mem (ID1, CC) CRest ============================ false
< MN: case MN+. Subgoal 1.5.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' MCR : mem (ID, CC) CRest ============================ false
< GCL_C: case GCL_C. Subgoal 1.5.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' MCR : mem (ID, CC) CRest GCL_C : forall ID C1 KRest C2, select (ID, C1) KRest Clauses -> mem (ID, C2) KRest -> false ============================ false
< apply GCL_C to _ MCR. Subgoal 1.5.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 CK CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' MCR : mem (ID1, CC) CRest MN : mem (ID1, CK) Needed ============================ false
< MCl: apply mem_after_select_before to _ MCR. Subgoal 1.5.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 CK CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' MCR : mem (ID1, CC) CRest MN : mem (ID1, CK) Needed MCl : mem (ID1, CC) Clauses ============================ false
< apply NoMemN to MN MCl. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< assert good_clause_list ((ID, C)::Needed). Subgoal 1.6: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false ============================ good_clause_list ((ID, C)::Needed)
< unfold . Subgoal 1.6: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false ============================ forall ID1 C1 KRest C2, select (ID1, C1) KRest ((ID, C)::Needed) -> mem (ID1, C2) KRest -> false
< intros SN+ MKR. Subgoal 1.6: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 KRest C2 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false SN+ : select (ID1, C1) KRest ((ID, C)::Needed) MKR : mem (ID1, C2) KRest ============================ false
< SN: case SN+. Subgoal 1.6.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' C2 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false MKR : mem (ID, C2) Needed ============================ false
< apply NoMemN to MKR _. Subgoal 1.6.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 C2 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false MKR : mem (ID1, C2) ((ID, C)::L1) SN : select (ID1, C1) L1 Needed ============================ false
< MKR: case MKR. Subgoal 1.6.2.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' C1 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false SN : select (ID, C1) L1 Needed ============================ false
< MN: apply select_mem to SN. Subgoal 1.6.2.1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' C1 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false SN : select (ID, C1) L1 Needed MN : mem (ID, C1) Needed ============================ false
< apply NoMemN to MN _. Subgoal 1.6.2.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 C2 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false SN : select (ID1, C1) L1 Needed MKR : mem (ID1, C2) L1 ============================ false
< GCL_N: case GCL_N. Subgoal 1.6.2.2: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' ID1 C1 C2 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false SN : select (ID1, C1) L1 Needed MKR : mem (ID1, C2) L1 GCL_N : forall ID C1 KRest C2, select (ID, C1) KRest Needed -> mem (ID, C2) KRest -> false ============================ false
< apply GCL_N to SN MKR. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false H11 : good_clause_list ((ID, C)::Needed) ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< apply good_clause_list_select to _ S. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false H11 : good_clause_list ((ID, C)::Needed) H12 : good_clause_list L' ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< apply IH to _ _ _ _ _ _ _ _ _ CP2 Ela2 _ _ _ _ with Needed = (ID, C)::Needed Clauses' = L'. Subgoal 1: Variables: Clauses Known CU Needed Clauses' CRest Needed1 E1 C ID Rest L' IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU (addOriginal ID C E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E1 * Ela3 : select (ID, needed) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C MC : mem (ID, C) Clauses MC' : mem (ID, C) Clauses' S : select (ID, C) L' Clauses' H4 : is_list (is_pair is_integer is_clause) L' H5 : good_clause_list ((ID, C)::Known) H6 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H7 : good_clause_list CRest H8 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) L' H10 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Needed) -> mem (ID1, CC) CRest -> false H11 : good_clause_list ((ID, C)::Needed) H12 : good_clause_list L' H13 : checkFratProof L' ((ID, C)::Needed) E1 ============================ checkFratProof Clauses' Needed (addOriginal ID C E1)
< search. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsP : is_fratProof (addOriginal ID C Rest) IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 ============================ checkFratProof Clauses' Needed E
< Is: case IsP. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest ============================ checkFratProof Clauses' Needed E
< CP: case CP (keep). Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID CRest1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest1 Clauses CP2 : checkFratProof CRest1 ((ID, C)::Known) Rest ============================ checkFratProof Clauses' Needed E
< apply select_is to _ CP1. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID CRest1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest1 Clauses CP2 : checkFratProof CRest1 ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest1 ============================ checkFratProof Clauses' Needed E
< apply good_clause_list_selects to _ CP1 Ela1. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest ============================ checkFratProof Clauses' Needed E
< Is': apply select_is_picked to _ CP1. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest Is' : is_pair is_integer is_clause (ID, C) ============================ checkFratProof Clauses' Needed E
< case Is'. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C ============================ checkFratProof Clauses' Needed E
< assert good_clause_list ((ID, C)::Known). Subgoal 2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C ============================ good_clause_list ((ID, C)::Known)
< unfold . Subgoal 2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C ============================ forall ID1 C1 KRest C2, select (ID1, C1) KRest ((ID, C)::Known) -> mem (ID1, C2) KRest -> false
< intros S' M. Subgoal 2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 C1 KRest C2 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C S' : select (ID1, C1) KRest ((ID, C)::Known) M : mem (ID1, C2) KRest ============================ false
< S': case S'. Subgoal 2.1.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID C2 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C M : mem (ID, C2) Known ============================ false
< M': apply select_mem to Ela1. Subgoal 2.1.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID C2 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C M : mem (ID, C2) Known M' : mem (ID, C) Clauses ============================ false
< apply NoMem to M M'. Subgoal 2.1.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 C1 C2 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C M : mem (ID1, C2) ((ID, C)::L1) S' : select (ID1, C1) L1 Known ============================ false
< M: case M. Subgoal 2.1.2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID C1 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C S' : select (ID, C1) L1 Known ============================ false
< MS: apply select_mem to S'. Subgoal 2.1.2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID C1 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C S' : select (ID, C1) L1 Known MS : mem (ID, C1) Known ============================ false
< M': apply select_mem to Ela1. Subgoal 2.1.2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID C1 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C S' : select (ID, C1) L1 Known MS : mem (ID, C1) Known M' : mem (ID, C) Clauses ============================ false
< apply NoMem to MS M'. Subgoal 2.1.2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 C1 C2 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C S' : select (ID1, C1) L1 Known M : mem (ID1, C2) L1 ============================ false
< GCL: case GCL. Subgoal 2.1.2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 C1 C2 L1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C S' : select (ID1, C1) L1 Known M : mem (ID1, C2) L1 GCL : forall ID C1 KRest C2, select (ID, C1) KRest Known -> mem (ID, C2) KRest -> false ============================ false
< apply GCL to S' M. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) ============================ checkFratProof Clauses' Needed E
< assert forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false. Subgoal 2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) ============================ forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false
< intros MK+ MCR. Subgoal 2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CK CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) MK+ : mem (ID1, CK) ((ID, C)::Known) MCR : mem (ID1, CC) CRest ============================ false
< MK: case MK+. Subgoal 2.2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) MCR : mem (ID, CC) CRest ============================ false
< GCLC: case GCL_C. Subgoal 2.2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) MCR : mem (ID, CC) CRest GCLC : forall ID C1 KRest C2, select (ID, C1) KRest Clauses -> mem (ID, C2) KRest -> false ============================ false
< apply GCLC to Ela1 MCR. Subgoal 2.2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CK CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) MCR : mem (ID1, CC) CRest MK : mem (ID1, CK) Known ============================ false
< MC'': apply mem_after_select_before to Ela1 MCR. Subgoal 2.2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CK CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) MCR : mem (ID1, CC) CRest MK : mem (ID1, CK) Known MC'' : mem (ID1, CC) Clauses ============================ false
< apply NoMem to MK MC''. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false ============================ checkFratProof Clauses' Needed E
< apply good_clause_list_select to _ Ela1. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest ============================ checkFratProof Clauses' Needed E
< assert hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed). Subgoal 2.3: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest ============================ hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed)
< unfold . Subgoal 2.3.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest ============================ forall ID1, mem (ID1, needed) Needed1 -> exists C1, mem (ID1, C1) ((ID, C)::Needed)
< intros MN. Subgoal 2.3.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MN : mem (ID1, needed) Needed1 ============================ exists C1, mem (ID1, C1) ((ID, C)::Needed)
< Or: apply select_mem_or to Ela3 MN. Subgoal 2.3.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MN : mem (ID1, needed) Needed1 Or : (ID1, needed) = (ID, unknown) \/ mem (ID1, needed) CU ============================ exists C1, mem (ID1, C1) ((ID, C)::Needed)
< MCU: case Or. Subgoal 2.3.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MN : mem (ID1, needed) Needed1 MCU : mem (ID1, needed) CU ============================ exists C1, mem (ID1, C1) ((ID, C)::Needed)
< HN: case HN. Subgoal 2.3.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MN : mem (ID1, needed) Needed1 MCU : mem (ID1, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ exists C1, mem (ID1, C1) ((ID, C)::Needed)
< apply HN to MCU. Subgoal 2.3.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 C1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MN : mem (ID1, needed) Needed1 MCU : mem (ID1, needed) CU HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK H7 : mem (ID1, C1) Needed ============================ exists C1, mem (ID1, C1) ((ID, C)::Needed)
< search. Subgoal 2.3.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest ============================ forall ID1 CN CK, mem (ID1, CN) ((ID, C)::Needed) -> mem (ID1, CK) ((ID, C)::Known) -> CN = CK
< intros MN+ MK+. Subgoal 2.3.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CN CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MN+ : mem (ID1, CN) ((ID, C)::Needed) MK+ : mem (ID1, CK) ((ID, C)::Known) ============================ CN = CK
< MN: case MN+. Subgoal 2.3.2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MK+ : mem (ID, CK) ((ID, C)::Known) ============================ C = CK
< MK: case MK+. Subgoal 2.3.2.1.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest ============================ C = C
< search. Subgoal 2.3.2.1.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MK : mem (ID, CK) Known ============================ C = CK
< MC: apply select_mem to Ela1. Subgoal 2.3.2.1.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MK : mem (ID, CK) Known MC : mem (ID, C) Clauses ============================ C = CK
< apply NoMem to MK MC. Subgoal 2.3.2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CN CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MK+ : mem (ID1, CK) ((ID, C)::Known) MN : mem (ID1, CN) Needed ============================ CN = CK
< MK: case MK+. Subgoal 2.3.2.2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID CN IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MN : mem (ID, CN) Needed ============================ CN = C
< MC: apply select_mem to Ela1. Subgoal 2.3.2.2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID CN IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MN : mem (ID, CN) Needed MC : mem (ID, C) Clauses ============================ CN = C
< apply NoMemN to MN MC. Subgoal 2.3.2.2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CN CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MN : mem (ID1, CN) Needed MK : mem (ID1, CK) Known ============================ CN = CK
< HN: case HN. Subgoal 2.3.2.2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CN CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MN : mem (ID1, CN) Needed MK : mem (ID1, CK) Known HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CN = CK
< apply HN1 to MN MK. Subgoal 2.3.2.2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest MN : mem (ID1, CK) Needed MK : mem (ID1, CK) Known HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CK = CK
< search. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) ============================ checkFratProof Clauses' Needed E
< assert hasNeeded ((ID, C)::Known) Needed1 Needed. Subgoal 2.4: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) ============================ hasNeeded ((ID, C)::Known) Needed1 Needed
< unfold . Subgoal 2.4.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) ============================ forall ID1, mem (ID1, needed) Needed1 -> exists C1, mem (ID1, C1) Needed
< intros M. Subgoal 2.4.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) M : mem (ID1, needed) Needed1 ============================ exists C1, mem (ID1, C1) Needed
< HN: case HN. Subgoal 2.4.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) M : mem (ID1, needed) Needed1 HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ exists C1, mem (ID1, C1) Needed
< Or: apply select_mem_or to Ela3 M. Subgoal 2.4.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) M : mem (ID1, needed) Needed1 HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK Or : (ID1, needed) = (ID, unknown) \/ mem (ID1, needed) CU ============================ exists C1, mem (ID1, C1) Needed
< M': case Or. Subgoal 2.4.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) M : mem (ID1, needed) Needed1 HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK M' : mem (ID1, needed) CU ============================ exists C1, mem (ID1, C1) Needed
< apply HN to M'. Subgoal 2.4.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 C1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) M : mem (ID1, needed) Needed1 HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK M' : mem (ID1, needed) CU H8 : mem (ID1, C1) Needed ============================ exists C1, mem (ID1, C1) Needed
< search. Subgoal 2.4.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) ============================ forall ID1 CN CK, mem (ID1, CN) Needed -> mem (ID1, CK) ((ID, C)::Known) -> CN = CK
< intros MN MK+. Subgoal 2.4.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CN CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MN : mem (ID1, CN) Needed MK+ : mem (ID1, CK) ((ID, C)::Known) ============================ CN = CK
< MK: case MK+. Subgoal 2.4.2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID CN IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MN : mem (ID, CN) Needed ============================ CN = C
< MC: apply select_mem to CP1. Subgoal 2.4.2.1: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID CN IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MN : mem (ID, CN) Needed MC : mem (ID, C) Clauses ============================ CN = C
< apply NoMemN to MN MC. Subgoal 2.4.2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CN CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MN : mem (ID1, CN) Needed MK : mem (ID1, CK) Known ============================ CN = CK
< HN: case HN. Subgoal 2.4.2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CN CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MN : mem (ID1, CN) Needed MK : mem (ID1, CK) Known HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CN = CK
< apply HN1 to MN MK. Subgoal 2.4.2.2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CK IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) MN : mem (ID1, CK) Needed MK : mem (ID1, CK) Known HN : forall ID, mem (ID, needed) CU -> exists C, mem (ID, C) Needed HN1 : forall ID CN CK, mem (ID, CN) Needed -> mem (ID, CK) Known -> CN = CK ============================ CK = CK
< search. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H8 : hasNeeded ((ID, C)::Known) Needed1 Needed ============================ checkFratProof Clauses' Needed E
< assert forall ID C, mem (ID, C) CRest -> mem (ID, C) Clauses'. Subgoal 2.5: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H8 : hasNeeded ((ID, C)::Known) Needed1 Needed ============================ forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) Clauses'
< intros MCR. Subgoal 2.5: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 C1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H8 : hasNeeded ((ID, C)::Known) Needed1 Needed MCR : mem (ID1, C1) CRest ============================ mem (ID1, C1) Clauses'
< apply mem_after_select_before to _ MCR. Subgoal 2.5: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 C1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H8 : hasNeeded ((ID, C)::Known) Needed1 Needed MCR : mem (ID1, C1) CRest H9 : mem (ID1, C1) Clauses ============================ mem (ID1, C1) Clauses'
< backchain MemsC. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H8 : hasNeeded ((ID, C)::Known) Needed1 Needed H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) Clauses' ============================ checkFratProof Clauses' Needed E
< assert forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) CRest -> false. Subgoal 2.6: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H8 : hasNeeded ((ID, C)::Known) Needed1 Needed H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) Clauses' ============================ forall ID1 CK CC, mem (ID1, CK) Needed -> mem (ID1, CC) CRest -> false
< intros MN MCR. Subgoal 2.6: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CK CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H8 : hasNeeded ((ID, C)::Known) Needed1 Needed H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) Clauses' MN : mem (ID1, CK) Needed MCR : mem (ID1, CC) CRest ============================ false
< MC: apply mem_after_select_before to _ MCR. Subgoal 2.6: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID ID1 CK CC IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H8 : hasNeeded ((ID, C)::Known) Needed1 Needed H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) Clauses' MN : mem (ID1, CK) Needed MCR : mem (ID1, CC) CRest MC : mem (ID1, CC) Clauses ============================ false
< apply NoMemN to MN MC. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H8 : hasNeeded ((ID, C)::Known) Needed1 Needed H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) Clauses' H10 : forall ID1 CK CC, mem (ID1, CK) Needed -> mem (ID1, CC) CRest -> false ============================ checkFratProof Clauses' Needed E
< apply IH to _ _ _ _ _ _ _ _ _ CP2 Ela2 _ _ _ _ with Needed = Needed Clauses' = Clauses'. Subgoal 2: Variables: Clauses Known CU E Needed Clauses' CRest Needed1 Rest C ID IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (addOriginal ID C Rest) Ela : elaborateFratProof Clauses Known (addOriginal ID C Rest) CU E @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : select (ID, C) CRest Clauses Ela2 : elaborateFratProof CRest ((ID, C)::Known) Rest Needed1 E * Ela3 : select (ID, unknown) CU Needed1 Is : is_integer ID Is1 : is_clause C Is2 : is_fratProof Rest CP1 : select (ID, C) CRest Clauses CP2 : checkFratProof CRest ((ID, C)::Known) Rest H1 : is_list (is_pair is_integer is_clause) CRest H2 : is_integer ID H3 : is_clause C H4 : good_clause_list ((ID, C)::Known) H5 : forall ID1 CK CC, mem (ID1, CK) ((ID, C)::Known) -> mem (ID1, CC) CRest -> false H6 : good_clause_list CRest H7 : hasNeeded ((ID, C)::Known) Needed1 ((ID, C)::Needed) H8 : hasNeeded ((ID, C)::Known) Needed1 Needed H9 : forall ID1 C1, mem (ID1, C1) CRest -> mem (ID1, C1) Clauses' H10 : forall ID1 CK CC, mem (ID1, CK) Needed -> mem (ID1, CC) CRest -> false H11 : checkFratProof Clauses' Needed E ============================ checkFratProof Clauses' Needed E
< search. Subgoal 3: Variables: Clauses Known CU Needed Clauses' E1 P1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsP : is_fratProof (endOriginal P1) IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (endOriginal P1) Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : elaborate Known P1 CU E1 ============================ checkFratProof Clauses' Needed (endOriginal E1)
< case IsP. Subgoal 3: Variables: Clauses Known CU Needed Clauses' E1 P1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed CP : checkFratProof Clauses Known (endOriginal P1) Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : elaborate Known P1 CU E1 H1 : is_proof P1 ============================ checkFratProof Clauses' Needed (endOriginal E1)
< CP: case CP. Subgoal 3: Variables: Clauses Known CU Needed Clauses' E1 P1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : elaborate Known P1 CU E1 H1 : is_proof P1 CP : checkProof Known P1 ============================ checkFratProof Clauses' Needed (endOriginal E1)
< apply elaboration_valid to _ _ _ _ _ CP Ela1 HN. Subgoal 3: Variables: Clauses Known CU Needed Clauses' E1 P1 IH : forall Clauses Known P CU E Needed Clauses', is_fratProof P -> is_list (is_pair is_integer is_clause) Clauses -> is_list (is_pair is_integer is_clause) Known -> is_list (is_pair is_integer is_clause) Clauses' -> is_list (is_pair is_integer is_clause) Needed -> good_clause_list Clauses -> good_clause_list Known -> good_clause_list Clauses' -> good_clause_list Needed -> checkFratProof Clauses Known P -> elaborateFratProof Clauses Known P CU E * -> (forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false) -> (forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false) -> (forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses') -> hasNeeded Known CU Needed -> checkFratProof Clauses' Needed E IsClauses : is_list (is_pair is_integer is_clause) Clauses IsKnown : is_list (is_pair is_integer is_clause) Known IsClauses' : is_list (is_pair is_integer is_clause) Clauses' IsNeeded : is_list (is_pair is_integer is_clause) Needed GCL_C : good_clause_list Clauses GCL : good_clause_list Known GCL_C' : good_clause_list Clauses' GCL_N : good_clause_list Needed Ela : elaborateFratProof Clauses Known (endOriginal P1) CU (endOriginal E1) @ NoMem : forall ID CK CC, mem (ID, CK) Known -> mem (ID, CC) Clauses -> false NoMemN : forall ID CK CC, mem (ID, CK) Needed -> mem (ID, CC) Clauses -> false MemsC : forall ID C, mem (ID, C) Clauses -> mem (ID, C) Clauses' HN : hasNeeded Known CU Needed Ela1 : elaborate Known P1 CU E1 H1 : is_proof P1 CP : checkProof Known P1 H2 : checkProof Needed E1 ============================ checkFratProof Clauses' Needed (endOriginal E1)
< search. Proof completed.
< Theorem full_elaborationFrat_valid : forall F P P', is_formula F -> is_fratProof P -> fratProveFormula F P -> fullElaborateFrat F P P' -> fratProveFormula F P'. ============================ forall F P P', is_formula F -> is_fratProof P -> fratProveFormula F P -> fullElaborateFrat F P P' -> fratProveFormula F P'
< intros IsF IsP PF FE. Variables: F P P' IsF : is_formula F IsP : is_fratProof P PF : fratProveFormula F P FE : fullElaborateFrat F P P' ============================ fratProveFormula F P'
< PF: case PF. Variables: F P P' KnownClauses IsF : is_formula F IsP : is_fratProof P FE : fullElaborateFrat F P P' PF : formulaToKnown 1 F KnownClauses PF1 : checkFratProof KnownClauses [] P ============================ fratProveFormula F P'
< FE: case FE. Variables: F P P' KnownClauses Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F KnownClauses PF1 : checkFratProof KnownClauses [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' ============================ fratProveFormula F P'
< apply formulaToKnown_is to _ _ PF. Variables: F P P' KnownClauses Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F KnownClauses PF1 : checkFratProof KnownClauses [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) KnownClauses ============================ fratProveFormula F P'
< GCL: assert good_clause_list KnownClauses. Subgoal 1: Variables: F P P' KnownClauses Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F KnownClauses PF1 : checkFratProof KnownClauses [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) KnownClauses ============================ good_clause_list KnownClauses
< unfold . Subgoal 1: Variables: F P P' KnownClauses Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F KnownClauses PF1 : checkFratProof KnownClauses [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) KnownClauses ============================ forall ID C1 KRest C2, select (ID, C1) KRest KnownClauses -> mem (ID, C2) KRest -> false
< intros S M. Subgoal 1: Variables: F P P' KnownClauses Known Needed ID C1 KRest C2 IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F KnownClauses PF1 : checkFratProof KnownClauses [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) KnownClauses S : select (ID, C1) KRest KnownClauses M : mem (ID, C2) KRest ============================ false
< backchain formulaToKnown_all_unique. Variables: F P P' KnownClauses Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F KnownClauses PF1 : checkFratProof KnownClauses [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) KnownClauses GCL : good_clause_list KnownClauses ============================ fratProveFormula F P'
< apply formulaToKnown_unique to _ _ PF FE. Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ fratProveFormula F P'
< HN: assert hasNeeded Known Needed Known. Subgoal 2: Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ hasNeeded Known Needed Known
< unfold . Subgoal 2.1: Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ forall ID, mem (ID, needed) Needed -> exists C, mem (ID, C) Known
< intros M. Subgoal 2.1: Variables: F P P' Known Needed ID IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, needed) Needed ============================ exists C, mem (ID, C) Known
< M': apply elaborationFrat_all_mem to _ _ _ _ _ PF1 FE1 _ M. Subgoal 2.1.1: Variables: F P P' Known Needed ID IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, needed) Needed ============================ forall ID1 CK CC, mem (ID1, CK) [] -> mem (ID1, CC) Known -> false
< intros M'. Subgoal 2.1.1: Variables: F P P' Known Needed ID ID1 CK CC IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, needed) Needed M' : mem (ID1, CK) [] H2 : mem (ID1, CC) Known ============================ false
< case M'. Subgoal 2.1.2: Variables: F P P' Known Needed ID IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, needed) Needed ============================ good_clause_list []
< unfold . Subgoal 2.1.2: Variables: F P P' Known Needed ID IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, needed) Needed ============================ forall ID C1 KRest C2, select (ID, C1) KRest [] -> mem (ID, C2) KRest -> false
< intros S M'. Subgoal 2.1.2: Variables: F P P' Known Needed ID ID1 C1 KRest C2 IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, needed) Needed S : select (ID1, C1) KRest [] M' : mem (ID1, C2) KRest ============================ false
< S: case S. Subgoal 2.1: Variables: F P P' Known Needed ID C IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, needed) Needed M' : mem (ID, C) [] ============================ exists C, mem (ID, C) Known
< case M'. Subgoal 2.2: Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known ============================ forall ID CN CK, mem (ID, CN) Known -> mem (ID, CK) Known -> CN = CK
< intros M M'. Subgoal 2.2: Variables: F P P' Known Needed ID CN CK IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, CN) Known M' : mem (ID, CK) Known ============================ CN = CK
< apply good_clause_list_mems to _ M M'. Subgoal 2.2: Variables: F P P' Known Needed ID CK IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known M : mem (ID, CK) Known M' : mem (ID, CK) Known ============================ CK = CK
< search. Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known ============================ fratProveFormula F P'
< assert good_clause_list []. Subgoal 3: Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known ============================ good_clause_list []
< unfold . Subgoal 3: Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known ============================ forall ID C1 KRest C2, select (ID, C1) KRest [] -> mem (ID, C2) KRest -> false
< intros S. Subgoal 3: Variables: F P P' Known Needed ID C1 KRest C2 IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known S : select (ID, C1) KRest [] H2 : mem (ID, C2) KRest ============================ false
< case S. Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] ============================ fratProveFormula F P'
< apply elaborationFrat_valid to _ _ _ _ _ _ _ _ _ PF1 FE1 _ _ _ _ with Needed = []. Subgoal 4: Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] ============================ hasNeeded [] Needed []
< unfold . Subgoal 4.1: Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] ============================ forall ID, mem (ID, needed) Needed -> exists C, mem (ID, C) []
< intros M. Subgoal 4.1: Variables: F P P' Known Needed ID IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] M : mem (ID, needed) Needed ============================ exists C, mem (ID, C) []
< M'': apply elaborationFrat_all_mem to _ _ _ _ _ PF1 FE1 _ M. Subgoal 4.1.1: Variables: F P P' Known Needed ID IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] M : mem (ID, needed) Needed ============================ forall ID1 CK CC, mem (ID1, CK) [] -> mem (ID1, CC) Known -> false
< intros M'. Subgoal 4.1.1: Variables: F P P' Known Needed ID ID1 CK CC IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] M : mem (ID, needed) Needed M' : mem (ID1, CK) [] H3 : mem (ID1, CC) Known ============================ false
< case M'. Subgoal 4.1: Variables: F P P' Known Needed ID C IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] M : mem (ID, needed) Needed M'' : mem (ID, C) [] ============================ exists C, mem (ID, C) []
< case M''. Subgoal 4.2: Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] ============================ forall ID CN CK, mem (ID, CN) [] -> mem (ID, CK) [] -> CN = CK
< intros MK MK'. Subgoal 4.2: Variables: F P P' Known Needed ID CN CK IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] MK : mem (ID, CN) [] MK' : mem (ID, CK) [] ============================ CN = CK
< apply good_clause_list_mems to _ MK MK'. Subgoal 4.2: Variables: F P P' Known Needed ID CK IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] MK : mem (ID, CK) [] MK' : mem (ID, CK) [] ============================ CK = CK
< search. Subgoal 5: Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] ============================ forall ID CK CC, mem (ID, CK) [] -> mem (ID, CC) Known -> false
< intros M. Subgoal 5: Variables: F P P' Known Needed ID CK CC IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] M : mem (ID, CK) [] H3 : mem (ID, CC) Known ============================ false
< case M. Subgoal 6: Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] ============================ forall ID CK CC, mem (ID, CK) [] -> mem (ID, CC) Known -> false
< intros M. Subgoal 6: Variables: F P P' Known Needed ID CK CC IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] M : mem (ID, CK) [] H3 : mem (ID, CC) Known ============================ false
< case M. Variables: F P P' Known Needed IsF : is_formula F IsP : is_fratProof P PF : formulaToKnown 1 F Known PF1 : checkFratProof Known [] P FE : formulaToKnown 1 F Known FE1 : elaborateFratProof Known [] P Needed P' H1 : is_list (is_pair is_integer is_clause) Known GCL : good_clause_list Known HN : hasNeeded Known Needed Known H2 : good_clause_list [] H3 : checkFratProof Known [] P' ============================ fratProveFormula F P'
< search. Proof completed.