Skip to content

Commit cfc440c

Browse files
author
lean-agent-app[bot]
committed
Agent: Add projection OrientedSmoothCurve → SmoothCurve with causal compatibil…
- Define `OrientedSmoothCurve.toSmoothCurve` as the canonical forgetful map induced on the quotient, using the fact that `OrientedSmoothPathEquiv` refines `SmoothPathEquiv`. - Prove it is surjective and commutes with `ofPath` (simp lemma). - Show the timelike and causal predicates factor through the projection via `isTimelikeSmoothCurve_toSmoothCurve_ofPath` and `isCausalSmoothCurve_toSmoothCurve_ofPath`. - Derive that future- and past-oriented curves project to causal smooth curves. Blueprint: aqft-in-lean Repository: physicslib/physicslib4 Agent job: 34fd85b2-00cc-4ef7-8827-ded52fd243a1 Conversation: 8c3f8f53-54fb-4b75-a25c-1a20a5ce2abf
1 parent 8fe8ecf commit cfc440c

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

Physicslib4/Spacetime/Curves.lean

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,63 @@ theorem isPastOrientedCurve_ofPath_iff {M : Spacetime} (t : M.TimeOrientation)
697697
· intro hpo
698698
exact ⟨μ, rfl, hpo⟩
699699

700+
/-! ### Projection to the coarser quotient
701+
702+
Every orientation-preserving reparametrisation is a smooth reparametrisation, so
703+
there is a canonical projection `OrientedSmoothCurve → SmoothCurve` forgetting the
704+
orientation. It sends `ofPath μ` to `ofPath μ`, hence is compatible with the
705+
(orientation-independent) timelike and causal predicates. -/
706+
707+
/-- The canonical projection from oriented smooth curves to smooth curves,
708+
forgetting the orientation. Well-defined because `OrientedSmoothPathEquiv` refines
709+
`SmoothPathEquiv`. -/
710+
def OrientedSmoothCurve.toSmoothCurve (c : OrientedSmoothCurve M) : SmoothCurve M :=
711+
Quot.lift (fun μ => SmoothCurve.ofPath M μ)
712+
(fun _ _ h => Quot.sound h.toSmoothPathEquiv) c
713+
714+
@[simp] theorem OrientedSmoothCurve.toSmoothCurve_ofPath (μ : M.SmoothPath) :
715+
(OrientedSmoothCurve.ofPath M μ).toSmoothCurve = SmoothCurve.ofPath M μ := rfl
716+
717+
/-- The projection is surjective: every smooth curve underlies an oriented one. -/
718+
theorem OrientedSmoothCurve.toSmoothCurve_surjective :
719+
Function.Surjective (OrientedSmoothCurve.toSmoothCurve M) := by
720+
intro c
721+
obtain ⟨μ, rfl⟩ := Quot.exists_rep c
722+
exact ⟨OrientedSmoothCurve.ofPath M μ, rfl⟩
723+
724+
/-- **Compatibility with timelikeness.** The smooth curve underlying an oriented
725+
smooth curve `ofPath μ` is timelike iff `μ` is — the timelike predicate factors
726+
through the projection. -/
727+
theorem isTimelikeSmoothCurve_toSmoothCurve_ofPath (μ : M.SmoothPath) :
728+
IsTimelikeSmoothCurve M (OrientedSmoothCurve.ofPath M μ).toSmoothCurve
729+
↔ SmoothPath.IsTimelike M μ := by
730+
rw [OrientedSmoothCurve.toSmoothCurve_ofPath]
731+
exact isTimelikeSmoothCurve_ofPath_iff μ
732+
733+
/-- **Compatibility with causality.** -/
734+
theorem isCausalSmoothCurve_toSmoothCurve_ofPath (μ : M.SmoothPath) :
735+
IsCausalSmoothCurve M (OrientedSmoothCurve.ofPath M μ).toSmoothCurve
736+
↔ SmoothPath.IsCausal M μ := by
737+
rw [OrientedSmoothCurve.toSmoothCurve_ofPath]
738+
exact isCausalSmoothCurve_ofPath_iff μ
739+
740+
/-- A future-oriented oriented smooth curve projects to a causal smooth curve
741+
(future-pointing tangents are timelike or null). -/
742+
theorem IsFutureOrientedCurve.isCausal_toSmoothCurve {t : M.TimeOrientation}
743+
{c : OrientedSmoothCurve M} (h : IsFutureOrientedCurve M t c) :
744+
IsCausalSmoothCurve M c.toSmoothCurve := by
745+
obtain ⟨μ, rfl, hfo⟩ := h
746+
exact (isCausalSmoothCurve_toSmoothCurve_ofPath M μ).mpr
747+
(fun s hs => M.isTimelike_or_isNull_of_isFuturePointing t (hfo s hs))
748+
749+
/-- A past-oriented oriented smooth curve projects to a causal smooth curve. -/
750+
theorem IsPastOrientedCurve.isCausal_toSmoothCurve {t : M.TimeOrientation}
751+
{c : OrientedSmoothCurve M} (h : IsPastOrientedCurve M t c) :
752+
IsCausalSmoothCurve M c.toSmoothCurve := by
753+
obtain ⟨μ, rfl, hpo⟩ := h
754+
exact (isCausalSmoothCurve_toSmoothCurve_ofPath M μ).mpr
755+
(fun s hs => M.isTimelike_or_isNull_of_isPastPointing t (hpo s hs))
756+
700757
/-! ### Endpoints -/
701758

702759
/--

0 commit comments

Comments
 (0)