Skip to content

Commit 45486cb

Browse files
committed
wip
1 parent 55e56f2 commit 45486cb

1 file changed

Lines changed: 113 additions & 149 deletions

File tree

  • theories/lebesgue_integral_theory

theories/lebesgue_integral_theory/giry.v

Lines changed: 113 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -51,97 +51,101 @@ Global Hint Extern 0 (_ ≡μ _) => reflexivity : core.
5151
Local Open Scope classical_set_scope.
5252
Local Open Scope ereal_scope.
5353

54-
Section rectangle_cross.
54+
Lemma preimage_set_systemS {T1 T2} (A B : set_system T2) (f : T1 -> T2) :
55+
A `<=` B ->
56+
preimage_set_system [set: _] f A `<=` preimage_set_system [set: _] f B.
57+
Proof. by move=> AB _ [C ? <-]; exists C => //; exact: AB. Qed.
58+
59+
Section rectangle.
5560
Context {T1 T2 : Type}.
5661
Implicit Types (X : set_system T1) (Y : set_system T2).
5762

58-
Definition rectangle X Y := [set U `*` V | U in X & V in Y].
63+
Definition rectangle X Y : set_system (T1 * T2):= [set U `*` V | U in X & V in Y].
5964

60-
Definition cross X Y :=
61-
preimage_set_system setT fst X `|` preimage_set_system setT snd Y.
65+
Lemma rectangle_setX X Y A B : X A -> Y B -> rectangle X Y (A `*` B).
66+
Proof. by move=> XA YB; exists A => //; exists B. Qed.
6267

63-
End rectangle_cross.
68+
Lemma setI_closed_rectangle X Y :
69+
setI_closed X -> setI_closed Y ->
70+
setI_closed (rectangle X Y).
71+
Proof.
72+
move=> IG IH _ _ [A mA [B mB] <-] [A' mA' [B' mB'] <-].
73+
by rewrite -setXI; apply: rectangle_setX; [exact: IG|exact: IH].
74+
Qed.
75+
76+
End rectangle.
6477

6578
Reserved Notation "A `x` B" (at level 46, left associativity).
79+
Section cross.
80+
Context {T1 T2 : Type}.
81+
Implicit Types (X : set_system T1) (Y : set_system T2).
82+
83+
Definition cross X Y :=
84+
preimage_set_system [set: T1 * T2] fst X
85+
`|` preimage_set_system [set: T1 * T2] snd Y.
86+
87+
End cross.
6688
Notation "A `x` B" := (cross A B) : classical_set_scope.
6789

68-
Lemma yoneda {T} (A B : set_system T) :
69-
sigma_algebra setT A ->
70-
sigma_algebra setT B ->
71-
(forall Z, sigma_algebra setT Z -> A `<=` Z <-> B `<=` Z)
72-
<->
73-
A = B.
90+
(* yoneda *)
91+
Lemma forall_subset_eq {T} (A B : set_system T) :
92+
sigma_algebra [set: T] A -> sigma_algebra [set: T] B ->
93+
(forall Z, sigma_algebra [set: T] Z -> A `<=` Z <-> B `<=` Z)
94+
<-> A = B.
7495
Proof.
75-
move=> sA sB.
76-
split=> [AB|AB]; last by rewrite AB.
96+
move=> sA sB; split=> [AB|AB]; last by rewrite AB.
7797
by apply/seteqP; split; exact/AB.
7898
Qed.
7999

80-
Lemma preimage_set_system_mon {T1 T2} (A B : set_system T2) (f : T1 -> T2) :
81-
A `<=` B ->
82-
preimage_set_system [set: _] f A `<=` preimage_set_system [set: _] f B.
83-
Proof. by move=> AB _ [C ? <-]; exists C => //; exact: AB. Qed.
100+
Lemma g_sigma_algebraSP {T : Type} (X Y : set_system T) :
101+
sigma_algebra [set: T] Y ->
102+
<<s X >> `<=` Y <-> X `<=` Y.
103+
Proof.
104+
move=> sY; split=> [sXY|]; last exact: smallest_sub.
105+
by rewrite {sY}; apply: subset_trans sXY; exact: sub_gen_smallest.
106+
Qed.
84107

