
module Issue175b where

data _≡_ {A : Set}(x : A) : A → Set where
  refl : x ≡ x

data Bool : Set where
  true : Bool
  false : Bool
{-# BUILTIN BOOL Bool #-}
{-# BUILTIN TRUE true #-}
{-# BUILTIN FALSE false #-}

{-# BUILTIN FLOAT ℝ #-}

primitive
  -- ℝ functions
  primFloatMinus : ℝ -> ℝ -> ℝ
  primFloatNumericalLess : ℝ -> ℝ -> Bool

_<_ : ℝ -> ℝ -> Bool
a < b = primFloatNumericalLess a b

data _≤_ : ℝ -> ℝ -> Set where
   ≤_ : {x y : ℝ} -> (x < y) ≡ true -> x ≤ y

--absolute value
[|_|] : ℝ -> ℝ
[| a |] with (a < 0.0)
[| a |] | true = primFloatMinus 0.0 a
[| a |] | false = a

--error variable
ε : ℝ
ε = 1.0e-5

-- two floating point numbers can be said to be equal if their
-- difference is less than the given error variable
postulate
  reflℝ : {a b : ℝ} -> [| primFloatMinus a b |] ≤ ε -> a ≡ b

test : 1.0 ≡ 1.0000001
test =  reflℝ (≤ refl)
