Repository navigation
Expand file tree
/
Copy pathChallenge.lean
More file actions
74 lines (61 loc) · 3.25 KB
/
Copy pathChallenge.lean
File metadata and controls
74 lines (61 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
module
public import Mathlib.Geometry.Euclidean.Sphere.Basic
public import Mathlib.Geometry.Euclidean.Angle.Unoriented.Affine
public section
namespace EuclideanGeometry
variable {V P : Type*}
[NormedAddCommGroup V] [InnerProductSpace ℝ V] [hrank : Fact (Module.finrank ℝ V = 2)]
[MetricSpace P] [NormedAddTorsor V P]
mutual
inductive ConstructiblePoint [Fact (Module.finrank ℝ V = 2)] (initial : Set P) : P → Prop
| given (p : P) (h : p ∈ initial) : ConstructiblePoint initial p
| twoLines (l₁ l₂ : AffineSubspace ℝ P)
(hl₁ : ConstructibleLine initial l₁) (hl₂ : ConstructibleLine initial l₂)
(h : l₁ ≠ l₂) (p : P) (hpl₁ : p ∈ l₁) (hpl₂ : p ∈ l₂) :
ConstructiblePoint initial p
| lineCircle (l : AffineSubspace ℝ P) (o : Sphere P)
(hl : ConstructibleLine initial l) (ho : ConstructibleCircle initial o)
(p : P) (hpl : p ∈ l) (hpo : p ∈ o) :
ConstructiblePoint initial p
| twoCircles (o₁ o₂ : Sphere P)
(ho₁ : ConstructibleCircle initial o₁) (ho₂ : ConstructibleCircle initial o₂)
(h : o₁ ≠ o₂) (p : P) (hpo₁ : p ∈ o₁) (hpo₂ : p ∈ o₂) :
ConstructiblePoint initial p
inductive ConstructibleLine [Fact (Module.finrank ℝ V = 2)] (initial : Set P) :
AffineSubspace ℝ P → Prop
| twoPoints (p₁ p₂ : P) (hp₁ : ConstructiblePoint initial p₁) (hp₂ : ConstructiblePoint initial p₂)
(h : p₁ ≠ p₂) (l : AffineSubspace ℝ P) (hp₁l : p₁ ∈ l) (hp₂l : p₂ ∈ l)
(hrank : Module.finrank ℝ l.direction = 1) :
ConstructibleLine initial l
inductive ConstructibleCircle [Fact (Module.finrank ℝ V = 2)] (initial : Set P) :
Sphere P → Prop
| centerRadius (o : Sphere P) (r : P) (hcenter : ConstructiblePoint initial o.center)
(hradius : ConstructiblePoint initial r) (h : r ∈ o) :
ConstructibleCircle initial o
end
-- Notes for review: one should be careful of junk values of `EuclideanGeometry.angle`
-- where `EuclideanGeometry.angle = π / 2` for degenerate inputs. If the statement doesn't rule
-- out degenerate inputs, it becomes trivially true or false. To validate that this is the correct
-- formalization, we also prove `Challenge.exist_angle_bisection`, which is a direct negation of
-- `Challenge.not_exist_angle_trisection` with `3` replaced by `2`.
theorem _root_.Challenge.not_exist_angle_trisection :
¬ ∀ p₁ p₂ p₃ : P, p₁ ≠ p₂ → p₂ ≠ p₃ → p₁ ≠ p₃ →
∃ q₁ q₂ q₃ : P,
ConstructiblePoint {p₁, p₂, p₃} q₁ ∧
ConstructiblePoint {p₁, p₂, p₃} q₂ ∧
ConstructiblePoint {p₁, p₂, p₃} q₃ ∧
3 * ∠ q₁ q₂ q₃ = ∠ p₁ p₂ p₃ := by
sorry
theorem _root_.Challenge.exist_angle_bisection :
∀ p₁ p₂ p₃ : P, p₁ ≠ p₂ → p₂ ≠ p₃ → p₁ ≠ p₃ →
∃ q₁ q₂ q₃ : P,
ConstructiblePoint {p₁, p₂, p₃} q₁ ∧
ConstructiblePoint {p₁, p₂, p₃} q₂ ∧
ConstructiblePoint {p₁, p₂, p₃} q₃ ∧
2 * ∠ q₁ q₂ q₃ = ∠ p₁ p₂ p₃ := by
sorry
theorem _root_.Challenge.not_exist_doubling_cube {a b : P} (h : a ≠ b) :
¬ ∃ c d : P, ConstructiblePoint {a, b} c ∧ ConstructiblePoint {a, b} d ∧
dist c d ^ 3 = 2 * dist a b ^ 3 := by
sorry
end EuclideanGeometry