85108
Section rect_cross_prop.
86109
Context {T1 T2 T3 : pointedType}.
87110

88-
Definition RR {T : pointedType} (Z : set_system T) : set_system T := <<s Z>>.
89-
90-
Lemma thm4 {T : pointedType} (X Y : set_system T) : sigma_algebra setT Y ->
91-
RR X `<=` Y <-> X `<=` Y.
92-
Proof.
93-
move=> sY.
94-
split=> [RXY|].
95-
clear sY.
96-
apply: subset_trans RXY.
97-
exact: sub_gen_smallest.
98-
exact: smallest_sub.
99-
Qed.
100-
101-
Lemma lem6' (Y : set_system T2) :
102-
preimage_set_system setT (@snd T1 T2) (RR Y) =
103-
RR (preimage_set_system setT snd Y).
111+
Lemma preimage_smallest_sigma_algebra (Y : set_system T2) :
112+
preimage_set_system [set: T1 * T2] snd (<<s Y>>) =
113+
<<s preimage_set_system [set: T1 * T2] snd Y>>.
104114
Proof.
105115
apply/seteqP; split; last first.
106-
apply/(thm4 _ _).2.
116+
apply/(g_sigma_algebraSP _ _).2.
107117
set RY := @g_sigma_algebraType _ Y.
108118
exact: (sigma_algebra_measurable (g_sigma_algebra_preimageType (@snd T1 RY))).
109-
apply: preimage_set_system_mon.
119+
apply: preimage_set_systemS.
110120
exact: sub_sigma_algebra.
111-
move=> _ [Z RYZ <-].
112-
rewrite /preimage_set_system.
113-
red.
114-
move=> /= G [sigG HG].
121+
move=> _ [Z RYZ <-] /= G [sigG HG].
115122
pose i := @image_set_system _ T2 setT (@snd _ _) G.
116123
(* TODO: use image_set_system *)
117124
apply: (RYZ i).
118125
split.
119-
by apply: sigma_algebra_image.
126+
exact: sigma_algebra_image.
120127
move=> A YA.
121128
apply: HG => //.
122129
by exists A.
123130
Qed.
124131

125-
Lemma lem6 (X : set_system T1) (Y : set_system T2) :
126-
RR (X `x` RR Y) = RR (X `x` Y).
132+
Lemma g_sigma_algebra_cross (X : set_system T1) (Y : set_system T2) :
133+
<<s X `x` <<s Y >> >> = <<s X `x` Y >>.
127134
Proof.
128-
apply/yoneda; [exact: smallest_sigma_algebra..|].
135+
apply/forall_subset_eq; [exact: smallest_sigma_algebra..|].
129136
move => /= Z mZ.
130-
rewrite thm4//=.
137+
rewrite g_sigma_algebraSP//=.
131138
rewrite {1}/cross/=.
132139
rewrite subUset.
133-
rewrite lem6'//.
134-
rewrite thm4//=.
140+
rewrite preimage_smallest_sigma_algebra//.
141+
rewrite g_sigma_algebraSP//=.
135142
rewrite -subUset.
136-
by rewrite -thm4//=.
143+
by rewrite -g_sigma_algebraSP.
137144
Qed.
138145

