diff --git a/Mathlib/Probability/Process/Filtration.lean b/Mathlib/Probability/Process/Filtration.lean index 3b3dba152e8c11..aacfe0cc3c19f8 100644 --- a/Mathlib/Probability/Process/Filtration.lean +++ b/Mathlib/Probability/Process/Filtration.lean @@ -22,6 +22,9 @@ This file defines filtrations of a measurable space and ฯƒ-finite filtrations. `ฮผ` if for all `i`, `ฮผ.trim (f.le i)` is ฯƒ-finite. * `MeasureTheory.Filtration.natural`: the smallest filtration that makes a process adapted. That notion `adapted` is not defined yet in this file. See `MeasureTheory.adapted`. +* `MeasureTheory.Filtration.rightCont`: the right-continuation of a filtration. +* `MeasureTheory.Filtration.IsRightContinuous`: a filtration is right-continuous if it is equal + to its right-continuation. ## Main results @@ -245,6 +248,146 @@ end OfSet namespace Filtration +section IsRightContinuous + +open scoped Classical in +/-- Given a filtration `๐“•`, its **right continuation** is the filtration `๐“•โ‚Š` defined as follows: +- If `i` is isolated on the right, then `๐“•โ‚Š i := ๐“• i`; +- Otherwise, `๐“•โ‚Š i := โจ… j > i, ๐“• j`. +It is sometimes simply defined as `๐“•โ‚Š i := โจ… j > i, ๐“• j` when the index type is `โ„`. In the +general case this is not ideal however. If `i` is maximal for instance, then `๐“•โ‚Š i = โŠค`, which +is inconvenient because `๐“•โ‚Š` is not a `Filtration ฮน m` anymore. If the index type +is discrete (such as `โ„•`), then we would have `๐“• = ๐“•โ‚Š` (i.e. `๐“•` is right-continuous) only if +`๐“•` is constant. + +To avoid requiring a `TopologicalSpace` instance on `ฮน` in the definition, we endow `ฮน` with +the order topology `Preorder.topology` inside the definition. Say you write a statement about +`๐“•โ‚Š` which does not require a `TopologicalSpace` structure on `ฮน`, +but you wish to use a statement which requires a topology (such as `rightCont_apply`). +Then you can endow `ฮน` with the order topology by writing +```lean + letI := Preorder.topology ฮน + haveI : OrderTopology ฮน := โŸจrflโŸฉ +``` -/ +noncomputable irreducible_def rightCont [PartialOrder ฮน] (๐“• : Filtration ฮน m) : Filtration ฮน m := + letI : TopologicalSpace ฮน := Preorder.topology ฮน + { seq i := if (๐“[>] i).NeBot then โจ… j > i, ๐“• j else ๐“• i + mono' i j hij := by + simp only [gt_iff_lt] + split_ifs with hi hj hj + ยท exact le_iInfโ‚‚ fun k hkj โ†ฆ iInfโ‚‚_le k (hij.trans_lt hkj) + ยท obtain rfl | hj := eq_or_ne j i + ยท contradiction + ยท exact iInfโ‚‚_le j (lt_of_le_of_ne hij hj.symm) + ยท exact le_iInfโ‚‚ fun k hk โ†ฆ ๐“•.mono (hij.trans hk.le) + ยท exact ๐“•.mono hij + le' i := by + split_ifs with hi + ยท obtain โŸจj, hjโŸฉ := (frequently_gt_nhds i).exists + exact iInfโ‚‚_le_of_le j hj (๐“•.le j) + ยท exact ๐“•.le i } + +@[inherit_doc] scoped postfix:max "โ‚Š" => rightCont + +open scoped Classical in +lemma rightCont_apply [PartialOrder ฮน] [TopologicalSpace ฮน] [OrderTopology ฮน] + (๐“• : Filtration ฮน m) (i : ฮน) : + ๐“•โ‚Š i = if (๐“[>] i).NeBot then โจ… j > i, ๐“• j else ๐“• i := by + simp only [rightCont, OrderTopology.topology_eq_generate_intervals] + +lemma rightCont_eq_of_nhdsGT_eq_bot [PartialOrder ฮน] [TopologicalSpace ฮน] [OrderTopology ฮน] + (๐“• : Filtration ฮน m) {i : ฮน} (hi : ๐“[>] i = โŠฅ) : + ๐“•โ‚Š i = ๐“• i := by + rw [rightCont_apply, hi, neBot_iff, ne_self_iff_false, if_false] + +/-- If the index type is a `SuccOrder`, then `๐“•โ‚Š = ๐“•`. -/ +@[simp] lemma rightCont_eq_self [LinearOrder ฮน] [SuccOrder ฮน] (๐“• : Filtration ฮน m) : + ๐“•โ‚Š = ๐“• := by + letI := Preorder.topology ฮน; haveI : OrderTopology ฮน := โŸจrflโŸฉ + ext _ + rw [rightCont_eq_of_nhdsGT_eq_bot _ SuccOrder.nhdsGT] + +lemma rightCont_eq_of_isMax [PartialOrder ฮน] (๐“• : Filtration ฮน m) {i : ฮน} (hi : IsMax i) : + ๐“•โ‚Š i = ๐“• i := by + letI := Preorder.topology ฮน; haveI : OrderTopology ฮน := โŸจrflโŸฉ + exact rightCont_eq_of_nhdsGT_eq_bot _ (hi.Ioi_eq โ–ธ nhdsWithin_empty i) + +lemma rightCont_eq_of_exists_gt [LinearOrder ฮน] (๐“• : Filtration ฮน m) {i : ฮน} + (hi : โˆƒ j > i, Set.Ioo i j = โˆ…) : + ๐“•โ‚Š i = ๐“• i := by + letI := Preorder.topology ฮน; haveI : OrderTopology ฮน := โŸจrflโŸฉ + obtain โŸจj, hij, hIooโŸฉ := hi + have hcov : i โ‹– j := covBy_iff_Ioo_eq.mpr โŸจhij, hIooโŸฉ + exact rightCont_eq_of_nhdsGT_eq_bot _ <| CovBy.nhdsGT hcov + +/-- If `i` is not isolated on the right, then `๐“•โ‚Š i = โจ… j > i, ๐“• j`. This is for instance the case +when `ฮน` is a densely ordered linear order with no maximal elements and equipped with the order +topology, see `rightCont_eq`. -/ +lemma rightCont_eq_of_neBot_nhdsGT [PartialOrder ฮน] [TopologicalSpace ฮน] [OrderTopology ฮน] + (๐“• : Filtration ฮน m) (i : ฮน) [(๐“[>] i).NeBot] : + ๐“•โ‚Š i = โจ… j > i, ๐“• j := by + rw [rightCont_apply, if_pos โ€น(๐“[>] i).NeBotโ€บ] + +lemma rightCont_eq_of_not_isMax [LinearOrder ฮน] [DenselyOrdered ฮน] + (๐“• : Filtration ฮน m) {i : ฮน} (hi : ยฌIsMax i) : + ๐“•โ‚Š i = โจ… j > i, ๐“• j := by + letI := Preorder.topology ฮน; haveI : OrderTopology ฮน := โŸจrflโŸฉ + have : (๐“[>] i).NeBot := nhdsGT_neBot_of_exists_gt (not_isMax_iff.mp hi) + exact rightCont_eq_of_neBot_nhdsGT _ _ + +/-- If `ฮน` is a densely ordered linear order with no maximal element, then no point is isolated +on the right, so that `๐“•โ‚Š i = โจ… j > i, ๐“• j` holds for all `i`. This is in particular the +case when `ฮน := โ„โ‰ฅ0`. -/ +lemma rightCont_eq [LinearOrder ฮน] [DenselyOrdered ฮน] [NoMaxOrder ฮน] + (๐“• : Filtration ฮน m) (i : ฮน) : + ๐“•โ‚Š i = โจ… j > i, ๐“• j := ๐“•.rightCont_eq_of_not_isMax (not_isMax i) + +variable [PartialOrder ฮน] + +lemma le_rightCont (๐“• : Filtration ฮน m) : ๐“• โ‰ค ๐“•โ‚Š := by + letI := Preorder.topology ฮน; haveI : OrderTopology ฮน := โŸจrflโŸฉ + intro i + by_cases hne : (๐“[>] i).NeBot + ยท rw [rightCont_eq_of_neBot_nhdsGT] + exact le_iInfโ‚‚ fun _ he => ๐“•.mono he.le + ยท rw [rightCont_apply, if_neg hne] + +@[simp] lemma rightCont_self (๐“• : Filtration ฮน m) : ๐“•โ‚Šโ‚Š = ๐“•โ‚Š := by + letI := Preorder.topology ฮน; haveI : OrderTopology ฮน := โŸจrflโŸฉ + apply le_antisymm _ ๐“•โ‚Š.le_rightCont + intro i + by_cases hne : (๐“[>] i).NeBot + ยท have hineq : (โจ… j > i, ๐“•โ‚Š j) โ‰ค โจ… j > i, ๐“• j := by + apply le_iInfโ‚‚ fun u hu => ?_ + have hiou : Set.Ioo i u โˆˆ ๐“[>] i := by + rw [mem_nhdsWithin_iff_exists_mem_nhds_inter] + exact โŸจSet.Iio u, (isOpen_Iio' u).mem_nhds hu, fun _ hx โ†ฆ โŸจhx.2, hx.1โŸฉโŸฉ + obtain โŸจv, hvโŸฉ := hne.nonempty_of_mem hiou + have hleโ‚ : (โจ… j > i, ๐“•โ‚Š j) โ‰ค ๐“•โ‚Š v := iInfโ‚‚_le_of_le v hv.1 le_rfl + have hleโ‚‚ : ๐“•โ‚Š v โ‰ค ๐“• u := by + by_cases hnv : (๐“[>] v).NeBot + ยท simpa [rightCont_eq_of_neBot_nhdsGT] using iInfโ‚‚_le_of_le u hv.2 le_rfl + ยท simpa [rightCont_apply, hnv] using ๐“•.mono hv.2.le + exact hleโ‚.trans hleโ‚‚ + simpa [rightCont_eq_of_neBot_nhdsGT] using hineq + ยท rw [rightCont_apply, if_neg hne] + +/-- A filtration `๐“•` is right continuous if it is equal to its right continuation `๐“•โ‚Š`. -/ +class IsRightContinuous (๐“• : Filtration ฮน m) where + /-- The right continuity property. -/ + RC : ๐“•โ‚Š โ‰ค ๐“• + +lemma IsRightContinuous.eq {๐“• : Filtration ฮน m} [h : IsRightContinuous ๐“•] : + ๐“•โ‚Š = ๐“• := (le_antisymm ๐“•.le_rightCont h.RC).symm + +instance {๐“• : Filtration ฮน m} : ๐“•โ‚Š.IsRightContinuous := โŸจ(rightCont_self ๐“•).leโŸฉ + +lemma IsRightContinuous.measurableSet {๐“• : Filtration ฮน m} [IsRightContinuous ๐“•] {i : ฮน} + {s : Set ฮฉ} (hs : MeasurableSet[๐“•โ‚Š i] s) : + MeasurableSet[๐“• i] s := IsRightContinuous.eq (๐“• := ๐“•) โ–ธ hs + +end IsRightContinuous + variable {ฮฒ : ฮน โ†’ Type*} [โˆ€ i, TopologicalSpace (ฮฒ i)] [โˆ€ i, MetrizableSpace (ฮฒ i)] [mฮฒ : โˆ€ i, MeasurableSpace (ฮฒ i)] [โˆ€ i, BorelSpace (ฮฒ i)] [Preorder ฮน]