Identifier
F:nat-multichoose-one
Proof route
kernel-lean
External status
proved
Axiom footprint
Empty

Recorded description

The number of size-k multisets from a 1-element type is 1, for any k (there is only one multiset, all elements the same).

Formal statement
theorem Nat.multichoose_one : ((x0 : AxNat) -> Eq.{1} AxNat (AxNat.multichoose (AxNat.succ AxNat.zero) x0) (AxNat.succ AxNat.zero))

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. C(a, a) = 1 Nat succ_add Nat zero_add Current fact
3 direct dependencies 0 direct dependents

Evidence

kernel-Nat.multichoose_one

Kind
kernel-term
Status
checked

Supports: Nat.multichoose 1 k = 1

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

`build_nat_prelude` admits this theorem through the trusted `Kernel::add_declaration` gate. `1.multichoose k` reduces to `choose (pred (add 1 k)) k`; `Nat.add` recurses on its RIGHT argument, so the literal `1` on the LEFT leaves `add 1 k` stuck for symbolic `k` -- bridged via `Nat.succ_add (0, k) : add (succ 0) k = succ (add 0 k)` then `Nat.zero_add k : add 0 k = k`, giving `add 1 k = succ k` propositionally (a `congr`/`trans` chain, not defeq). `pred (succ k)` then reduces to `k` by ι alone once that rewrite is in hand, and `Nat.choose_self : choose k k = 1` closes it. This is the one boundary lemma of the three that genuinely needs propositional rewriting rather than pure reduction, since the literal sits on `add`'s non-recursive side. `nat_theorem_inventory` exits non-zero for a name that does not exist, and `grep -Ec` consumes the pipe and the count is tested, so the exit status depends on what the run found.

compute-Nat.multichoose_one

Kind
kernel-term
Status
checked

Supports: the equation holds at a concrete instance, not merely symbolically

Checker command
cargo test -p axeyum-lean-kernel --lib nat_prelude::nat_prelude_tests::multichoose_evaluates_correctly
Evidence notes

`Kernel::def_eq` reduces `1.multichoose 4` (through `choose 4 4`) to `1`, with a negative reduction control at a different pair (`3.multichoose 2` must NOT be def-eq to `10`, the `pred`-dropped value) so the assertion cannot pass on a vacuous `def_eq`.

footprint-Nat.multichoose_one

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 2026-08-28: `nat: axiom=0 opaque=0 quotient=0 total_trusted=0` with `Nat.ascFactorial` and its three theorems, and `Nat.multichoose` and its three theorems, all declared.

Provenance

{
  "date": "2026-08-28",
  "established_by": "axeyum-lean-kernel build_nat_prelude, lane nat-asc-multichoose",
  "source": "declare_multichoose_one (crates/axeyum-lean-kernel/src/nat_prelude/multichoose.rs)"
}