139-
Lemma lem9 (X : set_system T1) (Y : set_system T2) :
140-
X setT ->
141-
Y setT ->
142-
(* sigma_algebra setT X ->
143-
sigma_algebra setT Y ->*)
144-
RR (rectangle X Y) = RR (X `x` Y).
146+
Lemma g_sigma_algebra_rectangle (X : set_system T1) (Y : set_system T2) :
147+
X [set: T1] -> Y [set: T2] ->
148+
<<s rectangle X Y >> = <<s X `x` Y >>.
145149
Proof.
146150
move=> sX sY; apply/seteqP; split; last first.
147151
apply: sub_sigma_algebra2.
@@ -150,61 +154,47 @@ move=> sX sY; apply/seteqP; split; last first.
150154
rewrite -setXT setTI.
151155
rewrite /rectangle/=. (* TODO: lemma *)
152156
exists A1 =>//.
153-
by exists setT => //.
157+
by exists setT.
154158
rewrite /preimage_set_system/= => -[A1 XA1 <-{A}].
155159
rewrite -setTX setTI.
156-
rewrite /rectangle/=. (* TODO: lemma *)
157-
exists setT => //.
158-
by exists A1.
160+
exact: rectangle_setX.
159161
(* apply: sub_sigma_algebra2. (* TODO: rename that thing!! *) *)
160-
rewrite thm4//; last first.
161-
exact: smallest_sigma_algebra.
162-
move=> _ [A1 X1] [A2 X2] <-.
163-
rewrite /setX.
164-
rewrite (_ : [set z | A1 z.1 /\ A2 z.2] = fst @^-1` A1 `&` snd @^-1` A2)//.
162+
rewrite g_sigma_algebraSP// => _ [A1 X1] [A2 X2] <-.
163+
rewrite (_ : _ `*` _ = fst @^-1` A1 `&` snd @^-1` A2)//.
165164
apply: (@measurableI _ (@g_sigma_algebraType _ (X `x` Y))).
166-
- apply: sub_sigma_algebra.
167-
left.
168-
exists A1 => //.
169-
by rewrite setTI.
170-
- apply: sub_sigma_algebra.
171-
right.
172-
exists A2 => //.
173-
by rewrite setTI.
165+
- apply: sub_sigma_algebra; left.
166+
by exists A1 => //; rewrite setTI.
167+
- apply: sub_sigma_algebra; right.
168+
by exists A2 => //; rewrite setTI.
174169
Qed.
175170

176171
End rect_cross_prop.
177172

178173
Section rect_cross_prop2.
179174
Context {T1 T2 T3 : pointedType}.
180175

181-
Lemma lem17 (X : set_system T1) (Y : set_system T2) (Z : set_system T3) :
182-
X setT ->
183-
Y setT ->
184-
Z setT ->
185-
RR (X `x` RR (Y `x` Z)) = RR (rectangle X (rectangle Y Z)).
186-
Proof.
187-
move=> mX mY mZ.
188-
rewrite -(lem9 mY mZ).
189-
rewrite lem6.
190-
rewrite -(lem9 mX)//.
191-
red.
192-
exists setT => //.
193-
exists setT => //.
194-
by rewrite setXTT.
176+
Lemma g_sigma_algebra_cross_rectangle (X : set_system T1) (Y : set_system T2)
177+
(Z : set_system T3) :
178+
X [set: T1] -> Y [set: T2] -> Z [set: T3] ->
179+
<<s (X `x` <<s Y `x` Z >>) >> = <<s rectangle X (rectangle Y Z) >>.
180+
Proof.
181+
move=> mX mY mZ; rewrite -(g_sigma_algebra_rectangle mY mZ).
182+
rewrite g_sigma_algebra_cross -(g_sigma_algebra_rectangle mX)//= -setXTT.
183+
exact: rectangle_setX.
195184
Qed.
196185

197186
End rect_cross_prop2.
198187

199188
(* TODO: move *)
189+
200190
Definition fun_pair {X T1 T2} (f : X -> T1) (g : X -> T2)
201191
(x : X) := (f x, g x).
202192

