{
 "about": "Formal proofs of FP127's and FP19's core arithmetic and directed rounding: docs/proofs.md",
 "tools": {
  "halmos": "0.3.3",
  "solver": "bitwuzla 0.8.1",
  "z3": "4.12.6",
  "forge": "forge Version: 1.7.1",
  "solc": "0.8.38"
 },
 "summary": {
  "ops": 41,
  "proven": 35,
  "proven_except": 0,
  "fuzzed": 6,
  "counterexamples": 0,
  "in_progress": 0,
  "solver_seconds": 5933
 },
 "ops": [
  {
   "lib": "FP127",
   "op": "add",
   "status": "proven",
   "spec": "a + b exact; Overflow outside int256",
   "checks": [
    "check_fp127_add"
   ],
   "lemmas": [],
   "seconds": 1.0,
   "paths": 12,
   "fast_checks": [
    "check_fp127_add"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_add)$'"
  },
  {
   "lib": "FP127",
   "op": "sub",
   "status": "proven",
   "spec": "a - b exact; Overflow outside int256",
   "checks": [
    "check_fp127_sub"
   ],
   "lemmas": [],
   "seconds": 1.3,
   "paths": 12,
   "fast_checks": [
    "check_fp127_sub"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_sub)$'"
  },
  {
   "lib": "FP127",
   "op": "mul",
   "status": "proven",
   "spec": "floor(a b / 2^128); Overflow when it leaves int256",
   "checks": [
    "check_fp127_mul"
   ],
   "lemmas": [
    "L1",
    "L2"
   ],
   "seconds": 44.8,
   "paths": 21,
   "fast_checks": [
    "check_fp127_mul"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_mul)$'"
  },
  {
   "lib": "FP127",
   "op": "mulDown",
   "status": "proven",
   "spec": "floor(a b / 2^128)",
   "checks": [
    "check_fp127_mulDown"
   ],
   "lemmas": [
    "L1",
    "L2"
   ],
   "seconds": 47.5,
   "paths": 20,
   "fast_checks": [
    "check_fp127_mulDown"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_mulDown)$'"
  },
  {
   "lib": "FP127",
   "op": "mulUp",
   "status": "proven",
   "spec": "ceil(a b / 2^128); Overflow when it leaves int256",
   "checks": [
    "check_fp127_mulUp_outside",
    "check_fp127_mulUp_window"
   ],
   "lemmas": [
    "L1",
    "L2"
   ],
   "seconds": 418.8,
   "paths": 72,
   "fast_checks": [],
   "note": "two checks: every input outside the window where floor(a b / 2^128) = -2^255 - 1, and the window itself (fixed in #159)",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_mulUp_outside|check_fp127_mulUp_window)$'"
  },
  {
   "lib": "FP127",
   "op": "div",
   "status": "proven",
   "spec": "trunc(a 2^128 / b); DivisionByZero; Overflow",
   "checks": [
    "check_fp127_div"
   ],
   "lemmas": [
    "K127",
    "L5"
   ],
   "seconds": 0.8,
   "paths": 23,
   "fast_checks": [
    "check_fp127_div"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_div)$'"
  },
  {
   "lib": "FP127",
   "op": "divDown",
   "status": "proven",
   "spec": "floor(a 2^128 / b)",
   "checks": [
    "check_fp127_divDown"
   ],
   "lemmas": [
    "K127",
    "L5"
   ],
   "seconds": 2.8,
   "paths": 64,
   "fast_checks": [
    "check_fp127_divDown"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_divDown)$'"
  },
  {
   "lib": "FP127",
   "op": "divUp",
   "status": "proven",
   "spec": "ceil(a 2^128 / b)",
   "checks": [
    "check_fp127_divUp"
   ],
   "lemmas": [
    "K127",
    "L5"
   ],
   "seconds": 1.9,
   "paths": 51,
   "fast_checks": [
    "check_fp127_divUp"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_divUp)$'"
  },
  {
   "lib": "FP127",
   "op": "inv",
   "status": "proven",
   "spec": "trunc(2^256 / x); DivisionByZero; Overflow",
   "checks": [
    "check_fp127_inv"
   ],
   "lemmas": [
    "L4",
    "L5"
   ],
   "seconds": 0.4,
   "paths": 11,
   "fast_checks": [
    "check_fp127_inv"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_inv)$'"
  },
  {
   "lib": "FP127",
   "op": "sqrt",
   "status": "proven",
   "spec": "floor(sqrt(x 2^128)); OutOfRange below zero",
   "checks": [],
   "lemmas": [
    "R1",
    "R2",
    "L1"
   ],
   "seconds": null,
   "paths": null,
   "fast_checks": [],
   "note": "a proof by exhaustion and error bounds (test/proofs/isqrt.py): the seed within 2^-4 for each of its 196,608 leading values, five Newton steps to below 2^-128, and the corrections exact; fixed in #159 where it once returned floor + 1",
   "tool": "exact integer arithmetic, test/proofs/isqrt.py",
   "reproduce": "python3 test/proofs/isqrt.py"
  },
  {
   "lib": "FP127",
   "op": "floor",
   "status": "proven",
   "spec": "2^128 floor(x / 2^128)",
   "checks": [
    "check_fp127_floor"
   ],
   "lemmas": [],
   "seconds": 0.0,
   "paths": 1,
   "fast_checks": [
    "check_fp127_floor"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_floor)$'"
  },
  {
   "lib": "FP127",
   "op": "ceil",
   "status": "proven",
   "spec": "2^128 ceil(x / 2^128); Overflow at 2^255",
   "checks": [
    "check_fp127_ceil"
   ],
   "lemmas": [],
   "seconds": 0.3,
   "paths": 9,
   "fast_checks": [
    "check_fp127_ceil"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_ceil)$'"
  },
  {
   "lib": "FP127",
   "op": "round",
   "status": "proven",
   "spec": "2^128 floor(x / 2^128 + 1/2); Overflow at 2^255",
   "checks": [
    "check_fp127_round"
   ],
   "lemmas": [],
   "seconds": 0.2,
   "paths": 6,
   "fast_checks": [
    "check_fp127_round"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_round)$'"
  },
  {
   "lib": "FP127",
   "op": "toFixed18",
   "status": "proven",
   "spec": "floor(x 10^18 / 2^128)",
   "checks": [
    "check_fp127_toFixed18"
   ],
   "lemmas": [],
   "seconds": 20.3,
   "paths": 9,
   "fast_checks": [
    "check_fp127_toFixed18"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_toFixed18)$'"
  },
  {
   "lib": "FP127",
   "op": "toFixed18Down",
   "status": "proven",
   "spec": "floor(x 10^18 / 2^128)",
   "checks": [
    "check_fp127_toFixed18Down"
   ],
   "lemmas": [],
   "seconds": 19.1,
   "paths": 9,
   "fast_checks": [
    "check_fp127_toFixed18Down"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_toFixed18Down)$'"
  },
  {
   "lib": "FP127",
   "op": "toFixed18Up",
   "status": "proven",
   "spec": "ceil(x 10^18 / 2^128)",
   "checks": [
    "check_fp127_toFixed18Up"
   ],
   "lemmas": [],
   "seconds": 48.4,
   "paths": 27,
   "fast_checks": [
    "check_fp127_toFixed18Up"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_toFixed18Up)$'"
  },
  {
   "lib": "FP127",
   "op": "fromFixed18",
   "status": "proven",
   "spec": "trunc(x 2^128 / 10^18); OutOfRange outside [-2^127, 2^127)",
   "checks": [
    "check_fp127_fromFixed18"
   ],
   "lemmas": [],
   "seconds": 0.0,
   "paths": 3,
   "fast_checks": [
    "check_fp127_fromFixed18"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp127_fromFixed18)$'"
  },
  {
   "lib": "FP19",
   "op": "add",
   "status": "fuzzed",
   "spec": "a + b rounded to nearest (237 bits, ties away)",
   "checks": [
    "check_fp19_add"
   ],
   "lemmas": [],
   "seconds": null,
   "paths": null,
   "fast_checks": [],
   "note": "Halmos ran out of time (2000 s) on check_fp19_add; fuzzed against the exact spec",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_add)$'"
  },
  {
   "lib": "FP19",
   "op": "sub",
   "status": "fuzzed",
   "spec": "a - b rounded to nearest",
   "checks": [
    "check_fp19_sub"
   ],
   "lemmas": [],
   "seconds": null,
   "paths": null,
   "fast_checks": [],
   "note": "Halmos ran out of time (2000 s) on check_fp19_sub; fuzzed against the exact spec",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_sub)$'"
  },
  {
   "lib": "FP19",
   "op": "mul",
   "status": "proven",
   "spec": "a b rounded to nearest",
   "checks": [
    "check_fp19_mul"
   ],
   "lemmas": [
    "L1",
    "L3"
   ],
   "seconds": 430.2,
   "paths": 722,
   "fast_checks": [],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_mul)$'"
  },
  {
   "lib": "FP19",
   "op": "mulDown",
   "status": "proven",
   "spec": "a b rounded toward -inf",
   "checks": [
    "check_fp19_mulDown"
   ],
   "lemmas": [
    "L1",
    "L3"
   ],
   "seconds": 1023.4,
   "paths": 3161,
   "fast_checks": [],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_mulDown)$'"
  },
  {
   "lib": "FP19",
   "op": "mulUp",
   "status": "proven",
   "spec": "a b rounded toward +inf",
   "checks": [
    "check_fp19_mulUp"
   ],
   "lemmas": [
    "L1",
    "L3"
   ],
   "seconds": 730.8,
   "paths": 2561,
   "fast_checks": [],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_mulUp)$'"
  },
  {
   "lib": "FP19",
   "op": "div",
   "status": "proven",
   "spec": "a / b rounded to nearest",
   "checks": [
    "check_fp19_div"
   ],
   "lemmas": [
    "K19",
    "L3"
   ],
   "seconds": 113.9,
   "paths": 443,
   "fast_checks": [
    "check_fp19_div"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_div)$'"
  },
  {
   "lib": "FP19",
   "op": "divDown",
   "status": "proven",
   "spec": "a / b rounded toward -inf",
   "checks": [
    "check_fp19_divDown"
   ],
   "lemmas": [
    "K19",
    "L3"
   ],
   "seconds": 303.0,
   "paths": 1805,
   "fast_checks": [],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_divDown)$'"
  },
  {
   "lib": "FP19",
   "op": "divUp",
   "status": "proven",
   "spec": "a / b rounded toward +inf",
   "checks": [
    "check_fp19_divUp"
   ],
   "lemmas": [
    "K19",
    "L3"
   ],
   "seconds": 263.9,
   "paths": 1553,
   "fast_checks": [],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_divUp)$'"
  },
  {
   "lib": "FP19",
   "op": "inv",
   "status": "proven",
   "spec": "1 / x rounded to nearest",
   "checks": [
    "check_fp19_inv"
   ],
   "lemmas": [
    "K19"
   ],
   "seconds": 60.4,
   "paths": 462,
   "fast_checks": [
    "check_fp19_inv"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_inv)$'"
  },
  {
   "lib": "FP19",
   "op": "sqrt",
   "status": "fuzzed",
   "spec": "sqrt(x) rounded to nearest",
   "checks": [],
   "lemmas": [],
   "seconds": null,
   "paths": null,
   "fast_checks": [],
   "note": "FuzzProofs against the exact integer root",
   "tool": "forge fuzz, 3,000 runs",
   "reproduce": "FOUNDRY_PROFILE=proofs forge test --match-contract FuzzProofs --match-test fp19_sqrt"
  },
  {
   "lib": "FP19",
   "op": "floor",
   "status": "proven",
   "spec": "the integral number at or below x",
   "checks": [
    "check_fp19_floor"
   ],
   "lemmas": [],
   "seconds": 198.6,
   "paths": 1412,
   "fast_checks": [],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_floor)$'"
  },
  {
   "lib": "FP19",
   "op": "ceil",
   "status": "proven",
   "spec": "the integral number at or above x",
   "checks": [
    "check_fp19_ceil"
   ],
   "lemmas": [],
   "seconds": 202.2,
   "paths": 1423,
   "fast_checks": [],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_ceil)$'"
  },
  {
   "lib": "FP19",
   "op": "round",
   "status": "proven",
   "spec": "the nearest integral number, halves away from zero",
   "checks": [
    "check_fp19_round"
   ],
   "lemmas": [],
   "seconds": 206.4,
   "paths": 1380,
   "fast_checks": [],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_round)$'"
  },
  {
   "lib": "FP19",
   "op": "toUintDown",
   "status": "proven",
   "spec": "floor(x) as uint256",
   "checks": [
    "check_fp19_toUintDown"
   ],
   "lemmas": [],
   "seconds": 0.6,
   "paths": 29,
   "fast_checks": [
    "check_fp19_toUintDown"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_toUintDown)$'"
  },
  {
   "lib": "FP19",
   "op": "toUintUp",
   "status": "proven",
   "spec": "ceil(x) as uint256",
   "checks": [
    "check_fp19_toUintUp"
   ],
   "lemmas": [],
   "seconds": 0.7,
   "paths": 27,
   "fast_checks": [
    "check_fp19_toUintUp"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_toUintUp)$'"
  },
  {
   "lib": "FP19",
   "op": "toIntDown",
   "status": "proven",
   "spec": "floor(x) as int256",
   "checks": [
    "check_fp19_toIntDown"
   ],
   "lemmas": [],
   "seconds": 1.3,
   "paths": 47,
   "fast_checks": [
    "check_fp19_toIntDown"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_toIntDown)$'"
  },
  {
   "lib": "FP19",
   "op": "toIntUp",
   "status": "proven",
   "spec": "ceil(x) as int256",
   "checks": [
    "check_fp19_toIntUp"
   ],
   "lemmas": [],
   "seconds": 1.3,
   "paths": 41,
   "fast_checks": [
    "check_fp19_toIntUp"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_toIntUp)$'"
  },
  {
   "lib": "FP19",
   "op": "toFixed18",
   "status": "fuzzed",
   "spec": "x 10^18 to the nearest integer, halves away",
   "checks": [
    "check_fp19_toFixed18"
   ],
   "lemmas": [
    "L1"
   ],
   "seconds": null,
   "paths": null,
   "fast_checks": [],
   "note": "Halmos ran out of time (2000 s) on check_fp19_toFixed18; fuzzed against the exact spec",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_toFixed18)$'"
  },
  {
   "lib": "FP19",
   "op": "toFixed18Down",
   "status": "fuzzed",
   "spec": "floor(x 10^18)",
   "checks": [
    "check_fp19_toFixed18Down"
   ],
   "lemmas": [
    "L1"
   ],
   "seconds": null,
   "paths": null,
   "fast_checks": [],
   "note": "Halmos ran out of time (2000 s) on check_fp19_toFixed18Down; fuzzed against the exact spec",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_toFixed18Down)$'"
  },
  {
   "lib": "FP19",
   "op": "toFixed18Up",
   "status": "fuzzed",
   "spec": "ceil(x 10^18)",
   "checks": [
    "check_fp19_toFixed18Up"
   ],
   "lemmas": [
    "L1"
   ],
   "seconds": null,
   "paths": null,
   "fast_checks": [],
   "note": "Halmos ran out of time (2000 s) on check_fp19_toFixed18Up; fuzzed against the exact spec",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_toFixed18Up)$'"
  },
  {
   "lib": "FP19",
   "op": "fromUint",
   "status": "proven",
   "spec": "x rounded to nearest",
   "checks": [
    "check_fp19_fromUint"
   ],
   "lemmas": [],
   "seconds": 36.0,
   "paths": 189,
   "fast_checks": [
    "check_fp19_fromUint"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_fromUint)$'"
  },
  {
   "lib": "FP19",
   "op": "fromUintDown",
   "status": "proven",
   "spec": "x truncated to 237 bits",
   "checks": [
    "check_fp19_fromUintDown"
   ],
   "lemmas": [],
   "seconds": 27.2,
   "paths": 112,
   "fast_checks": [
    "check_fp19_fromUintDown"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_fromUintDown)$'"
  },
  {
   "lib": "FP19",
   "op": "fromUintUp",
   "status": "proven",
   "spec": "x rounded up to 237 bits",
   "checks": [
    "check_fp19_fromUintUp"
   ],
   "lemmas": [],
   "seconds": 64.1,
   "paths": 554,
   "fast_checks": [
    "check_fp19_fromUintUp"
   ],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_fromUintUp)$'"
  },
  {
   "lib": "FP19",
   "op": "fromFixed18",
   "status": "proven",
   "spec": "round(round(x) / 10^18), each to nearest (one rounding below 2^237)",
   "checks": [
    "check_fp19_fromFixed18"
   ],
   "lemmas": [
    "K18",
    "L5"
   ],
   "seconds": 1661.1,
   "paths": 6325,
   "fast_checks": [],
   "note": "",
   "tool": "Halmos 0.3.3, bitwuzla 0.8.1",
   "reproduce": "python3 test/proofs/run.py --only '^(check_fp19_fromFixed18)$'"
  }
 ],
 "lemmas": [
  {
   "lemma": "L1",
   "result": "proved",
   "text": "umul: (MULMOD(a,b,2^256-1) - MUL(a,b) - borrow, MUL(a,b)) = a b"
  },
  {
   "lemma": "L2",
   "result": "proved",
   "text": "smul, signs (+, +): signed high word by the corrections"
  },
  {
   "lemma": "L2",
   "result": "proved",
   "text": "smul, signs (+, -): signed high word by the corrections"
  },
  {
   "lemma": "L2",
   "result": "proved",
   "text": "smul, signs (-, +): signed high word by the corrections"
  },
  {
   "lemma": "L2",
   "result": "proved",
   "text": "smul, signs (-, -): signed high word by the corrections"
  },
  {
   "lemma": "L3",
   "result": "proved",
   "text": "MUL of two exponent fields is zero iff one is"
  },
  {
   "lemma": "L4",
   "result": "proved",
   "text": "DIV(2^256 - u, u) + 1 = floor(2^256 / u)"
  },
  {
   "lemma": "L5",
   "result": "proved",
   "text": "(x XOR SAR(255, x)) - SAR(255, x) = |x|"
  },
  {
   "lemma": "L6",
   "result": "proved",
   "text": "ma mb in [2^472, 2^474) for significands"
  },
  {
   "lemma": "L6",
   "result": "proved",
   "text": "so its high word is in [2^216, 2^218)"
  },
  {
   "lemma": "L7",
   "result": "proved",
   "text": "floor(ma 2^255 / mb) >= 2^254"
  },
  {
   "lemma": "L7",
   "result": "proved",
   "text": "floor(2^491 / m) >= 2^254"
  },
  {
   "lemma": "L7",
   "result": "proved",
   "text": "floor(m 2^60 / 5^18) >= 2^254"
  },
  {
   "lemma": "K18",
   "result": "proved",
   "text": "q18: floor(m 2^60 / 5^18) by two word divisions, every intermediate a word"
  },
  {
   "lemma": "K127",
   "result": "proved",
   "text": "divq(a, b) = floor(a 2^128 / b): S1-S6, B1-B3"
  },
  {
   "lemma": "K19",
   "result": "proved",
   "text": "divh(a, b) = floor(a 2^255 / b): S1-S6, B1-B3"
  },
  {
   "lemma": "R1",
   "result": "proved",
   "text": "isqrtw(z) = floor(sqrt z) for 2^128 <= z < 2^256"
  },
  {
   "lemma": "R2",
   "result": "proved",
   "text": "FP127 sqrt(x) = floor(sqrt(x 2^128)) for 0 < x < 2^255"
  }
 ],
 "fuzz": [
  {
   "test": "testFuzz_K127",
   "result": "pass",
   "runs": 3000
  },
  {
   "test": "testFuzz_K19",
   "result": "pass",
   "runs": 3000
  },
  {
   "test": "testFuzz_K19_significands",
   "result": "pass",
   "runs": 3000
  },
  {
   "test": "testFuzz_fp127_sqrt",
   "result": "pass",
   "runs": 3000
  },
  {
   "test": "testFuzz_fp127_sqrt_negative",
   "result": "pass",
   "runs": 3000
  },
  {
   "test": "testFuzz_fp19_sqrt",
   "result": "pass",
   "runs": 3000
  },
  {
   "test": "testFuzz_fp19_sqrt_near_squares",
   "result": "pass",
   "runs": 3000
  },
  {
   "test": "test_fp127_mulUp_regression_159",
   "result": "pass",
   "runs": 1
  },
  {
   "test": "test_fp127_sqrt_regression_159",
   "result": "pass",
   "runs": 1
  }
 ]
}
