A line meets a parabola in two points. Two circles in two. A cubic and a line in three. Multiply the degrees of the curves and you get the count.
Except parallel lines meet in zero. A line tangent to a parabola in one. Two disjoint circles in zero. The product rule breaks. The repair is not a footnote — it rewrites what the plane is.
The repair takes three moves. The widget below runs through them.
- what
Two algebraic curves of degrees and in the projective plane meet in exactly points — counted with multiplicity, over the algebraic closure. The naive count fails three ways; the theorem is the simultaneous repair.
- applies when
You need an exact intersection count, not “around d·e”. Elliptic-curve cryptography (the chord-and-tangent group law uses Bezout to know that a line meets a cubic in exactly 3 points), conic intersections, classical algebraic geometry, computer algebra system invariants.
- breaks when
Stay on the affine plane over ℝ and the count fails everywhere — parallel lines (need projective infinity), tangents (need multiplicity), disjoint real circles (need complex coordinates). The three failures are not bugs in Bezout; they are signals that your plane is too small. Open transcendental curves (sin x meets a line in infinitely many points) are out of scope — not algebraic.
Three failures of the naive count
Take a line of degree 1 and a parabola of degree 2. Substitute into and you get a quadratic in x — two roots, two intersections. . Clean. Now break it three ways: (a) two parallel lines and — substitute and you get , a contradiction; zero intersections, not the predicted . (b) The line is tangent to at the origin — they meet at one point, not two. (c) Two disjoint unit circles and share zero points, not four.
The product rule is right often enough to look like a theorem, and wrong often enough to look like a guess. Either it’s a guess, or the plane is the wrong stage. We take the second option.
Fix #1 — the projective plane
A line is a direction plus an offset. Parallel lines share a direction. Suppose we add a new point to the plane for each direction — call it the
The clean way to write a projective point is — three numbers, not all zero, up to overall scale (so are the same point). Affine (ordinary, finite) points are . Points at infinity are : the direction . The two parallel lines from §1 both pass through — the “direction (1, 1)” point. Failure (a) is fixed.
Fix #2 — multiplicity
A tangent line meets a parabola at one geometric point but a double algebraic point. Substitute into : the equation becomes , with as a repeated root. Polynomials remember what pictures forget. Define the
In the widget above, switch to the tangent preset and turn on show multiplicity: the tangent point earns its label, and the visible 3 jumps to 4. Failure (b) fixed.
Fix #3 — complex coordinates
The disjoint circles and seem to meet nowhere. Subtract them: , so . At that x the first circle gives — no real , but two perfectly good complex ones: . The two circles really do meet at two points — they just live in , not .
In the widget, the disjoint preset shows zero real intersections — turn on show complex, and four open dots appear in the side panel: the four Bezout-promised intersections, projected onto the complex x-plane. Failure (c) fixed.
# The disjoint-circles example, hand-eliminated.
# C1: x² + y² − 1 = 0
# C2: (x − 3)² + y² − 1 = 0
# Subtract: −6x + 9 = 0 → x = 3/2.
# Plug back into C1: y² = 1 − 9/4 = −5/4 → y = ± i √5 / 2.
import cmath
x = 3 / 2
ys = (cmath.sqrt(1 - x**2), -cmath.sqrt(1 - x**2))
[(x, y) for y in ys]
# → [(1.5, 1.118j), (1.5, -1.118j)] (two complex intersections)The statement
Three fixes in:
Bezout. Two plane curves of degrees and with no common component meet — in , counted with multiplicity — in exactly points.
Why it works — the resultant
Eliminate one variable. Two polynomials , viewed as polynomials in with coefficients depending on , share a root iff their
# Sylvester resultant of two conics in y → quartic in x.
import numpy as np
def resultant_y(c1, c2):
"""Each conic c = (a, b, c, d, e, k) for a x² + b xy + c y² + d x + e y + k.
In y: A_i y² + B_i(x) y + C_i(x), with A_i = c_i, B_i = b_i x + e_i,
C_i = a_i x² + d_i x + k_i. Resultant in y of two quadratics is
(A1 C2 − A2 C1)² − (A1 B2 − A2 B1)(B1 C2 − B2 C1)."""
a1, b1, cc1, d1, e1, k1 = c1
a2, b2, cc2, d2, e2, k2 = c2
P = np.polynomial.Polynomial
A1, A2 = cc1, cc2
B1, B2 = P([e1, b1]), P([e2, b2])
C1, C2 = P([k1, d1, a1]), P([k2, d2, a2])
return (A1*C2 - A2*C1)**2 - (A1*B2 - A2*B1)*(B1*C2 - B2*C1)
# General preset: x²/4 + y² − 1 = 0 and x² + y²/4 − 1 = 0
c1 = (1/4, 0, 1, 0, 0, -1)
c2 = (1, 0, 1/4, 0, 0, -1)
sorted(np.round(resultant_y(c1, c2).roots(), 4))
# → [(-0.8944+0j), (-0.8944+0j), (0.8944+0j), (0.8944+0j)]
# (each root with multiplicity 2; the two y-values per x come back from c1)Where this shows up — same count, two pillars
Bezout begins as a counting theorem for intersections, then becomes the bookkeeping that makes elliptic-curve addition reliable. The product is the same number on both sides; only what gets counted differs.
graphics : how many points two visible conics actually share — once
multiplicity, projective points, and complex roots are counted.
finance : the third intersection of an elliptic curve with a chord — the
hidden third point that defines elliptic-curve addition.Curve intersections — two conics in the plane meet in exactly four points, once you accept the three fixes (projective plane, multiplicity, complex roots). The widget runs the count: tangent contact contributes 2 to the multiplicity, parallel asymptotes contribute points-at-infinity, and disjoint conics meet at four complex points. Bezout decides what “two conics meet” means.
Bitcoin signature — an elliptic curve has degree 3; a chord has degree 1; Bezout says they meet in points. Two of those points are the chord’s endpoints; the third is the sum under elliptic-curve addition. The signature scheme is built on this third-point construction iterated millions of times — the count has to be exact, every time.
Same theorem, different ledger: graphics asks “where do these two curves meet”; finance asks “what is the third point on this chord”. Bezout guarantees the third point exists and is unique, and that is why ECDSA is well-defined.
Switch to the disjoint preset. The counter shows real = 0. Which toggles do you need to set so the visible total reaches 4? Then do the same for tangent and partial. State, in one sentence each, what each preset is “missing” from the naive view.
Find all intersections of and . Bezout predicts 1 · 2 = 2. Identify what (in this case) closes the gap between geometry and algebra.
Two parallel lines and . Write their unique intersection as a point in
Consider (cubic, degree 3) and the line (degree 1). Bezout predicts 3 intersections. Geometrically, you see one — at the origin. State precisely how Bezout is satisfied, and contrast this case with exercise 2.
Take any two non-coincident circles . Their degrees multiply to 4, but you typically see at most 2 affine intersections. Where are the other two? (Hint:
Let (degree 3) and a line (degree 1). Bezout: three intersections. Suppose all three are affine, with x-coordinates . Show that . (This identity is the seed of the elliptic-curve group law — given two points on E, the third intersection of their chord is geometrically determined, and Vieta gives its x-coordinate for free.)