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|
.
A type synonym.
Equations
- Configuration.Dual P = P
Equations
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.
- mkPoint {l₁ l₂ : L} : l₁ ≠ l₂ → P
Intersection of two lines
Instances
A nondegenerate configuration in which every pair of points has a line through them.
- mkLine {p₁ p₂ : P} : p₁ ≠ p₂ → L
Line through two points
Instances
Equations
- Configuration.Dual.hasLines P L = { toNondegenerate := ⋯, mkLine := @Configuration.HasPoints.mkPoint P L inst✝¹ inst✝, mkLine_ax := ⋯ }
Equations
- Configuration.Dual.hasPoints P L = { toNondegenerate := ⋯, mkPoint := @Configuration.HasLines.mkLine P L inst✝¹ inst✝, mkPoint_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.
Number of lines through a given point.
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 = { toNondegenerate := ⋯, mkPoint := fun {l₁ l₂ : L} (hl : l₁ ≠ l₂) => Classical.choose ⋯, mkPoint_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.HasPoints.hasLines h = { toNondegenerate := ⋯, mkLine := fun (x x_1 : P) => Configuration.HasPoints.mkPoint, mkLine_ax := ⋯ }
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
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.
Equations
Equations
- One or more equations did not get rendered due to their size.