@@ -51,97 +51,101 @@ Global Hint Extern 0 (_ ≡μ _) => reflexivity : core.
5151Local Open Scope classical_set_scope.
5252Local 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.
5560Context {T1 T2 : Type}.
5661Implicit 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
6578Reserved 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.
6688Notation "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.
7495Proof .
75- move=> sA sB.
76- split=> [AB|AB]; last by rewrite AB.
96+ move=> sA sB; split=> [AB|AB]; last by rewrite AB.
7797by apply/seteqP; split; exact/AB.
7898Qed .
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
85108Section rect_cross_prop.
86109Context {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>>.
104114Proof .
105115apply/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].
115122pose i := @image_set_system _ T2 setT (@snd _ _) G.
116123(* TODO: use image_set_system *)
117124apply: (RYZ i).
118125split.
119- by apply : sigma_algebra_image.
126+ exact : sigma_algebra_image.
120127move=> A YA.
121128apply: HG => //.
122129by exists A.
123130Qed .
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 >> .
127134Proof .
128- apply/yoneda ; [exact: smallest_sigma_algebra..|].
135+ apply/forall_subset_eq ; [exact: smallest_sigma_algebra..|].
129136move => /= Z mZ.
130- rewrite thm4 //=.
137+ rewrite g_sigma_algebraSP //=.
131138rewrite {1}/cross/=.
132139rewrite subUset.
133- rewrite lem6' //.
134- rewrite thm4 //=.
140+ rewrite preimage_smallest_sigma_algebra //.
141+ rewrite g_sigma_algebraSP //=.
135142rewrite -subUset.
136- by rewrite -thm4//= .
143+ by rewrite -g_sigma_algebraSP .
137144Qed .
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 >>.
145149Proof .
146150move=> 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)//.
165164apply: (@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.
174169Qed .
175170
176171End rect_cross_prop.
177172
178173Section rect_cross_prop2.
179174Context {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.
195184Qed .
196185
197186End rect_cross_prop2.
198187
199188(* TODO: move *)
189+
200190Definition fun_pair {X T1 T2} (f : X -> T1) (g : X -> T2)
201191 (x : X) := (f x, g x).
202192
203193Lemma 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.
205195Proof . 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).
209199Proof . by apply/funext => -[[]]. Qed .
210200
@@ -233,14 +223,17 @@ HB.instance Definition _ := isMeasurableFun.Build _ _ _ _
233223
234224End 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
242234Section 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
245238Let measurable_prodA : measurable_fun [set: X * Y * Z] (@prodA X Y Z).
246239Proof .
@@ -260,7 +253,8 @@ HB.instance Definition _ := isMeasurableFun.Build _ _ _ _
260253 swap (@measurable_swap _ _ X Y).
261254End 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.
264258Proof . by rewrite /preimage; apply/seteqP; split => [[a b]|[a b]]//= []. Qed .
265259(* /TODO: move *)
266260
@@ -767,17 +761,17 @@ case: c => a b.
767761move=> U mU.
768762rewrite /giry_prod /giry_join /giry_join. (* NB: don't /= here*)
769763apply: 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.
779773apply: 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.
781775apply: eq_integral => /= y _.
782776by rewrite product_measure1E.
783777Qed .
@@ -813,73 +807,43 @@ Admitted.
813807HB.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.
819813Proof .
820814move: xyz => [[x y] z].
821815move=> 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.
876841Qed .
877842
878843Definition giry_copy (x : X) : giry _ R := giry_ret (x, x).
879844
880845Definition giry_discard (x : X) : giry _ R := giry_ret tt.
881846
882-
883847Lemma test (P1 P2 : probability unit R) : P1 ≡μ P2.
884848Proof .
885849move=> A mA.
0 commit comments