Encyclopedia Foundation Foundation Universal Forcing Forced Semiring Forcing Fn Eq Id
ARTICLE 4 claims 4 theorems
Foundation Universal Forcing Forced Semiring Forcing Fn Eq Id
A machine-checked proof shows that the canonical map between two strict realizations of the natural numbers is the identity, and that this map is the unique one preserving zero and the successor step.
The identity map
The natural numbers, written ℕ, are the counting numbers 0, 1, 2, 3, and so on, with the operations of addition and multiplication. A semiring is a set with these two operations, obeying the usual distributive law. The declaration forcingFn_eq_id in the Recognition Science library proves that the canonical map between two strict realizations of ℕ is the identity function. In plainer terms: if you have two copies of the counting numbers, built in the framework's specific way, the only sensible way to translate between them is to send each number to itself.
The proof rests on a chain of lemmas. Any function that sends zero to zero and commutes with the successor step (the operation that takes n to n+1) must preserve addition, multiplication, and the number one. The forcing map, which is the canonical translation between two realizations, has exactly these two properties. Therefore it preserves all arithmetic structure. A separate theorem, forcingFn_unique, shows that any function with these two properties must equal the forcing map. Since the identity function also fixes zero and commutes with successor, the forcing map must be the identity.
This result is a theorem in the machine-checked library, meaning it is proved from the framework's axioms without gaps. It is not a definition or a modeling choice. The theorem does not claim that the natural numbers are the only possible arithmetic, nor does it say anything about how the framework derives the natural numbers from first principles. The honest note in the library states that on the strict path, the two realizations use the same carrier, so the map being the identity is expected. The non-trivial content lies in the general preservation lemmas and the cross-carrier canonicity, not in this specific identity.
THEOREM forcingFn_eq_id · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.lean
/-- The forced-semiring certificate holds. -/
noncomputable def forcedSemiringCert_holds : ForcedSemiringCert where
map := forcingFn
bij := forcingFn_bijective
zero := forcingFn_zero
one := forcingFn_one
add := forcingFn_add
mul := forcingFn_mul
unique := forcingFn_unique
/-! ## Honest note: on the strict path the forcing map is the identity.
`StrictLogicRealization` uses a uniform free orbit (`LogicNat`) for every
realization, so the two forced arithmetics are literally the same carrier and the
canonical map between them is the identity. This does not trivialize the theory:
the non-trivial content is (a) the general preservation lemmas above, which apply
to *any* zero/step map, and (b) the cross-carrier canonicity in
`CanonicalForcing.ArithmeticOf.forcing_map_unique`. It is simply honest about the
strict presentation. -/
theorem forcingFn_eq_id (R S : UniversalForcing.Strict.StrictLogicRealization.{0,0}) :
forcingFn R S = id :=
(forcingFn_unique R S id rfl (fun _ => rfl)).symm
THEOREM map_preserves_add · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.lean
/-- A map fixing zero and commuting with `succ` preserves addition. Addition
recurses on its second argument, so the proof is a single induction. -/
theorem map_preserves_add (h : LogicNat → LogicNat)
(h0 : h LogicNat.zero = LogicNat.zero)
(hs : ∀ n, h (LogicNat.succ n) = LogicNat.succ (h n)) :
∀ a b : LogicNat, h (a + b) = h a + h b := by
intro a b
induction b with
| identity =>
show h (a + LogicNat.zero) = h a + h LogicNat.zero
rw [add_zero, h0, add_zero]
| step b ih =>
show h (a + LogicNat.succ b) = h a + h (LogicNat.succ b)
rw [add_succ, hs, ih, hs, add_succ]
THEOREM map_preserves_mul · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.lean
/-- A map fixing zero and commuting with `succ` (hence, by the previous lemma,
preserving `+`) preserves multiplication. Multiplication recurses on its second
argument via addition. -/
theorem map_preserves_mul (h : LogicNat → LogicNat)
(h0 : h LogicNat.zero = LogicNat.zero)
(hs : ∀ n, h (LogicNat.succ n) = LogicNat.succ (h n)) :
∀ a b : LogicNat, h (a * b) = h a * h b := by
have hadd := map_preserves_add h h0 hs
intro a b
induction b with
| identity =>
show h (a * LogicNat.zero) = h a * h LogicNat.zero
rw [mul_zero, h0, mul_zero]
| step b ih =>
show h (a * LogicNat.succ b) = h a * h (LogicNat.succ b)
rw [mul_succ, hadd, ih, hs, mul_succ]
THEOREM forcingFn_unique · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.lean
/-- **Uniqueness as a semiring map.** Any function preserving zero and step
equals the forcing map, so in particular the forcing map is the unique semiring
homomorphism — it is determined, not chosen. (Restated from canonicity for the
`LogicNat` presentation.) -/
theorem forcingFn_unique (R S : UniversalForcing.Strict.StrictLogicRealization.{0,0})
(f : LogicNat → LogicNat)
(h0 : f LogicNat.zero = LogicNat.zero)
(hs : ∀ n, f (LogicNat.succ n) = LogicNat.succ (f n)) :
f = forcingFn R S :=
UniversalForcing.Strict.StrictLogicRealization.universal_forcing_unique R S f h0 hs
What this page does not claim
This theorem does not claim that the natural numbers are the only possible arithmetic structure. This theorem does not derive the natural numbers from first principles; it only shows a map between two realizations is the identity. This theorem does not apply to non-strict realizations where the carriers may differ.
Verify this page
Every tagged claim above names its theorem. To check one yourself rather than trust this page, elaborate the source module with Lean 4 and audit its axiom basis:
$ lake env lean IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.lean
expected axiom basis: [propext, Classical.choice, Quot.sound] (the Lean kernel's standard three; no RS-specific axioms)
A page whose claims cannot be reproduced this way does not ship. In production, every anchor links to the exact declaration in the public source release, and this block carries the build receipt for the page itself.
Derived articles
This page is generated by a question-recursion engine: the questions its answers raise become the next pages. The current agenda, with open targets marked red:
- What does the cross-carrier canonicity in CanonicalForcing establish that the strict path does not?
- How does the framework derive the natural numbers from the concept of distinction?
- What is the role of the universal forcing map in the framework's larger derivation of arithmetic?
MACHINE LAYER · GROUNDED CLAIM TABLE · CLICK TO EXPAND
THEOREM forcingFn_eq_id · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.lean
/-- The forced-semiring certificate holds. -/ noncomputable def forcedSemiringCert_holds : ForcedSemiringCert where map := forcingFn bij := forcingFn_bijective zero := forcingFn_zero one := forcingFn_one add := forcingFn_add mul := forcingFn_mul unique := forcingFn_unique /-! ## Honest note: on the strict path the forcing map is the identity. `StrictLogicRealization` uses a uniform free orbit (`LogicNat`) for every realization, so the two forced arithmetics are literally the same carrier and the canonical map between them is the identity. This does not trivialize the theory: the non-trivial content is (a) the general preservation lemmas above, which apply to *any* zero/step map, and (b) the cross-carrier canonicity in `CanonicalForcing.ArithmeticOf.forcing_map_unique`. It is simply honest about the strict presentation. -/ theorem forcingFn_eq_id (R S : UniversalForcing.Strict.StrictLogicRealization.{0,0}) : forcingFn R S = id := (forcingFn_unique R S id rfl (fun _ => rfl)).symmThe forcing map between two strict realizations of the natural numbers is the identity function. forcingFn_eq_id · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.leanTHEOREM map_preserves_add · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.lean
/-- A map fixing zero and commuting with `succ` preserves addition. Addition recurses on its second argument, so the proof is a single induction. -/ theorem map_preserves_add (h : LogicNat → LogicNat) (h0 : h LogicNat.zero = LogicNat.zero) (hs : ∀ n, h (LogicNat.succ n) = LogicNat.succ (h n)) : ∀ a b : LogicNat, h (a + b) = h a + h b := by intro a b induction b with | identity => show h (a + LogicNat.zero) = h a + h LogicNat.zero rw [add_zero, h0, add_zero] | step b ih => show h (a + LogicNat.succ b) = h a + h (LogicNat.succ b) rw [add_succ, hs, ih, hs, add_succ]Any function that fixes zero and commutes with the successor step preserves addition. map_preserves_add · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.leanTHEOREM map_preserves_mul · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.lean
/-- A map fixing zero and commuting with `succ` (hence, by the previous lemma, preserving `+`) preserves multiplication. Multiplication recurses on its second argument via addition. -/ theorem map_preserves_mul (h : LogicNat → LogicNat) (h0 : h LogicNat.zero = LogicNat.zero) (hs : ∀ n, h (LogicNat.succ n) = LogicNat.succ (h n)) : ∀ a b : LogicNat, h (a * b) = h a * h b := by have hadd := map_preserves_add h h0 hs intro a b induction b with | identity => show h (a * LogicNat.zero) = h a * h LogicNat.zero rw [mul_zero, h0, mul_zero] | step b ih => show h (a * LogicNat.succ b) = h a * h (LogicNat.succ b) rw [mul_succ, hadd, ih, hs, mul_succ]Any function that fixes zero and commutes with the successor step preserves multiplication. map_preserves_mul · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.leanTHEOREM forcingFn_unique · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.lean
/-- **Uniqueness as a semiring map.** Any function preserving zero and step equals the forcing map, so in particular the forcing map is the unique semiring homomorphism — it is determined, not chosen. (Restated from canonicity for the `LogicNat` presentation.) -/ theorem forcingFn_unique (R S : UniversalForcing.Strict.StrictLogicRealization.{0,0}) (f : LogicNat → LogicNat) (h0 : f LogicNat.zero = LogicNat.zero) (hs : ∀ n, f (LogicNat.succ n) = LogicNat.succ (f n)) : f = forcingFn R S := UniversalForcing.Strict.StrictLogicRealization.universal_forcing_unique R S f h0 hsAny function that fixes zero and commutes with the successor step equals the forcing map. forcingFn_unique · IndisputableMonolith/Foundation/UniversalForcing/ForcedSemiring.lean