Reference · Non-negative rationals
rainbow.math.rational.nnrat.diagonal-spike
Canonical exact-rational diagonal spikes over duplicate-free finite carriers. A Boolean equality decision is supplied together with proofs that `true` reflects and is complete for propositional equality. The executable spike puts a row mass at its selected state and zero elsewhere. Duplicate freedom and membership of the selected state imply that its finite sum is exactly the supplied mass. A certified exhaustive carrier packages equality correctness with coverage of every ambient state, so downstream kernels need one coherent finite-state certificate rather than two unrelated premises. Native, kernel-checked, and axiom-free on D63.
finite/certified-equality-decision
finite/certified-equality-decision.{u} :
(S : Type u) (decision : S → S → data/Bool)
→ Propfinite/certified-exhaustive-carrier
finite/certified-exhaustive-carrier.{u} :
(S : Type u) (states : Finset S) (decision : S → S → data/Bool)
→ PropFinset = finset-data/Finset
finite/nnrat-diagonal-spike
finite/nnrat-diagonal-spike.{u} :
(S : Type u) (decision : S → S → data/Bool) (mass : S → ℚ≥0) (x₁ x₂ : S)
→ ℚ≥0ℚ≥0 = nnrat/NonnegativeRational
finite/certified-equality-of-exhaustive-carrier
finite/certified-equality-of-exhaustive-carrier.{u} :
(S : Type u) (states : Finset S) (decision : S → S → data/Bool)
(exhaustive : finite/certified-exhaustive-carrier S states decision)
→ finite/certified-equality-decision S decisionFinset = finset-data/Finset
finite/coverage-of-exhaustive-carrier
finite/coverage-of-exhaustive-carrier.{u} :
(S : Type u) (states : Finset S) (decision : S → S → data/Bool)
(exhaustive : finite/certified-exhaustive-carrier S states decision) (state : S)
→ list/membership S (finset-data/enumeration S states) stateFinset = finset-data/Finset
finite/nnrat-diagonal-spike-zero-of-different
finite/nnrat-diagonal-spike-zero-of-different.{u} :
(S : Type u) (decision : S → S → data/Bool) (mass : S → ℚ≥0)
(certified : finite/certified-equality-decision S decision) (selected candidate : S)
(different : selected = candidate → proposition/falsity)
→ finite/nnrat-diagonal-spike S decision mass selected candidate = 00 = nnrat/zero= = nnrat/equivalent: equality of rational valuesℚ≥0 = nnrat/NonnegativeRational
finite/equality-decidable-of-certified-decision
finite/equality-decidable-of-certified-decision.{u} :
(S : Type u) (decision : S → S → data/Bool)
(certified : finite/certified-equality-decision S decision) (left right : S)
→ proposition/disjunction (left = right) (left = right → proposition/falsity)= = equality/Eq
finite/nnrat-diagonal-spike-mass-of-equal
finite/nnrat-diagonal-spike-mass-of-equal.{u} :
(S : Type u) (decision : S → S → data/Bool) (mass : S → ℚ≥0)
(certified : finite/certified-equality-decision S decision) (selected candidate : S)
(same : selected = candidate)
→ finite/nnrat-diagonal-spike S decision mass selected candidate = mass selected= = nnrat/equivalent: equality of rational valuesℚ≥0 = nnrat/NonnegativeRational
finite/nnrat-diagonal-unit-spike-multiply
finite/nnrat-diagonal-unit-spike-multiply.{u} :
(S : Type u) (decision : S → S → data/Bool) (mass : S → ℚ≥0)
(certified : finite/certified-equality-decision S decision) (selected candidate : S)
→ finite/nnrat-diagonal-spike S decision (fun x₄ => 1) selected candidate · mass candidate = finite/nnrat-diagonal-spike S decision mass selected candidate1 = nnrat/one= = nnrat/equivalent: equality of rational values· = nnrat/multiplyℚ≥0 = nnrat/NonnegativeRational
finite/nnrat-map-sum-diagonal-spike-zero-of-not-member
finite/nnrat-map-sum-diagonal-spike-zero-of-not-member.{u} :
(S : Type u) (decision : S → S → data/Bool) (mass : S → ℚ≥0)
(certified : finite/certified-equality-decision S decision) (items : List S)
(selected : S) (not-member : list/membership S items selected → proposition/falsity)
→ nnrat/map-sum S (fun candidate => spike candidate) items = 0
where spike := finite/nnrat-diagonal-spike S decision mass selected0 = nnrat/zero= = nnrat/equivalent: equality of rational valuesList = data/Listℚ≥0 = nnrat/NonnegativeRational
finite/nnrat-map-sum-diagonal-spike-of-member-no-duplicates
finite/nnrat-map-sum-diagonal-spike-of-member-no-duplicates.{u} :
(S : Type u) (decision : S → S → data/Bool) (mass : S → ℚ≥0)
(certified : finite/certified-equality-decision S decision) (items : List S)
(selected : S) (distinct : list/no-duplicates S items)
(member : list/membership S items selected)
→ nnrat/map-sum S (fun candidate => spike candidate) items = mass selected
where spike := finite/nnrat-diagonal-spike S decision mass selected= = nnrat/equivalent: equality of rational valuesList = data/Listℚ≥0 = nnrat/NonnegativeRational
finite/nnrat-finset-diagonal-spike-total
finite/nnrat-finset-diagonal-spike-total.{u} :
(S : Type u) (states : Finset S) (decision : S → S → data/Bool) (mass : S → ℚ≥0)
(certified : finite/certified-equality-decision S decision) (selected : S)
(member : list/membership S (finset-data/enumeration S states) selected)
→ nnrat/map-sum S (fun candidate => spike candidate) (finset-data/enumeration S states) = mass selected
where spike := finite/nnrat-diagonal-spike S decision mass selected= = nnrat/equivalent: equality of rational valuesFinset = finset-data/Finsetℚ≥0 = nnrat/NonnegativeRational
finite/nnrat-finset-diagonal-spike-total-of-exhaustive-carrier
finite/nnrat-finset-diagonal-spike-total-of-exhaustive-carrier.{u} :
(S : Type u) (states : Finset S) (decision : S → S → data/Bool) (mass : S → ℚ≥0)
(exhaustive : finite/certified-exhaustive-carrier S states decision) (selected : S)
→ nnrat/map-sum S (fun candidate => spike candidate) (finset-data/enumeration S states) = mass selected
where spike := finite/nnrat-diagonal-spike S decision mass selected= = nnrat/equivalent: equality of rational valuesFinset = finset-data/Finsetℚ≥0 = nnrat/NonnegativeRational