203193
Lemma preimage_fun_pair {X T1 T2} (f : X -> T1) (g : X -> T2) A B :
204194
(fun_pair f g) @^-1` (A `*` B) = f @^-1` A `&` g @^-1` B.
205195
Proof. by []. Qed.
206196

207-
Lemma prodAE {X Y Z} :
197+
Lemma prodA_fun_pair {X Y Z} :
208198
@prodA X Y Z = fun_pair (fst \o fst) (fun_pair (snd \o fst) snd).
209199
Proof. by apply/funext => -[[]]. Qed.
210200

@@ -233,14 +223,17 @@ HB.instance Definition _ := isMeasurableFun.Build _ _ _ _
233223

234224
End fun_product.
235225

236-
HB.instance Definition _ {d1 d2 : measure_display} {T1 : measurableType d1} {T2 : measurableType d2} :=
226+
HB.instance Definition _ {d1 d2 : measure_display} {T1 : measurableType d1}
227+
{T2 : measurableType d2} :=
237228
isMeasurableFun.Build _ _ _ _ snd (@measurable_snd _ _ T1 T2).
238229

239-
HB.instance Definition _ {d1 d2 : measure_display} {T1 : measurableType d1} {T2 : measurableType d2} :=
230+
HB.instance Definition _ {d1 d2 : measure_display} {T1 : measurableType d1}
231+
{T2 : measurableType d2} :=
240232
isMeasurableFun.Build _ _ _ _ fst (@measurable_fst _ _ T1 T2).
241233

242234
Section prodA_measurable.
243-
Context {d1 d2 d3} {X : measurableType d1} {Y : measurableType d2} {Z : measurableType d3}.
235+
Context {d1 d2 d3} {X : measurableType d1} {Y : measurableType d2}
236+
{Z : measurableType d3}.
244237

245238
Let measurable_prodA : measurable_fun [set: X * Y * Z] (@prodA X Y Z).
246239
Proof.
@@ -260,7 +253,8 @@ HB.instance Definition _ := isMeasurableFun.Build _ _ _ _
260253
swap (@measurable_swap _ _ X Y).
261254
End swap_measurable.
262255

263-
Lemma preimage_swap {T1 T2} (U1 : set T1) (U2 : set T2) : swap @^-1` (U1 `*` U2) = U2 `*` U1.
256+
Lemma preimage_swap {T1 T2} (U1 : set T1) (U2 : set T2) :
257+
swap @^-1` (U1 `*` U2) = U2 `*` U1.
264258
Proof. by rewrite /preimage; apply/seteqP; split => [[a b]|[a b]]//= []. Qed.
265259
(* /TODO: move *)
266260

@@ -767,17 +761,17 @@ case: c => a b.
767761
move=> U mU.
768762
rewrite /giry_prod /giry_join /giry_join. (* NB: don't /= here*)
769763
apply: product_measure_unique => //= A B mA mB.
770-
rewrite /giry_int /giry_map ge0_integral_pushforward//=; last first.
764+
rewrite /giry_int /giry_map ge0_integral_pushforward//=.
771765
apply: measurable_giry_ev.
772766
exact: measurableX.
773-
rewrite fubini_tonelli1//; last first.
767+
rewrite fubini_tonelli1//.
774768
have mAB : measurable (A `*` B) by apply: measurableX.
775769
by rewrite [X in measurable_fun _ X](_ : _ = @mgiry_ev _ _ R _ mAB \o giry_prod).
776-
rewrite -ge0_integralZr//; last 2 first.
770+
rewrite -ge0_integralZr//.
777771
exact: measurable_giry_ev.
778772
exact: integral_ge0.
779773
apply: eq_integral => /= x _.
780-
rewrite /fubini_F/= -ge0_integralZl//; last exact: measurable_giry_ev.
774+
rewrite /fubini_F/= -ge0_integralZl//; first exact: measurable_giry_ev.
781775
apply: eq_integral => /= y _.
782776
by rewrite product_measure1E.
783777
Qed.
@@ -813,73 +807,43 @@ Admitted.
813807
HB.instance Definition _ xyz U1 := isMeasure.Build _ _ _ (m2 xyz U1)
814808
(m2_measure0 xyz U1) (m2_measure_ge0 xyz U1) (@m2_measure_semi_sigma_additive xyz U1).*)
815809

816-
Lemma giry_monoidal_assoc (xyz : (giry X R * giry Y R) * giry Y' R) :
810+
Lemma giry_monoidalA (xyz : (giry X R * giry Y R) * giry Y' R) :
817811
(giry_prod \o (id \X giry_prod) \o prodA) xyz ≡μ
818812
(giry_map prodA \o giry_prod \o (giry_prod \X id)) xyz.
819813
Proof.
820814
move: xyz => [[x y] z].
821815
move=> U mU.
822-
red in mU.
823-
simpl in mU.
824-
rewrite /g_sigma_preimageU in mU.
825-
have mU' : RR (@measurable _ X `x` RR (@measurable _ Y `x` @measurable _ Y')) U.
826-
rewrite /RR.
827-
rewrite /cross/=.
828-
done.
829-
rewrite lem17 in mU'; [|exact: measurableT..].
830-
red in mU'.
831-
apply: (measure_unique (rectangle d1.-measurable (rectangle d2.-measurable d2'.-measurable)) (fun=> setT)) => //.
832-
rewrite -/(RR (rectangle _ (rectangle _ _))).
833-
by rewrite -lem17//.
834-
move=> /= P Q [P1 mP1 [P2 [P3 mP3 [P4 mP4]]]] HP2 Hp.
835-
move=> [Q1 mQ1 [Q2 [Q3 mQ3] [Q4 mQ4]]] HQ2 HQ.
836-
red.
837-
simpl.
838-
rewrite -HQ -Hp.
839-
rewrite -setXI.
840-
exists (P1 `&` Q1).
841-
exact: measurableI.
842-
exists (P2 `&` Q2).
843-
red.
844-
simpl.
845-
rewrite -HQ2 -HP2.
846-
rewrite -setXI.
847-
exists (P3 `&` Q3).
848-
exact: measurableI.
849-
exists (P4 `&` Q4).
850-
exact: measurableI.
851-
done.
852-
done.
853-
move=> _.
854-
rewrite /=.
855-
exists setT => //.
856-
exists setT => //.
857-
exists setT => //.
858-
exists setT => //.
859-
by rewrite setXTT.
860-
by rewrite setXTT.
861-
apply: bigcupT => //.
862-
by exists O.
863-
move=> A /=.
864-
case => Q mQ [E].
865-
case => E1 mE1 [E2 mE2] <- <-.
866-
rewrite /pushforward.
867-
rewrite (_ : _ @^-1` _ = ((Q `*` E1) `*` E2)); last first.
868-
by apply/seteqP; split => -[[]]/= *; tauto.
869-
rewrite !product_measure1E//=.
870-
rewrite (@product_measure1E _ _ _ _ _ x (product_subprobability (y, z)))//=.
871-
rewrite !product_measure1E//=.
872-
by rewrite muleA.
873-
exact: measurableX.
874-
exact: measurableX.
875-
by rewrite ltey_eq fin_num_measure.
816+
rewrite /measurable /= /g_sigma_preimageU in mU.
817+
have mU' :
818+
<<s (d1.-measurable `x` <<s (d2.-measurable `x` d2'.-measurable) >>) >> U.
819+
by [].
820+
rewrite g_sigma_algebra_cross_rectangle in mU'; [exact: measurableT..|].
821+
apply: (measure_unique (rectangle d1.-measurable
822+
(rectangle d2.-measurable d2'.-measurable)) (fun=> setT)) => //.
823+
- by rewrite -g_sigma_algebra_cross_rectangle.
824+
- apply: setI_closed_rectangle => //; first exact: measurableI.
825+
by apply: setI_closed_rectangle => //; exact: measurableI.
826+
- move=> _.
827+
rewrite -!setXTT.
828+
by apply: rectangle_setX => //; exact: rectangle_setX.
829+
- apply: bigcupT => //.
830+
by exists O.
831+
- move=> A [Q mQ] [E [E1 mE1 [E2 mE2]]] <- <- /=.
832+
rewrite /pushforward.
833+
rewrite (_ : _ @^-1` _ = (Q `*` E1) `*` E2).
834+
by apply/seteqP; split => -[[]]/= *; tauto.
835+
rewrite !product_measure1E//=.
836+
exact: measurableX.
837+
rewrite (@product_measure1E _ _ _ _ _ x (product_subprobability (y, z)))//=.
838+
exact: measurableX.
839+
by rewrite !product_measure1E//= muleA.
840+
- by rewrite ltey_eq fin_num_measure.
876841
Qed.
877842

878843
Definition giry_copy (x : X) : giry _ R := giry_ret (x, x).
879844

880845
Definition giry_discard (x : X) : giry _ R := giry_ret tt.
881846

882-
883847
Lemma test (P1 P2 : probability unit R) : P1 ≡μ P2.
884848
Proof.
885849
move=> A mA.

0 commit comments

Comments
 (0)