anchor.diff:  (* ------------------------------------------------------------------------- *)
   
   let OR_DEF = new_basic_definition <| parse_term @"(\/) = \p q. !r. (p ==> r) ==> (q ==> r) ==> r"
  +/// Constructs a disjunction.
   let mk_disj = mk_binary "\\/"
  +/// Constructs the disjunction of a list of terms.
   let list_mk_disj = end_itlist(curry mk_disj)
   
  +/// Introduces a right disjunct into the conclusion of a theorem.
   let DISJ1 = 
       let P = parse_term @"P:bool"
       let Q = parse_term @"Q:bool"
  
positive.code:         with
          | Failure _ -> failwith "SPEC"
  
  let SPECL tms th = 
      try 
          rev_itlist SPEC tms th
      with
      | Failure _ -> failwith "SPECL"
  
  let SPEC_VAR th = 
      let bv = variant (thm_frees th) (bndvar(rand(concl th)))
      bv, SPEC bv th
  
  let rec SPEC_ALL th = 
      if is_forall(concl th) then SPEC_ALL(snd(SPEC_VAR th))
      else th
  
  let ISPEC t th = 
      let x, _ = 
          try 
  
negative.code:     with
      | Failure _ -> failwith "ISPECL"
  
  /// Generalizes the conclusion of a theorem.
  let GEN = 
      let pth() = SYM(CONV_RULE (RAND_CONV BETA_CONV) (AP_THM FORALL_DEF <| parse_term @"P:A->bool"))
      fun x -> 
  