Compfiles/Imo2025P1.lean
Explanation legend Lean4 Domain Explanation Language (L4DEL)
L4DEL explanations are a separate layer. They do not change the Lean source. Intuition is explanatory prose; numbered items are a reading path; sources link the wording back to evidence.
- L4DEL
- Lean4 Domain Explanation Language
Credit: The upstream authors and contributors retain credit for the project and mathematics. lean4-explainer only renders their pinned source and adds the separately disclosed explanation layer.
Project sources: Pinned compfiles documentation, Pinned compfiles corpus index
100 declarations, 0 contain sorry, 0 declared as axioms
International Mathematical Olympiad 2025, Problem 1
A line in the plane is called sunny if it is not parallel to any of the x-axis, the y-axis, and the line x + y = 0.
Let n ⩾ 3 be a given integer. Determine all nonnegative integers k such that there exist n distinct lines in the plane satisfying both of the following:
• for all positive integers a and b with a + b ⩽ n + 1, the point (a, b) is on at least one of the lines; and
• exactly k of the n lines are sunny.
Imports (2)
Imported by 1 file
- def
Imo2025P1.xAxisThex-axis, as an affine subspace line 42 sourceSource documentation
The
x-axis, as an affine subspace.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
AffineSubspace,Real,EuclideanSpace,Fin,OfNat.ofNat,Nat,ENNRealProof uses:
AffineSubspace.mk,Set.ofPred,Eq,WithLp.ofLp,Membership.mem,Set58 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
def xAxis : AffineSubspace ℝ (EuclideanSpace ℝ (Fin 2)) where …
- def
Imo2025P1.yAxisThey-axis, as an affine subspace line 47 sourceSource documentation
The
y-axis, as an affine subspace.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
AffineSubspace,Real,EuclideanSpace,Fin,OfNat.ofNat,Nat,ENNRealProof uses:
AffineSubspace.mk,Set.ofPred,Eq,WithLp.ofLp,Membership.mem,Set58 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
def yAxis : AffineSubspace ℝ (EuclideanSpace ℝ (Fin 2)) where …
- def
Imo2025P1.linexy0The linex+y=0, as an affine subspace line 52 sourceSource comment
The line `x+y=0`, as an affine subspace.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
AffineSubspace,Real,EuclideanSpace,Fin,OfNat.ofNat,Nat,ENNRealProof uses:
AffineSubspace.mk,Set.ofPred,Eq,HAdd.hAdd,WithLp.ofLp,Membership.mem,Set60 instances, coercions and auxiliary constants left out.
Tactic trace: 5 steps
Open to load the checked before-and-after goal states.
def linexy0 : AffineSubspace ℝ (EuclideanSpace ℝ (Fin 2)) where …
- def
Imo2025P1.SunnyThe condition on lines in the problem line 63 sourceSource documentation
The condition on lines in the problem.
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
AffineSubspace,Real,EuclideanSpace,Fin,OfNat.ofNat,Nat,ENNRealProof uses:
And,Not,AffineSubspace.Parallel, Imo2025P1.xAxis, Imo2025P1.yAxis, Imo2025P1.linexy052 instances, coercions and auxiliary constants left out.
def Sunny (s : AffineSubspace ℝ (EuclideanSpace ℝ (Fin 2))) : Prop := …
- def
Imo2025P1.sunnyPredThe decidable predicateSunnyline 68 sourceSource documentation
The decidable predicate
Sunny.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
DecidablePred,AffineSubspace,Real,EuclideanSpace,Fin,OfNat.ofNat,Nat,ENNReal, Imo2025P1.SunnyProof uses:
Classical.decPred52 instances, coercions and auxiliary constants left out.
noncomputable def sunnyPred : DecidablePred Sunny := Classical.decPred _ …
Mentions: Imo2025P1.Sunny
- abbrev
Imo2025P1.PlaneThe 2-dimensional plane line 89 sourceSource documentation
The 2-dimensional plane
standard axioms: Classical.choice, Quot.sound, propext what this means
Proof uses:
EuclideanSpace,Real,Fin,OfNat.ofNat,Nat1 instances, coercions and auxiliary constants left out.
abbrev Plane := EuclideanSpace ℝ (Fin 2)
- abbrev
Imo2025P1.AffSubOfPlaneAffine subspaces of the plane (i.e. ∅, point, line, plane) line 92 sourceSource documentation
Affine subspaces of the plane (i.e. ∅, point, line, plane)
standard axioms: Classical.choice, Quot.sound, propext what this means
Proof uses:
AffineSubspace,Real, Imo2025P1.Plane,OfNat.ofNat,ENNReal,Fin,Nat26 instances, coercions and auxiliary constants left out.
abbrev AffSubOfPlane := AffineSubspace ℝ Plane
Mentions: Imo2025P1.Plane
- lemma
Imo2025P1.vec_eqTwo vectors are equal iff their x and y coordinates are equal line 95 sourceSource documentation
Two vectors are equal iff their x and y coordinates are equal.
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Iff,Eq,WithLp,OfNat.ofNat,ENNReal,Nat,Fin,WithLp.toLp,Matrix.vecCons,Matrix.vecEmpty,AndProof uses:
of_eq_true,Eq.trans,True,congrFun',congrArg,WithLp.toLp.injEq,Nat.succ,eq_self,and_true,iff_self15 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma vec_eq (x1 x2 y1 y2 : ℝ) : !₂[x1, y1] = !₂[x2, y2] ↔ (x1 = x2 ∧ y1 = y2) := by simp
- lemma
Imo2025P1.vec_repr_xGet the x coordinate of a vector line 98 sourceSource documentation
Get the x coordinate of a vector.
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Eq,Fin,OfNat.ofNat,Nat,WithLp.ofLp,ENNReal,WithLp.toLp,Matrix.vecCons,Matrix.vecEmptyProof uses:
of_eq_true,eq_self8 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma vec_repr_x (x y : ℝ) : !₂[x, y] 0 = x := by simp
- lemma
Imo2025P1.vec_repr_yGet the y coordinate of a vector line 100 sourceSource documentation
Get the y coordinate of a vector.
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Eq,Fin,OfNat.ofNat,Nat,WithLp.ofLp,ENNReal,WithLp.toLp,Matrix.vecCons,Matrix.vecEmptyProof uses:
of_eq_true,Eq.trans,True,congrFun',congrArg,Matrix.cons_val_fin_one,Nat.succ,eq_self16 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma vec_repr_y (x y : ℝ) : !₂[x, y] 1 = y := by simp
- lemma
Imo2025P1.vec_reprRepresent a vector as a pair of real numbers line 103 sourceSource documentation
Represent a vector as a pair of real numbers
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.Plane,
Eq,WithLp.toLp,OfNat.ofNat,ENNReal,Nat,Fin,Real,Matrix.vecCons,WithLp.ofLp,Matrix.vecEmptyProof uses:
PiLp.ext,List,List.Mem,List.finRange,HEq,Membership.mem,Finset,Fintype.elems,Fintype.complete,List.cons,List.Mem.head,Fin.mk,Nat.le_of_lt,Nat.le_refl,List.nil,of_eq_true,HAdd.hAdd,eq_self,eq_of_heq,List.Mem.tailand 10 more27 instances, coercions and auxiliary constants left out.
Tactic trace: 3 steps
Open to load the checked before-and-after goal states.
lemma vec_repr (x : Plane) : x = !₂[x 0, x 1] := by …
Mentions: Imo2025P1.Plane
- lemma
Imo2025P1.vec_mulMultiply a vector by a scalar line 107 sourceSource documentation
Multiply a vector by a scalar.
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Eq,WithLp,OfNat.ofNat,ENNReal,Nat,Fin,HSMul.hSMul,WithLp.toLp,Matrix.vecCons,Matrix.vecEmpty,HMul.hMulProof uses:
PiLp.ext,List,List.Mem,List.finRange,HEq,Membership.mem,Finset,Fintype.elems,Fintype.complete,WithLp.ofLp,List.cons,List.Mem.head,Fin.mk,Nat.le_of_lt,Nat.le_refl,List.nil,of_eq_true,eq_self,eq_of_heq,List.Mem.tailand 12 more56 instances, coercions and auxiliary constants left out.
Tactic trace: 3 steps
Open to load the checked before-and-after goal states.
lemma vec_mul (k x y : ℝ) : k • !₂[x, y] = !₂[k * x, k * y] := by …
- lemma
Imo2025P1.vec_subCompute the difference of two vectors line 111 sourceSource documentation
Compute the difference of two vectors
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Eq,WithLp,OfNat.ofNat,ENNReal,Nat,Fin,HSub.hSub,WithLp.toLp,Matrix.vecCons,Matrix.vecEmptyProof uses:
PiLp.ext,List,List.Mem,List.finRange,HEq,Membership.mem,Finset,Fintype.elems,Fintype.complete,WithLp.ofLp,List.cons,List.Mem.head,Fin.mk,Nat.le_of_lt,Nat.le_refl,List.nil,of_eq_true,eq_self,eq_of_heq,List.Mem.tailand 12 more46 instances, coercions and auxiliary constants left out.
Tactic trace: 3 steps
Open to load the checked before-and-after goal states.
lemma vec_sub (x1 y1 x2 y2 : ℝ) : !₂[x1, y1] - !₂[x2, y2] = !₂[x1 - x2, y1 - y2] := by …
- def
Imo2025P1.lineThe "line"ax + by + c = 0line 116 sourceSource documentation
The "line"
ax + by + c = 0. ("line" means except for the degenerate casea = 0 ∧ b = 0) Note: We don't enforcea ≠ 0 ∨ b ≠ 0.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real, Imo2025P1.AffSubOfPlaneProof uses:
AffineSubspace.mk, Imo2025P1.Plane,OfNat.ofNat,ENNReal,Fin,Nat,Set.ofPred,Eq,HAdd.hAdd,HMul.hMul,WithLp.ofLp,Membership.mem,Set36 instances, coercions and auxiliary constants left out.
Tactic trace: 6 steps
Open to load the checked before-and-after goal states.
noncomputable def line (a b c : ℝ) : AffSubOfPlane where …
Mentions: Imo2025P1.AffSubOfPlane
- lemma
Imo2025P1.point_on_lineCheck if a point(x, y)belongs to the linea * x + b * y + c = 0line 129 sourceSource documentation
Check if a point
(x, y)belongs to the linea * x + b * y + c = 0.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Iff,Membership.mem,WithLp,OfNat.ofNat,ENNReal,Nat,Fin, Imo2025P1.AffSubOfPlane, Imo2025P1.Plane, Imo2025P1.line,WithLp.toLp,Matrix.vecCons,Matrix.vecEmpty,Eq,HAdd.hAdd,HMul.hMulProof uses:
of_eq_true,Eq.trans,True,congrFun',congrArg,AffineSubspace.mk,Set.ofPred,WithLp.ofLp,Set,Matrix.cons_val_fin_one,Nat.succ,iff_self78 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma point_on_line (x y a b c : ℝ) : !₂[x, y] ∈ line a b c ↔ a * x + b * y + c = 0 := by …
Mentions: Imo2025P1.line
- lemma
Imo2025P1.line_nonemptyThe linea * x + b * y + c = 0is nonempty whenaandbare not both zero line 133 sourceSource documentation
The line
a * x + b * y + c = 0is nonempty whenaandbare not both zerostandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Or,Ne,OfNat.ofNat,Set.Nonempty, Imo2025P1.Plane, Imo2025P1.AffSubOfPlane,ENNReal,Fin,Nat, Imo2025P1.lineProof uses:
Eq.mpr,Exists,Membership.mem,id,Eq,congrArg,Set,funext,Exists.intro,WithLp.toLp,Matrix.vecCons,HDiv.hDiv,Neg.neg,Matrix.vecEmpty,HAdd.hAdd,HMul.hMul,WithLp,propext, Imo2025P1.point_on_line76 instances, coercions and auxiliary constants left out.
Tactic trace: 10 steps
Open to load the checked before-and-after goal states.
lemma line_nonempty (a b c : ℝ) (h : a ≠ 0 ∨ b ≠ 0) : (SetLike.coe (line a b c)).Nonempty := by …Mentions: h, Imo2025P1.line
- lemma
Imo2025P1.line_direction(-b, a)is the direction of the linea * x + b * y + c = 0whenaandbare not both zero line 146 sourceSource documentation
(-b, a)is the direction of the linea * x + b * y + c = 0whenaandbare not both zerostandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Or,Ne,OfNat.ofNat, Imo2025P1.Plane,Iff,Membership.mem,Submodule,ENNReal,Fin,Nat,AffineSubspace.direction, Imo2025P1.line,Exists,Eq,WithLp,HSMul.hSMul,WithLp.toLp,Matrix.vecCons,Neg.negand 1 moreProof uses:
Set.Nonempty, Imo2025P1.AffSubOfPlane, Imo2025P1.line_nonempty,Iff.intro,And,AffineSubspace,VSub.vsub,Eq.mp,congrArg,propext,AffineSubspace.mem_direction_iff_eq_vsub,Exists.intro,HDiv.hDiv,HSub.hSub,WithLp.ofLp,Eq.mpr,id, Imo2025P1.vec_repr,HMul.hMul, Imo2025P1.vec_mul and 63 more131 instances, coercions and auxiliary constants left out.
Tactic trace: 43 steps
Open to load the checked before-and-after goal states.
lemma line_direction (a b c : ℝ) (h : a ≠ 0 ∨ b ≠ 0) (w : Plane) : w ∈ AffineSubspace.direction (line a b c) ↔ ∃ (k : ℝ), k • !₂[-b, a] = w := by …Mentions: h, Imo2025P1.Plane, Imo2025P1.line
- lemma
Imo2025P1.line_rankThe rank of the linea * x + b * y + c = 0is1whenaandbare not both zero line 181 sourceSource documentation
The rank of the line
a * x + b * y + c = 0is1whenaandbare not both zerostandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Or,Ne,OfNat.ofNat,Eq,Nat,Module.finrank,Subtype, Imo2025P1.Plane,Membership.mem,Submodule,ENNReal,Fin,AffineSubspace.direction, Imo2025P1.lineProof uses:
WithLp,WithLp.toLp,Matrix.vecCons,Neg.neg,Matrix.vecEmpty,Eq.mpr,Exists,HSMul.hSMul,id,congrArg,propext, Imo2025P1.line_direction,Exists.intro,MulAction.one_smul,And,finrank_eq_one_iff',Subtype.mk,And.intro,Not,Eq.transand 11 more140 instances, coercions and auxiliary constants left out.
Tactic trace: 13 steps
Open to load the checked before-and-after goal states.
lemma line_rank (a b c : ℝ) (h : a ≠ 0 ∨ b ≠ 0) : finrank ℝ (line a b c).direction = 1 := by …
Mentions: h, Imo2025P1.line
- structure
Imo2025P1.LineCoeffsThe coeffecients of a line a * x + b * y + c = 0 line 193 sourceSource documentation
The coeffecients of a line a * x + b * y + c = 0
standard axioms: Classical.choice, Quot.sound, propext what this means
structure LineCoeffs where …
- def
Imo2025P1.line'Build a line from aLineCoeffsline 199 sourceSource documentation
Build a line from a
LineCoeffsstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.LineCoeffs, Imo2025P1.AffSubOfPlane
Proof uses: Imo2025P1.line,
Imo2025P1.LineCoeffs.a,Imo2025P1.LineCoeffs.b,Imo2025P1.LineCoeffs.cnoncomputable def line' (coeff : LineCoeffs) := line coeff.a coeff.b coeff.c
Mentions: Imo2025P1.LineCoeffs, Imo2025P1.line
- def
Imo2025P1.edgeCoeffsline 201 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,Fin,OfNat.ofNat, Imo2025P1.LineCoeffsProof uses:
Imo2025P1.edgeCoeffs.match_1,Unit,Imo2025P1.LineCoeffs.mk,Real,Neg.neg,HAdd.hAdd11 instances, coercions and auxiliary constants left out.
- def
Imo2025P1.edgeLineThe three lines on the edges of the triangular integer grid, each side having n points:x - 1 = 0;y - 1 = 0;x + y - (n + 1) = 0line 209 sourceSource documentation
The three lines on the edges of the triangular integer grid, each side having n points:
x - 1 = 0;y - 1 = 0;x + y - (n + 1) = 0. These lines are namededgeLine n 0,edgeLine n 1,edgeLine n 2, resp.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,Fin,OfNat.ofNat, Imo2025P1.AffSubOfPlaneProof uses: Imo2025P1.line', Imo2025P1.edgeCoeffs
2 instances, coercions and auxiliary constants left out.
noncomputable def edgeLine (n : ℕ) (d : Fin 3) := line' (edgeCoeffs n d)
Mentions: Imo2025P1.line', Imo2025P1.edgeCoeffs
- lemma
Imo2025P1.y_ax_lineThe y axis is the linex = 0line 212 sourceSource documentation
The y axis is the line
x = 0.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Eq, Imo2025P1.AffSubOfPlane, Imo2025P1.line,OfNat.ofNat,Real, Imo2025P1.yAxisProof uses:
of_eq_true,AffineSubspace.mk,EuclideanSpace,Fin,Nat,ENNReal,Set.ofPred,WithLp.ofLp,Membership.mem,Set,Eq.trans, Imo2025P1.Plane,HAdd.hAdd,HMul.hMul,HVAdd.hVAdd,HSMul.hSMul,VSub.vsub,congrArg,funext,congrFun'and 8 more69 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma y_ax_line : line 1 0 0 = yAxis := by …
Mentions: Imo2025P1.line, Imo2025P1.yAxis
- lemma
Imo2025P1.x_ax_lineThe x axis is the liney = 0line 216 sourceSource documentation
The x axis is the line
y = 0standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Eq, Imo2025P1.AffSubOfPlane, Imo2025P1.line,OfNat.ofNat,Real, Imo2025P1.xAxisProof uses:
of_eq_true,AffineSubspace.mk,EuclideanSpace,Fin,Nat,ENNReal,Set.ofPred,WithLp.ofLp,Membership.mem,Set,Eq.trans, Imo2025P1.Plane,HAdd.hAdd,HMul.hMul,HVAdd.hVAdd,HSMul.hSMul,VSub.vsub,congrArg,funext,congrFun'and 9 more69 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma x_ax_line : line 0 1 0 = xAxis := by …
Mentions: Imo2025P1.line, Imo2025P1.xAxis
- lemma
Imo2025P1.xy0_lineThe linex + y = 0line 220 sourceSource documentation
The line
x + y = 0standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Eq, Imo2025P1.AffSubOfPlane, Imo2025P1.line,OfNat.ofNat,Real, Imo2025P1.linexy0Proof uses:
of_eq_true,AffineSubspace.mk,EuclideanSpace,Fin,Nat,ENNReal,Set.ofPred,HAdd.hAdd,WithLp.ofLp,Membership.mem,Set,Eq.trans, Imo2025P1.Plane,HMul.hMul,HVAdd.hVAdd,HSMul.hSMul,VSub.vsub,congrArg,funext,congrFun'and 7 more67 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma xy0_line : line 1 1 0 = linexy0 := by …
Mentions: Imo2025P1.line, Imo2025P1.linexy0
- lemma
Imo2025P1.line_para'Preparation lemma for checking if two lines are parallel line 224 sourceSource documentation
Preparation lemma for checking if two lines are parallel
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Or,Ne,OfNat.ofNat,Eq,HMul.hMul, Imo2025P1.Plane,Exists,WithLp,ENNReal,Nat,Fin,HSMul.hSMul,WithLp.toLp,Matrix.vecCons,Neg.neg,Matrix.vecEmptyProof uses:
WithLp.ofLp,And,Eq.mp,congrArg,propext, Imo2025P1.vec_eq, Imo2025P1.vec_repr, Imo2025P1.vec_mul,Exists.intro,HDiv.hDiv,Eq.mpr,id42 instances, coercions and auxiliary constants left out.
Tactic trace: 12 steps
Open to load the checked before-and-after goal states.
lemma line_para' (a b a' b' : ℝ) (h' : a' ≠ 0 ∨ b' ≠ 0) (hab : a * b' = a' * b) (w : Plane) : (∃ (k : ℝ), k • !₂[-b, a] = w) → (∃ (k : ℝ), k • !₂[-b', a'] = w) := by …Mentions: Imo2025P1.Plane
- lemma
Imo2025P1.line_paraTwo non-degenerate linesa * x + b * y + c = 0anda' * x + b' * y + c = 0are parallel iffa * b' = a' * bline 240 sourceSource documentation
Two non-degenerate lines
a * x + b * y + c = 0anda' * x + b' * y + c = 0are parallel iffa * b' = a' * b.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Or,Ne,OfNat.ofNat,Iff,AffineSubspace.Parallel, Imo2025P1.Plane,ENNReal,Fin,Nat, Imo2025P1.line,Eq,HMul.hMulProof uses:
Eq.mpr,And,Submodule,AffineSubspace.direction,AffineSubspace,Bot.bot,id,congrArg,propext,AffineSubspace.parallel_iff_direction_eq_and_eq_bot_iff_eq_bot,Iff.intro,WithLp,WithLp.toLp,Matrix.vecCons,Neg.neg,Matrix.vecEmpty,Membership.mem,Exists,HSMul.hSMul, Imo2025P1.line_direction and 40 more108 instances, coercions and auxiliary constants left out.
Tactic trace: 39 steps
Open to load the checked before-and-after goal states.
lemma line_para (a b c a' b' c' : ℝ) (h : a ≠ 0 ∨ b ≠ 0) (h' : a' ≠ 0 ∨ b' ≠ 0) : line a b c ∥ line a' b' c' ↔ a * b' = a' * b := by …Mentions: h, Imo2025P1.line
- lemma
Imo2025P1.line_para_two_pointsIf the linea * x + b * y + cis parallel toL, and both lines go through(x1, y1),(x2, y2), thena * (x2 - x1) + b * (y2 - y1) = 0line 277 sourceSource documentation
If the line
a * x + b * y + cis parallel toL, and both lines go through(x1, y1),(x2, y2), thena * (x2 - x1) + b * (y2 - y1) = 0.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Or,Ne,OfNat.ofNat, Imo2025P1.AffSubOfPlane,AffineSubspace.Parallel, Imo2025P1.Plane,ENNReal,Fin,Nat, Imo2025P1.line,Membership.mem,WithLp,WithLp.toLp,Matrix.vecCons,Matrix.vecEmpty,Eq,HAdd.hAdd,HMul.hMul,HSub.hSubProof uses:
dite,And,Eq.mpr,id,congrArg,of_eq_true,Eq.trans,True,congrFun',sub_self,eq_self,implies_congr,Eq.refl,congr,MulZeroClass.mul_zero,add_zero,implies_true,Not,Submodule,AffineSubspace.directionand 62 more132 instances, coercions and auxiliary constants left out.
Tactic trace: 27 steps
Open to load the checked before-and-after goal states.
lemma line_para_two_points (a b c : ℝ) (h : a ≠ 0 ∨ b ≠ 0) (L : AffSubOfPlane) (x1 y1 x2 y2 : ℝ) : line a b c ∥ L → !₂[x1, y1] ∈ L → !₂[x2, y2] ∈ L → a * (x2 - x1) + b * (y2 - y1) = 0 := by …Mentions: h, Imo2025P1.AffSubOfPlane, Imo2025P1.line
- lemma
Imo2025P1.line_eq_checkIf the linesa * x + b * y + c = 0anda' * x + b' * y + c = 0are equal, thena * b' = a' * b ∧ a * c' = a' * c ∧ b * c' = b' * cline 299 sourceSource documentation
If the lines
a * x + b * y + c = 0anda' * x + b' * y + c = 0are equal, thena * b' = a' * b ∧ a * c' = a' * c ∧ b * c' = b' * c.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Or,Ne,OfNat.ofNat,Eq, Imo2025P1.AffSubOfPlane, Imo2025P1.line,And,HMul.hMulProof uses:
Eq.mpr,AffineSubspace.Parallel, Imo2025P1.Plane,ENNReal,Fin,Nat,id,congrArg,Eq.symm,propext, Imo2025P1.line_para,AffineSubspace.Parallel.refl,And.intro,dite,of_eq_true,Eq.trans,True,congr,congrFun',MulZeroClass.zero_muland 141 more140 instances, coercions and auxiliary constants left out.
Tactic trace: 38 steps
Open to load the checked before-and-after goal states.
lemma line_eq_check (a b c a' b' c' : ℝ) (h : a ≠ 0 ∨ b ≠ 0) (h' : a' ≠ 0 ∨ b' ≠ 0) (heq : line a b c = line a' b' c') : a * b' = a' * b ∧ a * c' = a' * c ∧ b * c' = b' * c := by …Mentions: h, Imo2025P1.line
- lemma
Imo2025P1.line_containsPreparation lemma forget_line_eqline 325 sourceSource documentation
Preparation lemma for
get_line_eq.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.AffSubOfPlane,
Eq,Nat,Module.finrank,Real,Subtype, Imo2025P1.Plane,Membership.mem,Submodule,OfNat.ofNat,ENNReal,Fin,AffineSubspace.direction,Ne,LE.leProof uses:
Eq.mpr,AffineSubspace,id,congrArg,propext,AffineSubspace.le_def',And,Exists,HSMul.hSMul,Eq.mp,finrank_eq_one_iff',Subtype.mk,VSub.vsub,AffineSubspace.vsub_mem_direction,HSub.hSub,Eq.symm,sub_eq_zero,congrFun',Eq.trans,zero_smuland 54 more182 instances, coercions and auxiliary constants left out.
Tactic trace: 25 steps
Open to load the checked before-and-after goal states.
lemma line_contains (L L' : AffSubOfPlane) (hL : finrank ℝ L.direction = 1) (a b : Plane) : (a ≠ b → a ∈ L → b ∈ L → a ∈ L' → b ∈ L' → L ≤ L') := by …Mentions: Imo2025P1.AffSubOfPlane, Imo2025P1.Plane
- lemma
Imo2025P1.get_line_eqIf both of the two non-degenerate linesLandL'go through two different pointsaandb, thenL = L'line 346 sourceSource documentation
If both of the two non-degenerate lines
LandL'go through two different pointsaandb, thenL = L'.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.AffSubOfPlane,
Eq,Nat,Module.finrank,Real,Subtype, Imo2025P1.Plane,Membership.mem,Submodule,OfNat.ofNat,ENNReal,Fin,AffineSubspace.direction,NeProof uses:
LE.le.antisymm, Imo2025P1.line_contains67 instances, coercions and auxiliary constants left out.
lemma get_line_eq (L L' : AffSubOfPlane) (hL : finrank ℝ L.direction = 1) (hL' : finrank ℝ L'.direction = 1) (a b : Plane) (hab : a ≠ b) (ha : a ∈ L) (hb : b ∈ L) (ha' : a ∈ L') (hb' : b ∈ L') : L = L' := …Mentions: Imo2025P1.AffSubOfPlane, Imo2025P1.Plane
- def
Imo2025P1.eqAffSubOfPlaneThe decidable equality predicateL = L'for(L L' : AffSubOfPlane)line 356 sourceSource documentation
The decidable equality predicate
L = L'for(L L' : AffSubOfPlane).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
DecidableEq, Imo2025P1.AffSubOfPlaneProof uses:
Classical.decEqnoncomputable def eqAffSubOfPlane : DecidableEq AffSubOfPlane := Classical.decEq _
Mentions: Imo2025P1.AffSubOfPlane
- lemma
Imo2025P1.sunny_slopeCheck if the linea * x + b * y + c = 0is sunny or not line 359 sourceSource documentation
Check if the line
a * x + b * y + c = 0is sunny or not.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Real,Or,Ne,OfNat.ofNat,Iff, Imo2025P1.Sunny, Imo2025P1.line,AndProof uses:
id,Eq.mpr,Not,AffineSubspace.Parallel,EuclideanSpace,Fin,Nat,ENNReal, Imo2025P1.xAxis, Imo2025P1.yAxis, Imo2025P1.linexy0,Eq,congrArg, Imo2025P1.AffSubOfPlane,Eq.symm, Imo2025P1.x_ax_line, Imo2025P1.y_ax_line, Imo2025P1.xy0_line,HMul.hMul, Imo2025P1.Plane and 13 more44 instances, coercions and auxiliary constants left out.
Tactic trace: 10 steps
Open to load the checked before-and-after goal states.
lemma sunny_slope (a b c : ℝ) (h : a ≠ 0 ∨ b ≠ 0) : Sunny (line a b c) ↔ a ≠ 0 ∧ b ≠ 0 ∧ a ≠ b := by …Mentions: h, Imo2025P1.Sunny, Imo2025P1.line
- def
Imo2025P1.gridThe integer grid consisting of (a, b), where a, b are positive integers and a + b ≤ n + 1 line 368 sourceSource documentation
The integer grid consisting of (a, b), where a, b are positive integers and a + b ≤ n + 1.
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,Set, Imo2025P1.PlaneProof uses:
Set.ofPred,Exists,And,Eq,Fin,OfNat.ofNat,Real,WithLp.ofLp,ENNReal,LT.lt,LE.le,HAdd.hAdd14 instances, coercions and auxiliary constants left out.
def grid (n : ℕ) : Set Plane := …
Mentions: Imo2025P1.Plane
- lemma
Imo2025P1.point_in_gridCheck if (a, b) is ingrid nfor natural numbers a, b line 372 sourceSource documentation
Check if (a, b) is in
grid nfor natural numbers a, b.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,Iff,Membership.mem,WithLp,OfNat.ofNat,ENNReal,Fin,Real,Set, Imo2025P1.Plane, Imo2025P1.grid,WithLp.toLp,Matrix.vecCons,Matrix.vecEmpty,And,LT.lt,LE.le,HAdd.hAddProof uses:
of_eq_true,Eq.trans,True,congrFun',congrArg,Set.ofPred,Exists,Eq,WithLp.ofLp,funext,congr,Matrix.cons_val_fin_one,Nat.succ,iff_self43 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma point_in_grid (n : ℕ) (a b : ℕ) : !₂[(a : ℝ), (b : ℝ)] ∈ grid n ↔ 0 < a ∧ 0 < b ∧ a + b ≤ n + 1 := by simp [grid]Mentions: Imo2025P1.grid
- structure
Imo2025P1.coverConfigThe configuration of a finise set of lines going through a set of points in the plane line 376 sourceSource documentation
The configuration of a finise set of lines going through a set of points in the plane.
standard axioms: Classical.choice, Quot.sound, propext what this means
structure coverConfig where …
- lemma
Imo2025P1.coverConfig.nS_leq_nline 394 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverConfig,
LE.le,Nat,Imo2025P1.coverConfig.nS,Imo2025P1.coverConfig.nProof uses:
Eq.mpr,Finset.card,AffineSubspace,Real,EuclideanSpace,Fin,OfNat.ofNat,ENNReal,Finset.filter, Imo2025P1.Sunny, Imo2025P1.sunnyPred,Imo2025P1.coverConfig.lines,id,Eq,congrArg,Eq.symm,Imo2025P1.coverConfig.sunny_count, Imo2025P1.AffSubOfPlane,Imo2025P1.coverConfig.lines_count,of_eq_true29 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
- def
Imo2025P1.shiftSetshiftSet v gis the result of shifting every point ingby the vectorvline 399 sourceSource documentation
shiftSet v gis the result of shifting every point ingby the vectorv.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.Plane,
SetProof uses:
Set.image,AffineEquiv,Real,OfNat.ofNat,ENNReal,Fin,Nat,AffineEquiv.constVAdd29 instances, coercions and auxiliary constants left out.
def shiftSet (v : Plane) (g : Set Plane) : Set Plane := …
Mentions: Imo2025P1.Plane
- def
Imo2025P1.gridShiftline 402 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Fin,OfNat.ofNat,Nat, Imo2025P1.PlaneProof uses:
Imo2025P1.edgeCoeffs.match_1,Unit,WithLp.toLp,ENNReal,Real,Matrix.vecCons,Neg.neg,Matrix.vecEmpty12 instances, coercions and auxiliary constants left out.
- lemma
Imo2025P1.grid_shiftAfter removing an edge fromgrid (n + 1)and appropriate shifting, the resulting set isgrid nline 412 sourceSource documentation
After removing an edge from
grid (n + 1)and appropriate shifting, the resulting set isgrid n. RemoveedgeLine (n + 1) 0(i.e. left edge) -> shift by(-1, 0). RemoveedgeLine (n + 1) 1(i.e. bottom edge) -> shift by(0, -1). RemoveedgeLine (n + 1) 2(i.e. diagonal edge) -> shift by(0, 0)(i.e. no shift).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,Fin,OfNat.ofNat,Eq,Set, Imo2025P1.Plane, Imo2025P1.shiftSet, Imo2025P1.gridShift,SDiff.sdiff, Imo2025P1.grid,HAdd.hAdd, Imo2025P1.AffSubOfPlane,Real,ENNReal, Imo2025P1.edgeLineProof uses:
Set.ext,Eq.mpr,Iff,Membership.mem,And,Exists,Neg.neg,WithLp.ofLp,LT.lt,LE.le,Not,id,congr,congrArg,Eq.trans,Set.ofPred,Set.preimage,congrFun',Set.image,AffineEquivand 77 more209 instances, coercions and auxiliary constants left out.
Tactic trace: 125 steps
Open to load the checked before-and-after goal states.
lemma grid_shift (n : ℕ) (d : Fin 3) : shiftSet (gridShift d) (grid (n + 1) \ (edgeLine (n + 1) d)) = grid n := by …Mentions: Imo2025P1.shiftSet, Imo2025P1.gridShift, Imo2025P1.grid, Imo2025P1.edgeLine
- lemma
Imo2025P1.grid_remove_diagAfter removing the diagonal edge fromgrid (n + 1), the resulting set isgrid nline 500 sourceSource documentation
After removing the diagonal edge from
grid (n + 1), the resulting set isgrid n.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,Eq,Set, Imo2025P1.Plane,SDiff.sdiff, Imo2025P1.grid,HAdd.hAdd,OfNat.ofNat, Imo2025P1.AffSubOfPlane,Real,ENNReal,Fin, Imo2025P1.edgeLineProof uses:
Eq.mpr, Imo2025P1.shiftSet, Imo2025P1.gridShift,id,congrArg,Eq.symm, Imo2025P1.grid_shift,WithLp.toLp,Matrix.vecCons,Matrix.vecEmpty,Imo2025P1.gridShift.eq_3,rfl,Set.preimage,Neg.neg,Eq.trans,Set.image,AffineEquiv,AffineEquiv.constVAdd,Set.image_congr,Membership.memand 14 more103 instances, coercions and auxiliary constants left out.
Tactic trace: 7 steps
Open to load the checked before-and-after goal states.
lemma grid_remove_diag (n : ℕ) : grid (n + 1) \ (edgeLine (n + 1) 2) = grid n := by …
Mentions: Imo2025P1.grid, Imo2025P1.edgeLine
- def
Imo2025P1.shiftLineMapshiftLineMap v Lshifts the line L by the vectorvline 508 sourceSource documentation
shiftLineMap v Lshifts the line L by the vectorv.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.Plane, Imo2025P1.AffSubOfPlane
Proof uses:
AffineSubspace.map,Real,OfNat.ofNat,ENNReal,Fin,Nat,AffineEquiv.constVAdd27 instances, coercions and auxiliary constants left out.
noncomputable def shiftLineMap (v : Plane) (L : AffSubOfPlane) : AffSubOfPlane := …
Mentions: Imo2025P1.Plane, Imo2025P1.AffSubOfPlane
- lemma
Imo2025P1.affine_transThe preparation lemma on composing two line-shifts line 512 sourceSource documentation
The preparation lemma on composing two line-shifts.
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
AffineEquiv,Real, Imo2025P1.Plane,OfNat.ofNat,ENNReal,Fin,Nat,Eq,AffineMap,AffineEquiv.trans,AffineMap.compProof uses:
of_eq_true,eq_self54 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma affine_trans (e : Plane ≃ᵃ[ℝ] Plane) (e' : Plane ≃ᵃ[ℝ] Plane) : (AffineEquiv.trans e e').toAffineMap = e'.toAffineMap.comp e.toAffineMap := by simpMentions: Imo2025P1.Plane
- def
Imo2025P1.shiftLineshiftLineMap vis the injective mapAffSubOfPlane ↪ AffSubOfPlanethat shifts by the vectorvline 517 sourceSource documentation
shiftLineMap vis the injective mapAffSubOfPlane ↪ AffSubOfPlanethat shifts by the vectorv.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.Plane,
Function.Embedding, Imo2025P1.AffSubOfPlaneProof uses:
Function.Embedding.mk, Imo2025P1.shiftLineMap1 instances, coercions and auxiliary constants left out.
Tactic trace: 6 steps
Open to load the checked before-and-after goal states.
noncomputable def shiftLine (v : Plane) : AffSubOfPlane ↪ AffSubOfPlane := ⟨ …
Mentions: Imo2025P1.Plane, Imo2025P1.AffSubOfPlane
- lemma
Imo2025P1.shift_paraThe shift of a line is parallel to the original line line 529 sourceSource documentation
The shift of a line is parallel to the original line.
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.Plane, Imo2025P1.AffSubOfPlane,
AffineSubspace.Parallel,Real,OfNat.ofNat,ENNReal,Fin,Nat,Function.Embedding, Imo2025P1.shiftLineProof uses:
id,Exists.intro,Eq,AffineSubspace,AffineSubspace.map,AffineEquiv.constVAdd,Eq.refl57 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
lemma shift_para (v : Plane) (L : AffSubOfPlane) : L ∥ shiftLine v L := by …
Mentions: Imo2025P1.Plane, Imo2025P1.AffSubOfPlane, Imo2025P1.shiftLine
- def
Imo2025P1.shiftLinesshiftLines v linesis the collection ofshiftLine v LforL ∈ linesline 533 sourceSource documentation
shiftLines v linesis the collection ofshiftLine v LforL ∈ lines.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.Plane,
Finset, Imo2025P1.AffSubOfPlaneProof uses:
Finset.map, Imo2025P1.shiftLinenoncomputable def shiftLines (v : Plane) (lines : Finset AffSubOfPlane) : Finset AffSubOfPlane := …
Mentions: Imo2025P1.Plane, Imo2025P1.AffSubOfPlane
- lemma
Imo2025P1.shift_line_invshiftLine (-v)is the inverse ofshiftLine vline 537 sourceSource documentation
shiftLine (-v)is the inverse ofshiftLine v.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.Plane, Imo2025P1.AffSubOfPlane,
Eq,Function.Embedding, Imo2025P1.shiftLine,Neg.neg,OfNat.ofNat,ENNReal,Fin,Nat,RealProof uses:
id,Eq.mpr,AffineSubspace.map,AffineEquiv.constVAdd,AffineMap.comp,congrArg,AffineSubspace,AffineSubspace.map_map,AffineEquiv.trans,AffineMap,Eq.symm, Imo2025P1.affine_trans,HAdd.hAdd,AffineEquiv,AffineEquiv.constVAdd_add,of_eq_true,Eq.trans,True,congrFun',AffineMap.idand 5 more62 instances, coercions and auxiliary constants left out.
Tactic trace: 3 steps
Open to load the checked before-and-after goal states.
lemma shift_line_inv (v : Plane) (L : AffSubOfPlane) : (shiftLine (-v)) ((shiftLine v) L) = L := by …
Mentions: Imo2025P1.Plane, Imo2025P1.AffSubOfPlane, Imo2025P1.shiftLine
- lemma
Imo2025P1.shift_sunnyIfLis sunny, then so is its shift line 543 sourceSource documentation
If
Lis sunny, then so is its shift.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.Plane, Imo2025P1.AffSubOfPlane, Imo2025P1.Sunny,
Function.Embedding, Imo2025P1.shiftLineProof uses:
id,And,Not,AffineSubspace.Parallel,Real,EuclideanSpace,Fin,OfNat.ofNat,Nat,ENNReal, Imo2025P1.xAxis, Imo2025P1.yAxis, Imo2025P1.linexy0,And.intro,AffineSubspace.Parallel.trans, Imo2025P1.shift_para31 instances, coercions and auxiliary constants left out.
Tactic trace: 4 steps
Open to load the checked before-and-after goal states.
lemma shift_sunny (v : Plane) (L : AffSubOfPlane) : Sunny L → Sunny (shiftLine v L) := by …
Mentions: Imo2025P1.Plane, Imo2025P1.AffSubOfPlane, Imo2025P1.Sunny, Imo2025P1.shiftLine
- def
Imo2025P1.coverConfig.shiftShift acoverConfigby the vectorvline 549 sourceSource documentation
Shift a
coverConfigby the vectorv.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverConfig, Imo2025P1.Plane
Proof uses:
Imo2025P1.coverConfig.mk, Imo2025P1.shiftLines,Imo2025P1.coverConfig.lines, Imo2025P1.shiftSet,Imo2025P1.coverConfig.g,Imo2025P1.coverConfig.n,Imo2025P1.coverConfig.nS4 instances, coercions and auxiliary constants left out.
Tactic trace: 51 steps
Open to load the checked before-and-after goal states.
noncomputable def coverConfig.shift (C : coverConfig) (v : Plane) : coverConfig where …
Mentions: Imo2025P1.coverConfig, Imo2025P1.Plane
- def
Imo2025P1.coverConfig.removeLineRemove a lineLfrom acoverConfigline 595 sourceSource documentation
Remove a line
Lfrom acoverConfig.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverConfig, Imo2025P1.AffSubOfPlane,
Membership.mem,Finset,Imo2025P1.coverConfig.lines,Not, Imo2025P1.SunnyProof uses:
Imo2025P1.coverConfig.mk,DecidableEq, Imo2025P1.eqAffSubOfPlane,Finset.erase,SDiff.sdiff,Set, Imo2025P1.Plane,Imo2025P1.coverConfig.g,Real,OfNat.ofNat,ENNReal,Fin,Nat,HSub.hSub,Imo2025P1.coverConfig.n,Imo2025P1.coverConfig.nS39 instances, coercions and auxiliary constants left out.
Tactic trace: 20 steps
Open to load the checked before-and-after goal states.
noncomputable def coverConfig.removeLine (C : coverConfig) (L : AffSubOfPlane) (hL : L ∈ C.lines) (hS : ¬Sunny L) : coverConfig where …
Mentions: Imo2025P1.coverConfig, Imo2025P1.AffSubOfPlane, Imo2025P1.Sunny
- structure
Imo2025P1.coverGridConfigAcoverConfigwith the additional requirement that the set of points to be covered isgrid nline 624 sourceSource documentation
A
coverConfigwith the additional requirement that the set of points to be covered isgrid nstandard axioms: Classical.choice, Quot.sound, propext what this means
structure coverGridConfig extends coverConfig where …
Mentions: Imo2025P1.coverConfig
- def
Imo2025P1.coverGridConfig.edgeLineThe three edge lines of a the grid point to be covered in acoverGridConfigline 629 sourceSource documentation
The three edge lines of a the grid point to be covered in a
coverGridConfigstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig,
Fin,OfNat.ofNat,Nat, Imo2025P1.AffSubOfPlaneProof uses: Imo2025P1.edgeLine,
Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig1 instances, coercions and auxiliary constants left out.
noncomputable def coverGridConfig.edgeLine (C : coverGridConfig) := …
Mentions: Imo2025P1.coverGridConfig
- def
Imo2025P1.reduceIf acoverGridConfigcontains a line on the edge, remove the edge and shift it to a smallercoverGridConfigline 634 sourceSource documentation
If a
coverGridConfigcontains a line on the edge, remove the edge and shift it to a smallercoverGridConfigstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig,
Fin,OfNat.ofNat,Nat,Membership.mem, Imo2025P1.AffSubOfPlane,Finset,Imo2025P1.coverConfig.lines,Imo2025P1.coverGridConfig.tocoverConfig, Imo2025P1.coverGridConfig.edgeLineProof uses: Imo2025P1.coverConfig, Imo2025P1.coverConfig.shift, Imo2025P1.coverConfig.removeLine,
Imo2025P1.reduce.edge_not_sunny, Imo2025P1.gridShift,Imo2025P1.coverGridConfig.mk7 instances, coercions and auxiliary constants left out.
Tactic trace: 15 steps
Open to load the checked before-and-after goal states.
noncomputable def reduce (C : coverGridConfig) (d : Fin 3) (hd : C.edgeLine d ∈ C.lines) : coverGridConfig where …Mentions: Imo2025P1.coverGridConfig
- lemma
Imo2025P1.coverGridConfig.reduce_countApplyingcoverGridConfig.reducedecrementsnby1and doesn't changenSline 650 sourceSource documentation
Applying
coverGridConfig.reducedecrementsnby1and doesn't changenS.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig,
Fin,OfNat.ofNat,Nat,Membership.mem, Imo2025P1.AffSubOfPlane,Finset,Imo2025P1.coverConfig.lines,Imo2025P1.coverGridConfig.tocoverConfig, Imo2025P1.coverGridConfig.edgeLine,And,Eq,Imo2025P1.coverConfig.n, Imo2025P1.reduce,HSub.hSub,Imo2025P1.coverConfig.nSProof uses:
of_eq_true,Eq.trans,True,congr,congrArg,eq_self,and_self10 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma coverGridConfig.reduce_count (C : coverGridConfig) (d : Fin 3) (hd : C.edgeLine d ∈ C.lines) : (reduce C d hd).n = C.n - 1 ∧ (reduce C d hd).nS = C.nS := by …Mentions: Imo2025P1.coverGridConfig, Imo2025P1.reduce
- lemma
Imo2025P1.not_colinearGiven reals numbersM > 0anda, b, c ∈ (0, M), the points(1, a + 1),(b + 1, 1),(c + 1, M - c + 1)are not colinear line 656 sourceSource documentation
Given reals numbers
M > 0anda, b, c ∈ (0, M), the points(1, a + 1),(b + 1, 1),(c + 1, M - c + 1)are not colinear.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.AffSubOfPlane,
Real,Eq,Nat,Module.finrank,Subtype, Imo2025P1.Plane,Membership.mem,Submodule,OfNat.ofNat,ENNReal,Fin,AffineSubspace.direction,GT.gt,LT.lt,WithLp,WithLp.toLp,Matrix.vecCons,HAdd.hAdd,Matrix.vecEmptyand 2 moreProof uses: Imo2025P1.line,
Neg.neg,HMul.hMul, Imo2025P1.get_line_eq, Imo2025P1.line_rank,Or.inl,Ne,ne_of_gt,And.left,Eq.mp,And,congrArg,propext, Imo2025P1.vec_eq,False.elim,Mathlib.Tactic.Linarith.lt_irrefl,Mathlib.Tactic.Ring.of_eq,Mathlib.Tactic.Ring.Common.add_congr,HPow.hPow,Nat.rawCastand 78 more165 instances, coercions and auxiliary constants left out.
Tactic trace: 44 steps
Open to load the checked before-and-after goal states.
lemma not_colinear (L : AffSubOfPlane) (M a b c : ℝ) : finrank ℝ L.direction = 1 → M > 0 → 0 < a → a < M → 0 < b → b < M → 0 < c → c < M → !₂[1, a + 1] ∈ L → !₂[b + 1, 1] ∈ L → !₂[c + 1, M - c + 1] ∈ L → False := by …Mentions: Imo2025P1.AffSubOfPlane
- lemma
Imo2025P1.not_colinear_natGiven natural numbersM > 0anda, b, c ∈ (0, M), the points(1, a + 1),(b + 1, 1),(c + 1, M - c + 1)are not colinear line 688 sourceSource documentation
Given natural numbers
M > 0anda, b, c ∈ (0, M), the points(1, a + 1),(b + 1, 1),(c + 1, M - c + 1)are not colinear.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.AffSubOfPlane,
Nat,Eq,Module.finrank,Real,Subtype, Imo2025P1.Plane,Membership.mem,Submodule,OfNat.ofNat,ENNReal,Fin,AffineSubspace.direction,GT.gt,LT.lt,WithLp,WithLp.toLp,Matrix.vecCons,HAdd.hAdd,Matrix.vecEmptyand 2 moreProof uses:
GE.ge,Eq.mpr,Eq.refl, Imo2025P1.not_colinear,id,Eq.trans,congrArg,Eq.symm,Nat.cast_zero,congrFun',Nat.succ,congr,Nat.cast_one115 instances, coercions and auxiliary constants left out.
Tactic trace: 5 steps
Open to load the checked before-and-after goal states.
lemma not_colinear_nat (L : AffSubOfPlane) (M a b c : ℕ) : finrank ℝ L.direction = 1 → M > 0 → 0 < a → a < M → 0 < b → b < M → 0 < c → c < M → (!₂[1, (a + 1 : ℕ)] : Plane) ∈ L → (!₂[(b + 1 : ℕ), 1] : Plane) ∈ L → (!₂[(c + 1 : ℕ), (M - c + 1 : ℕ)] : Plane) ∈ L → False := by …Mentions: Imo2025P1.AffSubOfPlane, Imo2025P1.Plane
- lemma
Imo2025P1.n_minus_plusIfn : ℕandn > 1, ifn' : ℕandn' = n - 1, then(n' : ℝ) + (1 : ℝ) = (n : ℝ)line 699 sourceSource documentation
If
n : ℕandn > 1, ifn' : ℕandn' = n - 1, then(n' : ℝ) + (1 : ℝ) = (n : ℝ).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,GT.gt,OfNat.ofNat,Eq,Real,HAdd.hAdd,HSub.hSubProof uses:
Eq.mpr,id,Eq.trans,congrFun',congrArg,Eq.symm,Nat.cast_one35 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
lemma n_minus_plus (n : ℕ) (hn : n > 1) : (n - 1 : ℕ) + (1 : ℝ) = n := by norm_cast; lia
- lemma
Imo2025P1.line_sunny_two_pointsIfLgoes through(x1, y1)and(x2, y2), andx1 ≠ x2,y1 ≠ y2,x2 - x1 ≠ y1 - y2, thenLis sunny line 703 sourceSource documentation
If
Lgoes through(x1, y1)and(x2, y2), andx1 ≠ x2,y1 ≠ y2,x2 - x1 ≠ y1 - y2, thenLis sunny.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.AffSubOfPlane,
Real,Membership.mem,WithLp,OfNat.ofNat,ENNReal,Nat,Fin, Imo2025P1.Plane,WithLp.toLp,Matrix.vecCons,Matrix.vecEmpty,Ne,HSub.hSub, Imo2025P1.SunnyProof uses:
Eq.mpr,And,Not,AffineSubspace.Parallel,EuclideanSpace, Imo2025P1.line,id,Eq,congr, Imo2025P1.xAxis, Imo2025P1.yAxis, Imo2025P1.linexy0,congrArg,AffineSubspace,And.intro,HAdd.hAdd,HMul.hMul, Imo2025P1.line_para_two_points,of_eq_true,Orand 64 more126 instances, coercions and auxiliary constants left out.
Tactic trace: 6 steps
Open to load the checked before-and-after goal states.
lemma line_sunny_two_points (L : AffSubOfPlane) (x1 y1 x2 y2 : ℝ) (h1 : !₂[x1, y1] ∈ L) (h2 : !₂[x2, y2] ∈ L) (hx : x1 ≠ x2) (hy : y1 ≠ y2) (hxy : x2 - x1 ≠ y1 - y2) : Sunny L := by …Mentions: Imo2025P1.AffSubOfPlane, Imo2025P1.Sunny
- def
Imo2025P1.coverGridConfig.findLinecoverGridConfig.findLinechooses a line inlinesthat goes throughxline 714 sourceSource documentation
coverGridConfig.findLinechooses a line inlinesthat goes throughxstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig, Imo2025P1.Plane,
Membership.mem,Set,Imo2025P1.coverConfig.g,Imo2025P1.coverGridConfig.tocoverConfig, Imo2025P1.AffSubOfPlaneProof uses:
Classical.choose,And,Finset,Imo2025P1.coverConfig.lines,Real,OfNat.ofNat,ENNReal,Fin,Nat32 instances, coercions and auxiliary constants left out.
noncomputable def coverGridConfig.findLine (C : coverGridConfig) (x : Plane) (hx : x ∈ C.g) := …
Mentions: Imo2025P1.coverGridConfig, Imo2025P1.Plane
- lemma
Imo2025P1.coverGridConfig.find_line_correctcoverGridConfig.findLinechooses a line inlinesthat goes throughxline 718 sourceSource documentation
coverGridConfig.findLinechooses a line inlinesthat goes throughxstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig, Imo2025P1.Plane,
Membership.mem,Set,Imo2025P1.coverConfig.g,Imo2025P1.coverGridConfig.tocoverConfig,And, Imo2025P1.AffSubOfPlane,Finset,Imo2025P1.coverConfig.lines, Imo2025P1.coverGridConfig.findLine,Real,OfNat.ofNat,ENNReal,Fin,NatProof uses:
Classical.choose,Imo2025P1.coverConfig.lines_cover,Classical.choose_spec,id60 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
lemma coverGridConfig.find_line_correct (C : coverGridConfig) (x : Plane) (hx : x ∈ C.g) : C.findLine x hx ∈ C.lines ∧ x ∈ C.findLine x hx := by …Mentions: Imo2025P1.coverGridConfig, Imo2025P1.Plane
- lemma
Imo2025P1.coverGridConfig.find_same_lineDocumented declaration: find_same_line line 726 sourceSource documentation
If
findLinefinds the same line that goes through different pointsxandy, and if the non-degenerate linea * x + b * y + c = 0passes throughxandy, thena * x + b * y + c = 0is inlines.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig, Imo2025P1.Plane,
Membership.mem,Set,Imo2025P1.coverConfig.g,Imo2025P1.coverGridConfig.tocoverConfig,Real,Ne,Eq, Imo2025P1.AffSubOfPlane, Imo2025P1.coverGridConfig.findLine,Or,OfNat.ofNat,ENNReal,Fin,Nat, Imo2025P1.line,Finset,Imo2025P1.coverConfig.linesProof uses:
id,of_eq_true,Module.finrank,Subtype,Submodule,AffineSubspace.direction, Imo2025P1.get_line_eq,Imo2025P1.coverConfig.lines_rank, Imo2025P1.line_rank,Eq.mpr,congrArg,Eq.symm71 instances, coercions and auxiliary constants left out.
Tactic trace: 21 steps
Open to load the checked before-and-after goal states.
lemma coverGridConfig.find_same_line (C : coverGridConfig) (x y : Plane) (hx : x ∈ C.g) (hy : y ∈ C.g) (a b c : ℝ) (hxy : x ≠ y) (hEq : C.findLine x hx = C.findLine y hy) (hab : a ≠ 0 ∨ b ≠ 0) (hxL : x ∈ line a b c) (hyL : y ∈ line a b c) : line a b c ∈ C.lines := by …Mentions: Imo2025P1.coverGridConfig, Imo2025P1.Plane, Imo2025P1.line
- def
Imo2025P1.coverGridConfig.edgePointThe points on the three edges of acoverGridConfigline 742 sourceSource documentation
The points on the three edges of a
coverGridConfigstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig,
Fin,OfNat.ofNat,Nat,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig, Imo2025P1.PlaneProof uses:
Imo2025P1.edgeCoeffs.match_1,Unit,WithLp.toLp,ENNReal,Real,Matrix.vecCons,HAdd.hAdd,Matrix.vecEmpty,HSub.hSub14 instances, coercions and auxiliary constants left out.
def coverGridConfig.edgePoint (C : coverGridConfig) (d : Fin 3) (k : Fin C.n) : Plane := …
Mentions: Imo2025P1.coverGridConfig, Imo2025P1.Plane
- lemma
Imo2025P1.coverGridConfig.edge_point_in_gridThe points on the three edges of acoverGridConfigare in its grid line 749 sourceSource documentation
The points on the three edges of a
coverGridConfigare in its grid.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig,
Fin,OfNat.ofNat,Nat,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig,Membership.mem, Imo2025P1.Plane,Set,Imo2025P1.coverConfig.g, Imo2025P1.coverGridConfig.edgePointProof uses:
Eq.mpr, Imo2025P1.grid,id,Eq,congrArg,Imo2025P1.coverGridConfig.g_is_grid,List,List.Mem,List.finRange,HEq,Finset,Fintype.elems,Fintype.complete,Imo2025P1.edgeCoeffs.match_1,Unit,WithLp.toLp,ENNReal,Real,Matrix.vecCons,HAdd.hAddand 21 more29 instances, coercions and auxiliary constants left out.
Tactic trace: 7 steps
Open to load the checked before-and-after goal states.
lemma coverGridConfig.edge_point_in_grid (C : coverGridConfig) (d : Fin 3) (i : Fin C.n) : C.edgePoint d i ∈ C.g := by …Mentions: Imo2025P1.coverGridConfig
- lemma
Imo2025P1.coverGridConfig.edge_point_on_lineThe points on the three edges of acoverGridConfigare on their edge lines line 756 sourceSource documentation
The points on the three edges of a
coverGridConfigare on their edge lines.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig,
Fin,OfNat.ofNat,Nat,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig,Membership.mem, Imo2025P1.Plane, Imo2025P1.AffSubOfPlane,Real,ENNReal, Imo2025P1.coverGridConfig.edgeLine, Imo2025P1.coverGridConfig.edgePointProof uses:
List,List.Mem,Eq,List.finRange,HEq,Finset,Fintype.elems,Fintype.complete,List.cons,List.Mem.head,Fin.mk,Nat.le_of_lt,Nat.le_refl,List.nil,Eq.mpr,HAdd.hAdd,HMul.hMul,Neg.neg,id,of_eq_trueand 67 more123 instances, coercions and auxiliary constants left out.
Tactic trace: 10 steps
Open to load the checked before-and-after goal states.
lemma coverGridConfig.edge_point_on_line (C : coverGridConfig) (d : Fin 3) (i : Fin C.n) : C.edgePoint d i ∈ C.edgeLine d := by …Mentions: Imo2025P1.coverGridConfig
- def
Imo2025P1.coverGridConfig.findLineEdgecoverGridConfig.findLineEdgechooses a line inlinesthat goes throughC.edgePoint d iusing the functioncoverGridConfig.findLineline 766 sourceSource documentation
coverGridConfig.findLineEdgechooses a line inlinesthat goes throughC.edgePoint d iusing the functioncoverGridConfig.findLine.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig,
Fin,OfNat.ofNat,Nat,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig, Imo2025P1.AffSubOfPlaneProof uses: Imo2025P1.coverGridConfig.findLine, Imo2025P1.coverGridConfig.edgePoint, Imo2025P1.coverGridConfig.edge_point_in_grid
2 instances, coercions and auxiliary constants left out.
noncomputable def coverGridConfig.findLineEdge (C : coverGridConfig) (d : Fin 3) (i : Fin C.n) := …
Mentions: Imo2025P1.coverGridConfig
- lemma
Imo2025P1.coverGridConfig.find_line_edge_correctcoverGridConfig.findLineEdgechooses a line inlinesthat goes throughC.edgePoint d iline 770 sourceSource documentation
coverGridConfig.findLineEdgechooses a line inlinesthat goes throughC.edgePoint d istandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig,
Fin,OfNat.ofNat,Nat,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig,And,Membership.mem, Imo2025P1.AffSubOfPlane,Finset,Imo2025P1.coverConfig.lines, Imo2025P1.coverGridConfig.findLineEdge, Imo2025P1.Plane,Real,ENNReal, Imo2025P1.coverGridConfig.edgePointProof uses:
Eq.mpr, Imo2025P1.coverGridConfig.findLine, Imo2025P1.coverGridConfig.edge_point_in_grid,id,Eq,congrArg,Imo2025P1.coverGridConfig.findLineEdge.eq_1, Imo2025P1.coverGridConfig.find_line_correct58 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
lemma coverGridConfig.find_line_edge_correct (C : coverGridConfig) (d : Fin 3) (i : Fin C.n) : C.findLineEdge d i ∈ C.lines ∧ C.edgePoint d i ∈ C.findLineEdge d i := by …Mentions: Imo2025P1.coverGridConfig
- structure
Imo2025P1.coverGridNoEdgeConfigAcoverGridConfigwith the additional requirements thatn > 1andlinesdoesn't contain an edge line 777 sourceSource documentation
A
coverGridConfigwith the additional requirements thatn > 1andlinesdoesn't contain an edge. Note: we needn > 1to have three corners in the grid.standard axioms: Classical.choice, Quot.sound, propext what this means
structure coverGridNoEdgeConfig extends coverGridConfig where …
Mentions: Imo2025P1.coverGridConfig
- lemma
Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_line_injIflinesdoes not contain an edge line ofgrid n, then on every edge, the lines chosen byfindLineEdgeare distinct line 785 sourceSource documentation
If
linesdoes not contain an edge line ofgrid n, then on every edge, the lines chosen byfindLineEdgeare distinct.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Fin,OfNat.ofNat,Nat,Function.Injective,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfig, Imo2025P1.AffSubOfPlane, Imo2025P1.coverGridConfig.findLineEdgeProof uses:
id,Eq,Decidable.byContradiction,Not,Membership.mem,Finset,Imo2025P1.coverConfig.lines, Imo2025P1.edgeLine, Imo2025P1.Plane, Imo2025P1.coverGridConfig.edgePoint, Imo2025P1.coverGridConfig.find_same_line, Imo2025P1.coverGridConfig.edge_point_in_grid,Imo2025P1.LineCoeffs.a, Imo2025P1.edgeCoeffs,Imo2025P1.LineCoeffs.b,Imo2025P1.LineCoeffs.c,Ne,List,List.Mem,List.finRangeand 48 more43 instances, coercions and auxiliary constants left out.
Tactic trace: 31 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.cover_no_edge_line_inj (C : coverGridNoEdgeConfig) (d : Fin 3) : Function.Injective (C.findLineEdge d) := by …Mentions: Imo2025P1.coverGridNoEdgeConfig
- lemma
Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_line_surjIflinesdoes not contain an edge line ofgrid n, then for every edge, every line inlinesmust be chosen by a point on that edge line 807 sourceSource documentation
If
linesdoes not contain an edge line ofgrid n, then for every edge, every line inlinesmust be chosen by a point on that edge.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Fin,OfNat.ofNat,Nat,Eq,Finset, Imo2025P1.AffSubOfPlane,Finset.map,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfig,Function.Embedding.mk, Imo2025P1.coverGridConfig.findLineEdge, Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_line_inj,Finset.univ,Imo2025P1.coverConfig.linesProof uses:
Eq.mpr,id,congrArg,rfl,Finset.card,of_eq_true,Eq.trans,True,congrFun',Finset.card_map,Fintype.card_fin,eq_self,LE.le,Membership.mem,Exists,Eq.mp,And,Function.Embedding,funext,true_andand 5 more15 instances, coercions and auxiliary constants left out.
Tactic trace: 17 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.cover_no_edge_line_surj (C : coverGridNoEdgeConfig) (d : Fin 3) : Finset.map ⟨ C.findLineEdge d, C.cover_no_edge_line_inj d⟩ Finset.univ = C.lines := by …Mentions: Imo2025P1.coverGridNoEdgeConfig
- def
Imo2025P1.edgeEndpointCornerIdline 828 sourcestandard axioms: propext what this means
Statement uses:
Fin,OfNat.ofNat,NatProof uses:
Imo2025P1.edgeEndpointCornerId.match_1,Unit4 instances, coercions and auxiliary constants left out.
- def
Imo2025P1.coverGridNoEdgeConfig.edgeEndpointIndexline 836 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Fin,OfNat.ofNat,Nat,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfigProof uses:
Imo2025P1.coverGridNoEdgeConfig.edgeEndpointIndex.match_1,Unit,Fin.mk,HSub.hSub6 instances, coercions and auxiliary constants left out.
Tactic trace: 4 steps
Open to load the checked before-and-after goal states.
- def
Imo2025P1.coverGridNoEdgeConfig.cornerPointThe points on the three corners ofgrid nline 842 sourceSource documentation
The points on the three corners of
grid nstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Fin,OfNat.ofNat,Nat, Imo2025P1.PlaneProof uses:
Imo2025P1.edgeCoeffs.match_1,Unit, Imo2025P1.coverGridConfig.edgePoint,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfig, Imo2025P1.coverGridNoEdgeConfig.edgeEndpointIndex5 instances, coercions and auxiliary constants left out.
def coverGridNoEdgeConfig.cornerPoint (C : coverGridNoEdgeConfig) (c : Fin 3) : Plane := …
Mentions: Imo2025P1.coverGridNoEdgeConfig, Imo2025P1.Plane
- lemma
Imo2025P1.coverGridNoEdgeConfig.corner_point_on_edgeEvery corner ofgrid nbelongs to two edgle lines line 849 sourceSource documentation
Every corner of
grid nbelongs to two edgle lines.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Fin,OfNat.ofNat,Nat,Eq, Imo2025P1.Plane, Imo2025P1.coverGridNoEdgeConfig.cornerPoint, Imo2025P1.edgeEndpointCornerId, Imo2025P1.coverGridConfig.edgePoint,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfig, Imo2025P1.coverGridNoEdgeConfig.edgeEndpointIndexProof uses:
id,Real,HAdd.hAdd,HSub.hSub,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig, Imo2025P1.n_minus_plus,Imo2025P1.coverGridNoEdgeConfig.hn,eq_sub_of_add_eq',List,List.Mem,List.finRange,HEq,Membership.mem,Finset,Fintype.elems,Fintype.complete,Imo2025P1.edgeCoeffs.match_1,Imo2025P1.edgeEndpointCornerId.match_1,Unitand 36 more65 instances, coercions and auxiliary constants left out.
Tactic trace: 10 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.corner_point_on_edge (C : coverGridNoEdgeConfig) (d : Fin 3) (r : Fin 2) : C.cornerPoint (edgeEndpointCornerId d r) = C.edgePoint d (C.edgeEndpointIndex r) := by …Mentions: Imo2025P1.coverGridNoEdgeConfig, Imo2025P1.edgeEndpointCornerId
- def
Imo2025P1.coverGridNoEdgeConfig.findLineCornercoverGridNoEdgeConfig.findLineCorner C cchooses a line inlinesthat goes throughC.cornerPoint cusing the functionfindLineline 860 sourceSource documentation
coverGridNoEdgeConfig.findLineCorner C cchooses a line inlinesthat goes throughC.cornerPoint cusing the functionfindLine.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Fin,OfNat.ofNat,Nat, Imo2025P1.AffSubOfPlaneProof uses:
Imo2025P1.edgeCoeffs.match_1,Unit, Imo2025P1.coverGridConfig.findLineEdge,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfig, Imo2025P1.coverGridNoEdgeConfig.edgeEndpointIndex5 instances, coercions and auxiliary constants left out.
noncomputable def coverGridNoEdgeConfig.findLineCorner (C : coverGridNoEdgeConfig) (c : Fin 3) := match c with …
Mentions: Imo2025P1.coverGridNoEdgeConfig
- lemma
Imo2025P1.coverGridNoEdgeConfig.find_line_corner_correctcoverGridNoEdgeConfig.findLineCorner C cchooses a line inlinesthat goes throughC.cornerPoint cline 868 sourceSource documentation
coverGridNoEdgeConfig.findLineCorner C cchooses a line inlinesthat goes throughC.cornerPoint c.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Fin,OfNat.ofNat,Nat,And,Membership.mem, Imo2025P1.AffSubOfPlane,Finset,Imo2025P1.coverConfig.lines,Imo2025P1.coverGridConfig.tocoverConfig,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfig, Imo2025P1.coverGridNoEdgeConfig.findLineCorner, Imo2025P1.Plane,Real,ENNReal, Imo2025P1.coverGridNoEdgeConfig.cornerPointProof uses:
List,List.Mem,Eq,List.finRange,HEq,Fintype.elems,Fintype.complete,List.cons,List.Mem.head,Fin.mk,Nat.le_of_lt,Nat.le_refl,List.nil,id, Imo2025P1.coverGridConfig.find_line_edge_correct, Imo2025P1.coverGridNoEdgeConfig.edgeEndpointIndex,eq_of_heq,List.Mem.tail,False.elim,noConfusion_of_Natand 3 more64 instances, coercions and auxiliary constants left out.
Tactic trace: 4 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.find_line_corner_correct (C : coverGridNoEdgeConfig) (c : Fin 3) : C.findLineCorner c ∈ C.lines ∧ C.cornerPoint c ∈ C.findLineCorner c := by …Mentions: Imo2025P1.coverGridNoEdgeConfig
- lemma
Imo2025P1.coverGridNoEdgeConfig.find_line_corner_eq_edgeThe line chosen byfindLineCornerat each of the three corners equals to the line chosen byfindLineEdgeat corresponding points on two edge lines line 877 sourceSource documentation
The line chosen by
findLineCornerat each of the three corners equals to the line chosen byfindLineEdgeat corresponding points on two edge lines.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Fin,OfNat.ofNat,Nat,Eq, Imo2025P1.AffSubOfPlane, Imo2025P1.coverGridNoEdgeConfig.findLineCorner, Imo2025P1.edgeEndpointCornerId, Imo2025P1.coverGridConfig.findLineEdge,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfig, Imo2025P1.coverGridNoEdgeConfig.edgeEndpointIndexProof uses:
id,List,List.Mem,List.finRange,HEq,Membership.mem,Finset,Fintype.elems,Fintype.complete,Imo2025P1.edgeCoeffs.match_1,Imo2025P1.edgeEndpointCornerId.match_1,Unit, Imo2025P1.coverGridConfig.findLine, Imo2025P1.coverGridConfig.edgePoint, Imo2025P1.coverGridConfig.edge_point_in_grid,List.cons,List.Mem.head,Fin.mk,Nat.le_of_lt,Nat.le_refland 19 more12 instances, coercions and auxiliary constants left out.
Tactic trace: 11 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.find_line_corner_eq_edge (C : coverGridNoEdgeConfig) (d : Fin 3) (r : Fin 2) : C.findLineCorner (edgeEndpointCornerId d r) = C.findLineEdge d (C.edgeEndpointIndex r) := by …Mentions: Imo2025P1.coverGridNoEdgeConfig, Imo2025P1.edgeEndpointCornerId
- lemma
Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_corner_distinctThe three points chosen byfindLineCornerare distinct line 888 sourceSource documentation
The three points chosen by
findLineCornerare distinct.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
And,Ne, Imo2025P1.AffSubOfPlane, Imo2025P1.coverGridNoEdgeConfig.findLineCorner,OfNat.ofNat,Fin,NatProof uses: Imo2025P1.edgeEndpointCornerId,
Eq.mpr, Imo2025P1.coverGridConfig.findLineEdge,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfig, Imo2025P1.coverGridNoEdgeConfig.edgeEndpointIndex,id,Eq,congrArg, Imo2025P1.coverGridNoEdgeConfig.find_line_corner_eq_edge,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig, Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_line_inj,GT.gt,Imo2025P1.coverGridNoEdgeConfig.hn,Eq.mp,HSub.hSub,Fin.mk.injEq,And.intro12 instances, coercions and auxiliary constants left out.
Tactic trace: 9 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.cover_no_edge_corner_distinct (C : coverGridNoEdgeConfig) : C.findLineCorner 0 ≠ C.findLineCorner 1 ∧ C.findLineCorner 0 ≠ C.findLineCorner 2 ∧ C.findLineCorner 1 ≠ C.findLineCorner 2 := by …Mentions: Imo2025P1.coverGridNoEdgeConfig
- lemma
Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_corner_injfindLineCorneris injective line 903 sourceSource documentation
findLineCorneris injective.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Function.Injective,Fin,OfNat.ofNat,Nat, Imo2025P1.AffSubOfPlane, Imo2025P1.coverGridNoEdgeConfig.findLineCornerProof uses:
And,Ne, Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_corner_distinct,Eq,List,List.Mem,List.finRange,HEq,Membership.mem,Finset,Fintype.elems,Fintype.complete,List.cons,List.Mem.head,Fin.mk,Nat.le_of_lt,Nat.le_refl,List.nil,Eq.refl,eq_of_heqand 7 more11 instances, coercions and auxiliary constants left out.
Tactic trace: 5 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.cover_no_edge_corner_inj (C : coverGridNoEdgeConfig) : Function.Injective C.findLineCorner := by …Mentions: Imo2025P1.coverGridNoEdgeConfig
- def
Imo2025P1.coverGridNoEdgeConfig.corner_setThe image set offindLineCornerline 910 sourceSource documentation
The image set of
findLineCorner.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Finset, Imo2025P1.AffSubOfPlaneProof uses:
Finset.map,Fin,OfNat.ofNat,Nat,Function.Embedding.mk, Imo2025P1.coverGridNoEdgeConfig.findLineCorner, Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_corner_inj,Finset.univ2 instances, coercions and auxiliary constants left out.
noncomputable def coverGridNoEdgeConfig.corner_set (C : coverGridNoEdgeConfig) : Finset AffSubOfPlane := …Mentions: Imo2025P1.coverGridNoEdgeConfig, Imo2025P1.AffSubOfPlane
- lemma
Imo2025P1.coverGridNoEdgeConfig.corner_set_membersThe members of thecorner_set, i.e., The image set offindLineCornerline 915 sourceSource documentation
The members of the
corner_set, i.e., The image set offindLineCornerstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Fin,OfNat.ofNat,Nat,Membership.mem, Imo2025P1.AffSubOfPlane,Finset, Imo2025P1.coverGridNoEdgeConfig.corner_set, Imo2025P1.coverGridNoEdgeConfig.findLineCornerProof uses:
of_eq_true,Finset.map,Function.Embedding.mk, Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_corner_inj,Finset.univ,Eq.trans,True9 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.corner_set_members (C : coverGridNoEdgeConfig) (d : Fin 3) : C.findLineCorner d ∈ C.corner_set := by …Mentions: Imo2025P1.coverGridNoEdgeConfig
- lemma
Imo2025P1.coverGridNoEdgeConfig.corner_set_cardThe cardinality of thecorner_set, i.e., The image set offindLineCornerline 920 sourceSource documentation
The cardinality of the
corner_set, i.e., The image set offindLineCornerstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Eq,Nat,Finset.card, Imo2025P1.AffSubOfPlane, Imo2025P1.coverGridNoEdgeConfig.corner_set,OfNat.ofNatProof uses:
of_eq_true,Eq.trans,True,congrFun',congrArg,Finset.map,Fin,Function.Embedding.mk, Imo2025P1.coverGridNoEdgeConfig.findLineCorner, Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_corner_inj,Finset.univ,Finset.card_map,Fintype.card_fin,eq_self3 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.corner_set_card (C : coverGridNoEdgeConfig) : #C.corner_set = 3 := by …Mentions: Imo2025P1.coverGridNoEdgeConfig
- lemma
Imo2025P1.coverGridNoEdgeConfig.corner_set_subset_linescorner_set(i.e., The image set offindLineCorner) is a subset oflinesline 925 sourceSource documentation
corner_set(i.e., The image set offindLineCorner) is a subset oflinesstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
LE.le,Finset, Imo2025P1.AffSubOfPlane, Imo2025P1.coverGridNoEdgeConfig.corner_set,Imo2025P1.coverConfig.lines,Imo2025P1.coverGridConfig.tocoverConfig,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfigProof uses:
Eq.mpr,Membership.mem,Fin,OfNat.ofNat,Nat,Eq, Imo2025P1.coverGridNoEdgeConfig.findLineCorner,id,Eq.trans,Finset.map,Function.Embedding.mk, Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_corner_inj,Finset.univ,Exists,implies_congr,And,Function.Embedding,congrArg,funext,Trueand 10 more37 instances, coercions and auxiliary constants left out.
Tactic trace: 5 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.corner_set_subset_lines (C : coverGridNoEdgeConfig) : C.corner_set ⊆ C.lines := by …Mentions: Imo2025P1.coverGridNoEdgeConfig
- lemma
Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_3_linesIf acoverGridNoEdgeConfighasn = 3, thennS = 3line 935 sourceSource documentation
If a
coverGridNoEdgeConfighasn = 3, thennS = 3.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
Eq,Nat,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfig,OfNat.ofNat,Imo2025P1.coverConfig.nSProof uses:
Finset, Imo2025P1.AffSubOfPlane, Imo2025P1.coverGridNoEdgeConfig.corner_set,Imo2025P1.coverConfig.lines,Finset.eq_of_subset_of_card_le, Imo2025P1.coverGridNoEdgeConfig.corner_set_subset_lines,Eq.mpr,LE.le,Finset.card,id,congrArg,Imo2025P1.coverConfig.lines_count, Imo2025P1.coverGridNoEdgeConfig.corner_set_card,le_refl,Fin,Imo2025P1.edgeCoeffs.match_1,Unit, Imo2025P1.coverGridConfig.findLineEdge,Fin.mk, Imo2025P1.coverGridNoEdgeConfig.findLineCorner and 91 more84 instances, coercions and auxiliary constants left out.
Tactic trace: 78 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.cover_no_edge_3_lines (C : coverGridNoEdgeConfig) (hn3 : C.n = 3) : C.nS = 3 := by …Mentions: Imo2025P1.coverGridNoEdgeConfig
- lemma
Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_4_impossibleIt is impossible to have acoverGridNoEdgeConfigwithn ≥ 4line 995 sourceSource documentation
It is impossible to have a
coverGridNoEdgeConfigwithn ≥ 4.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
GE.ge,Nat,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfig,OfNat.ofNat,FalseProof uses:
DecidableEq, Imo2025P1.AffSubOfPlane, Imo2025P1.eqAffSubOfPlane,LE.le,Finset.card,SDiff.sdiff,Finset,Imo2025P1.coverConfig.lines, Imo2025P1.coverGridNoEdgeConfig.corner_set,Trans.trans,Eq,HSub.hSub,rfl,Eq.mpr,id,congrArg,Imo2025P1.coverConfig.lines_count, Imo2025P1.coverGridNoEdgeConfig.corner_set_card,le_refl,Eq.symmand 63 more74 instances, coercions and auxiliary constants left out.
Tactic trace: 67 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.cover_no_edge_4_impossible (C : coverGridNoEdgeConfig) (hn4 : C.n ≥ 4) : False := by …Mentions: Imo2025P1.coverGridNoEdgeConfig
- lemma
Imo2025P1.coverGridNoEdgeConfig.cover_edgeAcoverGridNoEdgeConfigmust satisfyn = 3 ∧ nS = 3line 1060 sourceSource documentation
A
coverGridNoEdgeConfigmust satisfyn = 3 ∧ nS = 3.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridNoEdgeConfig,
And,Eq,Nat,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfig,OfNat.ofNat,Imo2025P1.coverConfig.nSProof uses:
GE.ge,Trans.trans,Finset.card, Imo2025P1.AffSubOfPlane, Imo2025P1.coverGridNoEdgeConfig.corner_set,Imo2025P1.coverConfig.lines,Eq.symm,Imo2025P1.coverConfig.lines_count,Finset.card_le_card, Imo2025P1.coverGridNoEdgeConfig.corner_set_subset_lines, Imo2025P1.coverGridNoEdgeConfig.corner_set_card,dite, Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_3_lines,Not,Or,Decidable.not_or_of_imp,False.elim,And.intro,False, Imo2025P1.coverGridNoEdgeConfig.cover_no_edge_4_impossible8 instances, coercions and auxiliary constants left out.
Tactic trace: 11 steps
Open to load the checked before-and-after goal states.
lemma coverGridNoEdgeConfig.cover_edge (C : coverGridNoEdgeConfig) : C.n = 3 ∧ C.nS = 3 := by …
Mentions: Imo2025P1.coverGridNoEdgeConfig
- lemma
Imo2025P1.coverGridConfig.any_coverAcoverGridNoEdgeConfigmust satisfynS ≤ nandnS ∈ {0, 1, 3}line 1074 sourceSource documentation
A
coverGridNoEdgeConfigmust satisfynS ≤ nandnS ∈ {0, 1, 3}. Proved by induction onnof the above fact for allcoverGridNoEdgeConfig.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.coverGridConfig,
And,LE.le,Nat,Imo2025P1.coverConfig.nS,Imo2025P1.coverGridConfig.tocoverConfig,Imo2025P1.coverConfig.n,Or,Eq,OfNat.ofNatProof uses:
Nat.recAux, Imo2025P1.coverConfig.nS_leq_n,HAdd.hAdd,dite,Not,Exists,Fin,Membership.mem, Imo2025P1.AffSubOfPlane,Finset,Imo2025P1.coverConfig.lines, Imo2025P1.coverGridConfig.edgeLine,Classical.propDecidable, Imo2025P1.reduce,HSub.hSub, Imo2025P1.coverGridConfig.reduce_count, Imo2025P1.coverGridNoEdgeConfig,Imo2025P1.coverGridNoEdgeConfig.mk,Eq.mp,Imo2025P1.coverGridNoEdgeConfig.tocoverGridConfigand 2 more20 instances, coercions and auxiliary constants left out.
Tactic trace: 25 steps
Open to load the checked before-and-after goal states.
lemma coverGridConfig.any_cover (C : coverGridConfig) : (C.nS ≤ C.n ∧ (C.nS = 0 ∨ C.nS = 1 ∨ C.nS = 3)) := by …Mentions: Imo2025P1.coverGridConfig
- structure
Imo2025P1.strongCoverGridConfigAcoverGridConfigwith the additional requirements every line inlinesgoes through at least one point ingline 1102 sourceSource documentation
A
coverGridConfigwith the additional requirements every line inlinesgoes through at least one point ing. This is used to inductively construct covers ofgrid nwith exactly0,1, or3sunny lines.standard axioms: Classical.choice, Quot.sound, propext what this means
structure strongCoverGridConfig extends coverGridConfig where …
Mentions: Imo2025P1.coverGridConfig
- def
Imo2025P1.zeroSunnyAstrongCoverGridConfigwithn = 0andnS = 0line 1106 sourceSource documentation
A
strongCoverGridConfigwithn = 0andnS = 0standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.strongCoverGridConfig
Proof uses:
Imo2025P1.strongCoverGridConfig.mk,Imo2025P1.coverGridConfig.mk,Imo2025P1.coverConfig.mk,EmptyCollection.emptyCollection,Finset, Imo2025P1.AffSubOfPlane,Set, Imo2025P1.Plane,OfNat.ofNat,Nat9 instances, coercions and auxiliary constants left out.
Tactic trace: 10 steps
Open to load the checked before-and-after goal states.
def zeroSunny : strongCoverGridConfig where …
Mentions: Imo2025P1.strongCoverGridConfig
- def
Imo2025P1.oneSunnyAstrongCoverGridConfigwithn = 1andnS = 1line 1124 sourceSource documentation
A
strongCoverGridConfigwithn = 1andnS = 1standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.strongCoverGridConfig
Proof uses:
Imo2025P1.strongCoverGridConfig.mk,Imo2025P1.coverGridConfig.mk,Imo2025P1.coverConfig.mk,Singleton.singleton, Imo2025P1.AffSubOfPlane,Finset, Imo2025P1.line,Neg.neg,Real,OfNat.ofNat, Imo2025P1.grid,Nat13 instances, coercions and auxiliary constants left out.
Tactic trace: 30 steps
Open to load the checked before-and-after goal states.
noncomputable def oneSunny : strongCoverGridConfig where …
Mentions: Imo2025P1.strongCoverGridConfig
- def
Imo2025P1.threeSunnyLineCoeffsTheLineCoeffsof a 3 sunny solution line 1156 sourceSource documentation
The
LineCoeffsof a 3 sunny solutionstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Fin,OfNat.ofNat,Nat, Imo2025P1.LineCoeffsProof uses:
Imo2025P1.edgeCoeffs.match_1,Unit,Imo2025P1.LineCoeffs.mk,Neg.neg,Real11 instances, coercions and auxiliary constants left out.
def threeSunnyLineCoeffs : Fin 3 → LineCoeffs | 0 => ⟨-1, 1, 0⟩ | 1 => ⟨2, 1, -5⟩ | 2 => ⟨1, 2, -5⟩ /-- The lines of a 3 sunny solution -/
Mentions: Imo2025P1.LineCoeffs, solution
- def
Imo2025P1.threeSunnyLineThe lines of a 3 sunny solution line 1162 sourceSource documentation
The lines of a 3 sunny solution
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Fin,OfNat.ofNat,Nat, Imo2025P1.AffSubOfPlaneProof uses: Imo2025P1.line', Imo2025P1.threeSunnyLineCoeffs
2 instances, coercions and auxiliary constants left out.
noncomputable def threeSunnyLine (d : Fin 3) := line' (threeSunnyLineCoeffs d)
Mentions: Imo2025P1.line', Imo2025P1.threeSunnyLineCoeffs
- lemma
Imo2025P1.threeSunnyLineInjThe lines of a 3 sunny solution are distinct line 1165 sourceSource documentation
The lines of a 3 sunny solution are distinct.
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Function.Injective,Fin,OfNat.ofNat,Nat, Imo2025P1.AffSubOfPlane, Imo2025P1.threeSunnyLineProof uses:
Eq,List,List.Mem,List.finRange,HEq,Membership.mem,Finset,Fintype.elems,Fintype.complete,List.cons,List.Mem.head,Fin.mk,Nat.le_of_lt,Nat.le_refl,List.nil,Eq.refl,eq_of_heq,List.Mem.tail,Eq.mpr,Falseand 43 more58 instances, coercions and auxiliary constants left out.
Tactic trace: 11 steps
Open to load the checked before-and-after goal states.
lemma threeSunnyLineInj : Function.Injective threeSunnyLine := by …
Mentions: Imo2025P1.threeSunnyLine
- def
Imo2025P1.threeSunnyLinesThe set of lines of a 3 sunny solution line 1177 sourceSource documentation
The set of lines of a 3 sunny solution
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Finset, Imo2025P1.AffSubOfPlaneProof uses:
Finset.map,Fin,OfNat.ofNat,Nat,Function.Embedding.mk, Imo2025P1.threeSunnyLine, Imo2025P1.threeSunnyLineInj,Finset.univ2 instances, coercions and auxiliary constants left out.
noncomputable def threeSunnyLines := …
- lemma
Imo2025P1.threeSunnyLinesMemThe members of the set of lines of a 3 sunny solution line 1181 sourceSource documentation
The members of the set of lines of a 3 sunny solution
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.AffSubOfPlane,
Iff,Membership.mem,Finset, Imo2025P1.threeSunnyLines,Or,Eq, Imo2025P1.threeSunnyLine,OfNat.ofNat,Fin,NatProof uses:
Eq.mpr,Exists,id,congrFun',congrArg,Eq.trans,Finset.map,Function.Embedding.mk, Imo2025P1.threeSunnyLineInj,Finset.univ,And,Function.Embedding,funext,True,true_and,Iff.intro,List,List.Mem,List.finRange,HEqand 21 more24 instances, coercions and auxiliary constants left out.
Tactic trace: 9 steps
Open to load the checked before-and-after goal states.
lemma threeSunnyLinesMem (L : AffSubOfPlane) : L ∈ threeSunnyLines ↔ (L = threeSunnyLine 0) ∨ (L = threeSunnyLine 1) ∨ (L = threeSunnyLine 2) := by …Mentions: Imo2025P1.AffSubOfPlane, Imo2025P1.threeSunnyLines, Imo2025P1.threeSunnyLine
- lemma
Imo2025P1.grid3PointsThe points ingrid 3line 1190 sourceSource documentation
The points in
grid 3standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.Plane,
Iff,Membership.mem,Set, Imo2025P1.grid,OfNat.ofNat,Nat,Or,Eq,WithLp.toLp,ENNReal,Fin,Real,Matrix.vecCons,Matrix.vecEmptyProof uses:
Eq.mpr,Exists,And,WithLp.ofLp,LT.lt,LE.le,HAdd.hAdd,id,congrFun',congrArg,Set.ofPred,funext,Iff.intro, Imo2025P1.vec_repr,WithLp,propext, Imo2025P1.vec_eq,Eq.trans,congr,Eq.symmand 17 more81 instances, coercions and auxiliary constants left out.
Tactic trace: 16 steps
Open to load the checked before-and-after goal states.
lemma grid3Points (x : Plane) : x ∈ grid 3 ↔ (x = !₂[1, 1] ∨ x = !₂[1, 2] ∨ x = !₂[1, 3] ∨ x = !₂[2, 1] ∨ x = !₂[2, 2] ∨ x = !₂[3, 1]) := by …Mentions: Imo2025P1.Plane, Imo2025P1.grid
- def
Imo2025P1.threeSunnyAstrongCoverGridConfigwithn = 3andnS = 3line 1209 sourceSource documentation
A
strongCoverGridConfigwithn = 3andnS = 3standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.strongCoverGridConfig
Proof uses:
Imo2025P1.strongCoverGridConfig.mk,Imo2025P1.coverGridConfig.mk,Imo2025P1.coverConfig.mk, Imo2025P1.threeSunnyLines, Imo2025P1.grid,OfNat.ofNat,Nat7 instances, coercions and auxiliary constants left out.
Tactic trace: 40 steps
Open to load the checked before-and-after goal states.
noncomputable def threeSunny : strongCoverGridConfig where …
Mentions: Imo2025P1.strongCoverGridConfig
- def
Imo2025P1.strongCoverGridConfig.extendAdd a diagonal linex + y = n + 2to acountAndStrongCoverline 1254 sourceSource documentation
Add a diagonal line
x + y = n + 2to acountAndStrongCoverstandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses: Imo2025P1.strongCoverGridConfig
Proof uses:
Imo2025P1.strongCoverGridConfig.mk,Imo2025P1.coverGridConfig.mk,Imo2025P1.coverConfig.mk,Finset.cons, Imo2025P1.AffSubOfPlane, Imo2025P1.edgeLine,HAdd.hAdd,Nat,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig,Imo2025P1.strongCoverGridConfig.tocoverGridConfig,OfNat.ofNat,Fin,Imo2025P1.coverConfig.lines,Imo2025P1.strongCoverGridConfig.extend.hNew, Imo2025P1.grid,Imo2025P1.coverConfig.nS11 instances, coercions and auxiliary constants left out.
Tactic trace: 67 steps
Open to load the checked before-and-after goal states.
noncomputable def strongCoverGridConfig.extend (C : strongCoverGridConfig) : strongCoverGridConfig where …Mentions: Imo2025P1.strongCoverGridConfig
- lemma
Imo2025P1.existsStrongCoverIt is possible to have astrongCoverGridConfig, whenevernS ≤ nandnS = 0 ∨ nS = 1 ∨ nS = 3line 1316 sourceSource documentation
It is possible to have a
strongCoverGridConfig, whenevernS ≤ nandnS = 0 ∨ nS = 1 ∨ nS = 3standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,LE.le,Or,Eq,OfNat.ofNat,Exists, Imo2025P1.strongCoverGridConfig,And,Imo2025P1.coverConfig.n,Imo2025P1.coverGridConfig.tocoverConfig,Imo2025P1.strongCoverGridConfig.tocoverGridConfig,Imo2025P1.coverConfig.nSProof uses:
Nat.recAux,Exists.intro, Imo2025P1.zeroSunny,Eq.mpr,id,Eq.trans,True,congrFun',congrArg,eq_self,true_and,HAdd.hAdd,dite, Imo2025P1.strongCoverGridConfig.extend,Not,Eq.symm,of_eq_true,congr,and_self, Imo2025P1.oneSunny and 1 more12 instances, coercions and auxiliary constants left out.
Tactic trace: 28 steps
Open to load the checked before-and-after goal states.
lemma existsStrongCover (n nS : ℕ) : nS ≤ n → (nS = 0 ∨ nS = 1 ∨ nS = 3) → ∃ (C : strongCoverGridConfig), C.n = n ∧ C.nS = nS := by …Mentions: Imo2025P1.strongCoverGridConfig
- determine
Imo2025P1.answerline 1340 sourceno axioms what this means
Statement uses:
Nat,Set.Ici,OfNat.ofNat,SetProof uses:
Insert.insert,Singleton.singleton8 instances, coercions and auxiliary constants left out.
- problem
Imo2025P1.imo2025_p1The final theorem: answer is {0, 1, 3} line 1343 sourceSource documentation
The final theorem: answer is {0, 1, 3}.
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,Set.Ici,OfNat.ofNat,Eq,Set,Set.ofPred,Exists,Finset,AffineSubspace,Real,EuclideanSpace,Fin,ENNReal,DecidablePred, Imo2025P1.Sunny, Imo2025P1.sunnyPred,And,Finset.card,Membership.mem,Module.finrankand 12 moreProof uses:
id,Set.ext,Insert.insert,Singleton.singleton,Eq.mpr,Iff,Or,congrArg,Eq.trans,Iff.intro, Imo2025P1.coverGridConfig,Imo2025P1.coverGridConfig.mk,Imo2025P1.coverConfig.mk, Imo2025P1.grid, Imo2025P1.Plane,WithLp.ofLp, Imo2025P1.AffSubOfPlane,Eq.mp,congrFun',funextand 28 more105 instances, coercions and auxiliary constants left out.
Tactic trace: 33 steps
Open to load the checked before-and-after goal states.
problem imo2025_p1 (n : Set.Ici 3) : {k | ∃ lines : Finset (AffineSubspace ℝ (EuclideanSpace ℝ (Fin 2))), have := sunnyPred; …Mentions: Imo2025P1.sunnyPred