Identifier
F:int-characterization
Proof route
kernel-lean
External status
proved
Axiom footprint
Empty

Recorded description

The constructed `Int` has no elements beyond its two constructors (every element is +/- a natural number), is generated by 0 under +1 and -1 (an induction principle), is discretely ordered at EVERY point (nothing strictly between a and a+1), is totally ordered, is non-trivial (0 != 1), and any two maps out of it that agree at 0 and satisfy the same +1 and -1 recurrences are equal. These are the properties that separate the integers from the rationals (which fail discreteness) and from lexicographic Z[x] (which is discretely ordered but is not generated by 1).

Formal statement
theorem Int.Characterization.induction : ((x0 : ((x0 : Int) -> Prop)) -> ((x1 : x0 Int.zero) -> ((x2 : ((x2 : Int) -> ((x3 : x0 x2) -> x0 (Int.add x2 Int.one)))) -> ((x3 : ((x3 : Int) -> ((x4 : x0 x3) -> x0 (Int.add x3 (Int.neg Int.one))))) -> ((x4 : Int) -> x0 x4)))))

Dependencies

The graph shows direct ledger edges. Follow a node to open its artifact page.

Direct dependencies appear to the left. The current fact is in the center. Facts that depend directly on it appear to the right. Addition on the integers is ass Multiplication on the integers Current fact The constructed Int is THE inte
2 direct dependencies 1 direct dependents

Evidence

kernel-Int.Characterization.induction

Kind
kernel-term
Status
checked

Supports: Int is generated by 0 under +1 and -1: the property lexicographic Z[x] fails.

Checker command
out=$(cargo run -q -p axeyum-lean-kernel --example characterization_status 2>/dev/null) && test "$(printf '%s\n' "$out" | grep -Ec '^int-generation[[:space:]]+Int[.]Characterization[.]induction[[:space:]]+\[\][[:space:]]')" -ge 1
Evidence notes

Both steps are definitional in the normalized ofNat/negSucc representation -- `ofNat n + 1` iota-reduces to `ofNat (succ n)`, `0 + (-1)` to `negSucc 0`, and `negSucc n + (-1)` to `negSucc (succ n)` -- so each branch is `Nat.rec` applied to the hypotheses with no rewriting. Two `Weakening` variants replace the +1 and the -1 step with `True`; the kernel refuses this declaration in both cases.

kernel-Int.Characterization.of_nat_or_neg

Kind
kernel-term
Status
checked

Supports: No junk: every integer is + or - a natural number.

Checker command
out=$(cargo run -q -p axeyum-lean-kernel --example characterization_status 2>/dev/null) && test "$(printf '%s\n' "$out" | grep -Ec '^int-no-junk[[:space:]]+Int[.]Characterization[.]of_nat_or_neg[[:space:]]+\[\][[:space:]]')" -ge 1
Evidence notes

Together with `Int.Characterization.cases` (exhaustive constructor case analysis, admitted in the same package) this says the carrier has exactly the elements the construction puts in it.

kernel-Int.Characterization.discrete-everywhere

Kind
kernel-term
Status
checked

Supports: Discreteness at every point: nothing strictly between a and a+1. This is the property the rationals fail.

Checker command
out=$(cargo run -q -p axeyum-lean-kernel --example characterization_status 2>/dev/null) && test "$(printf '%s\n' "$out" | grep -Ec '^int-order[[:space:]]+Int[.]Characterization[.]discrete_everywhere[[:space:]]+\[\][[:space:]]')" -ge 1
Evidence notes

Derived, not assumed: the interval (a, a+1) is translated down to (0, 1) through -a with `add_lt_add_of_le_of_lt` and `le_refl`, and the endpoints normalise to 0 and 1 by the ring laws, landing in the prelude's `no_int_between`. The 0/1 instance alone would leave the general statement to a reader's translation-invariance argument; this is the machine-checked one.

kernel-Int.Characterization.rec-unique

Kind
kernel-term
Status
checked

Supports: The UNIQUENESS half of the universal property: two maps out of Int agreeing at 0 with the same +/-1 recurrences are equal. Paired with the existence half (F:int-categoricity) this makes Int the initial Z-structure.

Checker command
out=$(cargo run -q -p axeyum-lean-kernel --example characterization_status 2>/dev/null) && test "$(printf '%s\n' "$out" | grep -Ec '^int-universal-property[[:space:]]+Int[.]Characterization[.]rec_unique[[:space:]]+\[\][[:space:]]')" -ge 1
Evidence notes

Proved from `Int.Characterization.induction`. `characterization_tests::the_int_hypothesis_shapes_are_satisfiable` instantiates the whole premise list and admits the result, so the theorem is not vacuous. Since 2026-08-18 it is also what proves the Int-side half of `Int.Characterization.iso`: `psi . iter` and the identity map agree at 0 with the same recurrences, so they are equal.

integer-trusted-surface-empty

Kind
exhaustive-enumeration
Status
checked

Supports: axiom_footprint: [] -- the integer prelude's whole trusted surface is empty.

Checker command
cargo run -q -p axeyum-lean-kernel --example nat_axiom_inventory -- --require-axiom-free integer
Evidence notes

Measured 2026-08-17: integer=0 over Axiom/Opaque/Quotient.

Provenance

{
  "date": "2026-08-17",
  "established_by": "axeyum-lean-kernel characterization module (agent-characterization lane)",
  "source": "hand-built foundational library; the property list is the standard characterization of the integers among ordered rings, authored here"
}