Language, notation, and trust#
Peano Lab intentionally has a small object language. Natural-number terms are built from
and formulas use equality, first-order connectives, and quantifiers. The surface notation \(n\le m\) is already conservative sugar for an existential equality. There is no trusted remainder operation, primality oracle, power function, list, multiset, or theorem database.
This is a useful constraint. It forces every library abstraction to answer a precise question: is it merely readable notation that expands to the old language, or is it genuinely new expressive power?
Conservative definitions#
Divisibility needs no kernel change. We read
The current library stores the right-hand formula literally. For example,
multiple_trans says that witnesses for \(a\mid n\) and \(b\mid a\) compose to a
witness for \(b\mid n\).
A subtraction-free definition of modular congruence over naturals is
Unlike the asymmetric claim that one number is the other plus a multiple,
this formula is symmetric even when \(a<b\). It is also meaningful at modulus
zero: then it reduces to equality. The definition-aware Proof Explorer now
uses ModEq(m,a,b) as conservative display notation for this formula, while
native replay still expands it before checking, exactly as <= expands
today.
Primality can also be expanded:
This factor-pair form is the catalog’s current convention; it is equivalent to
the familiar assertion that every divisor is either one or the number itself.
Over the naturals it also rules out zero, since zero has nontrivial factors.
The catalog records completely expanded Peano targets rather than asking the
checker to trust Prime as a new atom. In particular, the checked theorem
prime_two is stored as
~(2 = 1) /\ forall a b. 2 = a * b -> a = 1 \/ b = 1
and introduces no primitive predicate.
The same expansion is now used by general checked theorems:
prime_or_composite constructs either the expanded prime formula or an
explicit nontrivial factor pair, prime_decidable returns that formula or its
negation for every natural, and prime_divisor_exists constructs an expanded
prime together with a divisibility witness for every nonzero nonunit natural.
Their bounded search and descent certificates contain no DNE node; decidability
is proved rather than imported from the host language.
The definition-aware reading edition#
The definition-aware proof explorer provides a
40-entry registry over the exact 557-specification quadratic-reciprocity
closure. Thirty-eight definitions occur; AllPrime and Sorted have zero
whole-schema matches. The edition compacts 506 theorem statements and 1,275
of 1,839 proposition-bearing local commands. Aggregate statement text falls
from 2,457,096 to 107,386 characters (95.63%); local proposition text falls
from 1,971,403 to 111,519 (94.34%). Every changed formula links to its expansion
and an exact native replay line, and the generator checks equality of the
parsed PA abstract syntax trees.
This is a reading layer, not a language extension. The compiler, registry,
PD identifiers, hashes, pages, and notation edges are untrusted and cannot
participate in a theorem dependency path. The current QR slice contains 241
Stable rows and 316 Alpha-only rows. The historical campaign-local source
labels remain separate from current immutable Alpha-v16 evidence: all 316
Alpha-only QR rows, including the PA00FW root, are now alpha_closed
because their complete actual proofs were independently checked. Compact
notation itself grants neither theorem evidence nor Stable promotion. These
figures describe the focused QR slice, not the complete current 1,673-row
Alpha v16 catalog, which also contains other separately curated campaigns.
Relational definitions before functions#
The current term grammar cannot add a gcd function without changing the language. It can state a graph relation instead:
Existence and uniqueness of such a \(g\) are ordinary first-order claims. A subtraction-free Bézout statement can represent signed coefficients by positive and negative parts:
This is less convenient than integer notation, but it remains honest about the underlying language. A conventional integer-coefficient Bézout statement is not representable with these natural-only terms; the four-natural balanced relation is a separately named, checked native theorem, not hidden integer syntax.
Proof sharing is not a new arithmetic language#
The object language and the proof-certificate language are different layers. Peano Lab now has a reviewed certificate node
Cut(A, B, lemma, body)
with the rule
The checker verifies the embedded lemma once, then checks the body with its formula as the newest hypothesis. This enlarges the trusted checker and must be audited as such. It does not add a natural-number operation, predicate, axiom, theorem constant, or classical principle. In particular, it cannot make gcd, primality, β decoding, or factorization expressible unless the corresponding first-order formula was already expressible.
The node is self-contained: it stores both formulas and both proof branches. It stores no theorem name, content hash, declaration key, or external lookup. Names and hashes remain useful provenance data, but the checker never accepts them as evidence. See Self-contained proof sharing for the full trust and erasure contract.
The separate
peano-lab-lean project models
this rule and the rest of the certificate calculus in Lean. Its semantic
theorem proves accepted derivations true in standard natural numbers, relative
to Lean’s kernel and reported standard axioms. Historical WMI job 211445
seals cut-free v1. Cut-aware version-two source
ab966fd1
passed pinned Lean 4.31/WMI job
218358.
This metaverification does not move readable predicates into either kernel.
How conservative expansion reaches factorization#
The Fundamental Theorem of Arithmetic quantifies over an arbitrary finite collection of primes and compares factorizations up to permutation or multiplicity. Today’s Peano surface has no primitive finite-sequence, multiset, finite-map, generic power, or recursive factorization relation.
The representation review selected a Gödel-β encoding because it elaborates
entirely to existing PA formulas and therefore needs no further object-language
or kernel rule. A factor sequence uses natural codes (b,c,l); a second code stores
prefix products; bounded formulas express decoded values, primality, and
sortedness. This is intentionally an untrusted authoring facade rather than a
new kernel atom.
The expanded single-position relation now has checked totality and
functionality through beta_at_exists, beta_at_unique, and
beta_at_exists_unique; beta_modulus_nonzero and
beta_at_self_of_bound supply its first boundary helpers, and
beta_at_to_mod_eq projects the decoded quotient-remainder witness into the
checked balanced-congruence API. mod_eq_bounded_unique and
mod_eq_to_remainder_decomposition justify the reverse direction, which
beta_at_of_mod_eq_bound specializes back to the β modulus. Consequently,
At is now checked equivalent to its bound plus balanced congruence. These
theorem names do not add a predicate symbol. Constructive binary_crt now
combines any two bounded residues for nonzero coprime moduli, and
binary_crt_beta_pair turns that result into two expanded At facts. The
latter keeps coprimality of the two β moduli as an explicit premise.
beta_modulus_coprime_base proves each modulus coprime to \(c\), while
common_divisor_beta_moduli_divides_gap_times_c and Gauss cancellation yield
the checked conditional theorem
The condition matters. Unconditional pairwise coprimality is false: for
\(c=1\), \(M(1,1)=3\) and \(M(1,4)=6\). The checked
binary_crt_beta_pair_of_gap_dvd applies precisely the conditional theorem.
bounded_common_multiple_exists separately constructs a nonzero \(c\)
divisible by every positive natural at most a supplied bound. The checked
bounded-prefix bridge now turns that invariant into pairwise coprimality for
all distinct bounded positions. Product coprimality, modulus descent, and
binary_crt_fold_step also check the algebraic preservation step. The new
product and congruence successor lemmas combine in
beta_crt_prefix_invariant_step, and
bounded_beta_crt_prefix_invariant uses ordinary induction to carry four
facts through every bounded prefix: the accumulated product is nonzero; every
earlier beta modulus divides it; the constructed value is congruent to each
earlier value already decoded from the supplied code \(b\); and the product is
coprime to every future bounded beta modulus.
The theorem bounded_beta_crt_for_existing_code projects only the third part
at the full bound. It is extensionally trivial—choosing \(z=b\) already gives
the advertised congruences—because the residues in its premise are decoded
from \(b\). It is therefore not an arbitrary finite-sequence recoding or
extension theorem. The later checked exclusive-prefix invariant and
beta_prefix_extend cross that separate gate. Exact β-coded prefix-product
trace existence and functionality then supply a relational Product API;
greatest-prime-divisor descent and canonical append prove existence, while
Euclid, sorted last-factor matching, and cancellation prove extensional
uniqueness.
The now-checked native route is:
add untrusted named-predicate expansion for the formulas already expressible;
reuse the checked division, relational gcd, balanced Bézout, Gauss, and Euclid spine together with the now-checked proper-factor search and prime-divisor-existence clients;
prove greatest-prime descent for the selected sorted factorization route;
reuse the checked equivalence between single-position β decoding and bounded congruence together with checked binary CRT, conditional bounded-prefix pairwise coprimality, product coprimality, modulus descent, the generic CRT fold step, and the now-checked bounded prefix invariant; prove independent finite-prefix recoding and extension, exact beta-coded prefix-product traces and bounds, and their factorization relations;
check factorization existence, extensional uniqueness, and their exact combined FTA statement.
A separate Lean companion checks the conventional finite-list FTA, including
uniqueness up to permutation and an exact axiom audit. It grants no Peano
authority. Steps 3–5 now have closed native PA certificates at this integration
checkpoint. Existence checks at 43,973 nodes/depth 98; uniqueness at
29,789/depth 82; their exact conjunction checks at 73,767 nodes/depth 99 with
2,184 self-contained Cuts. The combined certificate SHA-256 is
fd978f59bf3b0aa7b6c9ec1bc92ab5e7bbf949c25309173e098bd8f3b8de0958.
It passes empty-context and full live-use checking under the
500,000-occurrence/100,000-object/depth-256 cap, uses only PA1–PA6 and
induction, and contains no
DNE. Runtime integration is complete.
The theorem remains conservative in a precise sense: it adds no primitive
list, multiset, Product function, Prime predicate, or factorization atom.
Because β encodings are non-unique, its uniqueness clause compares lengths and
decoded entries instead of raw codes. The independently checked
prime_unbounded endpoint is not required for FTA.
The trust path#
For a checked entry the path is always
Notation expansion, tactic execution, catalog generation, dependency graphs, and hash generation are all untrusted. Any of them may cause a true proof to be rejected or an artifact to become stale. None may make the independent kernel accept a false closed formula.
There is an untrusted erase_trusted_cuts compatibility utility implementing
the formal expansion (λh. body) lemma. It deliberately does not normalize
the implication redex it creates. Erasure is not an alternative source of
authority and is operationally incomplete: the bidirectional checker cannot
synthesize every introduction-shaped erased argument, while the existing
capture-sensitive reducer does not reliably normalize every large
induction-bearing expansion. Only a separate successful kernel check licenses
an erased result. Ordinary replay instead checks the self-contained Cut tree
directly. Engine-only LocalHave and LocalSuffices remain a different
mechanism and are still compiled away before QED.