Configurations of Points and lines #
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.HasPoints
: A nondegenerate configuration in which every pair of lines has an intersection point.Configuration.HasLines
: A nondegenerate configuration in which every pair of points has a line through them.Configuration.lineCount
: The number of lines through a given point.Configuration.pointCount
: The number of lines through a given line.
Main statements #
Configuration.HasLines.card_le
:HasLines
implies|P| ≤ |L|
.Configuration.HasPoints.card_le
:HasPoints
implies|L| ≤ |P|
.Configuration.HasLines.hasPoints
:HasLines
and|P| = |L|
impliesHasPoints
.Configuration.HasPoints.hasLines
:HasPoints
and|P| = |L|
impliesHasLines
. Together, these four statements say that any two of the following properties imply the third: (a)HasLines
, (b)HasPoints
, (c)|P| = |L|
.
Equations
Equations
- ⋯ = inst
Equations
Equations
- Configuration.instMembershipDual P L = { mem := Function.swap Membership.mem }
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.
- exists_point : ∀ (l : L), ∃ (p : P), p ∉ l
- exists_line : ∀ (p : P), ∃ (l : L), p ∉ l
Instances
A nondegenerate configuration in which every pair of lines has an intersection point.
- exists_point : ∀ (l : L), ∃ (p : P), p ∉ l
- exists_line : ∀ (p : P), ∃ (l : L), p ∉ l
- mkPoint : {l₁ l₂ : L} → l₁ ≠ l₂ → P
- mkPoint_ax : ∀ {l₁ l₂ : L} (h : l₁ ≠ l₂), Configuration.HasPoints.mkPoint h ∈ l₁ ∧ Configuration.HasPoints.mkPoint h ∈ l₂
Instances
A nondegenerate configuration in which every pair of points has a line through them.
- exists_point : ∀ (l : L), ∃ (p : P), p ∉ l
- exists_line : ∀ (p : P), ∃ (l : L), p ∉ l
- mkLine : {p₁ p₂ : P} → p₁ ≠ p₂ → L
- mkLine_ax : ∀ {p₁ p₂ : P} (h : p₁ ≠ p₂), p₁ ∈ Configuration.HasLines.mkLine h ∧ p₂ ∈ Configuration.HasLines.mkLine h
Instances
Equations
- ⋯ = ⋯
Equations
- Configuration.Dual.hasLines P L = let __src := ⋯; Configuration.HasLines.mk (@Configuration.HasPoints.mkPoint P L inst✝ inst) ⋯
Equations
- Configuration.Dual.hasPoints P L = let __src := ⋯; Configuration.HasPoints.mk (@Configuration.HasLines.mkLine P L inst✝ inst) ⋯
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.lineCount L p = Nat.card { l : L // p ∈ l }
Instances For
Number of lines through a given point.
Equations
- Configuration.pointCount P l = Nat.card { p : P // p ∈ l }
Instances For
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.HasLines.hasPoints h = let this := ⋯; let __src := inst✝¹; Configuration.HasPoints.mk (fun {l₁ l₂ : L} (hl : l₁ ≠ l₂) => Classical.choose ⋯) ⋯
Instances For
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.HasPoints.hasLines h = let this := Configuration.HasLines.hasPoints ⋯; let __src := inst✝¹; Configuration.HasLines.mk (fun (x x_1 : P) => Configuration.HasPoints.mkPoint) ⋯
Instances For
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.
- exists_point : ∀ (l : L), ∃ (p : P), p ∉ l
- exists_line : ∀ (p : P), ∃ (l : L), p ∉ l
- mkPoint : {l₁ l₂ : L} → l₁ ≠ l₂ → P
- mkPoint_ax : ∀ {l₁ l₂ : L} (h : l₁ ≠ l₂), Configuration.HasPoints.mkPoint h ∈ l₁ ∧ Configuration.HasPoints.mkPoint h ∈ l₂
- mkLine : {p₁ p₂ : P} → p₁ ≠ p₂ → L
- mkLine_ax : ∀ {p₁ p₂ : P} (h : p₁ ≠ p₂), p₁ ∈ Configuration.ProjectivePlane.mkLine h ∧ p₂ ∈ Configuration.ProjectivePlane.mkLine h
Instances
Equations
- One or more equations did not get rendered due to their size.
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.