{
  "schema_version": "ocme-derivation-reader-v1",
  "guide_id": "derivation-mko-permutation-combination-01",
  "mko_id": "mko-permutation-combination",
  "title": {
    "zh-Hant": "排列與組合：以計數證明 P(n,k)=n!/(n−k)! 與 C(n,k)=n!/(k!(n−k)!)",
    "en": "Permutations and combinations: proving P(n,k)=n!/(n−k)! and C(n,k)=n!/(k!(n−k)!) by counting"
  },
  "contract": {
    "schema_version": "ocme-derivation-guide-v0.1",
    "guide_id": "derivation-mko-permutation-combination-01",
    "source": {
      "mko_id": "mko-permutation-combination",
      "commit": "b28a5edbd46279b1db2a3f3f48bb3f447e18899f",
      "sha256": "bd1ee61b3eaee90e08b3bb7a753128635ac36421438a78c41bba6dc768077c96",
      "english_sha256": "d86418363f341c4360d50617abf179e87c404fcc7d85b191d8da6e74d8bb6200"
    },
    "mode": "theorem_proof",
    "audience_prerequisites": [
      "finite_counting_basics",
      "nat_induction",
      "frac_rules",
      "numeric_evaluation"
    ],
    "goal": {
      "zh-Hant": "設 X 是恰有 n 個相異物件的集合，n、k 為自然數且 0≤k≤n，選取無放回、不重複。證明：從 X 有序選取 k 個的方法數 P(n,k)=n!/(n−k)!，無序選取 k 個的方法數 C(n,k)=n!/(k!(n−k)!)，且 k=0 時兩者都等於 1。最後以 X={a,b,c,d,e}、k=3 算出 P(5,3)=60 與 C(5,3)=10。",
      "en": "Let X be a set of exactly n distinct objects, with natural numbers n, k and 0≤k≤n, and selection without replacement and without repetition. Prove that the number of ordered selections of k objects from X is P(n,k)=n!/(n−k)!, that the number of unordered selections is C(n,k)=n!/(k!(n−k)!), and that both equal 1 when k=0. Finally compute P(5,3)=60 and C(5,3)=10 for X={a,b,c,d,e} and k=3."
    },
    "givens": [
      {
        "id": "G1",
        "statement": {
          "zh-Hant": "X 是恰有 n 個相異元素的有限集合；n、k∈ℕ（ℕ 含 0），0≤k≤n；選取無放回且不可重複（MKO 假設 a1）。",
          "en": "X is a finite set with exactly n distinct elements; n, k∈ℕ (ℕ contains 0) and 0≤k≤n; selection is without replacement and without repetition (MKO assumption a1)."
        }
      },
      {
        "id": "G2",
        "statement": {
          "zh-Hant": "有序選取 k 個是 X 中兩兩相異元素的 k 元組 (x_i)_{i=1}^{k}，所成集合記為 𝒫_k(X)，P(n,k)=|𝒫_k(X)|；無序選取 k 個是 X 的 k 元子集合，所成集合記為 𝒞_k(X)，C(n,k)=|𝒞_k(X)|。k=0 時空元組與空集合各計為一種選取（MKO 假設 a2）。",
          "en": "An ordered selection of k objects is a k-tuple (x_i)_{i=1}^{k} of pairwise distinct elements of X; their set is 𝒫_k(X) and P(n,k)=|𝒫_k(X)|. An unordered selection of k objects is a k-element subset of X; their set is 𝒞_k(X) and C(n,k)=|𝒞_k(X)|. For k=0 the empty tuple and the empty set each count as one selection (MKO assumption a2)."
        }
      },
      {
        "id": "G3",
        "statement": {
          "zh-Hant": "例子：X={a,b,c,d,e}（五個相異字母），k=3。",
          "en": "Example: X={a,b,c,d,e} (five distinct letters), k=3."
        }
      }
    ],
    "steps": [
      {
        "id": "S01",
        "uses": [
          "G1",
          "G2"
        ],
        "before_tex": "\\text{ordered and unordered selections of }k\\text{ objects from }X",
        "after_tex": "P(n,k)=|\\mathcal{P}_k(X)|,\\quad C(n,k)=|\\mathcal{C}_k(X)|",
        "relation": "definition",
        "rule": "def_intro",
        "conditions": [
          "0\\le k\\le n"
        ],
        "explanation": {
          "zh-Hant": "把兩種計數對象寫成集合。依 MKO 的假設，有序選取是 X 中 k 個兩兩相異元素的 k 元組 (x_i)_{i=1}^{k}，順序不同就是不同的選取；無序選取是 X 的 k 元子集合，只記錄選了哪些物件。P(n,k)、C(n,k) 分別是這兩個集合的元素個數。之後要證明的是這兩個個數等於 MKO 的公式，而不是把公式當成定義。",
          "en": "Write the two things being counted as sets. Under the MKO's assumptions, an ordered selection is a k-tuple (x_i)_{i=1}^{k} of pairwise distinct elements of X, and a different order is a different selection; an unordered selection is a k-element subset of X and records only which objects were chosen. P(n,k) and C(n,k) are the numbers of elements of these two sets. What is proved below is that these numbers equal the MKO's formulas; the formulas are not taken as definitions."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "G1",
            "G2",
            "def_intro",
            "mko_perm_comb"
          ],
          "explanation": {
            "zh-Hant": "此步只命名，不推出新事實。它依賴物件相異（否則「兩兩相異」無從判定）與無放回（元組中不重複）；若改為可重複選取，𝒫_k(X) 的定義就不同，後面的證明也不適用。",
            "en": "This step only introduces names and derives no new fact. It relies on the objects being distinct (otherwise pairwise distinctness cannot be judged) and on selection without replacement (no repeated entry); if repetition were allowed, 𝒫_k(X) would be defined differently and the proof below would not apply."
          }
        },
        "leaf_basis": "def_intro + mko_perm_comb"
      },
      {
        "id": "S02",
        "uses": [
          "mko_factorial_def"
        ],
        "before_tex": "m!\\ (m\\in\\mathbb{N})",
        "after_tex": "m!\\geq 1,\\ \\text{hence}\\ m!\\neq 0",
        "relation": "implies",
        "rule": "L_fact_pos",
        "conditions": [
          "m\\in\\mathbb{N}"
        ],
        "explanation": {
          "zh-Hant": "後面要除以 n!、(n−k)! 與 k!，所以先確定階乘從不為零。依引理 L_fact_pos，每個 m! 都至少是 1；以歸納完成的證明在 S02.1 與 S02.2。",
          "en": "Later steps divide by n!, (n−k)! and k!, so first make sure a factorial is never zero. By Lemma L_fact_pos every m! is at least 1; the proof by induction is in S02.1 and S02.2."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "L_fact_pos",
            "mko_factorial_def"
          ],
          "explanation": {
            "zh-Hant": "只需階乘的遞迴定義與歸納法；不宣稱反向（由 m!≥1 推回遞迴式）。",
            "en": "Only the recursive definition of factorial and induction are needed; no converse (recovering the recursion from m!≥1) is claimed."
          }
        },
        "leaf_basis": "nat_induction + mko_factorial_def + order_basics"
      },
      {
        "id": "S02.1",
        "uses": [
          "mko_factorial_def"
        ],
        "before_tex": "0!",
        "after_tex": "0!=1\\geq 1",
        "relation": "induction_base",
        "rule": "mko_factorial_def",
        "conditions": [],
        "explanation": {
          "zh-Hant": "依定義 F(0)=1，所以 0!=1≥1。0! 是 1，不是 0；這正是階乘 MKO 提醒的常見誤解。",
          "en": "By definition F(0)=1, so 0!=1≥1. Note that 0! is 1, not 0; the factorial MKO warns against the common error of taking 0! to be 0."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "mko_factorial_def"
          ],
          "explanation": {
            "zh-Hant": "只用定義的第一條，不需其他前提。",
            "en": "Uses only the first clause of the definition; nothing else is needed."
          }
        },
        "leaf_basis": "mko_factorial_def"
      },
      {
        "id": "S02.2",
        "uses": [
          "S02.1",
          "mko_factorial_def",
          "order_basics"
        ],
        "before_tex": "m!\\geq 1",
        "after_tex": "(m+1)!=(m+1)\\,m!\\geq m!\\geq 1",
        "relation": "induction_step",
        "rule": "order_basics",
        "conditions": [
          "m\\geq 0"
        ],
        "explanation": {
          "zh-Hant": "設 m!≥1。由遞迴 (m+1)!=(m+1)·m!。因 m≥0，(m+1)·m!−m!=m·m!≥0（兩個非負數的乘積非負），所以 (m+1)!≥m!≥1。依歸納原理，S02.1 與 S02.2 合起來對所有 m 證得引理 L_fact_pos。",
          "en": "Assume m!≥1. By the recursion (m+1)!=(m+1)·m!. Since m≥0, (m+1)·m!−m!=m·m!≥0 (a product of nonnegative numbers is nonnegative), so (m+1)!≥m!≥1. By the induction principle, S02.1 and S02.2 together prove Lemma L_fact_pos for every m."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "mko_factorial_def",
            "order_basics",
            "nat_induction"
          ],
          "explanation": {
            "zh-Hant": "需要歸納假設 m!≥1 與 m≥0；結論只由 m 推到 m+1，不宣稱反向。",
            "en": "It needs the hypothesis m!≥1 and m≥0; the conclusion goes from m to m+1 only, and no converse is claimed."
          }
        },
        "leaf_basis": "order_basics + mko_factorial_def + nat_induction"
      },
      {
        "id": "S03",
        "uses": [
          "G1",
          "G2",
          "S02",
          "tuple_eq"
        ],
        "before_tex": "\\mathcal{P}_0(X)",
        "after_tex": "\\mathcal{P}_0(X)=\\{()\\},\\quad |\\mathcal{P}_0(X)|=1=\\frac{n!}{(n-0)!}",
        "relation": "induction_base",
        "rule": "tuple_eq",
        "conditions": [
          "n!\\neq 0"
        ],
        "explanation": {
          "zh-Hant": "0 元組只有空元組 ()；它沒有任何項，「兩兩相異」自動成立，所以 𝒫_0(X)={()}，恰有 1 個元素。另一方面 n!/(n−0)!=n!/n!=1，這個除法需要 n!≠0（S02）。這是對 k 歸納的起點，也就是 MKO 所說「空排列有一種」。",
          "en": "The only 0-tuple is the empty tuple (); it has no entries, so pairwise distinctness holds vacuously and 𝒫_0(X)={()} has exactly 1 element. On the other side n!/(n−0)!=n!/n!=1, where the division needs n!≠0 (S02). This is the base of the induction on k, and it is the MKO's statement that the empty permutation counts once."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "tuple_eq",
            "S02"
          ],
          "explanation": {
            "zh-Hant": "需要「0 元組唯一」與 n!≠0；本步不依賴 X 的具體元素，n=0 時也成立。",
            "en": "It needs the uniqueness of the 0-tuple and n!≠0; it does not depend on the particular elements of X and holds for n=0 as well."
          }
        },
        "leaf_basis": "tuple_eq + frac_rules + L_fact_pos"
      },
      {
        "id": "S04",
        "uses": [
          "G2",
          "tuple_eq"
        ],
        "before_tex": "\\mathcal{P}_{k+1}(X)\\quad(k+1\\le n)",
        "after_tex": "\\mathcal{P}_{k+1}(X)=\\bigcup_{t\\in\\mathcal{P}_k(X)}E(t),\\quad E(t)=\\{t^\\frown x\\mid x\\in X\\setminus\\operatorname{set}(t)\\},\\ \\text{pairwise disjoint}",
        "relation": "implies",
        "rule": "set_extensionality",
        "conditions": [
          "k+1\\le n"
        ],
        "explanation": {
          "zh-Hant": "固定 k 使 k+1≤n。把每個 (k+1) 元有序選取按它的前 k 項分類：E(t) 收集以 t 開頭、再接一個不在 t 中的物件的元組。子步 S04.1、S04.2 證明兩個方向的包含，S04.3 證明各類互斥。",
          "en": "Fix k with k+1≤n. Sort each ordered selection of k+1 objects by its first k entries: E(t) collects the tuples that begin with t and continue with one object not already in t. Sub-steps S04.1 and S04.2 prove the two inclusions, and S04.3 proves that the classes are disjoint."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "G2",
            "tuple_eq",
            "set_extensionality"
          ],
          "explanation": {
            "zh-Hant": "集合相等需要兩個方向的包含，互斥另需證明；三者都在後面的子步中證成，只證一個方向不夠。",
            "en": "Set equality needs both inclusions, and disjointness needs its own proof; all three are proved in the sub-steps that follow, and one inclusion alone would not suffice."
          }
        },
        "leaf_basis": "set_extensionality + tuple_eq + set_operations_def"
      },
      {
        "id": "S04.1",
        "uses": [
          "G2",
          "tuple_eq"
        ],
        "before_tex": "u\\in\\mathcal{P}_{k+1}(X)",
        "after_tex": "u=t^\\frown x,\\ t\\in\\mathcal{P}_k(X),\\ x\\in X\\setminus\\operatorname{set}(t)",
        "relation": "implies",
        "rule": "tuple_eq",
        "conditions": [],
        "explanation": {
          "zh-Hant": "任取 u∈𝒫_{k+1}(X)。依 tuple_eq，u=t⌢x，t 是 u 的前 k 項、x 是最後一項。t 的項都是 u 的項，所以在 X 中且兩兩相異，t∈𝒫_k(X)。x 與 u 的其他每一項都不同，也就是 x∉set(t)，所以 x∈X∖set(t)，u∈E(t)。",
          "en": "Take any u∈𝒫_{k+1}(X). By tuple_eq, u=t⌢x with t the first k entries of u and x its last entry. The entries of t are entries of u, so they lie in X and are pairwise distinct: t∈𝒫_k(X). The entry x differs from every other entry of u, that is, x∉set(t), so x∈X∖set(t) and u∈E(t)."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "G2",
            "tuple_eq",
            "set_operations_def"
          ],
          "explanation": {
            "zh-Hant": "用到 u 的各項兩兩相異；若允許重複，x 可能落在 set(t) 中，這個包含就不成立。",
            "en": "It uses that the entries of u are pairwise distinct; if repetition were allowed, x could lie in set(t) and this inclusion would fail."
          }
        },
        "leaf_basis": "tuple_eq + set_operations_def + subset_def"
      },
      {
        "id": "S04.2",
        "uses": [
          "G2",
          "tuple_eq",
          "S04.1"
        ],
        "before_tex": "t\\in\\mathcal{P}_k(X),\\ x\\in X\\setminus\\operatorname{set}(t)",
        "after_tex": "t^\\frown x\\in\\mathcal{P}_{k+1}(X)",
        "relation": "implies",
        "rule": "tuple_eq",
        "conditions": [
          "x\\notin\\operatorname{set}(t)"
        ],
        "explanation": {
          "zh-Hant": "反過來，設 t∈𝒫_k(X)、x∈X 且 x∉set(t)。t⌢x 的前 k 項兩兩相異，最後一項 x 又不等於前面任何一項，所以 k+1 項兩兩相異且都在 X 中，t⌢x∈𝒫_{k+1}(X)。S04.1 與 S04.2 合起來，依 set_extensionality 得到 S04 的集合等式。",
          "en": "Conversely, let t∈𝒫_k(X), x∈X and x∉set(t). The first k entries of t⌢x are pairwise distinct and the last entry x differs from each of them, so all k+1 entries are pairwise distinct and lie in X: t⌢x∈𝒫_{k+1}(X). S04.1 and S04.2 together give the set equality of S04 by set_extensionality."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "tuple_eq",
            "set_operations_def",
            "set_extensionality"
          ],
          "explanation": {
            "zh-Hant": "需要 x∉set(t)；這正是 E(t) 的定義要求 x 取自 X∖set(t) 的原因。",
            "en": "It needs x∉set(t), which is exactly why E(t) takes x from X∖set(t)."
          }
        },
        "leaf_basis": "tuple_eq + set_operations_def + set_extensionality"
      },
      {
        "id": "S04.3",
        "uses": [
          "tuple_eq"
        ],
        "before_tex": "t^\\frown x=s^\\frown y",
        "after_tex": "t=s\\ \\land\\ x=y",
        "relation": "implies",
        "rule": "tuple_eq",
        "conditions": [],
        "explanation": {
          "zh-Hant": "若 t⌢x=s⌢y，兩個元組逐位相等：前 k 項給出 t=s，最後一項給出 x=y。所以 t≠s 時 E(t) 與 E(s) 沒有共同元素；同一個 E(t) 中，不同的 x 給出不同的元組。",
          "en": "If t⌢x=s⌢y, the tuples agree position by position: the first k entries give t=s and the last entry gives x=y. Hence E(t) and E(s) share no element when t≠s, and inside one E(t) different x give different tuples."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "tuple_eq"
          ],
          "explanation": {
            "zh-Hant": "只用元組相等的逐位條件；結論同時用於各類互斥（S06）與 S05.3 的單射。",
            "en": "Uses only the positionwise equality of tuples; the conclusion serves both the disjointness of the classes (S06) and the injectivity in S05.3."
          }
        },
        "leaf_basis": "tuple_eq + and_intro_elim"
      },
      {
        "id": "S05",
        "uses": [
          "G1",
          "G2",
          "S04"
        ],
        "before_tex": "E(t)\\quad(t\\in\\mathcal{P}_k(X))",
        "after_tex": "|E(t)|=n-k\\geq 1",
        "relation": "implies",
        "rule": "L_complement_count",
        "conditions": [
          "k+1\\le n"
        ],
        "explanation": {
          "zh-Hant": "每一類 E(t) 都恰有 n−k 個元素，與 t 是哪個元組無關；這是可以寫成乘積的關鍵（計數原理 MKO 要求每一階段的可選數已明確）。證明分三個子步：補集計數（S05.1）、set(t) 恰有 k 個元素（S05.2）、x↦t⌢x 是雙射（S05.3）。因 k+1≤n，n−k≥1。",
          "en": "Each class E(t) has exactly n−k elements, whichever tuple t is; this is what makes a product count legitimate (the counting-principle MKO requires the number of options at each stage to be explicit). The proof has three sub-steps: counting a complement (S05.1), set(t) having exactly k elements (S05.2), and x↦t⌢x being a bijection (S05.3). Since k+1≤n, n−k≥1."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "L_complement_count",
            "G1",
            "finite_counting_basics"
          ],
          "explanation": {
            "zh-Hant": "需要 E(t) 的大小不依賴 t；若後續可選數隨前面的選擇改變，就不能直接相乘。",
            "en": "It needs the size of E(t) not to depend on t; if the number of later options changed with earlier choices, one could not simply multiply."
          }
        },
        "leaf_basis": "L_complement_count + finite_counting_basics + injective_surjective_def"
      },
      {
        "id": "S05.1",
        "uses": [
          "finite_counting_basics",
          "set_operations_def"
        ],
        "before_tex": "A\\subseteq Y,\\ Y\\ \\text{finite}",
        "after_tex": "|Y\\setminus A|=|Y|-|A|",
        "relation": "implies",
        "rule": "finite_counting_basics",
        "conditions": [
          "A\\subseteq Y"
        ],
        "explanation": {
          "zh-Hant": "因 A⊆Y，Y=A∪(Y∖A)，而且 A 與 Y∖A 互斥（Y∖A 的元素不在 A 中）。依 finite_counting_basics，|Y|=|A|+|Y∖A|；兩邊同減 |A| 得 |Y∖A|=|Y|−|A|。這證得引理 L_complement_count。",
          "en": "Since A⊆Y, Y=A∪(Y∖A), and A and Y∖A are disjoint (elements of Y∖A are not in A). By finite_counting_basics, |Y|=|A|+|Y∖A|; subtracting |A| from both sides gives |Y∖A|=|Y|−|A|. This proves Lemma L_complement_count."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "finite_counting_basics",
            "set_operations_def",
            "eq_congruence"
          ],
          "explanation": {
            "zh-Hant": "需要 A⊆Y；若 A 不是 Y 的子集合，Y=A∪(Y∖A) 不成立，公式也會錯。",
            "en": "It needs A⊆Y; if A is not a subset of Y, Y=A∪(Y∖A) fails and so does the formula."
          }
        },
        "leaf_basis": "finite_counting_basics + set_operations_def + eq_congruence"
      },
      {
        "id": "S05.2",
        "uses": [
          "G2",
          "S05.1"
        ],
        "before_tex": "t=(x_i)_{i=1}^{k}\\in\\mathcal{P}_k(X)",
        "after_tex": "|\\operatorname{set}(t)|=k,\\quad |X\\setminus\\operatorname{set}(t)|=n-k",
        "relation": "implies",
        "rule": "finite_counting_basics",
        "conditions": [],
        "explanation": {
          "zh-Hant": "映射 i↦x_i 從位置集合 {i∈ℕ ∣ 1≤i≤k} 到 set(t) 是滿射（set(t) 就是各項的集合），也是單射（各項兩兩相異）。依 finite_counting_basics 的雙射計數，|set(t)|=k。又 set(t)⊆X，依 S05.1（Y=X、A=set(t)），|X∖set(t)|=n−k。這個推理對任何 t∈𝒫_k(X) 都成立，後面 S09、S10.3 也會用到。",
          "en": "The map i↦x_i from the set of positions {i∈ℕ ∣ 1≤i≤k} to set(t) is onto (set(t) is the set of entries) and one-to-one (the entries are pairwise distinct). By the bijection clause of finite_counting_basics, |set(t)|=k. Also set(t)⊆X, so by S05.1 (Y=X, A=set(t)), |X∖set(t)|=n−k. This reasoning holds for every t∈𝒫_k(X) and is used again in S09 and S10.3."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "G2",
            "finite_counting_basics",
            "injective_surjective_def",
            "S05.1"
          ],
          "explanation": {
            "zh-Hant": "「兩兩相異」保證單射；若有重複項，set(t) 會少於 k 個元素。",
            "en": "Pairwise distinctness gives injectivity; with a repeated entry set(t) would have fewer than k elements."
          }
        },
        "leaf_basis": "injective_surjective_def + finite_counting_basics + L_complement_count"
      },
      {
        "id": "S05.3",
        "uses": [
          "S04.3",
          "S05.2"
        ],
        "before_tex": "x\\mapsto t^\\frown x:\\ X\\setminus\\operatorname{set}(t)\\to E(t)",
        "after_tex": "|E(t)|=|X\\setminus\\operatorname{set}(t)|=n-k",
        "relation": "implies",
        "rule": "injective_surjective_def",
        "conditions": [],
        "explanation": {
          "zh-Hant": "依 E(t) 的定義，它的每個元素都是某個 x∈X∖set(t) 的 t⌢x，所以這個映射是滿射；依 S04.3，t⌢x=t⌢y 推出 x=y，所以是單射。有雙射的兩個有限集合元素個數相同，故 |E(t)|=n−k。",
          "en": "By the definition of E(t), each of its elements is t⌢x for some x∈X∖set(t), so the map is onto; by S04.3, t⌢x=t⌢y gives x=y, so it is one-to-one. Finite sets in bijection have the same number of elements, so |E(t)|=n−k."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "S04.3",
            "S05.2",
            "injective_surjective_def",
            "finite_counting_basics"
          ],
          "explanation": {
            "zh-Hant": "單射與滿射兩者都需要；只有其一不足以推出元素個數相等。",
            "en": "Both injectivity and surjectivity are needed; either alone would not give equal sizes."
          }
        },
        "leaf_basis": "injective_surjective_def + finite_counting_basics"
      },
      {
        "id": "S06",
        "uses": [
          "S04",
          "S04.3",
          "S05"
        ],
        "before_tex": "\\mathcal{P}_{k+1}(X)=\\bigcup_{t\\in\\mathcal{P}_k(X)}E(t)",
        "after_tex": "|\\mathcal{P}_{k+1}(X)|=|\\mathcal{P}_k(X)|\\cdot(n-k)",
        "relation": "implies",
        "rule": "disjoint_union_count",
        "conditions": [
          "k+1\\le n"
        ],
        "explanation": {
          "zh-Hant": "S04 把 𝒫_{k+1}(X) 寫成以 t∈𝒫_k(X) 為索引、兩兩互斥的類 E(t) 的聯集，S05 說每一類都恰有 n−k 個元素。依 disjoint_union_count（c=n−k），總數是 |𝒫_k(X)|·(n−k)。這就是 MKO 所說「每次可選數依次為 n、n−1，以此類推」的嚴格形式：第 k+1 次選取時有 n−k 個選項。",
          "en": "S04 writes 𝒫_{k+1}(X) as the union of the pairwise disjoint classes E(t) indexed by t∈𝒫_k(X), and S05 says every class has exactly n−k elements. By disjoint_union_count (c=n−k) the total is |𝒫_k(X)|·(n−k). This is the precise form of the MKO's remark that the numbers of choices are n, n−1 and so on: at choice number k+1 there are n−k options."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "S04",
            "S04.3",
            "S05",
            "disjoint_union_count"
          ],
          "explanation": {
            "zh-Hant": "需要互斥（否則重複計數）與每類大小相同（否則和不能寫成乘積）；兩者分別由 S04.3 與 S05 提供。",
            "en": "It needs disjointness (otherwise elements are counted twice) and equal class sizes (otherwise the sum is not a product); S04.3 and S05 supply them."
          }
        },
        "leaf_basis": "disjoint_union_count + finite_counting_basics"
      },
      {
        "id": "S07",
        "uses": [
          "S06",
          "S02",
          "mko_factorial_def"
        ],
        "before_tex": "|\\mathcal{P}_k(X)|=\\frac{n!}{(n-k)!}",
        "after_tex": "|\\mathcal{P}_{k+1}(X)|=\\frac{n!}{(n-(k+1))!}",
        "relation": "induction_step",
        "rule": "frac_rules",
        "conditions": [
          "k+1\\le n"
        ],
        "explanation": {
          "zh-Hant": "設歸納假設 |𝒫_k(X)|=n!/(n−k)! 且 k+1≤n。由 S06，|𝒫_{k+1}(X)|=n!(n−k)/(n−k)!。子步 S07.1 把 (n−k)! 拆成 (n−k)·(n−k−1)!，S07.2 約去公因子 n−k，得到 n!/(n−(k+1))!。",
          "en": "Assume the induction hypothesis |𝒫_k(X)|=n!/(n−k)! and k+1≤n. By S06, |𝒫_{k+1}(X)|=n!(n−k)/(n−k)!. Sub-step S07.1 splits (n−k)! as (n−k)·(n−k−1)!, and S07.2 cancels the common factor n−k to reach n!/(n−(k+1))!."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "S06",
            "S02",
            "frac_rules"
          ],
          "explanation": {
            "zh-Hant": "需要歸納假設、k+1≤n（使 n−k−1 是自然數）與分母非零（S02）；本步只由 k 推到 k+1。",
            "en": "It needs the induction hypothesis, k+1≤n (so that n−k−1 is a natural number) and nonzero denominators (S02); it goes from k to k+1 only."
          }
        },
        "leaf_basis": "frac_rules + mko_factorial_def + L_fact_pos"
      },
      {
        "id": "S07.1",
        "uses": [
          "mko_factorial_def"
        ],
        "before_tex": "(n-k)!",
        "after_tex": "(n-k)\\cdot(n-k-1)!",
        "relation": "equivalent",
        "rule": "mko_factorial_def",
        "conditions": [
          "n-k-1\\in\\mathbb{N}"
        ],
        "explanation": {
          "zh-Hant": "令 m=n−k−1；因 k+1≤n，m 是自然數，而且 n−k=m+1。依遞迴 F(m+1)=(m+1)F(m)，(n−k)!=(n−k)·(n−k−1)!。",
          "en": "Let m=n−k−1; since k+1≤n, m is a natural number and n−k=m+1. By the recursion F(m+1)=(m+1)F(m), (n−k)!=(n−k)·(n−k−1)!."
        },
        "reverse_audit": {
          "kind": "inverse_equivalence",
          "required_ids": [
            "mko_factorial_def",
            "eq_replace"
          ],
          "explanation": {
            "zh-Hant": "兩邊是同一個數的兩種寫法，可以雙向代換；條件是 n−k≥1，若 n−k=0，(n−k−1)! 沒有定義。",
            "en": "Both sides name the same number and may replace each other in either direction; the condition is n−k≥1, since for n−k=0 the factorial (n−k−1)! is undefined."
          }
        },
        "leaf_basis": "mko_factorial_def + eq_replace"
      },
      {
        "id": "S07.2",
        "uses": [
          "S07.1",
          "S02"
        ],
        "before_tex": "\\frac{n!\\,(n-k)}{(n-k)\\cdot(n-k-1)!}",
        "after_tex": "\\frac{n!}{(n-k-1)!}=\\frac{n!}{(n-(k+1))!}",
        "relation": "equivalent",
        "rule": "frac_rules",
        "conditions": [
          "n-k\\neq 0",
          "(n-k-1)!\\neq 0"
        ],
        "explanation": {
          "zh-Hant": "依 frac_rules 中「分子分母同乘一個非零數，分數不變」的規則，把非零公因子 n−k 從分子與分母約去；(n−k−1)!≠0 由 S02 保證。最後 n−k−1=n−(k+1)。",
          "en": "By the rule in frac_rules that multiplying numerator and denominator by the same nonzero number does not change a fraction, cancel the nonzero common factor n−k from numerator and denominator; (n−k−1)!≠0 holds by S02. Finally n−k−1=n−(k+1)."
        },
        "reverse_audit": {
          "kind": "inverse_equivalence",
          "required_ids": [
            "frac_rules",
            "S02"
          ],
          "explanation": {
            "zh-Hant": "約分與擴分互為反運算，前提是公因子 n−k 非零；若 n−k=0，約分不合法。",
            "en": "Cancelling and expanding by a common factor undo each other, provided the factor n−k is nonzero; with n−k=0 the cancellation would be invalid."
          }
        },
        "leaf_basis": "frac_rules + L_fact_pos + eq_replace"
      },
      {
        "id": "S08",
        "uses": [
          "S03",
          "S07"
        ],
        "before_tex": "Q(k):\\ k\\le n\\Rightarrow|\\mathcal{P}_k(X)|=\\frac{n!}{(n-k)!}",
        "after_tex": "P(n,k)=\\frac{n!}{(n-k)!}\\quad\\text{for all}\\ 0\\le k\\le n",
        "relation": "implies",
        "rule": "nat_induction",
        "conditions": [],
        "explanation": {
          "zh-Hant": "對 k 歸納命題 Q(k)：「若 k≤n，則 |𝒫_k(X)|=n!/(n−k)!」。Q(0) 是 S03。設 Q(k) 成立：若 k+1≤n，則 k≤n，由 Q(k) 得 |𝒫_k(X)|=n!/(n−k)!，再由 S07 得 Q(k+1)；若 k+1>n，Q(k+1) 的前件不成立，Q(k+1) 自動為真。依歸納原理所有 k 都有 Q(k)。證明只用到 |X|=n 與元素相異，沒有用到 X 的具體元素，所以對每個 n 元集合都成立（forall_intro）。",
          "en": "Induct on k for Q(k): 'if k≤n then |𝒫_k(X)|=n!/(n−k)!'. Q(0) is S03. Assume Q(k): if k+1≤n then k≤n, so Q(k) gives |𝒫_k(X)|=n!/(n−k)!, and S07 gives Q(k+1); if k+1>n, the hypothesis of Q(k+1) fails and Q(k+1) holds vacuously. By the induction principle Q(k) holds for every k. The proof used only |X|=n and the distinctness of the elements, nothing about which elements X has, so it holds for every n-element set (forall_intro)."
        },
        "reverse_audit": {
          "kind": "sufficient_goal_reduction",
          "required_ids": [
            "S03",
            "S07",
            "nat_induction",
            "forall_intro"
          ],
          "explanation": {
            "zh-Hant": "目標 G：0≤k≤n 時 P(n,k)=n!/(n−k)!。足夠條件 H：Q(0) 且對每個 k 有 Q(k)⇒Q(k+1)；H⇒G 由歸納原理。H 由 S03 與 S07 正向證成，沒有把 G 當作前提。",
            "en": "Goal G: P(n,k)=n!/(n−k)! for 0≤k≤n. Sufficient condition H: Q(0) and Q(k)⇒Q(k+1) for every k; H⇒G by the induction principle. H is proved forwards in S03 and S07; G is never used as a premise."
          }
        },
        "leaf_basis": "nat_induction + forall_intro + imp_intro"
      },
      {
        "id": "S09",
        "uses": [
          "G2",
          "S05.2"
        ],
        "before_tex": "t\\in\\mathcal{P}_k(X)",
        "after_tex": "\\sigma(t)=\\operatorname{set}(t)\\in\\mathcal{C}_k(X)",
        "relation": "definition",
        "rule": "function_def",
        "conditions": [],
        "explanation": {
          "zh-Hant": "定義 σ:𝒫_k(X)→𝒞_k(X)，把有序選取送到它所選物件的集合，也就是「忘記順序」。σ 有定義：依 S05.2 的推理，set(t) 是 X 的子集合且恰有 k 個元素，所以 set(t)∈𝒞_k(X)，而且每個 t 只對應一個集合。",
          "en": "Define σ:𝒫_k(X)→𝒞_k(X) sending an ordered selection to the set of objects it selects, that is, forgetting the order. σ is well defined: by the reasoning of S05.2, set(t) is a subset of X with exactly k elements, so set(t)∈𝒞_k(X), and each t gives a single set."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "G2",
            "S05.2",
            "function_def"
          ],
          "explanation": {
            "zh-Hant": "需要每個 t 的像確實在 𝒞_k(X) 中，這依賴各項兩兩相異。若有重複項，set(t) 的元素少於 k 個，σ 就不落在 𝒞_k(X)。",
            "en": "It needs the image of each t to lie in 𝒞_k(X), which rests on the entries being pairwise distinct. With a repeated entry set(t) would have fewer than k elements and σ would not land in 𝒞_k(X)."
          }
        },
        "leaf_basis": "function_def + def_intro"
      },
      {
        "id": "S10",
        "uses": [
          "S09"
        ],
        "before_tex": "\\sigma^{-1}(\\{A\\})\\quad(A\\in\\mathcal{C}_k(X))",
        "after_tex": "\\sigma^{-1}(\\{A\\})=\\mathcal{P}_k(A)",
        "relation": "implies",
        "rule": "set_extensionality",
        "conditions": [
          "A\\subseteq X,\\ |A|=k"
        ],
        "explanation": {
          "zh-Hant": "對每個 k 元子集合 A，被 σ 送到 A 的有序選取，恰好是 A 中 k 個相異元素的 k 元組，也就是 A 的各種排序。兩個方向的包含見 S10.1 與 S10.3，S10.2 證明所需的有限集合引理。",
          "en": "For each k-element subset A, the ordered selections that σ sends to A are exactly the k-tuples of distinct elements of A, that is, the orderings of A. The two inclusions are S10.1 and S10.3, and S10.2 proves the finite-set lemma they need."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "S09",
            "set_extensionality",
            "image_preimage_def"
          ],
          "explanation": {
            "zh-Hant": "集合相等需要兩個方向的包含，在下列子步中逐一證明；只證一個方向不夠。",
            "en": "Set equality needs both inclusions, which are proved in the sub-steps below; one inclusion alone would not suffice."
          }
        },
        "leaf_basis": "set_extensionality + image_preimage_def + L_same_size_subset"
      },
      {
        "id": "S10.1",
        "uses": [
          "S09",
          "image_preimage_def"
        ],
        "before_tex": "t\\in\\mathcal{P}_k(X),\\ \\sigma(t)=A",
        "after_tex": "t\\in\\mathcal{P}_k(A)",
        "relation": "implies",
        "rule": "image_preimage_def",
        "conditions": [],
        "explanation": {
          "zh-Hant": "若 σ(t)=A，t 的每一項都在 set(t)=A 中，各項又兩兩相異，所以 t 是 A 中 k 個相異元素的 k 元組，t∈𝒫_k(A)。",
          "en": "If σ(t)=A, every entry of t lies in set(t)=A, and the entries are pairwise distinct, so t is a k-tuple of distinct elements of A: t∈𝒫_k(A)."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "S09",
            "image_preimage_def"
          ],
          "explanation": {
            "zh-Hant": "只用 set(t) 的定義；反向包含在 S10.3。",
            "en": "Uses only the definition of set(t); the reverse inclusion is S10.3."
          }
        },
        "leaf_basis": "image_preimage_def + def_unfold"
      },
      {
        "id": "S10.2",
        "uses": [
          "S05.1",
          "set_operations_def"
        ],
        "before_tex": "B\\subseteq A,\\ |B|=|A|,\\ A\\ \\text{finite}",
        "after_tex": "B=A",
        "relation": "implies",
        "rule": "L_complement_count",
        "conditions": [
          "A\\ \\text{finite}"
        ],
        "explanation": {
          "zh-Hant": "由 L_complement_count（S05.1，取 Y=A），|A∖B|=|A|−|B|=0，所以 A∖B 是空集合：A 的每個元素都在 B 中，A⊆B。連同 B⊆A，依 set_extensionality 得 B=A。這證得引理 L_same_size_subset。",
          "en": "By L_complement_count (S05.1 with Y=A), |A∖B|=|A|−|B|=0, so A∖B is empty: every element of A lies in B, so A⊆B. Together with B⊆A, set_extensionality gives B=A. This proves Lemma L_same_size_subset."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "S05.1",
            "set_extensionality",
            "set_operations_def"
          ],
          "explanation": {
            "zh-Hant": "需要 A 有限；對無限集合，真子集合可以與原集合之間有雙射（例如偶數與 ℕ），這個引理就不成立。",
            "en": "It needs A to be finite; for infinite sets a proper subset can be in bijection with the whole set (for example the even numbers and ℕ), and the lemma fails."
          }
        },
        "leaf_basis": "L_complement_count + set_extensionality + set_operations_def"
      },
      {
        "id": "S10.3",
        "uses": [
          "S05.2",
          "S10.2",
          "G2"
        ],
        "before_tex": "t\\in\\mathcal{P}_k(A)",
        "after_tex": "t\\in\\mathcal{P}_k(X)\\ \\land\\ \\sigma(t)=A",
        "relation": "implies",
        "rule": "L_same_size_subset",
        "conditions": [
          "A\\subseteq X"
        ],
        "explanation": {
          "zh-Hant": "設 t∈𝒫_k(A)。因 A⊆X，t 也是 X 中相異元素的 k 元組，t∈𝒫_k(X)。依 S05.2 的推理 |set(t)|=k=|A|，而且 set(t)⊆A；依 L_same_size_subset，set(t)=A，即 σ(t)=A。S10.1 與 S10.3 合起來給出 σ^{-1}({A})=𝒫_k(A)。",
          "en": "Let t∈𝒫_k(A). Since A⊆X, t is also a k-tuple of distinct elements of X, so t∈𝒫_k(X). By the reasoning of S05.2, |set(t)|=k=|A|, and set(t)⊆A; by L_same_size_subset, set(t)=A, that is σ(t)=A. S10.1 and S10.3 together give σ^{-1}({A})=𝒫_k(A)."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "S05.2",
            "S10.2",
            "L_same_size_subset",
            "set_extensionality"
          ],
          "explanation": {
            "zh-Hant": "關鍵是 set(t) 已有 |A| 個元素，因此不可能是 A 的真子集合；這依賴 A 有限。",
            "en": "The key point is that set(t) already has |A| elements and so cannot be a proper subset of A; this relies on A being finite."
          }
        },
        "leaf_basis": "L_same_size_subset + subset_def + set_extensionality"
      },
      {
        "id": "S11",
        "uses": [
          "S08",
          "S10"
        ],
        "before_tex": "|\\sigma^{-1}(\\{A\\})|=|\\mathcal{P}_k(A)|",
        "after_tex": "|\\sigma^{-1}(\\{A\\})|=\\frac{k!}{(k-k)!}=\\frac{k!}{0!}=k!",
        "relation": "theorem_application",
        "rule": "forall_elim",
        "conditions": [
          "|A|=k"
        ],
        "explanation": {
          "zh-Hant": "S08 對每個 n 元集合與每個 0≤k≤n 成立。把它用在 k 元集合 A 上（n 換成 k，選取個數仍是 k，條件 0≤k≤k 成立），得 |𝒫_k(A)|=k!/(k−k)!=k!/0!=k!，因 0!=1。所以每個 k 元子集合恰有 k! 種排序，這就是 MKO 所說除以 k! 的依據。",
          "en": "S08 holds for every n-element set and every 0≤k≤n. Applying it to the k-element set A (n replaced by k, with k objects still selected and 0≤k≤k true) gives |𝒫_k(A)|=k!/(k−k)!=k!/0!=k!, since 0!=1. So each k-element subset has exactly k! orderings, which is the MKO's reason for dividing by k!."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "S08",
            "S10",
            "forall_elim",
            "mko_factorial_def"
          ],
          "explanation": {
            "zh-Hant": "代入 S08 需要 A 的元素相異且 |A|=k；所用的是已證的一般結論，不是對某個例子的再計算。",
            "en": "Substituting into S08 needs the elements of A to be distinct and |A|=k; what is used is the general result already proved, not a recomputation for one example."
          }
        },
        "leaf_basis": "forall_elim + mko_factorial_def + numeric_evaluation"
      },
      {
        "id": "S12",
        "uses": [
          "S09",
          "S10",
          "S11"
        ],
        "before_tex": "\\mathcal{P}_k(X)=\\bigcup_{A\\in\\mathcal{C}_k(X)}\\sigma^{-1}(\\{A\\})",
        "after_tex": "P(n,k)=C(n,k)\\cdot k!",
        "relation": "implies",
        "rule": "disjoint_union_count",
        "conditions": [],
        "explanation": {
          "zh-Hant": "每個 t∈𝒫_k(X) 恰屬於一個纖維，即 σ^{-1}({σ(t)})（σ 是函數，只給 t 一個像），所以這些纖維兩兩互斥且聯集是 𝒫_k(X)。每個纖維恰有 k! 個元素（S11），纖維共有 |𝒞_k(X)|=C(n,k) 個。依 disjoint_union_count（c=k!），P(n,k)=C(n,k)·k!。",
          "en": "Each t∈𝒫_k(X) lies in exactly one fibre, namely σ^{-1}({σ(t)}) (σ is a function and gives t a single image), so the fibres are pairwise disjoint and their union is 𝒫_k(X). Every fibre has exactly k! elements (S11), and there are |𝒞_k(X)|=C(n,k) fibres. By disjoint_union_count (c=k!), P(n,k)=C(n,k)·k!."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "S09",
            "S11",
            "disjoint_union_count",
            "function_def"
          ],
          "explanation": {
            "zh-Hant": "需要每個纖維大小都是 k!；若物件不可區分，不同選取的排序數可能不同，就不能寫成乘積。",
            "en": "It needs every fibre to have exactly k! elements; with indistinguishable objects the numbers of orderings could differ and the count would not be a product."
          }
        },
        "leaf_basis": "disjoint_union_count + function_def + image_preimage_def"
      },
      {
        "id": "S13",
        "uses": [
          "S12",
          "S08",
          "S02"
        ],
        "before_tex": "P(n,k)=C(n,k)\\cdot k!",
        "after_tex": "C(n,k)=\\frac{P(n,k)}{k!}=\\frac{n!}{k!\\,(n-k)!}",
        "relation": "equivalent",
        "rule": "mul_inverse_nonzero",
        "conditions": [
          "k!\\neq 0"
        ],
        "explanation": {
          "zh-Hant": "因 k!≠0（S02），兩邊同乘 1/k! 得 C(n,k)=P(n,k)/k!；再代入 S08 的 P(n,k)=n!/(n−k)!，依 frac_rules 得 n!/(k!(n−k)!)。",
          "en": "Since k!≠0 (S02), multiplying both sides by 1/k! gives C(n,k)=P(n,k)/k!; substituting P(n,k)=n!/(n−k)! from S08 and using frac_rules gives n!/(k!(n−k)!)."
        },
        "reverse_audit": {
          "kind": "inverse_equivalence",
          "required_ids": [
            "mul_inverse_nonzero",
            "S02",
            "frac_rules"
          ],
          "explanation": {
            "zh-Hant": "乘 1/k! 與乘 k! 互為反運算，前提 k!≠0；代入 S08 是等值代換，雙向成立。",
            "en": "Multiplying by 1/k! and by k! undo each other, given k!≠0; substituting S08 replaces equals by equals, so the step is two-way."
          }
        },
        "leaf_basis": "mul_inverse_nonzero + frac_rules + eq_replace + L_fact_pos"
      },
      {
        "id": "S14",
        "uses": [
          "S08",
          "S13",
          "G2"
        ],
        "before_tex": "k=0",
        "after_tex": "P(n,0)=\\frac{n!}{n!}=1,\\quad C(n,0)=\\frac{n!}{0!\\,n!}=1,\\quad \\mathcal{C}_0(X)=\\{\\varnothing\\}",
        "relation": "implies",
        "rule": "forall_elim",
        "conditions": [
          "0!=1",
          "n!\\neq 0"
        ],
        "explanation": {
          "zh-Hant": "代入 k=0：P(n,0)=n!/n!=1，C(n,0)=n!/(0!·n!)=n!/n!=1（0!=1）。直接看集合也一致：沒有元素的子集合只有空集合，所以 𝒞_0(X)={∅}，空選取計為一種，正如 MKO 假設 a2；n=0（X 為空）時也成立。",
          "en": "Substitute k=0: P(n,0)=n!/n!=1 and C(n,0)=n!/(0!·n!)=n!/n!=1 (0!=1). The sets agree directly: the only subset with no elements is the empty set, so 𝒞_0(X)={∅}, and the empty selection counts as one, as in MKO assumption a2; this also holds for n=0 (X empty)."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "S08",
            "S13",
            "forall_elim",
            "mko_factorial_def"
          ],
          "explanation": {
            "zh-Hant": "需要 0!=1 與 n!≠0；若誤把 0! 當 0，C(n,0) 會變成除以零。",
            "en": "It needs 0!=1 and n!≠0; taking 0! to be 0 would make C(n,0) a division by zero."
          }
        },
        "leaf_basis": "forall_elim + mko_factorial_def + frac_rules"
      },
      {
        "id": "S15",
        "uses": [
          "G3",
          "S06",
          "S08",
          "S13"
        ],
        "before_tex": "n=5,\\ k=3",
        "after_tex": "P(5,3)=60,\\quad C(5,3)=10,\\quad 10\\cdot 3!=60",
        "relation": "implies",
        "rule": "forall_elim",
        "conditions": [
          "0\\le 3\\le 5"
        ],
        "explanation": {
          "zh-Hant": "代入 n=5、k=3：P(5,3)=5!/2!=120/2=60，與 S06 的遞推 1、5、20、60（依次乘 5、4、3）一致；C(5,3)=5!/(3!·2!)=120/12=10。核對 S12：10·3!=60。以 A={a,b,c} 為例，它的纖維恰是 6 個有序選取 (a,b,c)、(a,c,b)、(b,a,c)、(b,c,a)、(c,a,b)、(c,b,a)，而 3!=6。",
          "en": "Substitute n=5 and k=3: P(5,3)=5!/2!=120/2=60, which matches the recursion of S06, 1, 5, 20, 60 (multiplying by 5, 4 and 3 in turn); C(5,3)=5!/(3!·2!)=120/12=10. Check S12: 10·3!=60. For A={a,b,c}, its fibre is exactly the 6 ordered selections (a,b,c), (a,c,b), (b,a,c), (b,c,a), (c,a,b), (c,b,a), and 3!=6."
        },
        "reverse_audit": {
          "kind": "premise_audit",
          "required_ids": [
            "G3",
            "S08",
            "S13",
            "numeric_evaluation"
          ],
          "explanation": {
            "zh-Hant": "這是一般公式的一個實例，可獨立重算（N1 至 N6、N9、N10）；它不能取代 S03 到 S13 的一般證明。",
            "en": "This is one instance of the general formulas and can be recomputed independently (N1 to N6, N9, N10); it cannot replace the general proof in S03 to S13."
          }
        },
        "leaf_basis": "forall_elim + numeric_evaluation"
      }
    ],
    "result": {
      "zh-Hant": "對 n 個相異物件、0≤k≤n、無放回不重複的選取：有序選取數 P(n,k)=n!/(n−k)!（第 i 次可選 n−i+1 個，S06 至 S08），無序選取數 C(n,k)=n!/(k!(n−k)!)（每個 k 元子集合恰有 k! 種排序，S11 至 S13），k=0 時兩者都是 1。例：P(5,3)=60，C(5,3)=10。",
      "en": "For selections from n distinct objects with 0≤k≤n, without replacement or repetition: the number of ordered selections is P(n,k)=n!/(n−k)! (choice number i has n−i+1 options, S06 to S08), the number of unordered selections is C(n,k)=n!/(k!(n−k)!) (each k-element subset has exactly k! orderings, S11 to S13), and both equal 1 when k=0. Example: P(5,3)=60 and C(5,3)=10."
    },
    "negative_controls": [
      {
        "claim": {
          "zh-Hant": "從 {a,b,c,d,e} 中可重複地組成三位字母密碼，共有 P(5,3)=60 種",
          "en": "Three-letter codes from {a,b,c,d,e} with repetition allowed number P(5,3)=60"
        },
        "expected": "reject",
        "reason": {
          "zh-Hant": "可重複時每位都有 5 種，共 5³=125；P(5,3) 只計各項兩兩相異的有序選取。",
          "en": "With repetition each position has 5 options, giving 5³=125; P(5,3) counts only ordered selections with pairwise distinct entries."
        }
      },
      {
        "claim": {
          "zh-Hant": "從 5 人中選出會長與秘書（兩個不同職位）的方法數是 C(5,2)=10",
          "en": "The number of ways to choose a president and a secretary (two different posts) from 5 people is C(5,2)=10"
        },
        "expected": "reject",
        "reason": {
          "zh-Hant": "職位區分順序：甲任會長、乙任秘書與乙任會長、甲任秘書不同，應為 P(5,2)=20=10·2!。",
          "en": "The posts distinguish order: A as president with B as secretary differs from B as president with A as secretary, so the count is P(5,2)=20=10·2!."
        }
      },
      {
        "claim": {
          "zh-Hant": "字母 A、A、B 的不同排列共有 3!=6 種",
          "en": "The letters A, A, B have 3!=6 different arrangements"
        },
        "expected": "reject",
        "reason": {
          "zh-Hant": "物件不相異，實際只有 AAB、ABA、BAA 三種；這超出本 MKO 的相異物件模型。",
          "en": "The objects are not distinct; there are only AAB, ABA and BAA, three arrangements, and this lies outside the MKO's model of distinct objects."
        }
      },
      {
        "claim": {
          "zh-Hant": "C(5,0)=0，因為什麼都沒有選",
          "en": "C(5,0)=0 because nothing is chosen"
        },
        "expected": "reject",
        "reason": {
          "zh-Hant": "空選取計為一種：5!/(0!·5!)=1，且 𝒞_0(X)={∅}。",
          "en": "The empty selection counts as one: 5!/(0!·5!)=1, and 𝒞_0(X)={∅}."
        }
      }
    ],
    "status": "candidate",
    "gaps": [],
    "verification": {
      "structure": "checked_local_script",
      "mathematics": "candidate_argument",
      "formalization": "not_formalized"
    },
    "rule_glossary": [
      {
        "id": "finite_counting_basics",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "有限計數：互斥有限集合 A、B 有 |A∪B|=|A|+|B|；|A×B|=|A|·|B|；有限集之間存在雙射 ⇔ 元素個數相同。",
          "en": "Finite counting: for disjoint finite sets A, B, |A∪B|=|A|+|B|; |A×B|=|A|·|B|; there is a bijection between finite sets ⇔ they have the same number of elements."
        }
      },
      {
        "id": "nat_induction",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "數學歸納原理：對從 n₀ 起的命題族 P(n)，若 P(n₀) 成立，且對每個 n≥n₀ 都有 P(n)⇒P(n+1)，則所有 n≥n₀ 都有 P(n)。",
          "en": "Principle of induction: for a family P(n) starting at n₀, if P(n₀) holds and P(n)⇒P(n+1) for every n≥n₀, then P(n) holds for every n≥n₀."
        }
      },
      {
        "id": "frac_rules",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "分數運算（分母皆非零）：a/c+b/c=(a+b)/c；(a/b)(c/d)=(ac)/(bd)；(a/b)/(c/d)=(ad)/(bc)（另需 c≠0）；a/b=(ak)/(bk)（k≠0）。",
          "en": "Fraction rules (all denominators nonzero): a/c+b/c=(a+b)/c; (a/b)(c/d)=(ac)/(bd); (a/b)/(c/d)=(ad)/(bc) (also needing c≠0); a/b=(ak)/(bk) for k≠0."
        }
      },
      {
        "id": "numeric_evaluation",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "明確整數或有理數算式的精確求值；可以獨立重算。",
          "en": "Exact evaluation of an explicit integer or rational expression; independently recomputable."
        }
      },
      {
        "id": "def_intro",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "引入定義：可為一個命題、式子或物件取名；之後名稱與被定義者可互相替換。",
          "en": "Introducing a definition: a statement, expression or object may be given a name, after which the name and what it stands for are interchangeable."
        }
      },
      {
        "id": "order_basics",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "實數的序：任兩數恰有 u<v、u=v、u>v 之一；u<v 且 v<w 推出 u<w；u<v 推出 u+w<v+w；u<v 且 w>0 推出 uw<vw；u<v 且 w<0 推出 uw>vw。",
          "en": "Order of the reals: exactly one of u<v, u=v, u>v holds; u<v and v<w give u<w; u<v gives u+w<v+w; u<v and w>0 give uw<vw; u<v and w<0 give uw>vw."
        }
      },
      {
        "id": "set_extensionality",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "集合相等：A=B 當且僅當 A⊆B 且 B⊆A，即兩者有相同元素。",
          "en": "Set equality: A=B if and only if A⊆B and B⊆A, i.e. they have the same elements."
        }
      },
      {
        "id": "set_operations_def",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "集合運算：x∈A∪B ⇔ x∈A 或 x∈B；x∈A∩B ⇔ x∈A 且 x∈B；x∈A∖B ⇔ x∈A 且 x∉B；在全集 U 中 Aᶜ=U∖A。",
          "en": "Set operations: x∈A∪B ⇔ x∈A or x∈B; x∈A∩B ⇔ x∈A and x∈B; x∈A∖B ⇔ x∈A and x∉B; in a universe U, Aᶜ=U∖A."
        }
      },
      {
        "id": "subset_def",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "子集：A⊆B 表示 A 的每個元素都是 B 的元素，即 ∀x (x∈A⇒x∈B)。",
          "en": "Subset: A⊆B means every element of A is an element of B, i.e. ∀x (x∈A⇒x∈B)."
        }
      },
      {
        "id": "and_intro_elim",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "合取：由 P 與 Q 得 P∧Q；由 P∧Q 可分別得 P 與 Q。",
          "en": "Conjunction: from P and Q infer P∧Q; from P∧Q infer P and infer Q."
        }
      },
      {
        "id": "injective_surjective_def",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "單射：f(a)=f(a′) ⇒ a=a′。滿射：每個 b∈B 都有 a∈A 使 f(a)=b。雙射：既單又滿，此時有唯一反函數 f⁻¹ 使 f⁻¹∘f=id_A、f∘f⁻¹=id_B。",
          "en": "Injective: f(a)=f(a′) ⇒ a=a′. Surjective: every b∈B has some a∈A with f(a)=b. Bijective: both; then there is a unique inverse f⁻¹ with f⁻¹∘f=id_A and f∘f⁻¹=id_B."
        }
      },
      {
        "id": "eq_congruence",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "等式同用：若 u=v，對兩邊做同一個有定義的運算 f，得 f(u)=f(v)。只對一邊做運算不屬於此規則。",
          "en": "Congruence of equality: if u=v, applying the same defined operation f to both sides gives f(u)=f(v). Operating on one side only is not an instance of this rule."
        }
      },
      {
        "id": "eq_replace",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "等值代換：命題中的一個式子可換成與它相等的式子，命題的真假不變。",
          "en": "Replacement of equals: an expression inside a statement may be replaced by an equal expression without changing whether the statement is true."
        }
      },
      {
        "id": "forall_intro",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "∀引入（全稱推廣）：若某命題對一個「任意的」元素 x 證成，而證明沒有對 x 加任何額外假設，則它對論域中所有 x 成立。",
          "en": "∀-introduction (generalization): if a statement is proved for an arbitrary element x, with no extra assumption on x, it holds for every x in the domain."
        }
      },
      {
        "id": "imp_intro",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "→引入（釋放假設）：若在暫時假設 P 的作用域中推出 Q，則得到 P⇒Q；此後 P 不再可當作已知使用。",
          "en": "→-introduction (discharging a hypothesis): if Q is derived inside a scope that temporarily assumes P, then P⇒Q follows, and P may no longer be used as known."
        }
      },
      {
        "id": "function_def",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "函數：f:A→B 對每個 a∈A 指定恰好一個 f(a)∈B。兩函數相等 ⇔ 定義域、對應域相同且對每個 a 都有相同值。",
          "en": "Function: f:A→B assigns to each a∈A exactly one f(a)∈B. Two functions are equal ⇔ they have the same domain and codomain and agree at every a."
        }
      },
      {
        "id": "image_preimage_def",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "像與原像：f(S)={f(a) ∣ a∈S}；f⁻¹(T)={a∈A ∣ f(a)∈T}。原像記號不預設 f 有反函數。",
          "en": "Image and preimage: f(S)={f(a) ∣ a∈S}; f⁻¹(T)={a∈A ∣ f(a)∈T}. The preimage notation does not presuppose that f has an inverse."
        }
      },
      {
        "id": "def_unfold",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "展開定義：把一個已定義的詞換成它的定義內容（或反向收回），命題的真假不變。",
          "en": "Unfolding a definition: replacing a defined term by its definition (or folding it back) does not change whether a statement is true."
        }
      },
      {
        "id": "forall_elim",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "∀消去（代入特例）：若 ∀x∈D, P(x) 成立且 a∈D，則 P(a) 成立。",
          "en": "∀-elimination (instantiation): if ∀x∈D, P(x) holds and a∈D, then P(a) holds."
        }
      },
      {
        "id": "mul_inverse_nonzero",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "非零數的倒數：在 ℚ、ℝ、ℂ 中，若 u≠0，存在 1/u 使 u·(1/u)=1；對 u≠0 定義 v/u 為 v·(1/u)。u=0 時沒有倒數，v/0 不定義。",
          "en": "Inverse of a nonzero number: in ℚ, ℝ or ℂ, if u≠0 there is 1/u with u·(1/u)=1, and v/u means v·(1/u). 0 has no inverse, so v/0 is undefined."
        }
      },
      {
        "id": "mko_perm_comb",
        "kind": "cited",
        "source": {
          "mko_id": "mko-permutation-combination",
          "sha256": "bd1ee61b3eaee90e08b3bb7a753128635ac36421438a78c41bba6dc768077c96",
          "commit": "b28a5edbd46279b1db2a3f3f48bb3f447e18899f"
        },
        "statement": {
          "zh-Hant": "對自然數 n、k 且 0≤k≤n，由 n 個相異物件無放回選取 k 個的排列數為 P(n,k)=n!/(n−k)!，組合數為 C(n,k)=n!/(k!(n−k)!)；k=0 時兩者均為 1。",
          "en": "For natural numbers n and k with 0≤k≤n, the number of ordered selections without replacement is P(n,k)=n!/(n−k)!, while the number of unordered selections is C(n,k)=n!/(k!(n−k)!). Both values are 1 when k=0."
        }
      },
      {
        "id": "mko_factorial_def",
        "kind": "cited",
        "source": {
          "mko_id": "mko-factorial",
          "sha256": "fc2d013658e47191e660f97c927ceeec97905dd4fc520329d3df326b343a4b8f",
          "commit": "b28a5edbd46279b1db2a3f3f48bb3f447e18899f"
        },
        "statement": {
          "zh-Hant": "函數 F:ℕ→ℕ 由 F(0)=1 與 F(m+1)=(m+1)F(m) 唯一遞迴決定；慣用記號為 m!。",
          "en": "The function F:ℕ→ℕ is uniquely determined recursively by F(0)=1 and F(m+1)=(m+1)F(m); its customary notation is m!."
        }
      },
      {
        "id": "tuple_eq",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "有限元組：兩個 k 元組相等當且僅當每個位置的項都相等；0 元組只有空元組 ()；對 k 元組 t 與物件 x，t⌢x 是前 k 項為 t、第 k+1 項為 x 的元組；每個 (k+1) 元組恰可唯一寫成 t⌢x，其中 t 是它的前 k 項、x 是它的最後一項。",
          "en": "Finite tuples: two k-tuples are equal exactly when their entries agree in every position; the only 0-tuple is the empty tuple (); for a k-tuple t and an object x, t⌢x is the tuple whose first k entries are those of t and whose entry k+1 is x; every (k+1)-tuple can be written as t⌢x in exactly one way, with t its first k entries and x its last entry."
        }
      },
      {
        "id": "disjoint_union_count",
        "kind": "prerequisite",
        "statement": {
          "zh-Hant": "若有限集合是有限多個兩兩互斥的有限集合 B_j（j∈J，J 有限）的聯集，則其元素個數是 Σ_{j∈J}|B_j|；特別地，若每個 |B_j|=c，則為 |J|·c。這是 finite_counting_basics 的兩集合情形對集合個數歸納所得。",
          "en": "If a finite set is the union of finitely many pairwise disjoint finite sets B_j (j∈J, J finite), its number of elements is Σ_{j∈J}|B_j|; in particular, if every |B_j|=c, it is |J|·c. This is the two-set case of finite_counting_basics iterated by induction on the number of sets."
        }
      },
      {
        "id": "L_fact_pos",
        "kind": "lemma",
        "proved_in": [
          "S02.1",
          "S02.2"
        ],
        "statement": {
          "zh-Hant": "對每個自然數 m，m!≥1；特別地 m!≠0。",
          "en": "For every natural number m, m!≥1; in particular m!≠0."
        }
      },
      {
        "id": "L_complement_count",
        "kind": "lemma",
        "proved_in": [
          "S05.1"
        ],
        "statement": {
          "zh-Hant": "若 Y 是有限集合且 A⊆Y，則 |Y∖A|=|Y|−|A|。",
          "en": "If Y is a finite set and A⊆Y, then |Y∖A|=|Y|−|A|."
        }
      },
      {
        "id": "L_same_size_subset",
        "kind": "lemma",
        "proved_in": [
          "S10.2"
        ],
        "statement": {
          "zh-Hant": "若 A 是有限集合、B⊆A 且 |B|=|A|，則 B=A。",
          "en": "If A is a finite set, B⊆A and |B|=|A|, then B=A."
        }
      }
    ],
    "revision_log": [],
    "numeric_checks": [
      {
        "id": "N1",
        "step": "S15",
        "lhs": "factorial(5)/factorial(2)",
        "rhs": "60"
      },
      {
        "id": "N2",
        "step": "S15",
        "lhs": "5*4*3",
        "rhs": "60"
      },
      {
        "id": "N3",
        "step": "S15",
        "lhs": "factorial(5)/(factorial(3)*factorial(2))",
        "rhs": "10"
      },
      {
        "id": "N4",
        "step": "S15",
        "lhs": "comb(5,3)",
        "rhs": "10"
      },
      {
        "id": "N5",
        "step": "S15",
        "lhs": "10*factorial(3)",
        "rhs": "60"
      },
      {
        "id": "N6",
        "step": "S15",
        "lhs": "factorial(3)",
        "rhs": "6"
      },
      {
        "id": "N7",
        "step": "S14",
        "lhs": "factorial(5)/factorial(5)",
        "rhs": "1"
      },
      {
        "id": "N8",
        "step": "S14",
        "lhs": "factorial(5)/(factorial(0)*factorial(5))",
        "rhs": "1"
      },
      {
        "id": "N9",
        "step": "S07",
        "lhs": "(factorial(5)/factorial(4))*(5-1)",
        "rhs": "factorial(5)/factorial(3)"
      },
      {
        "id": "N10",
        "step": "S07",
        "lhs": "(factorial(5)/factorial(3))*(5-2)",
        "rhs": "factorial(5)/factorial(2)"
      },
      {
        "id": "N11",
        "step": "S08",
        "vars": [
          "n"
        ],
        "range": [
          3,
          25
        ],
        "lhs": "factorial(n)/factorial(n-3)",
        "rhs": "n*(n-1)*(n-2)"
      },
      {
        "id": "N12",
        "step": "S13",
        "vars": [
          "n"
        ],
        "range": [
          3,
          25
        ],
        "lhs": "comb(n,3)*factorial(3)",
        "rhs": "factorial(n)/factorial(n-3)"
      },
      {
        "id": "N13",
        "lhs": "5**3",
        "rhs": "125"
      },
      {
        "id": "N14",
        "lhs": "5**3",
        "relation": "!=",
        "rhs": "factorial(5)/factorial(2)"
      },
      {
        "id": "N15",
        "lhs": "factorial(5)/factorial(3)",
        "rhs": "10*factorial(2)"
      },
      {
        "id": "N16",
        "lhs": "3",
        "relation": "!=",
        "rhs": "factorial(3)"
      }
    ]
  },
  "presentation": {
    "md_scope": {
      "zh-Hant": "只在 MKO 的模型內工作：物件相異、無放回、不重複、0≤k≤n，排列區分順序、組合忽略順序。以有限集合的互斥聯集計數與對 k 的歸納證明兩個公式。不處理重複選取、不可區分物件、環形排列或附加限制（MKO 指出它們需要不同的計數模型）；不改動 canonical MKO 或英文 edition。",
      "en": "Works only inside the MKO's model: distinct objects, no replacement, no repetition, 0≤k≤n, with permutations distinguishing order and combinations ignoring it. Both formulas are proved by counting disjoint unions of finite sets and by induction on k. Repeated selection, indistinguishable objects, circular arrangements and extra restrictions are not treated (the MKO says they need different counting models); the canonical MKO and its English edition are not changed."
    },
    "md_symbols": [
      [
        "X",
        "恰有 n 個相異物件的有限集合",
        "a finite set of exactly n distinct objects"
      ],
      [
        "\\mathcal{P}_k(X)",
        "X 中 k 個兩兩相異元素的 k 元組（有序選取）所成的集合",
        "the set of k-tuples of pairwise distinct elements of X (ordered selections)"
      ],
      [
        "\\mathcal{C}_k(X)",
        "X 的 k 元子集合（無序選取）所成的集合",
        "the set of k-element subsets of X (unordered selections)"
      ],
      [
        "P(n,k),\\ C(n,k)",
        "上述兩個集合的元素個數",
        "the numbers of elements of these two sets"
      ],
      [
        "\\operatorname{set}(t)",
        "元組 t 的各項所成的集合",
        "the set of entries of the tuple t"
      ],
      [
        "t^\\frown x",
        "在元組 t 後面接上一項 x",
        "the tuple t followed by one more entry x"
      ],
      [
        "\\sigma",
        "忘記順序的映射 t↦set(t)",
        "the order-forgetting map t↦set(t)"
      ],
      [
        "m!",
        "階乘：0!=1，(m+1)!=(m+1)·m!",
        "factorial: 0!=1, (m+1)!=(m+1)·m!"
      ]
    ],
    "md_error_controls": [
      {
        "title": "先判斷順序、相異與放回 / Decide order, distinctness and replacement first",
        "zh": "MKO 指出的常見誤解是不先判斷條件就套公式。從 {a,b,c,d,e} 選 3 個：若區分順序且不可重複（例如分別選會長、副會長、秘書），用 P(5,3)=60；若只看選了誰（三人小組），用 C(5,3)=10；若可重複（三位字母密碼，字母可重複使用），每位都有 5 種，共 5³=125，P 與 C 都不適用。本稿每一步都依賴「相異」與「無放回」：S04.1 需要 x 不在 t 中，S05.2 需要各項兩兩相異。",
        "en": "The common error named in the MKO is to apply a formula before checking the conditions. Choosing 3 from {a,b,c,d,e}: if order matters and there is no repetition (president, vice-president and secretary), use P(5,3)=60; if only who is chosen matters (a three-person committee), use C(5,3)=10; if repetition is allowed (a three-letter code whose letters may repeat), each position has 5 options, giving 5³=125, and neither P nor C applies. Every step here relies on distinctness and no replacement: S04.1 needs x not in t, and S05.2 needs the entries to be pairwise distinct."
      },
      {
        "title": "除以 k! 需要每個子集合恰有 k! 種排序 / Dividing by k! needs exactly k! orderings for every subset",
        "zh": "S12 能寫成 C(n,k)·k! 是因為每個纖維的大小都是 k!（S11），而這依賴物件相異。若物件不可區分，例如字母 A、A、B 排成三個位置，不同的結果只有 AAB、ABA、BAA 三種，不是 3!=6；把 3! 當成排列數就多算了一倍。這類情況需要另外的計數模型（MKO para2）。",
        "en": "S12 can be written as C(n,k)·k! because every fibre has exactly k! elements (S11), and that rests on the objects being distinct. With indistinguishable objects, for example the letters A, A, B in three positions, there are only three different results, AAB, ABA and BAA, not 3!=6; taking 3! as the count doubles it. Such cases need a different counting model (MKO para2)."
      },
      {
        "title": "0!=1 與空選取 / 0!=1 and the empty selection",
        "zh": "k=0 時有序與無序選取都只有一種：空元組與空集合（S03、S14）。若把 0! 誤當 0，C(n,0)=n!/(0!·n!) 會變成除以零；若認為「什麼都不選不算一種」，C(5,0) 會被誤算成 0。",
        "en": "For k=0 there is exactly one ordered and one unordered selection: the empty tuple and the empty set (S03, S14). Taking 0! to be 0 would make C(n,0)=n!/(0!·n!) a division by zero; thinking that choosing nothing does not count would wrongly give C(5,0)=0."
      }
    ],
    "md_open_items": [
      {
        "zh-Hant": "disjoint_union_count 是 finite_counting_basics 兩集合情形對集合個數的歸納推廣，本稿把它當作前置規則，沒有寫出該歸納。",
        "en": "disjoint_union_count is the two-set case of finite_counting_basics extended by induction on the number of sets; this guide takes it as a prerequisite and does not write out that induction."
      },
      {
        "zh-Hant": "N11、N12 只是 n 從 3 到 25 的有限點核對，用來交叉檢查公式的寫法；一般結論依賴 S08 與 S13 的證明，不依賴這些核對。",
        "en": "N11 and N12 are finite checks for n from 3 to 25 only, used to cross-check how the formulas are written; the general result rests on the proofs in S08 and S13, not on these checks."
      },
      {
        "zh-Hant": "可重複選取、不可區分物件與環形排列的計數不在本稿範圍；負面對照中的數字只用來說明公式不適用。",
        "en": "Counting with repetition, with indistinguishable objects or around a circle is outside this guide; the numbers in the negative controls only show that the formulas do not apply."
      }
    ]
  },
  "revision": {
    "id": "production-20261019-adopted-96",
    "source_commit": "b28a5edbd46279b1db2a3f3f48bb3f447e18899f",
    "adopted_source_sha256": "87cb2ae2d23efddad0cb4a3c6cf56e3e9661d77e4fa32202b282969bac1604f2",
    "original_source_sha256": "87cb2ae2d23efddad0cb4a3c6cf56e3e9661d77e4fa32202b282969bac1604f2",
    "owner_adopted": true,
    "bilingual_sync": "complete_source_bound",
    "formal_Lean": "NOT_RUN",
    "independent_AI_concurrence": "NOT_MEASURED",
    "issue_ids": [],
    "scope": "Owner-adopted natural-language teaching guide; not a formal proof, canonical MKO rewrite or evidence-status promotion."
  }
}
