Documentation

CsdLean4.RecordLayer.ClockAndEcho

The autonomous clock-and-echo model on one arena #

Category: 7-SigmaLayer (the record layer). BACKLOG #202, the dynamics half (out of #39; the author's third operational-geometry brief's one exact deliverable: a finite autonomous clock-and-echo model whose emission and return timestamps are physical records at the same station, with a derived round-trip timing bound and explicit detector back-reaction).

#200 read the round trip off A's two records against #185's scheduled clock. Here the clock is #201's hand clock — one more carrier and one more pointer, at A — and the whole device sits on one arena with one two-time evolution:

ClockEchoArena = EchoArena × ActiveArena,

the echo's carrier with its two pointers, and the clock's carrier with its hand. Nothing in the evolution tests t_Σ: the echo's writes are activated by the echo's carrier, the clock's ticks by the clock's carrier, and the timestamps are the hand's count, read while A's emission record and A's return record display. Every detector's back-reaction is in the model as the detuning of its own carrier.

Honest scope #

References: specs/BACKLOG.md #202, #199, #200, #201, #194, #195, #39; RecordLayer/EchoArena.lean, RecordLayer/EchoRadar.lean (echoReturnDelay, abs_detunedRoundTrip_sub_roundTrip_le), RecordLayer/HandClock.lean (hand, handReading, abs_handReading_sub_le, handCount_mono, tickWrite), CV/RadarCoordinates.lean.

The arena and its evolution #

@[reducible, inline]

The arena of the clock-and-echo model: the echo arena and the clock's carrier–pointer system.

