Real numbers in Coq are determined axiomatically, i.e. these are just names associated with types, there are no definitions associated with names. There are basic numbers ( R0 , R1 ) and operations on actions ( Rplus , Rmult , etc.) that are not performed, that is, operations are not functions. In a sense, it simply builds real numbers, creating them from these operations, as with data constructors (but we cannot match patterns by reals).
The foregoing means that, for example, 1/0 is a real real number. This is simply a premise of the axioms for real numbers, which prohibits some of the simplifications associated with such expressions: we cannot rewrite expressions like 1/0 * 0 - 1 (although we can rewrite it to 0 ).
Here's how we can show that we cannot deduce y <> 2 from an expression like
(y + 1) / (y - 2) = x
because we are allowed to use "weird" real numbers:
From Coq Require Import Reals. Open Scope R. Goal ~ (forall xy : R, (y + 1) / (y - 2) = x -> y <> 2). unfold "_ - _"; intros contra; specialize (contra ((2+1)/0) 2). rewrite Rplus_opp_r in contra. intuition. Qed.
source share