Home Developers Evidence math.ratio

Public evidence

math.ratio

Machine-checked verification for calculation version 1.0.2 · tier engine_tested

CVP: CVP VERIFIED · CVP protocol 1.0.0-proposed · Core assurance · all published modes· Declared CVP coverage is all six published modes (simplify, proportion, scale, split, compare, convert), including A:B:C where those modes support it. Integer, terminating-decimal, and simple a/b terms. · Protocol · Schema · Production report

Declared partition coverage
PASS · 8/8 declared partitions (simplify, proportion, scale, split, compare, convert, three-term, invalid-domain)
Versions
Calculation 1.0.2 · CVP protocol 1.0.0-proposed · Evidence 2026-09-16.sources-no-wolfram
Verification revision
2026-09-16.sources-no-wolfram · 7/7 property · digest e32c91d652f9

Verification

Legacy regression suite: 26/26 calculation tests · Production surface contract 8/8

Three distinct suites: educational examples on the calculator page, this legacy regression count (26/26 golden + boundary), and the CVP verification suite below. They are not the same number. Property, metamorphic, round-trip, O3, and interface statuses/checks are recorded in the CVP Manifest . SKIP (0/0) means that suite has no published vectors.

    This calculator CURRENT · Public schema 1.0.2 matches · Semantic contract ✓ · Production attested · Public/cache ✓ · Origin ✓

CVP verification suite

Protocol checks from the Evidence Manifest. Distinct from the legacy regression suite above. Verification revision 2026-09-16.sources-no-wolfram. Calculation version 1.0.2. CVP 1.0.0-proposed. 13/13 golden · 7/7 CVP boundary · 7/7 invalid · 7/7 property · 2/2 metamorphic · 2/2 round-trip · 3/3 cross-interface · 8/8 CVP contract. digest e32c91d652f9. All six published Ratio modes (simplify, proportion, scale, split, compare, convert), including A:B:C where those modes support it. Independent O2 expected values; exact rational BigInt; Node is runtime host only.

  • Golden (oracle-backed) 13 / 13
  • CVP boundary 7 / 7
  • Invalid input 7 / 7
  • Property 7 / 7
  • Metamorphic 2 / 2
  • Round-trip 2 / 2
  • Cross-interface 3 / 3
  • CVP contract 8 / 8
  • Interfaces PASS · UI (SSR) / REST / MCP
  • Interface claim ui-ssr is query-result HTML, not a live browser session.
  • Verified scope all published modes
  • Assurance Core
  • release artifacts aligned PASS
  • schema valid input executes PASS
  • engine success output validates schema PASS
  • explanation formula n term PASS
  • explanation steps match result PASS
  • explanation inputs summary PASS
  • explanation calculation version PASS
  • explanation arity PASS

Fingerprint sha256:dac908da70997d5d17219bced551bfbb3489d162043cbc082941e63da82008f4

Input schema sha256:f265bc76ddf4ac054863a56d32fe03592f46d7a183cf98ad39c180496f456d46 · Output schema sha256:a88be281f59641c093c0fb7b28328ac502a4d55a7cda009c4ab75bc5f195a1ca · Build-time SHA-256 digests prove published artifacts agree with each other (release_integrity.scope=workspace). Production attestation GETs canonical URLs twice (public/cached view and origin), including Capability HTML, via npm run attest:production --write (published at /.well-known/calculatorx-production-attestation.json) and fails if the public Capability page advertises a different calculation_version. This is artifact consistency, not an independent immutable release log.

Build & scope

Engine identity and declared limitations.

Tool
ratio
Engine
ratio
Engine build
2026-09-16
Evidence core
2026-09-16T06:41:00.884Z
Rendered
2026-09-16T22:03:43.772Z
Last reviewed

Assumptions

  • Finite rationals: integers, terminating decimals, or simple fractions a/b.
  • Proportion denominators in A/B or C/D must be nonzero when used.
  • Simplify / proportion / compare allow negative terms. Split does not.

Limitations

  • Integers, terminating decimals, and simple a/b fractions only (no mixed numbers or scientific notation)
  • Each term ≤ 48 decimal digits
  • Simplify / proportion / compare allow negative terms
  • Split requires every term ≥ 0 and Σ terms > 0 → SPLIT_NEGATIVE_TERM / SPLIT_ZERO_SUM
  • All-zero simplify → ALL_ZERO
  • Proportion needs exactly one blank among A,B,C,D → PROPORTION_ONE_BLANK
  • Expert review pending — L1 engine-tested / source-checked

Sources

Standards and references supporting this tool specification. Methods are listed separately — they are algorithms, not bibliographic sources.

Legacy published checks

Golden and boundary cases from the legacy Evidence JSON. CVP property, metamorphic, round-trip, O3, and interface statuses/checks are recorded in the Manifest — including SKIP when a suite has no vectors.

