| 
68630
 | 
     1  | 
signature INST_EXISTENTIALS =
  | 
| 
 | 
     2  | 
sig
  | 
| 
 | 
     3  | 
  val tac : Proof.context -> term list -> int -> tactic
  | 
| 
 | 
     4  | 
end
  | 
| 
 | 
     5  | 
  | 
| 
 | 
     6  | 
structure Inst_Existentials : INST_EXISTENTIALS =
  | 
| 
 | 
     7  | 
struct
  | 
| 
 | 
     8  | 
  | 
| 
 | 
     9  | 
fun tac ctxt [] = TRY o REPEAT_ALL_NEW (resolve_tac ctxt @{thms HOL.conjI})
 | 
| 
 | 
    10  | 
  | tac ctxt (t :: ts) =
  | 
| 
 | 
    11  | 
      (TRY o REPEAT_ALL_NEW (resolve_tac ctxt @{thms HOL.conjI}))
 | 
| 
 | 
    12  | 
      THEN_ALL_NEW (TRY o (
  | 
| 
 | 
    13  | 
        let
  | 
| 
 | 
    14  | 
          val thm = Drule.infer_instantiate' ctxt [NONE, SOME (Thm.cterm_of ctxt t)] @{thm HOL.exI}
 | 
| 
 | 
    15  | 
        in
  | 
| 
 | 
    16  | 
          resolve_tac ctxt [thm] THEN' tac ctxt ts
  | 
| 
 | 
    17  | 
        end))
  | 
| 
 | 
    18  | 
  | 
| 
 | 
    19  | 
end  |