Identifier
F:ml430-int-mul-nonneg-iff-4a7185c1
Proof route
kernel-lean
External status
proved
Axiom footprint
Empty

Recorded description

The proposition declared as `Int.mul_nonneg_iff` in the pinned Mathlib v4.30 source.

Formal statement
∀ {a b : ℤ}, 0 ≤ a * b ↔ 0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0

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 Int. The integer order is reflexive The integer order is total Multiplication on the integers [generated] kernel theorem Int. [generated] kernel theorem Int. Multiplying an integer by zero Mathlib v4.30 source propositio Current fact
8 direct dependencies 0 direct dependents

Evidence

kernel-Int.mul_nonneg_iff

Kind
kernel-term
Status
checked

Supports: `Int.mul_nonneg_iff` is admitted as a Theorem with EXACTLY the stated shape, pinned verbatim via the kernel's own renderer: `((x0 : Int) -> ((x1 : Int) -> Iff (Int.le Int.zero (Int.mul x0 x1)) (Or (And (Int.le Int.zero x0) (Int.le Int.zero x1)) (And (Int.le x0 Int.zero) (Int.le x1 Int.zero)))))`.

Checker command
test "$(cargo run -q --release -p axeyum-lean-kernel --example int_theorem_inventory 2>/dev/null | awk -F'\t' '$1 == "theorem" && $2 == "Int.mul_nonneg_iff" && $4 == "((x0 : Int) -> ((x1 : Int) -> Iff (Int.le Int.zero (Int.mul x0 x1)) (Or (And (Int.le Int.zero x0) (Int.le Int.zero x1)) (And (Int.le x0 Int.zero) (Int.le x1 Int.zero)))))"' | wc -l)" -ge 1

footprint-Int.mul_nonneg_iff

Kind
kernel-term
Status
checked

Supports: axiom_footprint: [] for `Int.mul_nonneg_iff`. The `integer` prelude's trusted surface stays 0: no Axiom, no Opaque, no Quotient.

Checker command
cargo run -q --release -p axeyum-lean-kernel --example nat_axiom_inventory -- --include-constructed --require-axiom-free integer

coverage-Int.mul_nonneg_iff

Kind
kernel-term
Status
checked

Supports: Coverage for `Int.mul_nonneg_iff` derived from `kernel.environment()` directly, not from an inventory list -- an Int-namespace declaration missing from `derived_laws` fails this test by name.

Checker command
test "$(cargo test -p axeyum-lean-kernel --lib int_prelude::int_prelude_tests::every_int_declaration_is_checked_and_axiom_free -- --exact 2>&1 | grep -Ec 'test result: ok\. 1 passed; 0 failed')" -ge 1

Provenance

{
  "date": "2026-08-29",
  "established_by": "lane int-sign-product (2026-08-29/30): built in the new file int_prelude/sign_product.rs. All five reduce to one shared sign case-split (Int.le_total zero a / Int.le_total zero b) plus six quadrant facts: Int.mul_nonneg and Int.mul_pos already existed; mul_nonneg_of_nonpos_of_nonpos and mul_pos_of_neg_of_neg go through a sign flip (x<=0 -> 0<=-x, built from add_le_add_left/add_lt_add_of_le_of_lt + add_left_neg + add_zero, no Int.rec case split) and (-a)*(-b)=a*b (neg_mul_neg, from gcd.rs's already-derived neg_mul/neg_neg); the two mixed-sign nonstrict quadrant facts (mul_nonpos_of_nonneg_of_nonpos, mul_nonpos_of_nonpos_of_nonneg) fall out of mul_le_mul_of_nonneg_left at c:=0 with no neg reasoning; the two mixed-sign strict quadrant facts (mul_neg_of_pos_of_neg, mul_neg_of_neg_of_pos) shift by mul_pos/Int.mul_neg. A same-sign quadrant satisfying the opposite strictness from the hypothesis combines via Int.le_antisymm to force the product to zero, decided by Int.mul_eq_zero; a same-sign quadrant matching the hypothesis's direction but needing strictness upgrades via Int.eq_em + Int.lt_of_le_of_ne.",
  "source": "statement-only extraction of `Int.mul_nonneg_iff` from Mathlib v4.30.0; no proof value was exposed",
  "prior_art": [
    {
      "who": "the Mathlib contributors",
      "what": "the theorem declaration `Int.mul_nonneg_iff`",
      "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"
    }
  ]
}