124 lines
5.7 KiB
Lean4
124 lines
5.7 KiB
Lean4
/-
|
||
Copyright (c) 2026 Stefan Kebekus. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
Authors: Stefan Kebekus
|
||
-/
|
||
import Mathlib.LinearAlgebra.FiniteDimensional.Lemmas
|
||
import Mathlib.LinearAlgebra.Projectivization.Subspace
|
||
import ElementarGeometrie.Incidence.Basic
|
||
|
||
/-!
|
||
# Projective spaces as incidence geometries
|
||
|
||
Following Soergel's notes, the *projectivization* `ℙ K V` of a vector space `V`
|
||
over a division ring `K` carries a natural structure of an incidence geometry: its
|
||
points are the one-dimensional subspaces of `V`, and its *projective lines* are
|
||
the sets of one-dimensional subspaces contained in a fixed two-dimensional
|
||
subspace.
|
||
|
||
We reuse Mathlib's `Projectivization K V` (notation `ℙ K V`) and equip it with an
|
||
`IncidenceGeometry` structure, proving the two incidence axioms.
|
||
|
||
## Main definitions
|
||
|
||
* `IncidenceGeometry.projectiveLines` : the system of projective lines.
|
||
* `IncidenceGeometry.projectivization` : `ℙ K V` as an incidence geometry.
|
||
-/
|
||
|
||
universe u
|
||
|
||
open scoped LinearAlgebra.Projectivization
|
||
|
||
namespace IncidenceGeometry
|
||
|
||
variable (K V : Type u) [DivisionRing K] [AddCommGroup V] [Module K V]
|
||
|
||
/-- The system of **projective lines** in `ℙ K V`: the sets of points whose
|
||
underlying one-dimensional subspace is contained in a fixed two-dimensional
|
||
subspace `W` of `V`. -/
|
||
def projectiveLines : Set (Set (ℙ K V)) :=
|
||
{g | ∃ W : Submodule K V, Module.finrank K W = 2 ∧
|
||
g = {p : ℙ K V | p.submodule ≤ W}}
|
||
|
||
variable {K V}
|
||
|
||
/-- Distinct projective points have distinct underlying one-dimensional
|
||
subspaces. -/
|
||
theorem submodule_ne_of_ne {x y : ℙ K V} (h : x ≠ y) :
|
||
x.submodule ≠ y.submodule :=
|
||
fun he => h (Projectivization.submodule_injective he)
|
||
|
||
/-- The subspace spanned by two distinct projective points is two-dimensional. -/
|
||
theorem finrank_sup_submodule {x y : ℙ K V} (h : x ≠ y) :
|
||
Module.finrank K (x.submodule ⊔ y.submodule : Submodule K V) = 2 := by
|
||
haveI : FiniteDimensional K x.submodule :=
|
||
Module.finite_of_finrank_eq_succ x.finrank_submodule
|
||
haveI : FiniteDimensional K y.submodule :=
|
||
Module.finite_of_finrank_eq_succ y.finrank_submodule
|
||
have hinf : Module.finrank K (x.submodule ⊓ y.submodule : Submodule K V) = 0 := by
|
||
by_contra hne
|
||
have hle : Module.finrank K (x.submodule ⊓ y.submodule : Submodule K V) ≤ 1 := by
|
||
have := Submodule.finrank_mono (inf_le_left : x.submodule ⊓ y.submodule ≤ x.submodule)
|
||
rwa [x.finrank_submodule] at this
|
||
have h1 : Module.finrank K (x.submodule ⊓ y.submodule : Submodule K V) = 1 :=
|
||
le_antisymm hle (Nat.one_le_iff_ne_zero.2 hne)
|
||
have hx : x.submodule ⊓ y.submodule = x.submodule :=
|
||
Submodule.eq_of_le_of_finrank_eq inf_le_left (by rw [h1, x.finrank_submodule])
|
||
have hy : x.submodule ⊓ y.submodule = y.submodule :=
|
||
Submodule.eq_of_le_of_finrank_eq inf_le_right (by rw [h1, y.finrank_submodule])
|
||
exact submodule_ne_of_ne h (hx.symm.trans hy)
|
||
have hsum := Submodule.finrank_sup_add_finrank_inf_eq x.submodule y.submodule
|
||
rw [hinf, x.finrank_submodule, y.finrank_submodule] at hsum
|
||
omega
|
||
|
||
variable (K V) in
|
||
/-- The **projectivization** `ℙ K V` as an incidence geometry: points are the
|
||
one-dimensional subspaces of `V` and lines are the projective lines. -/
|
||
noncomputable def projectivization : IncidenceGeometry (ℙ K V) where
|
||
lines := projectiveLines K V
|
||
two_points := by
|
||
rintro g ⟨W, hW, rfl⟩
|
||
-- `W` is two-dimensional, hence nonzero: pick a nonzero `v ∈ W`.
|
||
have hWne : W ≠ ⊥ := by
|
||
rintro rfl; rw [finrank_bot] at hW; exact absurd hW (by norm_num)
|
||
obtain ⟨v, hvW, hv⟩ := Submodule.exists_mem_ne_zero_of_ne_bot hWne
|
||
-- The line `K ∙ v` is properly contained in `W`, so we find `w ∈ W \ K ∙ v`.
|
||
have hsub : (K ∙ v) ≤ W := (Submodule.span_singleton_le_iff_mem _ _).2 hvW
|
||
have hne : (K ∙ v) ≠ W := by
|
||
intro he
|
||
have hfr : Module.finrank K (K ∙ v) = 1 := finrank_span_singleton (K := K) hv
|
||
rw [he, hW] at hfr; exact absurd hfr (by norm_num)
|
||
obtain ⟨w, hwW, hwv⟩ := SetLike.exists_of_lt (lt_of_le_of_ne hsub hne)
|
||
have hw : w ≠ 0 := fun h => hwv (h ▸ Submodule.zero_mem _)
|
||
refine ⟨Projectivization.mk K v hv, Projectivization.mk K w hw, ?_, ?_, ?_⟩
|
||
· -- the two points are distinct, as their subspaces `K ∙ v ≠ K ∙ w` differ
|
||
intro he
|
||
apply hwv
|
||
have : (Projectivization.mk K w hw).submodule = (Projectivization.mk K v hv).submodule :=
|
||
congrArg Projectivization.submodule he.symm
|
||
rw [Projectivization.submodule_mk, Projectivization.submodule_mk] at this
|
||
rw [← this]; exact Submodule.mem_span_singleton_self w
|
||
· change (Projectivization.mk K v hv).submodule ≤ W
|
||
rw [Projectivization.submodule_mk]; exact hsub
|
||
· change (Projectivization.mk K w hw).submodule ≤ W
|
||
rw [Projectivization.submodule_mk]
|
||
exact (Submodule.span_singleton_le_iff_mem _ _).2 hwW
|
||
unique_line := by
|
||
intro x y hxy
|
||
-- The unique line is the one given by `W = x.submodule ⊔ y.submodule`.
|
||
refine ⟨{p : ℙ K V | p.submodule ≤ x.submodule ⊔ y.submodule},
|
||
⟨⟨_, finrank_sup_submodule hxy, rfl⟩, ?_, ?_⟩, ?_⟩
|
||
· change x.submodule ≤ x.submodule ⊔ y.submodule
|
||
exact le_sup_left
|
||
· change y.submodule ≤ x.submodule ⊔ y.submodule
|
||
exact le_sup_right
|
||
rintro g ⟨⟨W', hW', rfl⟩, hxg, hyg⟩
|
||
-- Any line through `x` and `y` has direction containing `W`, hence equal to it.
|
||
have hle : x.submodule ⊔ y.submodule ≤ W' := sup_le hxg hyg
|
||
haveI : FiniteDimensional K W' := Module.finite_of_finrank_eq_succ (n := 1) hW'
|
||
have : x.submodule ⊔ y.submodule = W' :=
|
||
Submodule.eq_of_le_of_finrank_eq hle (by rw [finrank_sup_submodule hxy, hW'])
|
||
rw [this]
|
||
|
||
end IncidenceGeometry
|