Reasoning Details

 < 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.
Back to example home