Take max x₁ + x₂ subject to 2x₁ + 5x₂ ≤ 16 kiln hours and 6x₁ + 5x₂ ≤ 30 glaze. The relaxation stops where the two rows meet, at (7/2, 9/5), worth 53/10. Sixteen whole points lie in the region, around the region, and the best of them is worth 5 — attained at (3, 2), at (4, 1) and at (5, 0), three ways.
Definition · Fractional partFor a rational a, the floor ⌊a⌋ is the largest integer at most a and the fractional part is f = a − ⌊a⌋, which lies in [0, 1). On a fraction n/d this is a division with remainder, so nothing is rounded and f is exact: ⌊9/5⌋ = 1 and the fractional part is 4/5.
Definition · Gomory cutLet a row of the final tableau read Σ a_j x_j = b with the basic variable fractional, and let f_j and f₀ be the fractional parts of a_j and b. Then Σ f_j x_j ≥ f₀ is a Gomory cut: it is satisfied by every non-negative integer solution of the row and violated by the current relaxation optimum.
Theorem · A Gomory cut removes no whole-number planEvery non-negative integer point satisfying the original rows satisfies Σ f_j x_j ≥ f₀.
Substitute a_j = ⌊a_j⌋ + f_j and b = ⌊b⌋ + f₀ into the row and rearrange: Σ f_j x_j − f₀ = ⌊b⌋ − Σ ⌊a_j⌋ x_j.
For integer x the right-hand side is an integer, so the left-hand side is an integer too. And f₀ is in [0, 1) while every f_j and every x_j is non-negative, so Σ f_j x_j − f₀ is greater than −1. An integer greater than −1 is at least 0, which is the cut.
□
The derivation used integrality twice and the objective not at all, which is why the cut is a fact about the feasible set rather than about the problem being solved. It is also why it is safe to add: the region shrinks, every whole point stays, so z_IP cannot move while z_LP can only fall.
Example · The first cut, in two coordinate systemsThe row whose basic variable is x₂ gives, in the tableau's own variables, (3/10)s₁ + (9/10)s₂ ≥ 4/5, where s₁ and s₂ are the slacks of the kiln and glaze rows. Substituting the slacks back turns that into 6x₁ + 6x₂ ≤ 31 in the reader's own coordinates. At (7/2, 9/5) the left-hand side is 6(7/2) + 6(9/5) = 21 + 54/5 = 159/5, which is 31.8 and breaks it. At every whole point of the region it holds, because 6x₁ + 6x₂ is a multiple of 6, so breaking ≤ 31 would need 36, which means x₁ + x₂ ≥ 6 — and the relaxation's own optimum is 53/10, so nothing in the region gets near it.
Two cuts, and a whole corner
Add that cut and re-solve. One dual-simplex pivot moves the optimum to (25/6, 1), worth 31/6, which is about 5.17 — still fractional, and the bound has come down from 53/10 = 5.3. Now cut again, from the row whose basic variable is x₁: in the tableau it is (1/6)s₃ ≥ 1/6, where s₃ is the slack of the cut just added, and in the reader's variables it is x₁ + x₂ ≤ 5. One more pivot, and the relaxation stops at (5, 0), worth 5, whole.
cut from row in the tableau in x then at z
1 basic x₂ (3/10)s₁+(9/10)s₂ ≥ 4/5 6x₁+6x₂ ≤ 31 (25/6, 1) 31/6
2 basic x₁ (1/6)s₃ ≥ 1/6 x₁+x₂ ≤ 5 (5, 0) 5
53/10 > 31/6 > 5 = z_IP two cuts, two pivots
Two cuts have driven the relaxation to the integer optimum, and the certificate is that the final corner is whole: a whole point attaining the relaxation's value is optimal for the integer problem, by the bounding theorem of the first lesson. No search tree was needed on this instance.
Now the counterexample. x₁ + x₂ ≤ 4 also removes (7/2, 9/5), and it is not a cut: it removes (3, 2), (4, 1) and (5, 0) as well, which are every optimal whole plan there is. Adding it produces a smaller region whose integer optimum is 4, and nothing in the arithmetic afterwards would reveal that the answer had been changed. Validity is a claim about all sixteen whole points of the region, and the lab tests it against every one of them.
Cutting is not a complexity result either. Each round strengthens the bound, which is worth having — a better bound closes nodes, so cuts and the search tree are used together rather than in competition. What a round of cuts does not come with is a promise about how many rounds are needed, and in practice a solver adds a few, branches, and adds more inside the tree.