Skip to content
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
063be65
feat(core): add typed replayable point-support report
lemone112 Jul 21, 2026
375ec1e
refactor(core): name transitional support lane as required floor
lemone112 Jul 21, 2026
4244dcf
fix(core): align point-support floor evidence fields
lemone112 Jul 21, 2026
b0e68c9
feat(core): export point-support application contract
lemone112 Jul 21, 2026
cdc9bd2
test(core): lock point-support physical and policy laws
lemone112 Jul 21, 2026
34c77a3
style(core): format point support report
lemone112 Jul 21, 2026
8ab4375
style(core): format point support tests
lemone112 Jul 21, 2026
bbab226
chore(core): remove fulfilled readability dead-code expectation
lemone112 Jul 21, 2026
b8b906f
refactor(core): make Q55 the point-support decision owner
lemone112 Jul 21, 2026
b30c21f
test(core): prove exact point-support criterion identity
lemone112 Jul 21, 2026
e3c998a
feat(core): expose replayable source-over certificate
lemone112 Jul 21, 2026
d42f862
feat(core): expose composition profile identity
lemone112 Jul 21, 2026
70cf2f9
refactor(core): export clean point-support API
lemone112 Jul 21, 2026
20166eb
style(core): format exact point support
lemone112 Jul 21, 2026
88cb8e9
style(core): format exact point support tests
lemone112 Jul 21, 2026
d9ac654
style(core): format point support exports
lemone112 Jul 21, 2026
e7ba982
refactor(core): keep legacy Lc accessor test-only
lemone112 Jul 21, 2026
41a50fb
feat(core): expose criterion-free Q55 measurement
lemone112 Jul 21, 2026
8730b68
refactor(core): derive stability from Q55 bounds
lemone112 Jul 21, 2026
3f5a502
test(core): bind stability to Q55 profile
lemone112 Jul 21, 2026
9770aeb
refactor(core): bind point support to admitted revisions
lemone112 Jul 21, 2026
1cfeef7
refactor(core): bind point support to admitted revisions
lemone112 Jul 21, 2026
133365d
refactor(core): bind point support to admitted revisions
lemone112 Jul 21, 2026
1c62e38
refactor(core): bind point support to admitted revisions
lemone112 Jul 21, 2026
50d631f
refactor(core): bind point support to admitted revisions
lemone112 Jul 21, 2026
08e1fe1
refactor(core): bind point support to admitted revisions
lemone112 Jul 21, 2026
fb17b43
refactor(core): bind point support to admitted revisions
lemone112 Jul 21, 2026
8b4d410
feat(core): add revision-bound point support plan
lemone112 Jul 21, 2026
62d7d83
feat(core): add revision-bound point support plan
lemone112 Jul 21, 2026
afd5016
test(conformance): project point support capability
lemone112 Jul 21, 2026
de07597
feat(core): seal revision-bound point support
lemone112 Jul 21, 2026
d3b811c
fix(core): reconcile joint observation authority
lemone112 Jul 21, 2026
67a2bdc
fix(core): route Pair through static joint entry
lemone112 Jul 21, 2026
1019f4c
fix(core): close point-support evidence quality gates
lemone112 Jul 21, 2026
d2ef719
fix(ci): rebind WCAG evidence and close release fixtures
lemone112 Jul 21, 2026
2aea842
fix(conformance): regenerate WCAG proof lineage
lemone112 Jul 21, 2026
049c1d9
fix(proof): address point-support review
lemone112 Jul 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,10 @@ jobs:
run: python3 scripts/verify_wcag22_q55.py
- name: independently recompute WCAG22 neutral-axis fixtures
run: python3 scripts/verify_wcag22_neutral_axis.py
- name: reject point-support source-binding vacuums
run: python3 scripts/test_point_support_surplus_source_binding.py
- name: prove point-support retained reference surplus over Q55 bounds
run: python3 scripts/verify_point_support_surplus.py

audit:
name: cargo audit (rustsec)
Expand Down
607 changes: 605 additions & 2 deletions .github/workflows/publish.yml

Large diffs are not rendered by default.

