Documentation

LeanPool.ConwaySoifer.Certificates.ModelSound

The initial model follows from the canonical case hypotheses #

initModel_holds: if Canonical c T r s (and, when hi ≤ 1/14, SmallStrengthening), then the model rebuilt by initModel for the interval (lo, hi] ∋ s holds for T at x = s - lo. Together with CertData.check_sound this turns every checked certificate into the exclusion of its parameter interval in its contact case.

Evaluation of the constructed points #

theorem ConwaySoifer.Certificates.realPt_mkPt {denI : ℤ} {lo a b c d : ℚ} {P : IPoint} (h : mkPt denI lo a b c d = some P) (hden : 0 < denI) (x : ℝ) :
realPt (↑denI) P x = (↑a + ↑c * (↑lo + x), ↑b + ↑d * (↑lo + x))

The real point represented by mkPt.

theorem ConwaySoifer.Certificates.evalF_mkPt_const {denI : ℤ} {lo a b : ℚ} {P : IPoint} (h : mkPt denI lo a b 0 0 = some P) (x : ℝ) :
evalF P x = ↑denI • (↑a, ↑b)

Rational data versus real data #

theorem ConwaySoifer.Certificates.vQ_cast (i : Fin 6) :
(↑(vQ i).1, ↑(vQ i).2) = vertex i
theorem ConwaySoifer.Certificates.wQ_cast (j : Fin 3) :
(↑(wQ j).1, ↑(wQ j).2) = corner j
theorem ConwaySoifer.Certificates.kQ_cast (j : Fin 6) :
(↑(kQ j).1, ↑(kQ j).2) = coreDir j

Membership in the raw lists #

theorem ConwaySoifer.Certificates.mem_corePts {lo hi : ℚ} {denI : ℤ} {P : IPoint} (h : some P ∈ corePts lo hi denI) :
∃ (j : Fin 6), mkPt denI lo 0 0 ((1 - hi) * (kQ j).1 / 3) ((1 - hi) * (kQ j).2 / 3) = some P
theorem ConwaySoifer.Certificates.mem_sidePts {lo : ℚ} {denI : ℤ} {i : Fin 6} {P : IPoint} (h : some P ∈ sidePts lo denI i) :
mkPt denI lo (vQ i).1 (vQ i).2 0 0 = some P ∨ mkPt denI lo (vQ i).1 (vQ i).2 ((vQ (i + 5)).1 - (vQ i).1) ((vQ (i + 5)).2 - (vQ i).2) = some P ∨ mkPt denI lo (vQ i).1 (vQ i).2 ((vQ (i + 1)).1 - (vQ i).1) ((vQ (i + 1)).2 - (vQ i).2) = some P
theorem ConwaySoifer.Certificates.mem_cornerPts {lo : ℚ} {denI : ℤ} {j : Fin 3} {P : IPoint} (h : some P ∈ cornerPts lo denI j) :
mkPt denI lo (wQ j).1 (wQ j).2 0 0 = some P ∨ mkPt denI lo (wQ j).1 (wQ j).2 ((vQ ⟨2 * ↑j, ⋯⟩).1 - (wQ j).1) ((vQ ⟨2 * ↑j, ⋯⟩).2 - (wQ j).2) = some P ∨ mkPt denI lo (wQ j).1 (wQ j).2 ((vQ ⟨2 * ↑j + 1, ⋯⟩).1 - (wQ j).1) ((vQ ⟨2 * ↑j + 1, ⋯⟩).2 - (wQ j).2) = some P
theorem ConwaySoifer.Certificates.mem_cornerMids {lo : ℚ} {denI : ℤ} {j : Fin 3} {P : IPoint} (h : some P ∈ cornerMids lo denI j) :
mkPt denI lo (((wQ j).1 + (vQ ⟨2 * ↑j, ⋯⟩).1) / 2) (((wQ j).2 + (vQ ⟨2 * ↑j, ⋯⟩).2) / 2) 0 0 = some P ∨ mkPt denI lo (((wQ j).1 + (vQ ⟨2 * ↑j + 1, ⋯⟩).1) / 2) (((wQ j).2 + (vQ ⟨2 * ↑j + 1, ⋯⟩).2) / 2) 0 0 = some P
theorem ConwaySoifer.Certificates.mem_rawB {c : Case} {lo hi : ℚ} {denI : ℤ} {j : Fin 10} {P : IPoint} (h : some P ∈ rawB c lo hi denI j) :
j = 0 ∧ some P ∈ corePts lo hi denI ∨ (∃ (i : Fin 6), j = sideIndex i ∧ (some P ∈ sidePts lo denI i ∨ c.isS = true ∧ i = recvIdx c ∧ some P = endpointPt c lo denI ∨ c = Case.Aown ∧ i = 0 ∧ some P = mid0Pt lo denI ∨ c = Case.Across ∧ i = 1 ∧ some P = mid0Pt lo denI)) ∨ ∃ (k : Fin 3), j = cornerIndex k ∧ (some P ∈ cornerPts lo denI k ∨ c.isS = false ∧ k = 0 ∧ some P = endpointPt c lo denI ∨ c.isS = true ∧ smallHi hi = true ∧ ↑k ≠ ↑(recvIdx c) / 2 ∧ some P ∈ cornerMids lo denI k ∨ c = Case.Aown ∧ smallHi hi = true ∧ k ≠ 0 ∧ some P ∈ cornerMids lo denI k)

