Documentation

CsdLean4.CV.RadarCoordinates

Radar coordinates from two clock readings, and their error bounds #

Category: 3-Local (CV; the interface in which the clock-and-echo capstone states its conclusion). BACKLOG #184 (out of #39; the second of #183–#189).

A single radar exchange is a pair of clock readings at A: the emission reading τ₋ and the return reading τ₊, with τ₋ ≤ τ₊ as the domain of the assignment. From them

T_A = (τ₊ + τ₋) / 2, D_A = (τ₊ − τ₋) / 2, R_A = c₀ · D_A,

the radar time, the radar separation in time units, and the radar distance once a calibration constant c₀ > 0 converts time units to length units.

Honest scope #

References: specs/BACKLOG.md #184, #183, #186, #187, #39; specs/records-to-spacetime-scoping.md §4 (constants are constraints, not outputs); CV/SignalExchange.lean (hopTime, roundTrip).

Readings and coordinates #

One radar exchange as read at A: the emission reading τ₋ and the return reading τ₊, with τ₋ ≤ τ₊ as the domain of the assignment.

  • emit : ℝ

    The clock reading at emission.

  • ret : ℝ

    The clock reading at return.

  • emit_le_ret : self.emit ≤ self.ret

    The domain: the return is read no earlier than the emission.

Instances For
    theorem CSD.CV.RadarReadings.ext {x y : RadarReadings} (emit : x.emit = y.emit) (ret : x.ret = y.ret) :
    x = y

    The radar time T_A = (τ₊ + τ₋) / 2.

    Equations
    Instances For

      The radar separation in time units, D_A = (τ₊ − τ₋) / 2.

      Equations
      Instances For
        noncomputable def CSD.CV.RadarReadings.radarDist (r : RadarReadings) (c₀ : ℝ) :

        The radar distance R_A = c₀ · D_A, with c₀ a calibration constant converting time units to length units.

        Equations
        Instances For

          Elementary bounds #

          theorem CSD.CV.RadarReadings.radarDist_nonneg (r : RadarReadings) {c₀ : ℝ} (hc : 0 ≤ c₀) :
          0 ≤ r.radarDist c₀

          The readings and the coordinates determine each other #

          ★ Equal coordinates give equal readings (the converse, equal readings give equal coordinates, is congrArg).

          A clock-origin shift #

          Shift the clock origin by s: both readings move by s.

          Equations
          Instances For

            ★ A clock-origin shift moves the radar time by the shift.

            ★ A clock-origin shift leaves the radar separation unchanged.

            A positive rescaling of the clock unit #

            Rescale the clock unit by λ > 0: both readings are multiplied by λ.

            Equations
            Instances For
              theorem CSD.CV.RadarReadings.radarTime_rescale (r : RadarReadings) (lam : ℝ) (hlam : 0 < lam) :
              (r.rescale lam hlam).radarTime = lam * r.radarTime
              theorem CSD.CV.RadarReadings.radarSep_rescale (r : RadarReadings) (lam : ℝ) (hlam : 0 < lam) :
              (r.rescale lam hlam).radarSep = lam * r.radarSep
              theorem CSD.CV.RadarReadings.radarDist_rescale (r : RadarReadings) (c₀ lam : ℝ) (hlam : 0 < lam) :
              (r.rescale lam hlam).radarDist c₀ = lam * r.radarDist c₀

              ★ The coordinates transform consistently under a change of clock unit.

              theorem CSD.CV.RadarReadings.radarDist_rescale_eq (r : RadarReadings) (c₀ lam : ℝ) (hlam : 0 < lam) :
              (r.rescale lam hlam).radarDist c₀ = r.radarDist (c₀ * lam)

              The calibration constant absorbs the unit: clock unit λ with constant c₀ gives the same distance as clock unit 1 with constant c₀ λ. Nothing fixes c₀ on its own.

              Bounded endpoint errors give bounded coordinate errors #

              theorem CSD.CV.RadarReadings.abs_radarTime_sub_le {r r' : RadarReadings} {δ : ℝ} (he : |r'.emit - r.emit| ≤ δ) (hr : |r'.ret - r.ret| ≤ δ) :

              ★★ |T̂_A − T_A| ≤ δ when each endpoint reading is off by at most δ.

              theorem CSD.CV.RadarReadings.abs_radarSep_sub_le {r r' : RadarReadings} {δ : ℝ} (he : |r'.emit - r.emit| ≤ δ) (hr : |r'.ret - r.ret| ≤ δ) :

              ★★ |D̂_A − D_A| ≤ δ when each endpoint reading is off by at most δ.

              theorem CSD.CV.RadarReadings.abs_radarDist_sub_le {r r' : RadarReadings} {δ c₀ : ℝ} (hc : 0 ≤ c₀) (he : |r'.emit - r.emit| ≤ δ) (hr : |r'.ret - r.ret| ≤ δ) :
              |r'.radarDist c₀ - r.radarDist c₀| ≤ c₀ * δ

              ★★ |R̂_A − R_A| ≤ c₀ δ for a fixed nonnegative calibration constant.

              Reproducibility, and the arithmetic of #183's witness #

              Two exchanges of equal duration have equal separation, whatever their emission readings.

              The readings of an exchange emitted at τ and lasting d ≥ 0.

              Equations
              Instances For
                theorem CSD.CV.RadarReadings.radarSep_ofDuration (τ d : ℝ) (hd : 0 ≤ d) :
                (ofDuration τ d hd).radarSep = d / 2
                theorem CSD.CV.RadarReadings.radarSep_roundTrip {J ħ : ℝ} (hJ : 0 < J) (hħ : 0 < ħ) (τ : ℝ) :
                (ofDuration τ (roundTrip J ħ) ⋯).radarSep = hopTime J ħ

                The arithmetic of #183's witness: an exchange lasting the round trip 2 τ_hop has radar separation τ_hop, whatever the emission reading. This is what a clock reading the hop exactly would produce; that the readings are such records is #186.

                The package #

                theorem CSD.CV.RadarReadings.radar_coordinates (r : RadarReadings) :
                (r.emit ≤ r.radarTime ∧ r.radarTime ≤ r.ret) ∧ 0 ≤ r.radarSep ∧ (r.radarTime - r.radarSep = r.emit ∧ r.radarTime + r.radarSep = r.ret) ∧ (∀ (s : ℝ), (r.shift s).radarTime = r.radarTime + s ∧ (r.shift s).radarSep = r.radarSep) ∧ (∀ (lam : ℝ) (hlam : 0 < lam), (r.rescale lam hlam).radarTime = lam * r.radarTime ∧ (r.rescale lam hlam).radarSep = lam * r.radarSep) ∧ ∀ (r' : RadarReadings) (δ c₀ : ℝ), 0 ≤ c₀ → |r'.emit - r.emit| ≤ δ → |r'.ret - r.ret| ≤ δ → |r'.radarTime - r.radarTime| ≤ δ ∧ |r'.radarSep - r.radarSep| ≤ δ ∧ |r'.radarDist c₀ - r.radarDist c₀| ≤ c₀ * δ

                ★★ Radar coordinates. On the domain τ₋ ≤ τ₊: τ₋ ≤ T_A ≤ τ₊, D_A ≥ 0; the readings are recovered from the coordinates; a clock-origin shift moves T_A by the shift and fixes D_A; a positive rescaling of the clock unit scales both; endpoint errors ≤ δ give coordinate errors ≤ δ and a distance error ≤ c₀ δ.