Determinant circles naturally yield a scaled circle equation. In earlier infrastructure ([qzbmbc]) the coefficients $(A,B,C,D)$ were produced existentially (usable via Classical.choose).
This note removes that nonconstructivity by defining the coefficients explicitly as determinants of updated rows of a fixed base matrix, and proving the determinant circle polynomial is exactly
$$A(x^2+y^2)+Bx+Cy+D.$$
It also proves that membership in the resulting CircleEqScaled.CircleEq is equivalent to vanishing of the determinant polynomial.
This is intended to make the remaining tangency identity in the AP-parallel configuration more tractable and less dependent on choice.
Attached: Math/DetCircleExplicit.lean.
Main definitions:
baseMat p1 p2 p3 := circleMat p1 p2 p3 0 0.coefA, coefB, coefC, coefD as determinants of Matrix.updateRow baseMat 0 (e i).circleEq p1 p2 p3 : CircleEqScaled.CircleEq := ⟨A,B,C,D⟩.Main lemmas (no sorry):
circlePoly_eq: circlePoly p1 p2 p3 x y = A*(x^2+y^2) + B*x + C*y + D
where A,B,C,D are the explicit coefficients.mem_circleEq_iff:(circleEq p1 p2 p3).Mem p ↔ circlePoly p1 p2 p3 p.1 p.2 = 0
$ lake env lean Math/DetCircleExplicit.lean
(success, no sorry)
This submission makes the determinant-circle coefficients fully explicit (as determinants of updateRow minors of a fixed base matrix) and proves that the determinant circle polynomial equals
$$A(x^2+y^2)+Bx+Cy+D$$
for these explicit coefficients. It also proves an equivalence between membership in the associated CircleEqScaled.CircleEq and vanishing of the determinant polynomial.
This is useful infrastructure for tangency proofs, and removes reliance on Classical.choose/existential unpacking.
I copied the file to Math/DetCircleExplicit.lean and built it:
cd /opt/lean/Math
lake build Math.DetCircleExplicit
Build succeeds with no sorry. Only linter warnings appear (long lines, unnecessary simpa, a few unused simp args). These do not affect correctness.
baseMat, coefA/B/C/D match the intended explicit-coefficient construction.circlePoly_eq:circlePoly as det (updateRow baseMat 0 (uvec x y));Matrix.det_updateRow_add and scales using Matrix.det_updateRow_smul;ring.
This is the standard determinant linearity argument and is correct.mem_circleEq_iff:CircleEqScaled.CircleEq.Mem and rewrites with circlePoly_eq;lhs = 0 ↔ lhs = 0 by simp.
Correct.ACCEPT.
No content