Home Developers Evidence math.pythagorean

Public evidence

math.pythagorean

Machine-checked verification for calculation version 1.1.2 · tier engine_tested

CVP status

CVP VERIFIED · CVP protocol 1.0.0-proposed · Engineering assurance

Positive sides; solve a|b|c or verify

Declared partition coverage
PASS · 5/5 declared partitions (solve-c, solve-b, solve-a, verify, invalid-domain)
Versions
Calculation 1.1.2 · CVP protocol 1.0.0-proposed · Evidence 2026-09-16.sources-no-wolfram
Verification revision
2026-09-16.sources-no-wolfram · 4/4 property · digest 4847c211167f

Verification

Legacy regression suite: 16/16 calculation tests · Production surface contract 6/6

Three distinct suites: educational examples on the calculator page, this legacy regression count (16/16 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.1.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.1.2. CVP 1.0.0-proposed. 6/6 golden · 10/10 CVP boundary · 11/11 invalid · 4/4 property · 2/2 metamorphic · 2/2 round-trip · 1/1 cross-interface · 6/6 CVP contract. digest 4847c211167f.

  • Golden (oracle-backed) 6 / 6
  • CVP boundary 10 / 10
  • Invalid input 11 / 11
  • Property 4 / 4
  • Metamorphic 2 / 2
  • Round-trip 2 / 2
  • Cross-interface 1 / 1
  • CVP contract 6 / 6
  • Interfaces PASS · UI (SSR) / REST / MCP
  • Interface claim ui-ssr is query-result HTML, not a live browser session.
  • Assurance Engineering
  • release artifacts aligned PASS
  • schema output required declared PASS
  • schema valid input executes PASS
  • engine success output validates schema PASS
  • schema rejects incomplete input PASS
  • rest success payload validates schema PASS

Fingerprint sha256:a40496b0892cba4f91d0d18120c44036050d53fa19d0629815fa70749cda2bc1

Input schema sha256:649f1060999b4745d0b5561292750c09cfe7706499d5aac9a640b1ddd3f27fb5 · Output schema sha256:8090cd31f6b9ccef124db3d56324b2dc84c07f739dc923e4c9aa2049ced56b94 · 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
pythagorean
Engine
pythagorean
Engine build
2026-09-21
Evidence core
2026-09-21T15:54:02.547Z
Rendered
2026-09-21T16:00:36.112Z
Last reviewed

Assumptions

  • Right triangle; positive side lengths.
  • c > a and c > b when solving for a leg.
  • Exactly two fields are inputs when solving. Explicit solve_for selects the output. If all three are supplied without solve_for, they are verified rather than overwritten.
  • Interactive evaluation, shared URLs, and REST use the same engine, solve_for contract, and error codes.
  • Share URL is canonical: solve_for=a|b|c forces solve even if a leftover third side is present; mode=verify is required to stay in Verify after a tab change.

Limitations

  • Sides must be positive → SIDE_NOT_POSITIVE
  • Need two of a,b,c (or verify with three) → MISSING_REQUIRED_INPUT

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
3-4-5goldenpassExpected c=5 · area=6 · Actual value=5 · calculation_version=1.1.2 · status=success · mode=solve · solve_for=c · mode_label=Solve hypotenuse · formula=c=√(a²+b²) · heading=Hypotenuse c
5-13goldenpassExpected b=12 · Actual value=12 · calculation_version=1.1.2 · status=success · mode=solve · solve_for=b · mode_label=Solve leg b · formula=b=√(c²−a²) · heading=Leg b
12-13goldenpassExpected a=5 · Actual value=5 · calculation_version=1.1.2 · status=success · mode=solve · solve_for=a · mode_label=Solve leg a · formula=a=√(c²−b²) · heading=Leg a
7-9goldenpassExpected c=11.40175425099138 · Actual value=11.40175425099138 · calculation_version=1.1.2 · status=success · mode=solve · solve_for=c · mode_label=Solve hypotenuse · formula=c=√(a²+b²) · heading=Hypotenuse c
verify-3-4-5goldenpassExpected mode=verify · valid=true · c=5 · area=6 · perimeter=12 · Actual value=5 · calculation_version=1.1.2 · status=success · mode=verify · mode_label=Verify right triangle · formula=a²+b²=c² · heading=Valid right triangle · a=3
solve-for-c-ignores-extragoldenpassExpected mode=solve · solve_for=c · c=5 · Actual value=5 · calculation_version=1.1.2 · status=success · mode=solve · solve_for=c · mode_label=Solve hypotenuse · formula=c=√(a²+b²) · heading=Hypotenuse c
side-not-positiveboundarypassExpected SIDE_NOT_POSITIVE · Actual SIDE_NOT_POSITIVE
missing-inputsboundarypassExpected MISSING_REQUIRED_INPUT · Actual MISSING_REQUIRED_INPUT
boundary-py-negboundarypassExpected SIDE_NOT_POSITIVE · Actual SIDE_NOT_POSITIVE
boundary-py-zeroboundarypassExpected SIDE_NOT_POSITIVE · Actual SIDE_NOT_POSITIVE
boundary-py-hyp-eq-legboundarypassExpected HYPOTENUSE_TOO_SHORT · Actual HYPOTENUSE_TOO_SHORT
boundary-py-invalid-solveboundarypassExpected INVALID_SOLVE_FOR · Actual INVALID_SOLVE_FOR
boundary-py-overflowboundarypassExpected RESULT_OVERFLOW · Actual RESULT_OVERFLOW
boundary-py-hugeboundarypassExpected c=1.414213562373095e+200 · Actual value=1.414213562373095e+200 · calculation_version=1.1.2 · status=success · mode=solve · solve_for=c · mode_label=Solve hypotenuse · formula=c=√(a²+b²) · heading=Hypotenuse c
boundary-py-tinyboundarypassExpected c=1.414213562373095e-200 · Actual value=1.414213562373095e-200 · calculation_version=1.1.2 · status=success · mode=solve · solve_for=c · mode_label=Solve hypotenuse · formula=c=√(a²+b²) · heading=Hypotenuse c
boundary-py-cancel-legboundarypassExpected a=0.0001414213561611208 · Actual value=0.0001414213561611208 · calculation_version=1.1.2 · status=success · mode=solve · solve_for=a · mode_label=Solve leg a · formula=a=√(c²−b²) · heading=Leg a