Geometric meaning of the constructed points #

theorem ConwaySoifer.Certificates.mem_of_le_rayLen' (U : EquilateralTriangle) {v d : Point} (hv : v ∈ U.carrier) (hd : sqDist d (0, 0) = 1) {t : ℝ} (ht : 0 ≤ t) (hle : t ≤ rayLen U v d) :
theorem ConwaySoifer.Certificates.sidePts_mem {T : Configuration} {r s : ℝ} {c : ContactCase} (H : Canonical c T r s) {lo : ℚ} {denI : ℤ} (hden : 0 < denI) {i : Fin 6} {P : IPoint} (h : some P ∈ sidePts lo denI i) :
realPt (↑denI) P (s - ↑lo) ∈ (T (sideIndex i)).carrier

The real point of a side list entry.

theorem ConwaySoifer.Certificates.cornerPts_mem {T : Configuration} {r s : ℝ} {c : ContactCase} (H : Canonical c T r s) {lo : ℚ} {denI : ℤ} (hden : 0 < denI) {k : Fin 3} {P : IPoint} (h : some P ∈ cornerPts lo denI k) :
realPt (↑denI) P (s - ↑lo) ∈ (T (cornerIndex k)).carrier
theorem ConwaySoifer.Certificates.corePts_mem {T : Configuration} {r s : ℝ} {c : ContactCase} (H : Canonical c T r s) {lo hi : ℚ} {denI : ℤ} (hden : 0 < denI) (hhi : s ≤ ↑hi) (hhi1 : ↑hi ≤ 1) {P : IPoint} (h : some P ∈ corePts lo hi denI) :
realPt (↑denI) P (s - ↑lo) ∈ (T 0).carrier
theorem ConwaySoifer.Certificates.endpointPt_real {c : Case} {lo : ℚ} {denI : ℤ} (hden : 0 < denI) {P : IPoint} (h : endpointPt c lo denI = some P) (s : ℝ) :
realPt (↑denI) P (s - ↑lo) = minEndpoint c.toContact s
theorem ConwaySoifer.Certificates.mid0Pt_real {lo : ℚ} {denI : ℤ} (hden : 0 < denI) {P : IPoint} (h : mid0Pt lo denI = some P) (x : ℝ) :
realPt (↑denI) P x = extMid0
theorem ConwaySoifer.Certificates.cornerMids_real {lo : ℚ} {denI : ℤ} (hden : 0 < denI) {k : Fin 3} {P : IPoint} (h : some P ∈ cornerMids lo denI k) (x : ℝ) :
realPt (↑denI) P x = cornerMid k 0 ∨ realPt (↑denI) P x = cornerMid k 1
theorem ConwaySoifer.Certificates.exitDirPt_eval {c : Case} {lo : ℚ} {denI : ℤ} {P : IPoint} (h : exitDirPt c lo denI = some P) (x : ℝ) :
theorem ConwaySoifer.Certificates.backDirPt_eval {lo : ℚ} {denI : ℤ} {P : IPoint} (h : backDirPt lo denI = some P) (x : ℝ) :
evalF P x = ↑denI • sideDirection 1 false
theorem ConwaySoifer.Certificates.sext_k_ne {k : Fin 3} (hk : ↑k ≠ ↑(recvIdx Case.Sext) / 2) :
k ≠ 2
theorem ConwaySoifer.Certificates.sint_k_ne {k : Fin 3} (hk : ↑k ≠ ↑(recvIdx Case.Sint) / 2) :
k ≠ 0
theorem ConwaySoifer.Certificates.ordOf_some {c : Case} {hi : ℚ} {j : Fin 10} {i : Fin 6} (h : ordOf c hi j = some i) :
smallHi hi = true ∧ j = sideIndex i ∧ (c = Case.Sext → i ≠ 5) ∧ (c = Case.Sint → i ≠ 1) ∧ (c = Case.Aown → i ≠ 0) ∧ c ≠ Case.Across

The main theorem #

theorem ConwaySoifer.Certificates.initModel_holds {T : Configuration} {r s : ℝ} {c : Case} {lo hi : ℚ} {denI : ℤ} {M : Model} (hM : initModel c lo hi denI = some M) (hden : 0 < denI) (hhi1 : ↑hi ≤ 1) (H : Canonical c.toContact T r s) (hhi : s ≤ ↑hi) (hsmall : smallHi hi = true → SmallStrengthening c.toContact T r) :
ModelHolds M T (↑denI) (s - ↑lo)