\DOC PSTRIP_ASSUME_TAC \TYPE {PSTRIP_ASSUME_TAC : thm_tactic} \KEYWORDS tactic. \LIBRARY pair \SYNOPSIS Splits a theorem into a list of theorems and then adds them to the assumptions. \DESCRIBE Given a theorem {th} and a goal {(A,t)}, {PSTRIP_ASSUME_TAC th} splits {th} into a list of theorems. This is done by recursively breaking conjunctions into separate conjuncts, cases-splitting disjunctions, and eliminating paired existential quantifiers by choosing arbitrary variables. Schematically, the following rules are applied: { A ?- t ====================== PSTRIP_ASSUME_TAC (A' |- v1 /\ ... /\ vn) A u {{v1,...,vn}} ?- t A ?- t ================================= PSTRIP_ASSUME_TAC (A' |- v1 \/ ... \/ vn) A u {{v1}} ?- t ... A u {{vn}} ?- t A ?- t ==================== PSTRIP_ASSUME_TAC (A' |- ?p. v) A u {{v[p'/p]}} ?- t } where {p'} is a variant of the pair {p}. If the conclusion of {th} is not a conjunction, a disjunction or a paired existentially quantified term, the whole theorem {th} is added to the assumptions. As assumptions are generated, they are examined to see if they solve the goal (either by being alpha-equivalent to the conclusion of the goal or by deriving a contradiction). The assumptions of the theorem being split are not added to the assumptions of the goal(s), but they are recorded in the proof. This means that if {A'} is not a subset of the assumptions {A} of the goal (up to alpha-conversion), {PSTRIP_ASSUME_TAC (A'|-v)} results in an invalid tactic. \FAILURE Never fails. \USES {PSTRIP_ASSUME_TAC} is used when applying a previously proved theorem to solve a goal, or when enriching its assumptions so that resolution, rewriting with assumptions and other operations involving assumptions have more to work with. \SEEALSO PSTRIP_THM_THEN, ,PSTRIP_ASSUME_TAC, PSTRIP_GOAL_THEN, PSTRIP_TAC. \ENDDOC