24 changes: 22 additions & 2 deletions conformance/vectors/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"packVersion": "10.0.0",
"coreVersion": "0.3.0",
"packDigest": "15b8444d",
"packDigest": "50dc0131",
"counts": {
"contrasts": 40,
"ladders": 25,
Expand Down Expand Up @@ -31,6 +31,26 @@
"proofIds": [],
"runtimeAttestations": []
},
{
"siteId": "point-support-retained-reference-surplus-v1",
"stableOutcomes": [
"canonical-finite-bounded"
],
"compatibilityReleases": [],
"evidenceClasses": [
"canonical-finite-bounded"
],
"artifactIds": [
"wcag22-srgb8-luminance-q55-v1"
],
"boundIds": [
"point-support-reference-surplus-q55-bps-v1"
],
"proofIds": [
"point-support-reference-surplus-integer-v1"
],
"runtimeAttestations": []
},
{
"siteId": "wcag22-srgb8-contrast-v1",
"stableOutcomes": [
Expand All @@ -52,6 +72,6 @@
"runtimeAttestations": []
}
],
"checksum": "f8d0c63d"
"checksum": "418d143e"
}
}
36 changes: 18 additions & 18 deletions conformance/vectors/wcag22.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
"artifactSha256": "7ff239d9052b346f3c50da01ca65ca2330892ed1a3ff30e190797fcef6f03604",
"boundId": "wcag22-srgb8-outward-q55-v1",
"proofId": "wcag22-srgb8-full-domain-q55-v1",
"proofSha256": "d269e9de689009bb955788bf8762fce56680bf616fc0459b6526a367875a6a08",
"proofPayloadSha256": "c51d7a50658e148203865cda845aa7b05712bff25d779c7651db88f26158fcd5",
"proofSha256": "ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd",
"proofPayloadSha256": "3c639a7c875046c46b56b51ecdd67d5ecaf14a1134490c88a222e7037b63c0f2",
"generatorSha256": "7ad72f53e26ebb74ebfc2d8945f833613fa1317bb441d821f518d012c8c09687",
"verifierSha256": "3ce2cdafead4c61c2454941170303f0d4ae53dd0c4a294114b68fe7c2c151ea3",
"verifierSha256": "3ae679c9a10342836afe0b59170f3530e757dad7b164dbcffa9b93d813c9e8fe",
"profileChecksum": "152813fe",
"profileSha256": "b4bb7e5f17a99f2c911fdbe3da23a48b049277b796291094950f14680cc3cc7b"
},
Expand All @@ -38,10 +38,10 @@
"artifactSha256": "7ff239d9052b346f3c50da01ca65ca2330892ed1a3ff30e190797fcef6f03604",
"boundId": "wcag22-srgb8-outward-q55-v1",
"proofId": "wcag22-srgb8-full-domain-q55-v1",
"proofSha256": "d269e9de689009bb955788bf8762fce56680bf616fc0459b6526a367875a6a08",
"proofPayloadSha256": "c51d7a50658e148203865cda845aa7b05712bff25d779c7651db88f26158fcd5",
"proofSha256": "ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd",
"proofPayloadSha256": "3c639a7c875046c46b56b51ecdd67d5ecaf14a1134490c88a222e7037b63c0f2",
"generatorSha256": "7ad72f53e26ebb74ebfc2d8945f833613fa1317bb441d821f518d012c8c09687",
"verifierSha256": "3ce2cdafead4c61c2454941170303f0d4ae53dd0c4a294114b68fe7c2c151ea3",
"verifierSha256": "3ae679c9a10342836afe0b59170f3530e757dad7b164dbcffa9b93d813c9e8fe",
"profileChecksum": "152813fe",
"profileSha256": "b4bb7e5f17a99f2c911fdbe3da23a48b049277b796291094950f14680cc3cc7b"
},
Expand All @@ -61,10 +61,10 @@
"artifactSha256": "7ff239d9052b346f3c50da01ca65ca2330892ed1a3ff30e190797fcef6f03604",
"boundId": "wcag22-srgb8-outward-q55-v1",
"proofId": "wcag22-srgb8-full-domain-q55-v1",
"proofSha256": "d269e9de689009bb955788bf8762fce56680bf616fc0459b6526a367875a6a08",
"proofPayloadSha256": "c51d7a50658e148203865cda845aa7b05712bff25d779c7651db88f26158fcd5",
"proofSha256": "ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd",
"proofPayloadSha256": "3c639a7c875046c46b56b51ecdd67d5ecaf14a1134490c88a222e7037b63c0f2",
"generatorSha256": "7ad72f53e26ebb74ebfc2d8945f833613fa1317bb441d821f518d012c8c09687",
"verifierSha256": "3ce2cdafead4c61c2454941170303f0d4ae53dd0c4a294114b68fe7c2c151ea3",
"verifierSha256": "3ae679c9a10342836afe0b59170f3530e757dad7b164dbcffa9b93d813c9e8fe",
"profileChecksum": "152813fe",
"profileSha256": "b4bb7e5f17a99f2c911fdbe3da23a48b049277b796291094950f14680cc3cc7b"
},
Expand All @@ -84,10 +84,10 @@
"artifactSha256": "7ff239d9052b346f3c50da01ca65ca2330892ed1a3ff30e190797fcef6f03604",
"boundId": "wcag22-srgb8-outward-q55-v1",
"proofId": "wcag22-srgb8-full-domain-q55-v1",
"proofSha256": "d269e9de689009bb955788bf8762fce56680bf616fc0459b6526a367875a6a08",
"proofPayloadSha256": "c51d7a50658e148203865cda845aa7b05712bff25d779c7651db88f26158fcd5",
"proofSha256": "ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd",
"proofPayloadSha256": "3c639a7c875046c46b56b51ecdd67d5ecaf14a1134490c88a222e7037b63c0f2",
"generatorSha256": "7ad72f53e26ebb74ebfc2d8945f833613fa1317bb441d821f518d012c8c09687",
"verifierSha256": "3ce2cdafead4c61c2454941170303f0d4ae53dd0c4a294114b68fe7c2c151ea3",
"verifierSha256": "3ae679c9a10342836afe0b59170f3530e757dad7b164dbcffa9b93d813c9e8fe",
"profileChecksum": "152813fe",
"profileSha256": "b4bb7e5f17a99f2c911fdbe3da23a48b049277b796291094950f14680cc3cc7b"
},
Expand All @@ -107,10 +107,10 @@
"artifactSha256": "7ff239d9052b346f3c50da01ca65ca2330892ed1a3ff30e190797fcef6f03604",
"boundId": "wcag22-srgb8-outward-q55-v1",
"proofId": "wcag22-srgb8-full-domain-q55-v1",
"proofSha256": "d269e9de689009bb955788bf8762fce56680bf616fc0459b6526a367875a6a08",
"proofPayloadSha256": "c51d7a50658e148203865cda845aa7b05712bff25d779c7651db88f26158fcd5",
"proofSha256": "ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd",
"proofPayloadSha256": "3c639a7c875046c46b56b51ecdd67d5ecaf14a1134490c88a222e7037b63c0f2",
"generatorSha256": "7ad72f53e26ebb74ebfc2d8945f833613fa1317bb441d821f518d012c8c09687",
"verifierSha256": "3ce2cdafead4c61c2454941170303f0d4ae53dd0c4a294114b68fe7c2c151ea3",
"verifierSha256": "3ae679c9a10342836afe0b59170f3530e757dad7b164dbcffa9b93d813c9e8fe",
"profileChecksum": "152813fe",
"profileSha256": "b4bb7e5f17a99f2c911fdbe3da23a48b049277b796291094950f14680cc3cc7b"
},
Expand All @@ -130,10 +130,10 @@
"artifactSha256": "7ff239d9052b346f3c50da01ca65ca2330892ed1a3ff30e190797fcef6f03604",
"boundId": "wcag22-srgb8-outward-q55-v1",
"proofId": "wcag22-srgb8-full-domain-q55-v1",
"proofSha256": "d269e9de689009bb955788bf8762fce56680bf616fc0459b6526a367875a6a08",
"proofPayloadSha256": "c51d7a50658e148203865cda845aa7b05712bff25d779c7651db88f26158fcd5",
"proofSha256": "ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd",
"proofPayloadSha256": "3c639a7c875046c46b56b51ecdd67d5ecaf14a1134490c88a222e7037b63c0f2",
"generatorSha256": "7ad72f53e26ebb74ebfc2d8945f833613fa1317bb441d821f518d012c8c09687",
"verifierSha256": "3ce2cdafead4c61c2454941170303f0d4ae53dd0c4a294114b68fe7c2c151ea3",
"verifierSha256": "3ae679c9a10342836afe0b59170f3530e757dad7b164dbcffa9b93d813c9e8fe",
"profileChecksum": "152813fe",
"profileSha256": "b4bb7e5f17a99f2c911fdbe3da23a48b049277b796291094950f14680cc3cc7b"
}
Expand Down
18 changes: 9 additions & 9 deletions crates/labcolors-conformance/tests/pack_v10_contract.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//! Pack-контракт: pack 10 удаляет ровно `muddiness.json` (legacy
//! cleanliness-прокси вырезан из всех проекций; физические законы —
//! Oklab-преобразования, гамут-границы, агностичность — живут в своих
//! модулях), сохраняя байт-в-байт все пять оставшихся семейств pack 9.
//! Pack-контракт: pack 10 не содержит удалённые legacy-семейства и закрепляет
//! точные текущие байты пяти канонических семейств. WCAG-family несёт текущую
//! proof lineage; это identity текущего pack, а не обещание byte-совместимости
//! с pack 9.