Equations
Instances For

    The product instance, which instance search does not find at this depth.

    The product instance, which instance search does not find at this depth.

    The one two-time evolution: the echo's and the clock's, side by side.

    Equations
    Instances For
      theorem CSD.RecordLayer.clockEchoEvolve_comp (J ħ : ℝ) (A B : PointerCoupling) (Jc : ℝ) (C : PointerCoupling) (s t u : SigmaLayer.OnticTime) :
      clockEchoEvolve J ħ A B Jc C t u ∘ clockEchoEvolve J ħ A B Jc C s t = clockEchoEvolve J ħ A B Jc C s u

      The two-time law.

      theorem CSD.RecordLayer.clockEchoEvolve_shift (J ħ : ℝ) (A B : PointerCoupling) (Jc : ℝ) (C : PointerCoupling) (s t a : SigmaLayer.OnticTime) :
      clockEchoEvolve J ħ A B Jc C (s + a) (t + a) = clockEchoEvolve J ħ A B Jc C s t

      ★ Autonomy: no test of t_Σ anywhere in the device.

      noncomputable def CSD.RecordLayer.clockEchoLabel (K : ℕ) (x : ClockEchoArena) :

      The clock label: the hand's count.

      Equations
      Instances For

        The writes on the one arena #

        The ready set: both echo pointers ready, the hand in its first half-arc.

        Equations
        Instances For
          noncomputable def CSD.RecordLayer.clockEchoEmission {J ħ : ℝ} (A B : PointerCoupling) {Jc : ℝ} (C : PointerCoupling) {qA qB qc : LF4.KTorus} {K : ℕ} (hJ : 0 < J) (hħ : 0 < ħ) (hqA : qA ∈ readyArc 2) (hqB : qB ∈ readyArc 2) (hr : 0 < senderRate A ħ qA) (hslow : 3 * (senderRate A ħ qA * echoLoss A B J qA qB) ≤ echoRate A B J ħ qA qB) (hqc : qc ∈ handReady K) :

          ★★ The emission record on the one arena: A's first arc, written by the echo's carrier.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            noncomputable def CSD.RecordLayer.clockEchoReception {J ħ : ℝ} (A B : PointerCoupling) {Jc : ℝ} (C : PointerCoupling) {qA qB qc : LF4.KTorus} {K : ℕ} (hJ : 0 < J) (hħ : 0 < ħ) (hqA : qA ∈ readyArc 2) (hqB : qB ∈ readyArc 2) (hκ : 0 < receiverDrift A B J ħ qA qB) (hslow : 3 * receiverDrift A B J ħ qA qB ≤ 2 * echoRate A B J ħ qA qB) (hqc : qc ∈ handReady K) :

            ★★ The reception record on the one arena: B's arc.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              noncomputable def CSD.RecordLayer.clockEchoReturn {J ħ : ℝ} (A B : PointerCoupling) {Jc : ℝ} (C : PointerCoupling) {qA qB qc : LF4.KTorus} {K : ℕ} (hJ : 0 < J) (hħ : 0 < ħ) (hqA : qA ∈ readyArc 2) (hqB : qB ∈ readyArc 2) (hr : 0 < senderRate A ħ qA) (hslow : 3 * (senderRate A ħ qA * echoLoss A B J qA qB) ≤ echoRate A B J ħ qA qB) (hqc : qc ∈ handReady K) :

              ★★ The return record on the one arena: A's second arc.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                noncomputable def CSD.RecordLayer.clockEchoTick {J ħ : ℝ} (A B : PointerCoupling) {Jc : ℝ} (C : PointerCoupling) {qA qB qc : LF4.KTorus} {K : ℕ} (hJc : 0 < Jc) (hħ : 0 < ħ) (hqA : qA ∈ readyArc 2) (hqB : qB ∈ readyArc 2) (hK : 0 < K) (hqc : qc ∈ handReady K) (hκc : 0 < handRate Jc ħ C.g ⋯ qc) (hslowc : ↑K * handRate Jc ħ C.g ⋯ qc ≤ handFreq Jc ħ C.g ⋯ qc) {n : ℕ} (hn1 : 1 ≤ n) (hnK : n + 1 ≤ K) :

                ★★ Tick n of the clock on the one arena, written by the clock's carrier.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  theorem CSD.RecordLayer.emissionLabel_time {J ħ : ℝ} (A B : PointerCoupling) {Jc : ℝ} (C : PointerCoupling) {qA qB qc : LF4.KTorus} {K : ℕ} (hJ : 0 < J) (hħ : 0 < ħ) (hqA : qA ∈ readyArc 2) (hqB : qB ∈ readyArc 2) (hr : 0 < senderRate A ħ qA) (hslow : 3 * (senderRate A ħ qA * echoLoss A B J qA qB) ≤ echoRate A B J ħ qA qB) (hqc : qc ∈ handReady K) :
                  ((clockEchoEmission A B C hJ hħ hqA hqB hr hslow hqc).toRecordEvent (clockEchoLabel K)).time = handCount K (hand Jc ħ C.g ⋯ (emitEnd (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB)) qc)

                  The emission event, labelled by the hand: the hand's count at the completion of the emission write.

                  theorem CSD.RecordLayer.returnLabel_time {J ħ : ℝ} (A B : PointerCoupling) {Jc : ℝ} (C : PointerCoupling) {qA qB qc : LF4.KTorus} {K : ℕ} (hJ : 0 < J) (hħ : 0 < ħ) (hqA : qA ∈ readyArc 2) (hqB : qB ∈ readyArc 2) (hr : 0 < senderRate A ħ qA) (hslow : 3 * (senderRate A ħ qA * echoLoss A B J qA qB) ≤ echoRate A B J ħ qA qB) (hqc : qc ∈ handReady K) :
                  ((clockEchoReturn A B C hJ hħ hqA hqB hr hslow hqc).toRecordEvent (clockEchoLabel K)).time = handCount K (hand Jc ħ C.g ⋯ (returnEnd (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB)) qc)

                  The return event, labelled by the hand.

                  The readings, the budget and the bound #

                  noncomputable def CSD.RecordLayer.clockReadingAt (Jc ħ : ℝ) (C : PointerCoupling) (K : ℕ) (qc : LF4.KTorus) (t : ℝ) :

                  The clock's reading at time t: the hand's count times the derived calibration.

                  Equations
                  Instances For
                    noncomputable def CSD.RecordLayer.clockResolution (Jc ħ : ℝ) (C : PointerCoupling) (K : ℕ) (qc : LF4.KTorus) :

                    The clock's resolution: τ_tick + 1/(2ω_c).

                    Equations
                    Instances For
                      theorem CSD.RecordLayer.clockReadingAt_mono {ħ Jc : ℝ} (C : PointerCoupling) {qc : LF4.KTorus} {K : ℕ} (hJc : 0 < Jc) (hħ : 0 < ħ) (hK : 0 < K) (hqc : qc ∈ handReady K) (hκc : 0 < handRate Jc ħ C.g ⋯ qc) {s t : ℝ} (hs : 0 ≤ s) (hst : s ≤ t) (ht : t ≤ handHorizon K (handRate Jc ħ C.g ⋯ qc) (handFreq Jc ħ C.g ⋯ qc)) :
                      clockReadingAt Jc ħ C K qc s ≤ clockReadingAt Jc ħ C K qc t
                      noncomputable def CSD.RecordLayer.clockEchoReadings {ħ Jc : ℝ} (C : PointerCoupling) {qc : LF4.KTorus} {K : ℕ} (hJc : 0 < Jc) (hħ : 0 < ħ) (hK : 0 < K) (hqc : qc ∈ handReady K) (hκc : 0 < handRate Jc ħ C.g ⋯ qc) {t₁ t₂ : ℝ} (h₁ : 0 ≤ t₁) (h₁₂ : t₁ ≤ t₂) (h₂ : t₂ ≤ handHorizon K (handRate Jc ħ C.g ⋯ qc) (handFreq Jc ħ C.g ⋯ qc)) :

                      The measured readings: the hand at a time t₁ while the emission record displays and at a time t₂ while the return record displays, both within the clock's horizon.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        theorem CSD.RecordLayer.clockEchoReadings_eq_labels {J ħ : ℝ} (A B : PointerCoupling) {Jc : ℝ} (C : PointerCoupling) {qA qB qc : LF4.KTorus} {K : ℕ} (hJ : 0 < J) (hħ : 0 < ħ) (hqA : qA ∈ readyArc 2) (hqB : qB ∈ readyArc 2) (hr : 0 < senderRate A ħ qA) (hslow : 3 * (senderRate A ħ qA * echoLoss A B J qA qB) ≤ echoRate A B J ħ qA qB) (hJc : 0 < Jc) (hK : 0 < K) (hqc : qc ∈ handReady K) (hκc : 0 < handRate Jc ħ C.g ⋯ qc) (h₂ : returnEnd (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB) ≤ handHorizon K (handRate Jc ħ C.g ⋯ qc) (handFreq Jc ħ C.g ⋯ qc)) :
                        (clockEchoReadings C hJc hħ hK hqc hκc ⋯ ⋯ h₂).emit = ↑((clockEchoEmission A B C hJ hħ hqA hqB hr hslow hqc).toRecordEvent (clockEchoLabel K)).time * tickTime K (handRate Jc ħ C.g ⋯ qc) ∧ (clockEchoReadings C hJc hħ hK hqc hκc ⋯ ⋯ h₂).ret = ↑((clockEchoReturn A B C hJ hħ hqA hqB hr hslow hqc).toRecordEvent (clockEchoLabel K)).time * tickTime K (handRate Jc ħ C.g ⋯ qc)

                        ★★ At the write completions the two timestamps are τ_tick times the hand labels of A's two events.

                        noncomputable def CSD.RecordLayer.clockEchoBudget (A B : PointerCoupling) (J ħ : ℝ) (qA qB : LF4.KTorus) (Jc : ℝ) (C : PointerCoupling) (K : ℕ) (qc : LF4.KTorus) :

                        The derived round-trip budget: the clock's resolution, the retention window, the emission write's completion, the return write's response, the two transfers.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          theorem CSD.RecordLayer.abs_clockEchoReadings_emit_sub_le {J ħ : ℝ} (A B : PointerCoupling) {Jc : ℝ} (C : PointerCoupling) {qA qB qc : LF4.KTorus} {K : ℕ} (hJ : 0 < J) (hħ : 0 < ħ) (hJc : 0 < Jc) (hK : 0 < K) (hqc : qc ∈ handReady K) (hκc : 0 < handRate Jc ħ C.g ⋯ qc) {t₁ t₂ : ℝ} (h₁ : 0 ≤ t₁) (h₁₂ : t₁ ≤ t₂) (h₂ : t₂ ≤ handHorizon K (handRate Jc ħ C.g ⋯ qc) (handFreq Jc ħ C.g ⋯ qc)) (hemit : emitEnd (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB) ≤ t₁ ∧ t₁ ≤ emitEnd (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB) + senderWindow (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB)) :
                          |(clockEchoReadings C hJc hħ hK hqc hκc h₁ h₁₂ h₂).emit - 0| ≤ clockEchoBudget A B J ħ qA qB Jc C K qc

                          ★★ The emission timestamp is within the budget of 0.

                          theorem CSD.RecordLayer.abs_clockEchoReadings_ret_sub_le {J ħ : ℝ} (A B : PointerCoupling) {Jc : ℝ} (C : PointerCoupling) {qA qB qc : LF4.KTorus} {K : ℕ} (hJ : 0 < J) (hħ : 0 < ħ) (hr : 0 < senderRate A ħ qA) (hJc : 0 < Jc) (hK : 0 < K) (hqc : qc ∈ handReady K) (hκc : 0 < handRate Jc ħ C.g ⋯ qc) {t₁ t₂ : ℝ} (h₁ : 0 ≤ t₁) (h₁₂ : t₁ ≤ t₂) (h₂ : t₂ ≤ handHorizon K (handRate Jc ħ C.g ⋯ qc) (handFreq Jc ħ C.g ⋯ qc)) (hret : returnEnd (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB) ≤ t₂ ∧ t₂ ≤ returnEnd (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB) + senderWindow (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB)) :
                          |(clockEchoReadings C hJc hħ hK hqc hκc h₁ h₁₂ h₂).ret - CV.roundTrip J ħ| ≤ clockEchoBudget A B J ħ qA qB Jc C K qc

                          ★★ The return timestamp is within the budget of 2τ_hop.

                          theorem CSD.RecordLayer.autonomous_clock_and_echo {J ħ : ℝ} (A B : PointerCoupling) {Jc : ℝ} (C : PointerCoupling) {qA qB qc : LF4.KTorus} {K : ℕ} (hJ : 0 < J) (hħ : 0 < ħ) (hqA : qA ∈ readyArc 2) (hqB : qB ∈ readyArc 2) (hr : 0 < senderRate A ħ qA) (hslow : 3 * (senderRate A ħ qA * echoLoss A B J qA qB) ≤ echoRate A B J ħ qA qB) (hκ : 0 < receiverDrift A B J ħ qA qB) (hslowB : 3 * receiverDrift A B J ħ qA qB ≤ 2 * echoRate A B J ħ qA qB) (hJc : 0 < Jc) (hK : 0 < K) (hqc : qc ∈ handReady K) (hκc : 0 < handRate Jc ħ C.g ⋯ qc) (hslowc : ↑K * handRate Jc ħ C.g ⋯ qc ≤ handFreq Jc ħ C.g ⋯ qc) {t₁ t₂ : ℝ} (h₂ : t₂ ≤ handHorizon K (handRate Jc ħ C.g ⋯ qc) (handFreq Jc ħ C.g ⋯ qc)) (hemit : emitEnd (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB) ≤ t₁ ∧ t₁ ≤ emitEnd (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB) + senderWindow (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB)) (hret : returnEnd (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB) ≤ t₂ ∧ t₂ ≤ returnEnd (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB) + senderWindow (senderRate A ħ qA) (echoLoss A B J qA qB) (echoRate A B J ħ qA qB)) {c₀ : ℝ} (hc₀ : 0 ≤ c₀) :
                          (∀ (s t u : SigmaLayer.OnticTime), clockEchoEvolve J ħ A B Jc C t u ∘ clockEchoEvolve J ħ A B Jc C s t = clockEchoEvolve J ħ A B Jc C s u) ∧ (∀ (s t a : SigmaLayer.OnticTime), clockEchoEvolve J ħ A B Jc C (s + a) (t + a) = clockEchoEvolve J ħ A B Jc C s t) ∧ (∀ (s t : SigmaLayer.OnticTime) (p₀ p₁ : CV.FieldArena 2 2), MeasureTheory.MeasurePreserving (clockEchoEvolve J ħ A B Jc C s t) (((Matrix.UnitaryGroup.fsMeasure p₀).prod MeasureTheory.volume).prod ((Matrix.UnitaryGroup.fsMeasure p₁).prod MeasureTheory.volume)) (((Matrix.UnitaryGroup.fsMeasure p₀).prod MeasureTheory.volume).prod ((Matrix.UnitaryGroup.fsMeasure p₁).prod MeasureTheory.volume))) ∧ (clockEchoEmission A B C hJ hħ hqA hqB hr hslow hqc).site = {0} ∧ (clockEchoReception A B C hJ hħ hqA hqB hκ hslowB hqc).site = {1} ∧ (clockEchoReturn A B C hJ hħ hqA hqB hr hslow hqc).site = {0} ∧ (∀ (n : ℕ) (hn1 : 1 ≤ n) (hnK : n + 1 ≤ K), (clockEchoTick A B C hJc hħ hqA hqB hK hqc hκc hslowc hn1 hnK).site = {0} ∧ (clockEchoTick A B C hJc hħ hqA hqB hK hqc hκc hslowc hn1 hnK).value = n) ∧ ∃ (h₁ : 0 ≤ t₁) (h₁₂ : t₁ ≤ t₂), senderRead (echoFlow J ħ A B t₁ (CV.msgPoint 1, qA, qB)) = 1 ∧ senderRead (echoFlow J ħ A B t₂ (CV.msgPoint 1, qA, qB)) = 2 ∧ (idealEchoReadings hJ hħ).radarSep = CV.hopTime J ħ ∧ |(clockEchoReadings C hJc hħ hK hqc hκc h₁ h₁₂ h₂).radarTime - (idealEchoReadings hJ hħ).radarTime| ≤ clockEchoBudget A B J ħ qA qB Jc C K qc ∧ |(clockEchoReadings C hJc hħ hK hqc hκc h₁ h₁₂ h₂).radarSep - (idealEchoReadings hJ hħ).radarSep| ≤ clockEchoBudget A B J ħ qA qB Jc C K qc ∧ |(clockEchoReadings C hJc hħ hK hqc hκc h₁ h₁₂ h₂).radarDist c₀ - (idealEchoReadings hJ hħ).radarDist c₀| ≤ c₀ * clockEchoBudget A B J ħ qA qB Jc C K qc

                          ★★★ The autonomous clock-and-echo model — the brief's deliverable. On one arena with one autonomous two-time measure-preserving evolution: the emission, the reception, the return and the clock's ticks are ActualOccurrences, every one activated by a carrier; both radar timestamps are readings of the autonomous clock at A, taken while A's emission record (value 1) and A's return record (value 2) display; and against the ideal round trip (0, 2τ_hop), whose radar separation is τ_hop, the measured radar time, separation and distance are within the derived budget (τ_tick + 1/(2ω_c)) + senderWindow + emitEnd + |echoReturnDelay| + 2 transferError.