anchor.diff:                          (REAL_ARITH
                                (parse_term @"x + y = &0 ==> &0 <= x /\ &0 <= y ==> x = &0 /\ y = &0")))
            |> THEN <| REWRITE_TAC [REAL_LE_SQUARE; REAL_ENTIRE])
  +#else
  +    Sequent([],parse_term @"!x y. x pow 2 + y pow 2 = &0 <=> x = &0 /\ y = &0")
  +#endif
   
   let REAL_POW_ZERO = 
       prove
  
positive.code:          |> THEN <| REWRITE_TAC [real_div; REAL_INV_MUL; REAL_INV_INV]
           |> THEN <| REAL_ARITH_TAC)
  
  let REAL_SGN_EQ = prove((parse_term @"(!x. real_sgn x = &0 <=> x = &0) /\
     (!x. real_sgn x = &1 <=> x > &0) /\
     (!x. real_sgn x = -- &1 <=> x < &0)"), REWRITE_TAC [real_sgn]
                                            |> THEN <| REAL_ARITH_TAC)
  let REAL_SGN_CASES = 
      prove
          ((parse_term @"!x. real_sgn x = &0 \/ real_sgn x = &1 \/ real_sgn x = -- &1"), 
  
negative.code:          <| ONCE_REWRITE_TAC [REAL_ARITH(parse_term @"(x = y) <=> (x - y = &0)")]
           |> THEN <| REWRITE_TAC [GSYM REAL_SUB_LDISTRIB
                                   REAL_ENTIRE; REAL_SUB_RZERO])
  #else
      Sequent([],parse_term @"!x y z. (x * y = x * z) <=> (x = &0) \/ (y = z)")
  #endif
  
  let REAL_EQ_MUL_RCANCEL = 
      prove
  