IDKindStatusDetail
simplify-12-18goldenpassExpected value=2:3 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · calculation_version=1.0.2 · inputs_summary=12:18 · Actual value=2:3 · mode=simplify · mode_label=Simplify · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · heading=Simplified ratio · ratio=2:3 · gcf=6
simplify-decimalgoldenpassExpected value=2:3 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · calculation_version=1.0.2 · inputs_summary=1.5:2.25 · Actual value=2:3 · mode=simplify · mode_label=Simplify · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · heading=Simplified ratio · ratio=2:3 · gcf=3
simplify-fractiongoldenpassExpected value=9:10 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · calculation_version=1.0.2 · inputs_summary=0.75:5/6 · Actual value=9:10 · mode=simplify · mode_label=Simplify · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · heading=Simplified ratio · ratio=9:10 · gcf=1
proportion-missing-cgoldenpassExpected value=12 · solved_for=C · formula=A/B = C/D · calculation_version=1.0.2 · Actual value=12 · mode=proportion · mode_label=Proportion · calculation_version=1.0.2 · formula=A/B = C/D · heading=C = · solved=12 · solved_for=C
scale-2-5-times-4goldenpassExpected value=8:20 · formula=r₁:⋯:rₙ → k·r₁:⋯:k·rₙ · calculation_version=1.0.2 · Actual value=8:20 · mode=scale · mode_label=Scale · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → k·r₁:⋯:k·rₙ · heading=Scaled ratio · ratio=8:20 · k=4
split-25-by-3-2goldenpassExpected value=15 : 10 · formula=partᵢ = total × (termᵢ / Σ terms) · calculation_version=1.0.2 · Actual value=15 : 10 · mode=split · mode_label=Split · calculation_version=1.0.2 · formula=partᵢ = total × (termᵢ / Σ terms) · heading=Shares · inputs_summary=3:2 · total=25 · explainer=Split 25 by 3:2.
compare-equivalentgoldenpassExpected value=Equivalent · equivalent=true · formula=A/B ? C/D · calculation_version=1.0.2 · Actual value=Equivalent · mode=compare · mode_label=Compare · calculation_version=1.0.2 · formula=A/B ? C/D · heading=Comparison · equivalent=true · inputs_summary=4:6 vs 10:15
golden-three-term-simplifygoldenpassExpected value=2:3:4 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · calculation_version=1.0.2 · inputs_summary=6:9:12 · Actual value=2:3:4 · mode=simplify · mode_label=Simplify · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → (r₁′÷g):⋯:(rₙ′÷g), rᵢ′=L·rᵢ, L=LCM(dᵢ), g=GCF(|rᵢ′|) · heading=Simplified ratio · ratio=2:3:4 · gcf=3
golden-three-term-scalegoldenpassExpected value=4:8:12 · formula=r₁:⋯:rₙ → k·r₁:⋯:k·rₙ · calculation_version=1.0.2 · Actual value=4:8:12 · mode=scale · mode_label=Scale · calculation_version=1.0.2 · formula=r₁:⋯:rₙ → k·r₁:⋯:k·rₙ · heading=Scaled ratio · ratio=4:8:12 · k=4
golden-three-term-splitgoldenpassExpected value=5 : 10 : 15 · formula=partᵢ = total × (termᵢ / Σ terms) · calculation_version=1.0.2 · Actual value=5 : 10 : 15 · mode=split · mode_label=Split · calculation_version=1.0.2 · formula=partᵢ = total × (termᵢ / Σ terms) · heading=Shares · inputs_summary=1:2:3 · total=30 · explainer=Split 30 by 1:2:3.
golden-convertgoldenpassExpected part_to_part=2/3 · part_of_whole_A=40 · part_of_whole_B=60 · formula=A:B → fraction / % · calculation_version=1.0.2 · Actual value=2/3 = 2/3 · mode=convert · mode_label=Convert · calculation_version=1.0.2 · formula=A:B → fraction / % · heading=Conversion · part_to_part=2/3 · part_of_whole_A=40
boundary-all-zeroboundarypassExpected ALL_ZERO · Actual ALL_ZERO
boundary-missingboundarypassExpected MISSING_REQUIRED_INPUT · Actual MISSING_REQUIRED_INPUT
boundary-split-negativeboundarypassExpected SPLIT_NEGATIVE_TERM · Actual SPLIT_NEGATIVE_TERM
boundary-split-zero-sumboundarypassExpected SPLIT_ZERO_SUM · Actual SPLIT_ZERO_SUM
boundary-proportion-two-blanksboundarypassExpected PROPORTION_ONE_BLANK · Actual PROPORTION_ONE_BLANK
boundary-proportion-d-zeroboundarypassExpected ZERO_DENOMINATOR · Actual ZERO_DENOMINATOR
boundary-scale-divide-zeroboundarypassExpected DIVISION_BY_ZERO · Actual DIVISION_BY_ZERO
property-simplify-12-18propertypass12:18 → 2:3
property-decimal-equals-fractionpropertypass1.5:2.25 = 3/2:9/4 = 2:3 with n-term formula
property-scale-preserves-equivalencepropertypass2:3 × 4 is equivalent to 8:12; scale formula is n-term
property-part-of-whole-sums-100propertypass2:3 as parts of the whole is 40% | 60%
property-negative-simplifypropertypass-12:18 → -2:3
property-share-aliaspropertypassaInput/bInput aliases match a/b
property-three-term-scale-invariantpropertypasssimplify(kA:kB:kC) = simplify(A:B:C) with the same n-term formula
property-three-term-split-sums-totalpropertypassΣ share_i = total for A:B:C