Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Require Coq.ZArith.ZArith. Require Coq.ZArith.Zdiv. Require Coq.ZArith.Zpower. Require Coq.ZArith.Zlogarithm. Definition base : Z := `10`. Definition digitcountpos [p:positive] : Z := `((log_inf p) + 2)/3 + 1`. Definition digitcount [i:Z] : Z := Cases i of ZERO => `0` | (POS p) => (digitcountpos p) | (NEG p) => (digitcountpos p) end. Definition R : Set := (Z->Z)*Z. Definition Rdigits : R->Z->Z := Fst. Definition Rsize : R->Z := Snd. Coercion Rdigits : R>->FUNCLASS. Definition ok [x:R] : Prop := (n:Z)`(Zabs ((x (n + 1)) - base*(x n))) < base` /\ `(x (-(Rsize x))) = 0`. Definition IZR [i:Z] : R := ([n:Z] Cases n of ZERO => i | (POS p) => `i*(Zpower_pos base p)` | (NEG p) => `i/(Zpower_pos base p)` end, (digitcount i)). Coercion IZR : Z>->R. Definition Zmax [m,n:Z] : Z := `((Zabs (m + n)) + (Zabs (m - n)))/2`. Definition Zdiv_rounded [m,n:Z] : Z := `(m + n/2)/n`. Definition Rplus [x,y:R] : R := ([n:Z]`(Zdiv_rounded ((x (n + 1)) + (y (n + 1))) base)`, `(Zmax (Rsize x) (Rsize y)) + 1`). Definition Ropp [x:R] : R := ([n:Z]`-(x n)`,(Rsize x)). Definition Rmult [x,y:R] : R := ([n:Z]`(Zdiv_rounded ((x (n + (Rsize y) + 1))*(y (n + (Rsize x) + 1))) (Zpower base (n + (Rsize x) + (Rsize y) + 2)))`, `(Rsize x) + (Rsize y)`). Definition Rinv [x:R; m:Z] : R := ([n:Z]`(Zdiv_rounded (Zpower base (n + (Rsize x) + 1)) (x (Rsize x) + 1))`, `-m`). Definition Rlt [x,y:R] : Prop := (EX n:Z | `(y n) - (x n) > 2`). Definition Rminus [x,y:R] : R := (Rplus x (Ropp y)). Definition Rdiv [x,y:R; m:Z] : R := (Rmult x (Rinv y m)). Definition Rne [x,y:R] : Prop := (Rlt x y) \/ (Rlt y x). Definition Req [x,y:R] : Prop := (ok x) /\ (ok y) /\ ~(Rne x y). Fixpoint Rpowernat [x:R; n:nat] : R := Cases n of O => `1` | (S m) => (Rmult (Rpowernat x m) x) end. Definition Rpower [x:R; m:Z; n:Z] : R := Cases n of ZERO => `1` | (POS p) => (Rpowernat x (convert p)) | (NEG p) => (Rinv (Rpowernat x (convert p)) `n*m`) end. Definition lim [a:Z->R; m:Z->Z] : R := ([n:Z]`(Zdiv_rounded (a (m (n + 1)) (n + 1)) base)`,`(Rsize (a 0)) + 1`). Fixpoint partsumnat [a:Z->R; n:nat] : R := Cases n of O => `0` | (S m) => `(Rplus (partsumnat a m) (a (inject_nat m)))` end. Definition partsum [a:Z->R; n:Z] : R := Cases n of ZERO => `0` | (POS p) => (partsumnat a (convert p)) | (NEG p) => (Ropp (partsumnat ([n:Z]`(a (1 - n))`) (convert p))) end. Definition sum [a:Z->R; m:Z->Z] := (lim ([n:Z](partsum a n)) m). Definition arctanterm [x:R; k:Z] : R := let n = `2*k + 1` in `(Rmult (Zpower (-1) k) (Rdiv (Rpower x 0 n) n 0))`. Definition arctan [x:R; m:Z] : R := (sum (arctanterm x) [n:Z]`n/m`). Definition pi : R := `(Rminus (Rmult 16 (arctan (Rdiv 1 5 0) 1)) (Rmult 4 (arctan (Rdiv 1 239 2) 4)))`. Eval Compute in `(pi 2)`. (* Extraction "R.ml" pi. *)