Identifier
F:ml430-nat-div-dvd-div-left-b56f6f7c
Proof route
kernel-lean
External status
proved
Axiom footprint
Empty

Recorded description

The proposition declared as `Nat.div_dvd_div_left` in the pinned Mathlib v4.30 source.

Formal statement
∀ {n m k : ℕ}, m ∣ k → n ∣ m → k / m ∣ k / n

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. [generated] kernel theorem Nat. Divisibility is reflexive <= is preserved by successor on Multiplication on the naturals Multiplication on the naturals [generated] kernel theorem Nat. A divisor of a positive natural [generated] kernel theorem Nat. Current fact
10 direct dependencies 0 direct dependents Graph shows the first 8 on each side.

Evidence

kernel-Nat.div_dvd_div_left

Kind
kernel-term
Status
checked

Supports: ∀ n m k, Nat.dvd m k -> Nat.dvd n m -> Nat.dvd (k/m) (k/n)

Checker command
test "$(cargo run -q -p axeyum-lean-kernel --example nat_theorem_inventory -- div_dvd_div_left 2>/dev/null | grep -Ec '^Nat\.div_dvd_div_left[[:space:]]')" -ge 1
Evidence notes

`build_nat_prelude` admits `Nat.div_dvd_div_left` through the trusted `Kernel::add_declaration` gate, which re-checks the proof term against the stated type, so producing this row at all is a machine-checked proof. `nat_theorem_inventory` exits non-zero for a name that does not exist, and the `grep -c` count (tested `-ge 1`, not piped into `grep -q`) requires the admitted declaration to actually be printed. Confirmed kernel type: `dvd x1 x2 -> dvd x0 x1 -> dvd (div x2 x1) (div x2 x0)` for `x0 x1 x2`, matching the formal statement's `n m k` order (`m ∣ k -> n ∣ m -> k/m ∣ k/n`). Proved directly via `declare_div_dvd_div_left` (`nat_prelude/divisibility.rs`): case-split on `m` (`d.induct`, ignoring the induction hypothesis -- a case split, not a recursion) to isolate its positivity. `m=0`: `dvd 0 k` forces `k=0` (`zero_mul` on the witness), so both `k/0` and `k/n` reduce to `0` (`zero_div`) and `dvd_refl` closes it; `dvd n 0` is unused. `m=succ pred`: `dvd (succ pred) k` plus `div_mul_cancel_of_dvd` gives `(succ pred)*(k/succ pred)=k`; `dvd n (succ pred)` gives `succ pred=n*q` for a witness `q`, so substituting shows `n ∣ k` with witness `q*(k/succ pred)` (`mul_assoc`) -- hence `n` is positive too (`one_le_of_dvd_pos`) and `div_mul_cancel_of_dvd` again gives `n*(k/n)=k`. Cancelling `n` from both expressions for `k` (`mul_left_cancel_of_pos`) gives `k/n=q*(k/succ pred)`, i.e. (`mul_comm`) `k/n=(k/succ pred)*q` -- exactly the witness needed. No positivity hypothesis on `n`, `m` or `k` was required; the zero cases fall out of the case split rather than being assumed away.

footprint-Nat.div_dvd_div_left

Kind
exhaustive-enumeration
Status
checked

Supports: axiom_footprint: [] -- the Nat prelude's trusted surface is empty

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

`nat_axiom_inventory --require-axiom-free nat` enumerates the built Nat environment and exits non-zero unless it admits no Axiom, Opaque or Quotient declaration (measured: axiom=0 opaque=0 quotient=0). A theorem cannot depend on a trusted declaration the environment does not contain, so an empty trusted surface bounds every individual theorem's footprint by [].

Provenance

{
  "date": "2026-08-18",
  "established_by": "not established in this ledger",
  "source": "statement-only extraction of `Nat.div_dvd_div_left` from Mathlib v4.30.0; no proof value was exposed",
  "prior_art": [
    {
      "who": "the Mathlib contributors",
      "what": "the theorem declaration `Nat.div_dvd_div_left`",
      "where": "mathlib4 commit c5ea00351c28e24afc9f0f84379aa41082b1188f (v4.30.0)",
      "year": 2026,
      "attribution": "the proposition was read from the pinned statement-only inventory; the proof term and tactic trace were not consulted"
    }
  ]
}