Configurations of Points and lines #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4. This file introduces abstract configurations of points and lines, and proves some basic properties.
Main definitions #
configuration.nondegenerate
: Excludes certain degenerate configurations, and imposes uniqueness of intersection points.configuration.has_points
: A nondegenerate configuration in which every pair of lines has an intersection point.configuration.has_lines
: A nondegenerate configuration in which every pair of points has a line through them.configuration.line_count
: The number of lines through a given point.configuration.point_count
: The number of lines through a given line.
Main statements #
configuration.has_lines.card_le
:has_lines
implies|P| ≤ |L|
.configuration.has_points.card_le
:has_points
implies|L| ≤ |P|
.configuration.has_lines.has_points
:has_lines
and|P| = |L|
implieshas_points
.configuration.has_points.has_lines
:has_points
and|P| = |L|
implieshas_lines
. Together, these four statements say that any two of the following properties imply the third: (a)has_lines
, (b)has_points
, (c)|P| = |L|
.
Equations
- configuration.dual.inhabited P = this
Equations
- configuration.dual.fintype P = this
Equations
- exists_point : ∀ (l : L), ∃ (p : P), p ∉ l
- exists_line : ∀ (p : P), ∃ (l : L), p ∉ l
- eq_or_eq : ∀ {p₁ p₂ : P} {l₁ l₂ : L}, p₁ ∈ l₁ → p₂ ∈ l₁ → p₁ ∈ l₂ → p₂ ∈ l₂ → p₁ = p₂ ∨ l₁ = l₂
A configuration is nondegenerate if:
- there does not exist a line that passes through all of the points,
- there does not exist a point that is on all of the lines,
- there is at most one line through any two points,
- any two lines have at most one intersection point. Conditions 3 and 4 are equivalent.
Instances of this typeclass
- exists_point : ∀ (l : L), ∃ (p : P), p ∉ l
- exists_line : ∀ (p : P), ∃ (l : L), p ∉ l
- eq_or_eq : ∀ {p₁ p₂ : P} {l₁ l₂ : L}, p₁ ∈ l₁ → p₂ ∈ l₁ → p₁ ∈ l₂ → p₂ ∈ l₂ → p₁ = p₂ ∨ l₁ = l₂
- mk_point : Π {l₁ l₂ : L}, l₁ ≠ l₂ → P
- mk_point_ax : ∀ {l₁ l₂ : L} (h : l₁ ≠ l₂), configuration.has_points.mk_point h ∈ l₁ ∧ configuration.has_points.mk_point h ∈ l₂
A nondegenerate configuration in which every pair of lines has an intersection point.
Instances of this typeclass
Instances of other typeclasses for configuration.has_points
- configuration.has_points.has_sizeof_inst
- exists_point : ∀ (l : L), ∃ (p : P), p ∉ l
- exists_line : ∀ (p : P), ∃ (l : L), p ∉ l
- eq_or_eq : ∀ {p₁ p₂ : P} {l₁ l₂ : L}, p₁ ∈ l₁ → p₂ ∈ l₁ → p₁ ∈ l₂ → p₂ ∈ l₂ → p₁ = p₂ ∨ l₁ = l₂
- mk_line : Π {p₁ p₂ : P}, p₁ ≠ p₂ → L
- mk_line_ax : ∀ {p₁ p₂ : P} (h : p₁ ≠ p₂), p₁ ∈ configuration.has_lines.mk_line h ∧ p₂ ∈ configuration.has_lines.mk_line h
A nondegenerate configuration in which every pair of points has a line through them.
Instances of this typeclass
Instances of other typeclasses for configuration.has_lines
- configuration.has_lines.has_sizeof_inst
Equations
- configuration.dual.has_lines P L = {exists_point := _, exists_line := _, eq_or_eq := _, mk_line := configuration.has_points.mk_point _inst_2, mk_line_ax := _}
Equations
- configuration.dual.has_points P L = {exists_point := _, exists_line := _, eq_or_eq := _, mk_point := configuration.has_lines.mk_line _inst_2, mk_point_ax := _}
If a nondegenerate configuration has at least as many points as lines, then there exists
an injective function f
from lines to points, such that f l
does not lie on l
.
Number of points on a given line.
Equations
- configuration.line_count L p = nat.card {l // p ∈ l}
Number of lines through a given point.
Equations
- configuration.point_count P l = nat.card {p // p ∈ l}
If a nondegenerate configuration has a unique line through any two points, then |P| ≤ |L|
.
If a nondegenerate configuration has a unique point on any two lines, then |L| ≤ |P|
.
If a nondegenerate configuration has a unique line through any two points, and if |P| = |L|
,
then there is a unique point on any two lines.
Equations
- configuration.has_lines.has_points h = let this : ∀ (l₁ l₂ : L), l₁ ≠ l₂ → (∃ (p : P), p ∈ l₁ ∧ p ∈ l₂) := _ in {exists_point := _, exists_line := _, eq_or_eq := _, mk_point := λ (l₁ l₂ : L) (hl : l₁ ≠ l₂), classical.some _, mk_point_ax := _}
If a nondegenerate configuration has a unique point on any two lines, and if |P| = |L|
,
then there is a unique line through any two points.
Equations
- configuration.has_points.has_lines h = let this : configuration.has_points (configuration.dual L) (configuration.dual P) := configuration.has_lines.has_points _ in {exists_point := _, exists_line := _, eq_or_eq := _, mk_line := λ (_x _x_1 : P), configuration.has_points.mk_point, mk_line_ax := _}
- exists_point : ∀ (l : L), ∃ (p : P), p ∉ l
- exists_line : ∀ (p : P), ∃ (l : L), p ∉ l
- eq_or_eq : ∀ {p₁ p₂ : P} {l₁ l₂ : L}, p₁ ∈ l₁ → p₂ ∈ l₁ → p₁ ∈ l₂ → p₂ ∈ l₂ → p₁ = p₂ ∨ l₁ = l₂
- mk_point : Π {l₁ l₂ : L}, l₁ ≠ l₂ → P
- mk_point_ax : ∀ {l₁ l₂ : L} (h : l₁ ≠ l₂), configuration.projective_plane.mk_point h ∈ l₁ ∧ configuration.projective_plane.mk_point h ∈ l₂
- mk_line : Π {p₁ p₂ : P}, p₁ ≠ p₂ → L
- mk_line_ax : ∀ {p₁ p₂ : P} (h : p₁ ≠ p₂), p₁ ∈ configuration.projective_plane.mk_line h ∧ p₂ ∈ configuration.projective_plane.mk_line h
- exists_config : ∃ (p₁ p₂ p₃ : P) (l₁ l₂ l₃ : L), p₁ ∉ l₂ ∧ p₁ ∉ l₃ ∧ p₂ ∉ l₁ ∧ p₂ ∈ l₂ ∧ p₂ ∈ l₃ ∧ p₃ ∉ l₁ ∧ p₃ ∈ l₂ ∧ p₃ ∉ l₃
A projective plane is a nondegenerate configuration in which every pair of lines has an intersection point, every pair of points has a line through them, and which has three points in general position.
Instances of this typeclass
Instances of other typeclasses for configuration.projective_plane
- configuration.projective_plane.has_sizeof_inst
Equations
- configuration.projective_plane.configuration.dual.projective_plane P L = {exists_point := _, exists_line := _, eq_or_eq := _, mk_point := configuration.has_points.mk_point (configuration.dual.has_points P L), mk_point_ax := _, mk_line := configuration.has_lines.mk_line (configuration.dual.has_lines P L), mk_line_ax := _, exists_config := _}
The order of a projective plane is one less than the number of lines through an arbitrary point. Equivalently, it is one less than the number of points on an arbitrary line.