feat(Analysis/ODE/GlobalExistence): prove uniqueness and semigroup properties - #67
Conversation
mcdoll
left a comment
There was a problem hiding this comment.
Thanks. Some comments below.
Can you also split the input-output changes into a separate PR?
| unfold γ₁ γ₂ | ||
| simp [hΦ.initial] |
There was a problem hiding this comment.
| unfold γ₁ γ₂ | |
| simp [hΦ.initial] | |
| simp [γ₁, γ₂, hΦ.initial] |
Untested, but if this does not work, use set .. with hγ₁
| simp [hΦ.initial] | ||
| have heq := IsIntegralCurve.eq_of_uniformlyLocallyLipschitz hv.uniformlyLocallyLipschitz | ||
| hf_curve hg_curve ht₀ | ||
| exact congrFun heq t |
| have ht₀ : γ₁ 0 = γ₂ 0 := by | ||
| unfold γ₁ γ₂ | ||
| simp [(hΦ (Φ x t')).2] | ||
| have heq := IsIntegralCurve.eq_of_uniformlyLocallyLipschitz hv.uniformlyLocallyLipschitz | ||
| hf_curve hg_curve ht₀ | ||
| exact congrFun heq t | ||
|
|
| have : γ₂ s = γ₁ s := hs.symm | ||
| rw [this] | ||
| exact hU |
There was a problem hiding this comment.
| have : γ₂ s = γ₁ s := hs.symm | |
| rw [this] | |
| exact hU | |
| rwa [hs.symm] |
?
| rw [hempty] at this | ||
| exact this | ||
| ext t | ||
| exact Set.ext_iff.mp huniv t |>.mpr trivial |
There was a problem hiding this comment.
grind should be able to prove this after you established huniv
| ext t₀ x₀ t | ||
| have heq := IsIntegralCurve.eq_of_uniformlyLocallyLipschitz hf | ||
| (hΦ.isIntegralCurve t₀ x₀) (hΦ'.isIntegralCurve t₀ x₀) | ||
| (by rw [hΦ.initial, hΦ'.initial]) | ||
| exact congrFun heq t | ||
|
|
There was a problem hiding this comment.
You probably can use ext : 2 and then you don't need congrFun (which should not be used anyway, rw is probably better in this case)
| exact Set.ext_iff.mp huniv t |>.mpr trivial | ||
|
|
||
| theorem unique (hΦ : IsFundamentalSolution Φ f) (hΦ' : IsFundamentalSolution Φ' f) | ||
| (hf : UniformlyLocallyLipschitz f) (_hf' : Continuous f) : |
There was a problem hiding this comment.
| (hf : UniformlyLocallyLipschitz f) (_hf' : Continuous f) : | |
| (hf : UniformlyLocallyLipschitz f) : |
87e7e02 to
c789b1b
Compare
|
Thanks for the review — all comments addressed, and the input/output change is now split out as #71. New commit
The InputOutput proofs ( |
| have hf_curve : IsIntegralCurve γ₁ (fun _ ↦ f) := (hΦ (Φ x t')).1 | ||
| have hg_curve : IsIntegralCurve γ₂ (fun _ ↦ f) := (hΦ x).1.comp_add t' |
There was a problem hiding this comment.
| have hf_curve : IsIntegralCurve γ₁ (fun _ ↦ f) := (hΦ (Φ x t')).1 | |
| have hg_curve : IsIntegralCurve γ₂ (fun _ ↦ f) := (hΦ x).1.comp_add t' | |
| have hf : IsIntegralCurve γ₁ (fun _ ↦ f) := (hΦ (Φ x t')).1 | |
| have hg : IsIntegralCurve γ₂ (fun _ ↦ f) := (hΦ x).1.comp_add t' |
| have heq := IsIntegralCurve.eq_of_uniformlyLocallyLipschitz hv.uniformlyLocallyLipschitz | ||
| hf_curve hg_curve ht₀ |
There was a problem hiding this comment.
| have heq := IsIntegralCurve.eq_of_uniformlyLocallyLipschitz hv.uniformlyLocallyLipschitz | |
| hf_curve hg_curve ht₀ | |
| have heq := hf.eq_of_uniformlyLocallyLipschitz hv.uniformlyLocallyLipschitz hg ht₀ |
| have hf_curve : IsIntegralCurve γ₁ (fun _ ↦ f) := hΦ.isIntegralCurve 0 (Φ' 0 x t') | ||
| have hg_curve : IsIntegralCurve γ₂ (fun _ ↦ f) := (hΦ.isIntegralCurve 0 x).comp_add t' |
There was a problem hiding this comment.
| have hf_curve : IsIntegralCurve γ₁ (fun _ ↦ f) := hΦ.isIntegralCurve 0 (Φ' 0 x t') | |
| have hg_curve : IsIntegralCurve γ₂ (fun _ ↦ f) := (hΦ.isIntegralCurve 0 x).comp_add t' | |
| have hf : IsIntegralCurve γ₁ (fun _ ↦ f) := hΦ.isIntegralCurve 0 (Φ' 0 x t') | |
| have hg : IsIntegralCurve γ₂ (fun _ ↦ f) := (hΦ.isIntegralCurve 0 x).comp_add t' |
| ext t₀ x₀ | ||
| have heq := IsIntegralCurve.eq_of_uniformlyLocallyLipschitz hf | ||
| (hΦ.isIntegralCurve t₀ x₀) (hΦ'.isIntegralCurve t₀ x₀) | ||
| (by rw [hΦ.initial, hΦ'.initial]) | ||
| rw [heq] | ||
|
|
There was a problem hiding this comment.
| ext t₀ x₀ | |
| have heq := IsIntegralCurve.eq_of_uniformlyLocallyLipschitz hf | |
| (hΦ.isIntegralCurve t₀ x₀) (hΦ'.isIntegralCurve t₀ x₀) | |
| (by rw [hΦ.initial, hΦ'.initial]) | |
| rw [heq] | |
| ext t₀ x₀ : 2 | |
| apply (hΦ.isIntegralCurve t₀ x₀).eq_of_uniformlyLocallyLipschitz hf (hΦ'.isIntegralCurve t₀ x₀) | |
| rw [hΦ.initial, hΦ'.initial] |
| have heq_ev := IsIntegralCurveAt.eventuallyEq hfK | ||
| (h1.isIntegralCurveAt s) hU1 | ||
| (h2.isIntegralCurveAt s) hU2 | ||
| hs | ||
| exact heq_ev.mono (fun s' hs' ↦ hs') | ||
| have huniv : ∀ s : ℝ, γ₁ s = γ₂ s := by | ||
| have h : {s : ℝ | γ₁ s = γ₂ s} = Set.univ := by | ||
| refine isClopen_iff.mp ⟨hclosed, hopen⟩ |>.resolve_left ?_ | ||
| intro hempty | ||
| have : t₀ ∈ ({s : ℝ | γ₁ s = γ₂ s} : Set ℝ) := heq | ||
| rw [hempty] at this | ||
| exact this | ||
| simpa [Set.ext_iff] using h |
There was a problem hiding this comment.
| have heq_ev := IsIntegralCurveAt.eventuallyEq hfK | |
| (h1.isIntegralCurveAt s) hU1 | |
| (h2.isIntegralCurveAt s) hU2 | |
| hs | |
| exact heq_ev.mono (fun s' hs' ↦ hs') | |
| have huniv : ∀ s : ℝ, γ₁ s = γ₂ s := by | |
| have h : {s : ℝ | γ₁ s = γ₂ s} = Set.univ := by | |
| refine isClopen_iff.mp ⟨hclosed, hopen⟩ |>.resolve_left ?_ | |
| intro hempty | |
| have : t₀ ∈ ({s : ℝ | γ₁ s = γ₂ s} : Set ℝ) := heq | |
| rw [hempty] at this | |
| exact this | |
| simpa [Set.ext_iff] using h | |
| have heq_ev := (h1.isIntegralCurveAt s).eventuallyEq hfK hU1 (h2.isIntegralCurveAt s) hU2 hs | |
| exact heq_ev.mono (fun s' hs' ↦ hs') | |
| have huniv : ∀ s : ℝ, γ₁ s = γ₂ s := by | |
| suffices {s : ℝ | γ₁ s = γ₂ s} = Set.univ by simpa [Set.ext_iff] | |
| refine isClopen_iff.mp ⟨hclosed, hopen⟩ |>.resolve_left ?_ | |
| have : t₀ ∈ ({s : ℝ | γ₁ s = γ₂ s} : Set ℝ) := heq | |
| grind |
|
Round-2 comments applied — thanks.
Commit |
Couple of proofs around existence theory