anchor.diff:              let rth = INST [phi, ptm] qth
               EQ_MP rth th'
   
  +/// Generalizes zero or more variables in the conclusion of a theorem.
   let GENL = itlist GEN
   
  +/// Generalizes the conclusion of a theorem over its own free variables.
   let GEN_ALL th = 
       let asl, c = dest_thm th
       let vars = subtract (frees c) (freesl asl)
  
positive.code: (* ------------------------------------------------------------------------- *)
  
  let FORALL_DEF = new_basic_definition <| parse_term @"(!) = \P:A->bool. P = \x. T"
  let mk_forall = mk_binder "!"
  let list_mk_forall(vs, bod) = itlist (curry mk_forall) vs bod
  
  let SPEC = 
      let P = parse_term @"P:A->bool"
      let x = parse_term @"x:A"
  
negative.code:         with
          | Failure _ -> failwith "CHOOSE"
  
  /// Existentially quantifies a hypothesis of a theorem.
  let SIMPLE_CHOOSE v th = CHOOSE (v, ASSUME(mk_exists(v, hd(hyp th)))) th
  
  (* ------------------------------------------------------------------------- *)
  