Require Export realbasis. Open Scope Z_scope. CoFixpoint stream_of_cut (p:Z*Z->bool) : stream idigit := match p (1, 2) with true => R::stream_of_cut (fun r => let (a,b) := r in p (a+b, 2*b)) | false => L::stream_of_cut (fun r => let (a,b) := r in p (a, 2*b)) end. Definition is_smaller := Z_le_gt_dec. CoFixpoint stream_of_cauchy (f: Z -> Z*Z)(g: Z -> Z) (n:Z)(b:Z*Z) : stream idigit := let (vn,vd) := f(g n) in let (bn,bd) := b in let (d, r) := if is_smaller (8*2^n*(vn*bd-vd*bn)) (3*vd*bd) then (L,b) else if is_smaller (8*2^n*(vn*bd-vd*bn)) (5*vd*bd) then (C,(4*2^n*bn+bd,4*2^n*bd)) else (R, (2*2^n*bn+bd,2*2^n*bd)) in let (new_bn, new_bd) := r in d::stream_of_cauchy f g (n+1) (new_bn, new_bd).