code wiki / (root) / nx_theorems7_test.nx

nx_theorems7_test.nx source

↩ module page · 119 lines · 5419 B

1// nx_theorems7_test.nx -- batch 7 verification. 2 3import "syscalls.nx" 4import "nx_qed_freek.nx" 5 6func main() -> i64 { 7 // Freek #5 PNT: pi(10) = 4 ({2,3,5,7}); pi(20) = 8. 8 if nx_th_prime_count(10) != 4 { return 5 } 9 if nx_th_prime_count(20) != 8 { return 6 } 10 if nx_th_prime_count(100) != 25 { return 7 } 11 12 // Freek #7 Quadratic reciprocity. 13 // Legendre(2, 7): 2 a QR mod 7? 1,4,2,2,4,1 are residues -> 2 is QR -> 1. 14 if nx_th_legendre_symbol(2, 7) != 1 { return 8 } 15 // Legendre(3, 7): residues 1,2,4 -> 3 not QR -> -1. 16 if nx_th_legendre_symbol(3, 7) != -1 { return 9 } 17 // QR check (3, 5): both odd primes. 18 if nx_th_quadratic_reciprocity_check(3, 5) != 1 { return 10 } 19 if nx_th_quadratic_reciprocity_check(5, 7) != 1 { return 11 } 20 21 // Freek #9 Circle area. r=2 -> pi*4 ~ 12.566. 22 let a2: i64 = nx_th_circle_area_ppb(2000000000) 23 if a2 < 12000000000 { return 12 } 24 if a2 > 13000000000 { return 13 } 25 26 // Freek #14 Basel partial. N=10000: should approach pi^2/6. 27 // We test small N: N=100 partial ~ 1.6349, N=1000 ~ 1.6439. 28 let b1000: i64 = nx_th_basel_partial_ppb(1000) 29 if b1000 < 1640000000 { return 14 } 30 if b1000 > 1645000000 { return 15 } 31 32 // Freek #26 Leibniz. N=10000 should give pi/4 ~ 0.7854. 33 // Convergence is slow, partial N=1000 ~ 0.7849. 34 let l1000: i64 = nx_th_leibniz_pi_over_4_partial_ppb(1000) 35 if l1000 < 780000000 { return 16 } 36 if l1000 > 790000000 { return 17 } 37 38 // Freek #30 Ballot. p=5, q=3 -> (5-3)/(5+3) = 0.25. 39 if nx_th_ballot_prob_ppb(5, 3) != 250000000 { return 18 } 40 if nx_th_ballot_prob_ppb(10, 4) != nx_muldiv_i64(6, 1000000000, 14) { return 19 } 41 42 // Freek #45 Partition. p(0)=1, p(1)=1, p(2)=2, p(3)=3, p(4)=5, p(5)=7. 43 if nx_th_partition(0) != 1 { return 20 } 44 if nx_th_partition(1) != 1 { return 21 } 45 if nx_th_partition(2) != 2 { return 22 } 46 if nx_th_partition(3) != 3 { return 23 } 47 if nx_th_partition(4) != 5 { return 24 } 48 if nx_th_partition(5) != 7 { return 25 } 49 if nx_th_partition(10) != 42 { return 26 } 50 51 // Freek #46 Quartic resolvent. p=-1, q=0, r=-2: 52 // coef0 = 4*(-1)*(-2) - 0 = 8 53 // coef1 = -8 * (-2) = 16 54 // coef2 = -4 * (-1) = 4 55 if nx_th_quartic_resolvent_coef0(-1, 0, -2) != 8 { return 27 } 56 if nx_th_quartic_resolvent_coef1(-1, 0, -2) != 16 { return 28 } 57 if nx_th_quartic_resolvent_coef2(-1, 0, -2) != 4 { return 29 } 58 59 // Freek #47 CLT z-score. sum=500 over N=100 samples (with sum 60 // representing PPB count); mu=5 PPB-scaled; sigma=1. Sample mean 61 // PPB = 500e9 / 100 = 5e9 = 5. Z = (5-5)/(1/10) = 0. PPB = 0. 62 let z: i64 = nx_th_clt_z_score_ppb(500, 100, 5000000000, 1000000000) 63 if z != 0 { return 30 } 64 // isqrt sanity: isqrt(100) = 10. 65 if nx_math_isqrt(100) != 10 { return 31 } 66 if nx_math_isqrt(10000) != 100 { return 32 } 67 68 // Freek #48 Dirichlet: first prime in 1 + 4k AP. 1, 5, 9, 13... -> 5. 69 if nx_th_dirichlet_first_prime_in_ap(1, 4, 100) != 5 { return 33 } 70 if nx_th_dirichlet_first_prime_in_ap(3, 8, 100) != 3 { return 34 } 71 72 // Freek #59 LLN. After N=100 samples of sum=500 (mean 5), mu=5 -> dev=0. 73 if nx_th_lln_deviation_ppb(500, 100, 5000000000) != 0 { return 35 } 74 // sum=499 over N=100, mu=5 -> sample mean = 4.99, dev = 0.01e9 = 10M. 75 if nx_th_lln_deviation_ppb(499, 100, 5000000000) != 10000000 { return 36 } 76 77 // Freek #62 Fair game. Start=10, deltas (+1,-1,+1,-1) -> end=10. 78 let deltas: *i64 = (sys_mmap(40)) as *i64 79 deltas[0] = 1; deltas[1] = -1; deltas[2] = 1; deltas[3] = -1 80 if nx_th_fair_game_balance(10, deltas, 4) != 10 { return 37 } 81 82 // Freek #64 L'Hopital. f(x)=x^2-1, g(x)=x-1 at a=1. f(1)=0, g(1)=0. 83 // f'=2x, g'=1. Limit = 2*1/1 = 2. 84 let f: *i64 = (sys_mmap(24)) as *i64 85 f[0] = -1; f[1] = 0; f[2] = 1 // x^2 - 1 86 let g: *i64 = (sys_mmap(24)) as *i64 87 g[0] = -1; g[1] = 1 // x - 1 88 let num: *i64 = (sys_mmap(8)) as *i64 89 let den: *i64 = (sys_mmap(8)) as *i64 90 if nx_th_lhopital_ratio(f, 2, g, 1, 1, num, den) != 1 { return 38 } 91 if num[0] != 2 { return 39 } 92 if den[0] != 1 { return 40 } 93 94 // Freek #84 Morley equilateral. 95 if nx_th_morley_equilateral_input_check(60, 60, 60) != 1 { return 41 } 96 if nx_th_morley_equilateral_input_check(50, 60, 70) != 0 { return 42 } 97 98 // Freek #35 Taylor. f(x) = x^2 around a=0, evaluated at x=3: 99 // f(3) = 9. Taylor order 2 should equal 9 exactly (polynomial). 100 let fp: *i64 = (sys_mmap(24)) as *i64 101 fp[0] = 0; fp[1] = 0; fp[2] = 1 102 if nx_th_taylor_eval_order_n(fp, 2, 0, 3, 2) != 9 { return 43 } 103 // f(x) = x^3 + x at a=1, evaluated at x=2, order 3: 104 // f(2) = 8 + 2 = 10. Taylor order 3 exact for cubic. 105 let fc: *i64 = (sys_mmap(32)) as *i64 106 fc[0] = 0; fc[1] = 1; fc[2] = 0; fc[3] = 1 107 if nx_th_taylor_eval_order_n(fc, 3, 1, 2, 3) != 10 { return 44 } 108 109 // Freek #22 Cantor diagonal: matrix all 0s -> diagonal complement all 1s. 110 let m: *i64 = (sys_mmap(80)) as *i64 111 var i: i64 = 0 112 while i < 16 { m[i] = 0; i = i + 1 } 113 let out_d: *i64 = (sys_mmap(40)) as *i64 114 nx_th_cantor_diagonal(m, 4, out_d) 115 if out_d[0] != 1 { return 45 } 116 if out_d[3] != 1 { return 46 } 117 118 return 0 119}