Skip to content

Commit 903b60a

Browse files
authored
Classical sets 20260331 (#1924)
* introduce rectangle * generate from cross or rectangle is the same Co-authored-by: shinya-katsumata
1 parent db1c38a commit 903b60a

File tree

11 files changed

+228
-118
lines changed

11 files changed

+228
-118
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,26 @@
66

77
- in `realfun.v`:
88
+ lemma `derivable_sqrt`
9+
- in `classical_sets.v`:
10+
+ definition `rectangle`
11+
+ lemmas `rectangle_setX`, `setI_closed_rectangle`
12+
+ definitions `cross`, `cross12`
13+
+ lemmas `smallest_sub_sub`, `bigcap_closed_smallest`, `smallest_sub_iff`
14+
+ lemma `preimage_set_systemS`
15+
16+
- in `measurable_structure.v`:
17+
+ lemmas `g_sigma_algebra_cross`, `g_sigma_algebra_rectangle`
18+
19+
- in `measurable_function.v`:
20+
+ lemma `preimage_measurability`
921

1022
### Changed
1123

24+
- moved from `measurable_structure.v` to `classical_sets.v`:
25+
+ definition `preimage_set_system`
26+
+ lemmas `preimage_set_system0`, `preimage_set_systemU`, `preimage_set_system_comp`,
27+
`preimage_set_system_id`
28+
1229
### Renamed
1330

1431
- in `tvs.v`:
@@ -26,10 +43,16 @@
2643

2744
### Generalized
2845

46+
- in `measurable_structure.v`:
47+
+ lemma `sigma_algebra_measurable` (not specialized to `setT` anymore)
48+
2949
### Deprecated
3050

3151
### Removed
3252

53+
- in `measurable_structure.v`:
54+
+ lemmas `measurable_prod_g_measurableType`, `measurable_prod_g_measurableTypeR`
55+
3356
### Infrastructure
3457

3558
### Misc

classical/classical_sets.v

Lines changed: 109 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,17 @@ From mathcomp Require Import mathcomp_extra boolp wochoice.
100100
(* *)
101101
(* ### About sets of sets *)
102102
(* ``` *)
103-
(* set_system T := set (set T) *)
104-
(* setI_closed G == the set of sets G is closed under finite *)
105-
(* intersection *)
106-
(* setU_closed G == the set of sets G is closed under finite union *)
103+
(* set_system T := set (set T) *)
104+
(* setI_closed G == the set of sets G is closed under finite *)
105+
(* intersection *)
106+
(* setU_closed G == the set of sets G is closed under finite *)
107+
(* union *)
108+
(* rectangle X Y := [set U `*` V | U in X & V in Y] *)
109+
(* preimage_set_system D f G == set system of the preimages by f of sets *)
110+
(* in G *)
111+
(* cross f g X Y := preimage_set_system setT f X *)
112+
(* `|` preimage_set_system setT g Y *)
113+
(* X `x` Y := cross fst snd X Y *)
107114
(* ``` *)
108115
(* *)
109116
(* ``` *)
@@ -258,6 +265,7 @@ Reserved Notation "[ 'disjoint' A & B ]"
258265
Reserved Notation "F `#` G"
259266
(at level 48, left associativity, format "F `#` G").
260267
Reserved Notation "'`I_' n" (at level 8, n at level 2, format "'`I_' n").
268+
Reserved Notation "A `x` B" (at level 46, left associativity).
261269

262270
Definition set T := T -> Prop.
263271
(* we use fun x => instead of pred to prevent inE from working *)
@@ -1643,6 +1651,69 @@ Definition setU_closed := forall A B, G A -> G B -> G (A `|` B).
16431651

16441652
End set_systems.
16451653

1654+
Section rectangle.
1655+
Context {T1 T2 : Type}.
1656+
Implicit Types (X : set_system T1) (Y : set_system T2).
1657+
1658+
Definition rectangle X Y : set_system (T1 * T2) :=
1659+
[set U `*` V | U in X & V in Y].
1660+
1661+
Lemma rectangle_setX X Y A B : X A -> Y B -> rectangle X Y (A `*` B).
1662+
Proof. by move=> XA YB; exists A => //; exists B. Qed.
1663+
1664+
Lemma setI_closed_rectangle X Y : setI_closed X -> setI_closed Y ->
1665+
setI_closed (rectangle X Y).
1666+
Proof.
1667+
move=> IG IH _ _ [A mA [B mB] <-] [A' mA' [B' mB'] <-].
1668+
by rewrite -setXI; apply: rectangle_setX; [exact: IG|exact: IH].
1669+
Qed.
1670+
1671+
End rectangle.
1672+
1673+
Definition preimage_set_system {aT rT : Type} (D : set aT) (f : aT -> rT)
1674+
(G : set_system rT) : set (set aT) :=
1675+
[set D `&` f @^-1` B | B in G].
1676+
1677+
Lemma preimage_set_system0 {aT rT : Type} (D : set aT) (f : aT -> rT) :
1678+
preimage_set_system D f set0 = set0.
1679+
Proof. exact: image_set0. Qed.
1680+
1681+
Lemma preimage_set_systemU {aT rT : Type} (D : set aT) (f : aT -> rT) :
1682+
{morph preimage_set_system D f : x y / x `|` y >-> x `|` y}.
1683+
Proof. exact: image_setU. Qed.
1684+
1685+
Lemma preimage_set_system_comp {aT bT rT : Type} (D : set aT)
1686+
(f : aT -> bT) (g : bT -> rT) (F : set_system rT) :
1687+
preimage_set_system D (g \o f) F
1688+
= preimage_set_system D f (preimage_set_system setT g F).
1689+
Proof.
1690+
apply/seteqP; split=> [_ [B FB] <-|_ [_ [C FC <-] <-]].
1691+
by exists (g @^-1` B) => //; exists B => //; rewrite setTI.
1692+
by exists C => //; rewrite setTI comp_preimage.
1693+
Qed.
1694+
1695+
Lemma preimage_set_system_id {aT : Type} (D : set aT) (F : set (set aT)) :
1696+
preimage_set_system D idfun F = setI D @` F.
1697+
Proof. by []. Qed.
1698+
1699+
Lemma preimage_set_systemS {T1 T2} (A B : set_system T2) (f : T1 -> T2) :
1700+
A `<=` B ->
1701+
preimage_set_system [set: _] f A `<=` preimage_set_system [set: _] f B.
1702+
Proof. by move=> AB _ [C ? <-]; exists C => //; exact: AB. Qed.
1703+
1704+
Section cross.
1705+
Context {T T1 T2 : Type}.
1706+
Implicit Types (X : set_system T1) (Y : set_system T2).
1707+
1708+
Definition cross (f : T -> T1) (g : T -> T2) X Y :=
1709+
preimage_set_system [set: T] f X
1710+
`|` preimage_set_system [set: T] g Y.
1711+
1712+
End cross.
1713+
1714+
Definition cross12 {T1 T2 : Type} := @cross (T1 * T2)%type T1 T2 fst snd.
1715+
Notation "A `x` B" := (cross12 A B) : classical_set_scope.
1716+
16461717
Lemma subKimage {T T'} {P : set (set T')} (f : T -> T') (g : T' -> T) :
16471718
cancel f g -> [set A | P (f @` A)] `<=` [set g @` A | A in P].
16481719
Proof. by move=> ? A; exists (f @` A); rewrite ?image_comp ?eq_image_id/=. Qed.
@@ -2228,34 +2299,56 @@ move=> /mem_set; rewrite (@big_morph _ _ (fun X => u \in X) false orb).
22282299
Qed.
22292300

22302301
Section smallest.
2231-
Context {T} (C : set T -> Prop) (G : set T).
2302+
Context {T} (C : set T -> Prop).
22322303

2233-
Definition smallest := \bigcap_(A in [set M | C M /\ G `<=` M]) A.
2304+
Definition smallest (G : set T) := \bigcap_(A in [set M | C M /\ G `<=` M]) A.
22342305

2235-
Lemma sub_smallest X : X `<=` G -> X `<=` smallest.
2236-
Proof. by move=> XG A /XG GA Y /= [PY]; apply. Qed.
2306+
Lemma smallest_sub G X : C X -> G `<=` X -> smallest G `<=` X.
2307+
Proof. by move=> XC GX A; apply. Qed.
22372308

2238-
Lemma sub_gen_smallest : G `<=` smallest. Proof. exact: sub_smallest. Qed.
2309+
Lemma smallest_sub_sub G X : smallest G `<=` X -> G `<=` X.
2310+
Proof. by apply: subset_trans => t Gt B [CB]; exact. Qed.
22392311

2240-
Lemma smallest_sub X : C X -> G `<=` X -> smallest `<=` X.
2241-
Proof. by move=> XC GX A; apply. Qed.
2312+
Lemma sub_smallest G X : X `<=` G -> X `<=` smallest G.
2313+
Proof. by move=> XG A /XG GA Y /= [PY]; exact. Qed.
22422314

2243-
Lemma smallest_id : C G -> smallest = G.
2315+
Lemma sub_gen_smallest G : G `<=` smallest G. Proof. exact: sub_smallest. Qed.
2316+
2317+
Lemma smallest_id G : C G -> smallest G = G.
22442318
Proof.
2245-
by move=> Cs; apply/seteqP; split; [apply: smallest_sub|apply: sub_smallest].
2319+
by move=> Cs; apply/seteqP; split; [exact: smallest_sub|exact: sub_smallest].
22462320
Qed.
22472321

22482322
End smallest.
22492323
#[global] Hint Resolve sub_gen_smallest : core.
22502324

2251-
Lemma sub_smallest2r {T} (C : set T-> Prop) G1 G2 :
2325+
Lemma smallest_sub_iff {T} (C : set T -> Prop) (X Y : set T) :
2326+
C Y -> smallest C X `<=` Y <-> X `<=` Y.
2327+
Proof.
2328+
by move=> CY; split; [exact: smallest_sub_sub|exact: smallest_sub].
2329+
Qed.
2330+
2331+
Definition bigcap_closed {T} (C : set T -> Prop) :=
2332+
forall (MM : set_system T), MM `<=` C -> C (\bigcap_(A in MM) A).
2333+
2334+
Section bigcap_closed_smallest.
2335+
Context {T} (C : set T -> Prop).
2336+
2337+
Lemma bigcap_closed_smallest (G : set T) : bigcap_closed C -> C (smallest C G).
2338+
Proof. by apply; exact: subIsetl. Qed.
2339+
2340+
End bigcap_closed_smallest.
2341+
2342+
Lemma sub_smallest2r {T} (C : set T -> Prop) G1 G2 :
22522343
C (smallest C G2) -> G1 `<=` G2 -> smallest C G1 `<=` smallest C G2.
2253-
Proof. by move=> *; apply: smallest_sub=> //; apply: sub_smallest. Qed.
2344+
Proof.
2345+
by move=> CCG2 G12; apply: smallest_sub => //; exact: sub_smallest.
2346+
Qed.
22542347

22552348
Lemma sub_smallest2l {T} (C1 C2 : set T -> Prop) :
22562349
(forall G, C2 G -> C1 G) ->
22572350
forall G, smallest C1 G `<=` smallest C2 G.
2258-
Proof. by move=> C12 G X sX M [/C12 C1M GM]; apply: sX. Qed.
2351+
Proof. by move=> C12 G X sX M [/C12 C1M GM]; exact: sX. Qed.
22592352

22602353
Section bigop_nat_lemmas.
22612354
Context {T : Type}.

classical/filter.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1482,7 +1482,7 @@ Lemma filterI_iterE {T : Type} (F : set (set T)) :
14821482
smallest Filter F = filter_from (\bigcup_n (filterI_iter F n)) id.
14831483
Proof.
14841484
rewrite eqEsubset; split.
1485-
apply: smallest_sub => //; first last.
1485+
apply: smallest_sub; first last.
14861486
by move=> A FA; exists A => //; exists O => //; right.
14871487
apply: filter_from_filter; first by exists setT; exists O => //; left.
14881488
move=> P Q [i _ sFP] [j _ sFQ]; exists (P `&` Q) => //.

theories/kernel.v

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -601,12 +601,10 @@ Lemma measurable_prod_subset_xsection_kernel :
601601
measurable `<=` XY.
602602
Proof.
603603
move=> kD_ub; rewrite measurable_prod_measurableType.
604-
set C := [set A `*` B | A in measurable & B in measurable].
604+
set C := rectangle (@measurable _ X) (@measurable _ Y).
605605
have CI : setI_closed C.
606-
move=> _ _ [X1 mX1 [X2 mX2 <-]] [Y1 mY1 [Y2 mY2 <-]].
607-
exists (X1 `&` Y1); first exact: measurableI.
608-
by exists (X2 `&` Y2); [exact: measurableI|rewrite setXI].
609-
have CT : C setT by exists setT => //; exists setT => //; rewrite setXTT.
606+
by apply: setI_closed_rectangle => E F mE MF; exact: measurableI.
607+
have CT : C setT by rewrite -setXTT; exact: rectangle_setX.
610608
have CXY : C `<=` XY.
611609
move=> _ [A mA [B mB <-]]; split; first exact: measurableX.
612610
rewrite phiM.
@@ -1305,15 +1303,6 @@ exists (fun n => if n is O then mu else mzero) => [[]//|U mU].
13051303
by rewrite /mseries nneseries_recl// eseries0 ?adde0// => -[|].
13061304
Qed.
13071305

1308-
Let setI_closedX (d1 d2 : measure_display) (T1 : measurableType d1)
1309-
(T2 : measurableType d2) : @setI_closed (T1 * T2)
1310-
[set A `*` B | A in d1.-measurable & B in d2.-measurable].
1311-
Proof.
1312-
move=> X Y [X1 mX1 [X2 mX2 <-{X}]] [Y1 mY1 [Y2 mY2 <-{Y}]].
1313-
exists (X1 `&` Y1); first exact: measurableI.
1314-
by exists (X2 `&` Y2); [exact: measurableI|rewrite setXI].
1315-
Qed.
1316-
13171306
Variables (d1 d2 : measure_display) (T1 : measurableType d1)
13181307
(T2 : measurableType d2) (R : realType) (k : R.-ftker T1 ~> T2)
13191308
(f : T1 * T2 -> \bar R).
@@ -1399,7 +1388,9 @@ move=> m.
13991388
have DE : D = @measurable _ (T1 * T2)%type.
14001389
apply/seteqP; split => [/= A []//|].
14011390
rewrite measurable_prod_measurableType.
1402-
apply: lambda_system_subset => //= C [A mA [B mB] <-].
1391+
apply: lambda_system_subset => //=.
1392+
by apply: setI_closed_rectangle => ? ? ? ?; exact: measurableI.
1393+
move=> C [A mA [B mB] <-].
14031394
split; [exact: measurableX|rewrite /K kfcompkg//].
14041395
apply: emeasurable_funM; first exact/measurable_EFinP.
14051396
exact: measurable_kernel.

theories/lebesgue_integral_theory/lebesgue_integral_fubini.v

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,10 @@ Lemma measurable_prod_subset_xsection
117117
measurable `<=` B.
118118
Proof.
119119
rewrite measurable_prod_measurableType.
120-
set C := [set A1 `*` A2 | A1 in measurable & A2 in measurable].
120+
set C := rectangle (@measurable _ T1) (@measurable _ T2).
121121
have CI : setI_closed C.
122-
move=> X Y [X1 mX1 [X2 mX2 <-{X}]] [Y1 mY1 [Y2 mY2 <-{Y}]].
123-
exists (X1 `&` Y1); first exact: measurableI.
124-
by exists (X2 `&` Y2); [exact: measurableI|rewrite setXI].
125-
have CT : C setT by exists setT => //; exists setT => //; rewrite setXTT.
122+
by apply: setI_closed_rectangle => E F mE MF; exact: measurableI.
123+
have CT : C setT by rewrite -setXTT; exact: rectangle_setX.
126124
have CB : C `<=` B.
127125
move=> X [X1 mX1 [X2 mX2 <-{X}]]; split; first exact: measurableX.
128126
have -> : phi (X1 `*` X2) = (fun x => m2D X2 * (\1_X1 x)%:E)%E.
@@ -158,12 +156,10 @@ Lemma measurable_prod_subset_ysection
158156
measurable `<=` B.
159157
Proof.
160158
rewrite measurable_prod_measurableType.
161-
set C := [set A1 `*` A2 | A1 in measurable & A2 in measurable].
159+
set C := rectangle (@measurable _ T1) (@measurable _ T2).
162160
have CI : setI_closed C.
163-
move=> X Y [X1 mX1 [X2 mX2 <-{X}]] [Y1 mY1 [Y2 mY2 <-{Y}]].
164-
exists (X1 `&` Y1); first exact: measurableI.
165-
by exists (X2 `&` Y2); [exact: measurableI|rewrite setXI].
166-
have CT : C setT by exists setT => //; exists setT => //; rewrite setXTT.
161+
by apply: setI_closed_rectangle => E F mE MF; exact: measurableI.
162+
have CT : C setT by rewrite -setXTT; exact: rectangle_setX.
167163
have CB : C `<=` B.
168164
move=> X [X1 mX1 [X2 mX2 <-{X}]]; split; first exact: measurableX.
169165
have -> : psi (X1 `*` X2) = (fun x => m1D X1 * (\1_X2 x)%:E)%E.

theories/measure_theory/measurable_function.v

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -354,20 +354,22 @@ Lemma preimage_set_system_measurable_fun d (aT : pointedType)
354354
(D : set (g_sigma_algebraType (preimage_set_system D f measurable))) f.
355355
Proof. by move=> mD A mA; apply: sub_sigma_algebra; exists A. Qed.
356356

357+
(** The converse hols when `D` is measurable *)
358+
Lemma preimage_measurability d d' (aT : measurableType d)
359+
(rT : measurableType d') (D : set aT) (f : aT -> rT) :
360+
preimage_set_system D f (@measurable _ rT) `<=` @measurable _ aT ->
361+
measurable_fun D f.
362+
Proof. by move=> + mD Y mY; apply; exists Y. Qed.
363+
357364
Lemma measurability d d' (aT : measurableType d) (rT : measurableType d')
358365
(D : set aT) (f : aT -> rT) (G : set (set rT)) :
359-
@measurable _ rT = <<s G >> -> preimage_set_system D f G `<=` @measurable _ aT ->
366+
@measurable _ rT = <<s G >> ->
367+
preimage_set_system D f G `<=` @measurable _ aT ->
360368
measurable_fun D f.
361369
Proof.
362-
move=> sG_rT fG_aT mD.
363-
suff h : preimage_set_system D f (@measurable _ rT) `<=` @measurable _ aT.
364-
by move=> A mA; apply: h; exists A.
365-
have -> : preimage_set_system D f (@measurable _ rT) =
366-
<<s D, preimage_set_system D f G >>.
367-
by rewrite [in LHS]sG_rT [in RHS]g_sigma_preimageE.
368-
apply: smallest_sub => //; split => //.
369-
- by move=> A mA; exact: measurableD.
370-
- by move=> F h; exact: bigcupT_measurable.
370+
move=> sG_rT fG_aT /[dup] mD; apply: preimage_measurability.
371+
rewrite sG_rT -g_sigma_preimageE smallest_sub_iff//.
372+
exact: sigma_algebra_measurable.
371373
Qed.
372374

373375
End measurability.

0 commit comments

Comments
 (0)