{-# OPTIONS --cubical --safe --postfix-projections #-}

module Data.Rational.Unnormalised where

open import Prelude
open import Data.Integer using (; )
import Data.Integer as 
import Data.Nat as 
open import Data.Nat.DivMod using (nonZero)

infixl 7 _/_ _/suc_
record  : Type where
  constructor _/suc_
  field
    num : 
    den-pred : 

  den : 
  den = suc den-pred
open  public

_/_ : (n : )  (d : )   d≢0 : T (nonZero d)   
n / suc d = n /suc d

{-# DISPLAY _/suc_ n d = n / suc d #-}

infixl 6 _+_
_+_ :     
(x + y) .num = num x ℤ.*  (den y) ℤ.+ num y ℤ.*  (den x)
(x + y) .den-pred = x .den-pred ℕ.+ y .den-pred ℕ.+ x .den-pred ℕ.* y .den-pred

infixl 7 _*_
_*_ :     
(x * y) .num = x .num ℤ.* y .num
(x * y) .den-pred = x .den-pred ℕ.+ y .den-pred ℕ.+ x .den-pred ℕ.* y .den-pred