Real.eq
import Rat (Q, +, qNeg, qAddComm)
import Rat.order (≤, leQPlusMonoL)
import Rat.bound (Bnd, bndVia, bndEq, bndEqB, bndWeaken)
import Rat.half (dbl, qInvHalf)
import Rat.arch (bndOfArch, qFourSum, leQTripleInv)
import Real (qInvNat, rBound, RSeq, REq, Real)
import Real.neg (seqOf, regOf, regBnd, reqOf, reqRefl, reqSym, realEqOfREq)
import Real.add (rBoundHalf)
import Core.equality (trans, sym, cong, transport)
qtr : ℕ → ℕ
qtr = λk. dbl (dbl k)
reqStep : (x y z : RSeq)
→ ((j : ℕ) → Bnd (rBound j j) (seqOf x j + qNeg (seqOf y j)))
→ ((j : ℕ) → Bnd (rBound j j) (seqOf y j + qNeg (seqOf z j)))
→ (n k : ℕ) → Bnd (rBound n n + qInvNat k) (seqOf x n + qNeg (seqOf z n))
using (Core.id.Id.eq,
Rat.bound.Bnd.unfold,
Rat.half.dbl.eq,
Rat.order.≤.unfold,
Rat.order.NonNegS.unfold,
Rat.order.Sign.eq,
Rat.order.sPos.eq,
Rat.order.sZero.eq,
Rat.order.sgnQ.eq,
Rat.+.eq,
Rat.qNeg.eq,
Real.RSeq.unfold,
Real.Regular.unfold,
Real.qInvNat.eq,
Real.rBound.eq,
Real.eq.qtr.eq)
reqStep =
λx y z u v n k. bndWeaken
_
_
_
leQPlusMonoL
qInvNat (qtr k) + (qInvNat (qtr k) + qInvNat (qtr k))
qInvNat k
rBound n n
leQTripleInv k
bndEqB
_
rBound n n + (qInvNat (qtr k) + (qInvNat (qtr k) + qInvNat (qtr k)))
_
cong (λw. Q) (λw. rBound n n + (w + rBound (qtr k) (qtr k))) (qInvHalf (qtr k))
bndEqB
rBound n (dbl (qtr k)) + rBound (qtr k) (qtr k) + rBound (dbl (qtr k)) n
qInvNat n + qInvNat n
+ (qInvNat (dbl (qtr k)) + qInvNat (dbl (qtr k)) + rBound (qtr k) (qtr k))
_
qFourSum (qInvNat n) (qInvNat (dbl (qtr k))) (rBound (qtr k) (qtr k))
bndVia
_
_
_
_
_
bndVia
_
_
_
_
_
regBnd _ (regOf x) n (dbl (qtr k))
bndEqB
_
_
_
rBoundHalf (qtr k) (qtr k)
bndVia _ _ _ _ _ (u (dbl (qtr k))) (v (dbl (qtr k)))
regBnd _ (regOf z) (dbl (qtr k)) n
reqTrans : {x : RSeq} (y : RSeq) {z : RSeq} → REq x y → REq y z → REq x z
using (Core.id.Id.eq,
Rat.bound.Bnd.unfold,
Rat.order.Sign.eq,
Rat.order.sPos.eq,
Rat.order.sZero.eq,
Rat.order.sgnQ.eq,
Rat.+.eq,
Rat.qNeg.eq,
Real.REq.unfold,
Real.RSeq.unfold,
Real.Regular.unfold,
Real.rBound.eq,
Real.neg.seqOf.eq)
reqTrans =
λx y z hxy hyz. squash-elim
hxy
u. squash-elim
hyz
v. reqOf _ _ (λn. bndOfArch (seqOf x n + qNeg (seqOf z n)) (λk. reqStep x y z u v n k))
realEqTrans : (x y z : RSeq) → REq x y → REq y z → class x ≡ class z ∈ Real using (Real.Real.unfold)
realEqTrans = λx y z h1 h2. realEqOfREq _ _ (reqTrans _ h1 h2)