< 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.