hex

18.15. Native sample coefficient conversion🔗

A Tower.Sample evaluates coefficient polynomials after entering its own context. NativeSamples.row_converted proves that its complete source row agrees with native specialization at the converted coordinates. It consumes the actual owner conversion model over an ordered model field; that field can be non-Archimedean. It assumes no global ordinary-real interpretation of the parent context. The shared specialization proof is generalized to that model field, retaining its existing real API. sign_converted retains every original divisor's sign. In an infinite model field, size_converted also preserves normalized sizes, hence degrees, including zero polynomials and leading cancellation. The owner interpretations reflect zero without identifying distinct nonzero representations; no global real reader is used for this step.

Here the public section constructor supplies the conversion for its selected root. The coefficient coordinates enter that same context before evaluation:

open Hex.RealClosure Hex.RCF.RealCoefficients in example {registry : BaseContext.Registry} {parent : Tower.Context registry} (original : Tower.Model parent ℝ) (descriptor : Hex.SignDet.Descriptor parent.Value Tower.Signature parent.sign parent.signature) (values : Fin n → parent.Value) (formula : Hex.RealFormula.QF (n + 1)) : let sample := Tower.Sample.section parent descriptor ∃ Variable name `conversion` is not explicitly referenced. Hint: The binding can be removed (if unused) or named `_` (if used implicitly). Alternatively, prefix the name with `_` to silence this warning: [apply] _conversion Note: This linter can be disabled with `set_option linter.unusedVariables false`conversion : Tower.Conversion.Model sample.input original, sample.signs (RepresentationSpecialize.prepare values formula) = NativeSpecialize.row sample.input.context (sample.input.value ∘ values) sample.value formula := n:ℕregistry:BaseContext.Registryparent:Tower.Context registryoriginal:Tower.Model parent ℝdescriptor:Hex.SignDet.Descriptor parent.Value Tower.Signature parent.sign parent.signaturevalues:Fin n → parent.Valueformula:Hex.RealFormula.QF (n + 1)⊢ let sample := Tower.Sample.section parent descriptor; ∃ conversion, sample.signs (RepresentationSpecialize.prepare values formula) = NativeSpecialize.row sample.input.context (sample.input.value ∘ values) sample.value formula n:ℕregistry:BaseContext.Registryparent:Tower.Context registryoriginal:Tower.Model parent ℝdescriptor:Hex.SignDet.Descriptor parent.Value Tower.Signature parent.sign parent.signaturevalues:Fin n → parent.Valueformula:Hex.RealFormula.QF (n + 1)conversion:(Tower.Sample.section parent descriptor).input.Model originalleft✝¹:(Tower.Sample.section parent descriptor).cell.contains (Tower.Sample.section parent descriptor).value = trueleft✝:Tower.Cell.Mem conversion.target (Tower.Sample.section parent descriptor).cell (conversion.target.value (Tower.Sample.section parent descriptor).value)right✝:conversion.target.value (Tower.Sample.section parent descriptor).value = Hex.SignDet.Descriptor.root original.value ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ descriptor⊢ let sample := Tower.Sample.section parent descriptor; ∃ conversion, sample.signs (RepresentationSpecialize.prepare values formula) = NativeSpecialize.row sample.input.context (sample.input.value ∘ values) sample.value formula All goals completed! 🐙

The sample conversion regressions use the actual selected positive root of X²-2. Its row retains zero and repeated-root atoms, leading cancellation, and the (1, 2] guard atoms. Changing the source coefficient from 2 to -2 changes the row at that same root; an empty atom traversal remains empty. Size tests distinguish zero from nonzero constants and retain repeated-root degrees and leading cancellation. Native execution and ordinary-kernel row proofs check the same expected sign words separately. A nested section uses the actual selected √2 coefficient in x² - c; the owner conversion model retains its selected embedding and polynomial sizes. Its source and converted rows are both [0, 1, -1], with separate ordinary-kernel proofs using the selected root’s actual facts. Changing the coefficient to the negative conjugate gives [1, 1, -1] at the same upper root, also kernel-checked. The source size words are independently kernel-checked. Actual point consumers construct the rational provider history and inherited coefficient identities for the X²−2 section: a true row retains the parent divisor 2, and a false row proves ¬ ∀ x : ℝ, x² > 2.

The infinitesimal-parent sample regression constructs the owner's ordered real-closed reference field from an actual infinitesimal base history. The supplied frozen descriptor selects the positive root of X² − ε in (0,1). The ordinary-kernel reader checks that replay and its exact polynomial, bounds and derivative slots. The public section constructor supplies its extension conversion model. A converted true row yields one ordinary reader on a finite closed domain, with 0 < x < 1, the root's square equal to the converted ε, and that original guard nonzero. No inherited source coordinate pins this guard to a predetermined real number. The sample and guard are realized together; an infinitesimal is never used as a real witness. The conformance file uses non-module imports, which expose private definitions in this toolchain; it does not establish public-only elaboration of this concrete fixture.

NativeSamples.true_real consumes a true sample row, inherited base/provider coordinate identities and strict nonzero parent-context signs for every supplied original divisor, using an infinite model field. It derives the matrix, sizes of the original parent polynomials and real nonvanishing at one reader. NativeSamples.not_forall uses a false point row with those same inherited coordinates for a universal counterexample; it takes no divisor guards. The target provider history and inherited identities remain explicit. Origin.RealValue only fixes values embedded from the staged base/provider; it does not fix arbitrary algebraic suffix coordinates such as the nested √2 coefficient. That test's coefficient_fixed is an identity in the owner conversion model, not an input to these point APIs. Proving selected-root source identities at the finite reader remains a separate obligation. These point laws establish the coefficient-conversion bridge; a complete sample certificate must still check cell membership and full coverage. They do not implement complete frozen context/cell replay or source-goal quotation.