use std::collections::BTreeSet;
use std::path::{Path, PathBuf};
Expand All @@ -12,7 +12,7 @@ use labcolors_conformance::{FAMILY_FILES, MANIFEST_FILE, PACK_VERSION};
#[path = "../../labcolors-core/src/sha256.rs"]
mod sha256;

const UNCHANGED_FAMILY_SHA256: [(&str, &str); 5] = [
const CANONICAL_FAMILY_SHA256: [(&str, &str); 5] = [
(
"solve.json",
"db04e50698cc3b10223f4005f74dd35cc5ae0a29988825e44db5c985aa9207af",
Expand All @@ -31,7 +31,7 @@ const UNCHANGED_FAMILY_SHA256: [(&str, &str); 5] = [
),
(
"wcag22.json",
"6e234fa3a0d4e2b21f515b8f4e6be76f223768821e0308e774c31a5ce7a1d826",
"8b2e44feba985a6f0017d4192c1c03fcc5c22da1d7d86df91dcb5bb214de7ab1",
),
];

Expand All @@ -49,7 +49,7 @@ fn read(path: impl AsRef<Path>) -> Vec<u8> {
}

#[test]
fn pack_v10_removes_only_the_muddiness_family() {
fn pack_v10_family_inventory_and_bytes_are_exact() {
assert_eq!(PACK_VERSION, "10.0.0");
assert_eq!(
FAMILY_FILES.as_slice(),
Expand All @@ -64,11 +64,11 @@ fn pack_v10_removes_only_the_muddiness_family() {
);

let dir = vectors_dir();
for (name, expected) in UNCHANGED_FAMILY_SHA256 {
for (name, expected) in CANONICAL_FAMILY_SHA256 {
assert_eq!(
sha256::digest(&read(dir.join(name))).to_hex(),
expected,
"pack-9 family bytes drifted during the muddiness removal: {name}"
"pack-10 canonical family bytes drifted without explicit regeneration: {name}"
);
}
assert!(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"artifact_id":"wcag22-srgb8-luminance-q55-v1","basis_point_proof":{"checks":30,"drop_all_semantics":"zero required surplus; current must still meet the anchor","drop_domain_inclusive":[0,10000],"nonpositive_baseline_semantics":"zero required surplus; current must meet the anchor"},"bound_id":"point-support-reference-surplus-q55-bps-v1","certified_claim":"for every successfully evaluated enabled stability cell, decision is Retained iff current_lower_surplus >= (10000-drop_bps)/10000 * max(baseline_lower_surplus,0); the declared anchor remains a separate hard floor","comparator_proof":{"algorithm":"euclidean-continued-fraction-ordering-v1","dense_denominator_inclusive":[1,31],"dense_numerator_inclusive":[0,31],"dense_small_cases":984064,"invariant":"equal integer parts; reciprocal proper fractions reverse order","largest_fibonacci_index":186,"oracle":"unbounded-integer-cross-product","random_cases":250000,"random_corpus_sha256":"97c4af7b452b31a4ab92645f70c17acb38bf57ca55484e32ad9d7d79d97a333d","random_seed":210583930,"termination":"each nonterminal denominator becomes a strictly smaller remainder","u128_adversarial_cases":190},"declared_operation_law":"q55-lower-reference-distance-explicit-anchor-bps-retention-v1","excluded_claim":"does not certify retention against the unknown exact baseline surplus, renderer equivalence outside encoded-sRGB8 source-over, or a successful result when evaluation fails","integer_replay_envelope":{"assumption":"every Q55 luminance upper <= scale + 3","i128_max":170141183460469231731687303715884105727,"offset_cleared_denominator_max":756604737398243388,"positive_baseline_numerator_max":1188950301625811064,"rational_denominator_max":1513209474796486776,"required_denominator_max":15132094747964867760000,"required_numerator_max":11889503016258110640000,"signed_anchor_abs_coarse_max":5296233161787703716,"u128_max":340282366920938463463374607431768211455,"u64_max":18446744073709551615},"profile_id":"srgb8-q55-retained-reference-surplus-bps-v1","proof_id":"point-support-reference-surplus-integer-v1","proof_payload_sha256":"c9523b69b03487c2f9bbe6acb334c103e7293ad5cdc07577d20ca29b06541011","q55_dependency":{"artifact_id":"wcag22-srgb8-luminance-q55-v1","artifact_sha256":"7ff239d9052b346f3c50da01ca65ca2330892ed1a3ff30e190797fcef6f03604","maximum_luminance_upper":36028797018963971,"outward_interval_width_bound":3,"proof_id":"wcag22-srgb8-full-domain-q55-v1","proof_payload_sha256":"3c639a7c875046c46b56b51ecdd67d5ecaf14a1134490c88a222e7037b63c0f2","proof_sha256":"ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd","q55_scale":36028797018963968},"reference_and_anchor_proof":{"anchor_identity_checks":75,"orientation_law":"distance-magnitude-symmetric-orientation-reported-separately","overlap_lower_distance":"0/1","separated_endpoint_checks":504},"schema_version":2,"site_id":"point-support-retained-reference-surplus-v1","source_binding_exclusions":["whole-crate compilation or compiler/toolchain attestation","binary, package, FFI, renderer, or browser transport attestation","unrelated Lab Colors modules outside the declared point-support semantic cone"],"source_binding_law":"point-support-rust-whole-file-semantic-cone-v2","source_binding_schema_version":2,"source_binding_scope":"exact bytes of the private point-support Rust semantic cone and its two WCAG include_str inputs; comments and cfg(test) text are intentionally significant","source_closure_sha256":"c2825216354b796924560d98e01ae5cebedf324c47e7b26332119c61aded783e","source_files":[{"kind":"compile-time-input","path":"crates/labcolors-core/contracts/wcag22-srgb8-q55-proof-v1.json","sha256":"ac59cf89503170c789223b91d775213a19d4e571ef930f2ea609fcd51b14defd"},{"kind":"compile-time-input","path":"crates/labcolors-core/contracts/wcag22-srgb8-v1.json","sha256":"b4bb7e5f17a99f2c911fdbe3da23a48b049277b796291094950f14680cc3cc7b"},{"kind":"rust-source","path":"crates/labcolors-core/src/appearance.rs","sha256":"5df64a220c86378c66d25f0e0abe2507b636b0ec6cd8217a6235e17809f00f48"},{"kind":"rust-source","path":"crates/labcolors-core/src/composition.rs","sha256":"5218a845b85a27571a710c7c967b2937b94cf4622a3073487a808936ac85468a"},{"kind":"rust-source","path":"crates/labcolors-core/src/constraints/exact.rs","sha256":"45bd09cd8f6f74860a0a3ffeb410ee2c3cf91b4868877abbc949e724b61e1ccd"},{"kind":"rust-source","path":"crates/labcolors-core/src/constraints/mod.rs","sha256":"ad721c625b33a7432de44e5f63459a62c1cbc8ec2492855f783b5440f04978f9"},{"kind":"rust-source","path":"crates/labcolors-core/src/constraints/wcag22.rs","sha256":"985e21abccd1fcb4a3f9624d5947ff3d1af7a1bf26b6b170ea8bbef77d6f1798"},{"kind":"rust-source","path":"crates/labcolors-core/src/hash.rs","sha256":"f97a0fd7d6ad3162f0f1dfb326fccfb7ed40da9a8fa67a5b8a239a1ae2ae49c3"},{"kind":"rust-source","path":"crates/labcolors-core/src/lib.rs","sha256":"95113d8a25fd1577823b8c6342c06272b12ea8711ee5e5a62d034948177c13db"},{"kind":"rust-source","path":"crates/labcolors-core/src/numerics.rs","sha256":"e73a12136494f2ef9aca4e943ab38302c1439f054cecab36a552d35252c164f9"},{"kind":"rust-source","path":"crates/labcolors-core/src/observation.rs","sha256":"208066b255bc406303b18dc2eb6f1720c8203ea6eb37d225f9d8110c2449edc4"},{"kind":"rust-source","path":"crates/labcolors-core/src/point_support.rs","sha256":"56c06b49f4687b3def69c247978da1b0cb45b42c09515a001d196cb1457c93a6"},{"kind":"rust-source","path":"crates/labcolors-core/src/session.rs","sha256":"d4b06651e07cf4f93eccf9866f6e63c35ea72fa7125bdb41e222b19b70dd2f32"},{"kind":"rust-source","path":"crates/labcolors-core/src/srgb8.rs","sha256":"6c95324eb05476f35f75375a9af0b2b4a41b8b2978c46e67d2ce1aea5adde342"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22.rs","sha256":"7ba7864eb7e73789bad6c63c64a4dc2dcc08c2da6921375fb9564fca230c2780"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22/kernel.rs","sha256":"c97980c1ca2c7ea9cabff9c8d2fb7282773cca180ae15948391c29c9d6196040"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22/q55_data.rs","sha256":"af4d23d6b70c45ce6efa839e7dda4bb0a61f6aae43cb805af6fa9b29e6c3bae2"},{"kind":"rust-source","path":"crates/labcolors-core/src/wcag22_evidence.rs","sha256":"3c5a75b07254c6071a64700af208a64987d0f0ea9698eadc54a9e74585ce1f72"}],"source_negative_controls":33,"universal_algebraic_certificate":{"domain":"integers; Q55 scale S>0; rational denominators >0; 0<=drop_bps<=S","identities":["three explicit anchor-surplus formulas after denominator clearing","reference distance is monotone increasing in lighter L","reference distance is monotone decreasing in darker D","positive-baseline retained threshold is p*(S-drop)/(q*S)","a/b >= p*(S-drop)/(q*S) iff a*q*S >= p*(S-drop)*b"],"method":"exact-sparse-integer-polynomial-identities-plus-positive-denominator-order-lemma-v1","nonpositive_baseline_case":"max(baseline,0)=0; retained threshold is exactly zero","wolfram_language_cross_check":{"query":"FullSimplify[{20 g/d - 0 == 20 g/d, 20 g/d - 2 == (20 g - 2 d)/d, 20 g/d - 7/2 == (40 g - 7 d)/(2 d), Equivalent[a/b >= p (s-x)/(q s), a q s >= p (s-x) b], Max[p/q, 0] (s-x)/s == Piecewise[{{0, p <= 0}}, p (s-x)/(q s)]}, Assumptions -> Element[{a,b,p,q,s,x,g,d}, Integers] && a >= 0 && b > 0 && q > 0 && s > 0 && 0 <= x <= s && d > 0 && g >= 0]","query_sha256":"8cdbb9964583030c8b92498961896cb2a98613f1cb31eb7c54acdf8e16beff10","result":"{True, True, True, True, True}","result_sha256":"13a8f2ee8d0fde335a638e46d7cc8a8427b9a1437c77d22cfcf925bb87fa6303"}},"verifier_sha256":"f0f68fea9e59bc7bd5645a123180889361edeba3e83dd7da8d991f1b99945f8c"}
Loading
Loading