Documentation

Atlas.ComplexVariables.code.Lecture6

Lecture 6: Möbius Transformations and Circles #

This file formalizes Theorem 1 from Lecture 6: if A and B are two nonintersecting circles, there exists a Möbius (linear) transformation mapping A and B into concentric circles.

Main results #

Implementation notes #

The proof relies on properties of Möbius transformations on the extended complex plane (Riemann sphere) developed in the textbook (Text, pp. 69-80). In particular:

Since these properties are not available in Mathlib and require the extended complex plane, they are axiomatized as helper lemmas. The main theorem is proved by combining them following the book's proof structure.

The definition of MapsSetTo uses an implication () rather than a conjunction () in the forward direction, to accommodate the case where a Möbius transformation has a pole on the source set (e.g., when mapping a circle through the pole to a line). At such a pole, the transformation is undefined in the finite plane but maps to ∞ on the Riemann sphere. The implication makes the forward condition vacuously true at the pole.

A circle in ℂ, defined by center and positive radius: {z : ℂ | dist z center = radius}.

  • center :

    The center of the circle

  • radius :

    The radius of the circle

  • radius_pos : 0 < self.radius

    The radius is positive

Instances For

    The point set of a circle in ℂ.

    Instances For

      Two circles are nonintersecting if their point sets are disjoint.

      Instances For

        Two circles are concentric if they share the same center.

        Instances For

          A generalized circle in the extended complex plane: either a proper circle or a line. Lines are "circles through ∞" in the Riemann sphere. A line in ℂ is represented by {z : ℂ | a * z.re + b * z.im = c} for real coefficients a, b, c.

          Instances For

            The point set of a generalized circle in ℂ.

            Instances For

              A Möbius transformation (linear fractional transformation) z ↦ (az+b)/(cz+d) with ad - bc ≠ 0. The textbook calls these "linear transformations".

              • a :

                Coefficient a

              • b :

                Coefficient b

              • c :

                Coefficient c

              • d :

                Coefficient d

              • det_ne_zero : self.a * self.d - self.b * self.c 0

                The determinant condition ad - bc ≠ 0

              Instances For

                Apply a Möbius transformation to a point z ∈ ℂ. The result is (az+b)/(cz+d). This is defined when cz + d ≠ 0.

                Instances For

                  A Möbius transformation maps a set S₁ onto S₂: wherever the transformation is defined (i.e., cz + d ≠ 0) on S₁, it maps into S₂, and every point of S₂ is the image of some point of S₁ where the transformation is defined.

                  Instances For

                    A Möbius transformation maps circle A to circle B.

                    Instances For

                      A Möbius transformation maps generalized circle G₁ to G₂.

                      Instances For

                        Composition of two Möbius transformations. The composition S ∘ T maps z ↦ S(T(z)) and corresponds to matrix multiplication.

                        Instances For

                          The Möbius transformation z ↦ 1/(z - p), i.e., z ↦ (0·z + 1)/(1·z + (-p)).

                          Instances For

                            A circle in ℂ (with positive radius) is nonempty.

                            theorem Lecture6.circle_exists_ne (C : Circle) (p : ) :
                            zC.toSet, z p

                            A circle in ℂ with positive radius has at least two distinct points, so given any point p on it, there exists another point z ≠ p.

                            theorem Lecture6.inv_circle_line_re (z p c₀ : ) (hcirc : Complex.normSq (z - c₀) = Complex.normSq (p - c₀)) (hne : z p) :
                            ((p - c₀) / (z - p)).re = -1 / 2

                            If z and p are both on a circle with center c₀, then Re((p - c₀) / (z - p)) = -1/2.

                            theorem Lecture6.normSq_add_inv_of_re_eq (d w : ) (hw : w 0) (hre : d.re * w.re - d.im * w.im = -1 / 2) :

                            If Re(d * w) = -1/2 and w ≠ 0, then |d + 1/w|² = |d|².

                            The inversion z ↦ 1/(z - p) maps a circle passing through p to a line. The line is {w : ℂ | d.re * w.re - d.im * w.im = -1/2} where d = p - center.

                            theorem Lecture6.moebius_circle_to_line (A B : Circle) (h : A.Nonintersecting B) :
                            ∃ (T₁ : MoebiusTransformation) (L : GeneralizedCircle) (B₁ : Circle), (∃ (a : ) (b : ) (c : ), L = GeneralizedCircle.line a b c) T₁.MapsGenCircle (GeneralizedCircle.circle A) L T₁.MapsCircle B B₁

                            Background result (Text, pp. 69-80, used in Step 1 of proof).

                            theorem Lecture6.inverse_points_maps_circle (α β γ : ) (B₁ : Circle) (hN : 0 < α ^ 2 + β ^ 2) (hdisj : Disjoint {z : | α * z.re + β * z.im = γ} B₁.toSet) :
                            ∃ (p₁ : ) (p₂ : ) (ρ : ), p₁ p₂ 0 < ρ ρ 1 (∀ (z : ), α * z.re + β * z.im = γComplex.normSq (z - p₁) = Complex.normSq (z - p₂)) (∀ (w : ), w = 1w 1∃ (z : ), α * z.re + β * z.im = γ z p₂ (z - p₁) / (z - p₂) = w) (∀ zB₁.toSet, z p₂(z - p₁) / (z - p₂) = ρ) ∀ (w : ), w = ρw 1zB₁.toSet, z p₂ (z - p₁) / (z - p₂) = w

                            Theorem (Text, pp. 69-80): Given a line L and a circle B₁ disjoint from L, the symmetric points construction yields two points p₁, p₂ that are symmetric about L and such that z ↦ (z-p₁)/(z-p₂) maps L onto the unit circle and B₁ to a circle centered at 0 with some radius ρ.

                            theorem Lecture6.line_nondeg_of_disjoint (α β γ : ) (B₁ : Circle) (hne : {z : | α * z.re + β * z.im = γ}.Nonempty) (hdisj : Disjoint {z : | α * z.re + β * z.im = γ} B₁.toSet) :
                            0 < α ^ 2 + β ^ 2

                            Helper: a line disjoint from a nonempty circle is non-degenerate. In the textbook, a line αx + βy = γ always satisfies α² + β² > 0; the formalization uses a constructor that allows degenerate coefficients. When α = β = 0 and γ = 0, the "line" is all of ℂ, contradicting disjointness with a nonempty circle. When α = β = 0 and γ ≠ 0, the "line" is empty, which is not a proper geometric line. This axiom captures the textbook convention that lines are non-degenerate.

                            theorem Lecture6.moebius_line_circle_to_concentric (L : GeneralizedCircle) (B₁ : Circle) (hL : ∃ (a : ) (b : ) (c : ), L = GeneralizedCircle.line a b c) (hLne : L.toSet.Nonempty) (hdisj : Disjoint L.toSet B₁.toSet) :
                            ∃ (T₂ : MoebiusTransformation) (A₂ : Circle) (B₂ : Circle), (∀ zL.toSet, T₂.c * z + T₂.d 0T₂.apply z A₂.toSet) (∀ wA₂.toSet, T₂.c = 0 w T₂.a / T₂.czL.toSet, T₂.c * z + T₂.d 0 T₂.apply z = w) T₂.MapsCircle B₁ B₂ A₂.Concentric B₂ (T₂.c 0T₂.a / T₂.c A₂.toSet)
                            theorem Lecture6.comp_denom_factor (T₁ T₂ : MoebiusTransformation) (z : ) (hdef : T₁.c * z + T₁.d 0) :
                            (T₂.comp T₁).c * z + (T₂.comp T₁).d = (T₂.c * T₁.apply z + T₂.d) * (T₁.c * z + T₁.d)

                            When T₁ is defined at z, the composition denominator factors.

                            theorem Lecture6.comp_apply_eq (T₁ T₂ : MoebiusTransformation) (z : ) (hdef : T₁.c * z + T₁.d 0) :
                            (T₂.comp T₁).apply z = T₂.apply (T₁.apply z)

                            When T₁ is defined at z, the composition acts as T₂(T₁(z)).

                            theorem Lecture6.moebius_comp_maps (T₁ T₂ : MoebiusTransformation) (S₁ S₂ S₃ : Set ) (h₁ : T₁.MapsSetTo S₁ S₂) (h₂ : T₂.MapsSetTo S₂ S₃) (h₁_defined : zS₁, T₁.c * z + T₁.d 0) :
                            (T₂.comp T₁).MapsSetTo S₁ S₃

                            Composition of Möbius transformations is compatible with mapping sets, when T₁ is defined everywhere on S₁ (no poles on the source).

                            theorem Lecture6.MoebiusTransformation.apply_injective (T : MoebiusTransformation) (z₁ z₂ : ) (h1 : T.c * z₁ + T.d 0) (h2 : T.c * z₂ + T.d 0) (heq : T.apply z₁ = T.apply z₂) :
                            z₁ = z₂

                            A Möbius transformation is injective on its domain.

                            Möbius transformations preserve the nonintersecting property.

                            Theorem 1 (Lecture 6): If A and B are two nonintersecting circles, there exists a linear (Möbius) transformation mapping A and B into concentric circles.