Skip to content

Commit 45ad3a9

Browse files
committed
progress
Signed-off-by: Avi Shinnar <shinnar@us.ibm.com>
1 parent c139a1c commit 45ad3a9

3 files changed

Lines changed: 55 additions & 40 deletions

File tree

coq/QLearn/infprod.v

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Require Import Reals Sums Lra Lia.
1+
Require Import ZArith Reals Sums Lra Lia.
22
(* Require Import Coquelicot.Hierarchy Coquelicot.Series Coquelicot.Lim_seq Coquelicot.Rbar.*)
33
Require Import Coquelicot.Coquelicot.
44
Require Import LibUtils.
@@ -493,7 +493,7 @@ Proof.
493493
replace (S n2 - n1)%nat with ((S m - n1) + (S n2 - S m))%nat by lia.
494494
rewrite seq_plus.
495495
rewrite List.fold_right_app.
496-
rewrite fold_right_plus_acc.
496+
rewrite (@fold_right_plus_acc G).
497497
now replace (n1 + (S m - n1))%nat with (S m) by lia.
498498
Qed.
499499

@@ -534,7 +534,7 @@ Qed.
534534
now simpl.
535535
+ intros.
536536
unfold sum_n.
537-
rewrite sum_split with (m := (nk-1)%nat); try lia.
537+
rewrite (@sum_split R_AbelianGroup) with (m := (nk-1)%nat); try lia.
538538
apply Rplus_eq_compat_l.
539539
replace (S (nk - 1)) with (nk) by lia.
540540
apply sum_n_m_shift.
@@ -562,7 +562,8 @@ Qed.
562562
cut (ex_lim_seq (fun n : nat => sum_n_m α 0 (nk + S n) - sum_n_m α 0 nk)).
563563
{
564564
apply ex_lim_seq_ext; intros.
565-
rewrite (sum_split_plus α 0 nk (S n)); try lia.
565+
change ((@sum_n_m R_AbelianGroup α 0 (nk + S n) - @sum_n_m R_AbelianGroup α 0 nk) = @sum_n_m R_AbelianGroup α (S nk) (n + S nk)).
566+
rewrite (@sum_split_plus R_AbelianGroup α 0 nk (S n) ltac:(lia) ltac:(lia)).
566567
unfold plus; simpl.
567568
field_simplify.
568569
f_equal.
@@ -948,7 +949,7 @@ Proof.
948949
specialize (IHk H1).
949950
apply Rle_trans with (r2 := part_prod_n (pos_sq_fun F) (m + k) n); trivial.
950951
replace (m + S k)%nat with (S (m+k)%nat) by lia.
951-
destruct (le_gt_dec (S (m+k)) n).
952+
destruct (Compare_dec.le_gt_dec (S (m+k)) n).
952953
+ apply max_bounded1_pre_le; trivial.
953954
intros; apply pos_sq_bounded1; trivial.
954955
+ rewrite (part_prod_n_1 (pos_sq_fun F) (S (m + k)%nat)) ; [|lia].
@@ -1110,7 +1111,7 @@ Section Dvoretsky.
11101111
Theorem Dvoretzky4_0 (F: nat -> posreal) (sigma V : nat -> R) :
11111112
(forall (n:nat), V (S n) <= (F n) * (V n) + (sigma n)) ->
11121113
(forall (n:nat),
1113-
V (S n) <= sum_n (fun k => (sigma k)*(part_prod_n F (S k) n)) n +
1114+
V (S n) <= @sum_n R_AbelianGroup (fun k => (sigma k)*(part_prod_n F (S k) n)) n +
11141115
(V 0%nat)*(part_prod_n F 0 n)).
11151116
Proof.
11161117
intros.
@@ -1145,8 +1146,8 @@ Qed.
11451146

11461147
Lemma sum_bound_prod_A (F : nat -> posreal) (sigma : nat -> R) (A : R) (n m:nat) :
11471148
(forall r s, part_prod_n (pos_sq_fun F) r s <= A) ->
1148-
sum_n_m (fun k => (Rsqr (sigma k))*(part_prod_n (pos_sq_fun F) (S k) n)) (S m) n <=
1149-
(sum_n_m (fun k => Rsqr (sigma k)) (S m) n) * A.
1149+
@sum_n_m R_AbelianGroup (fun k => (Rsqr (sigma k))*(part_prod_n (pos_sq_fun F) (S k) n)) (S m) n <=
1150+
(@sum_n_m R_AbelianGroup (fun k => Rsqr (sigma k)) (S m) n) * A.
11501151
Proof.
11511152
intros.
11521153
rewrite <- sum_n_m_mult_r with (a := A).
@@ -1160,8 +1161,8 @@ Qed.
11601161

11611162
Lemma sum_bound3_max (F : nat -> posreal) (sigma : nat -> R) (n m:nat) :
11621163
(S m <= n)%nat ->
1163-
sum_n (fun k => (Rsqr (sigma k))*(part_prod_n (pos_sq_fun F) (S k) n)) m <=
1164-
(sum_n (fun k => (Rsqr (sigma k))) m) * (max_prod_fun (pos_sq_fun F) (S m) n).
1164+
@sum_n R_AbelianGroup (fun k => (Rsqr (sigma k))*(part_prod_n (pos_sq_fun F) (S k) n)) m <=
1165+
(@sum_n R_AbelianGroup (fun k => (Rsqr (sigma k))) m) * (max_prod_fun (pos_sq_fun F) (S m) n).
11651166
Proof.
11661167
intros.
11671168
rewrite <- sum_n_mult_r with (a := (max_prod_fun (pos_sq_fun F) (S m) n)).
@@ -1176,15 +1177,16 @@ Theorem Dvoretzky4_8_5 (F : nat -> posreal) (sigma V: nat -> R) (n m:nat) (A:R):
11761177
(forall (n:nat), Rsqr (V (S n)) <= (pos_sq_fun F) n * Rsqr (V n) + Rsqr (sigma n)) ->
11771178
(m<n)%nat ->
11781179
Rsqr (V (S n)) <=
1179-
( sum_n_m (fun k => Rsqr (sigma k)) (S m) n) * A +
1180-
(Rsqr (V 0%nat) + sum_n (fun k => (Rsqr (sigma k))) m) *
1180+
( @sum_n_m R_AbelianGroup (fun k => Rsqr (sigma k)) (S m) n) * A +
1181+
(Rsqr (V 0%nat) + @sum_n R_AbelianGroup (fun k => (Rsqr (sigma k))) m) *
11811182
(max_prod_fun (pos_sq_fun F) (S m) n).
11821183
Proof.
11831184
intros F1 Vsqle mn.
11841185
generalize (Dvoretzky4_0 (pos_sq_fun F) (fun k => Rsqr(sigma k)) (fun k => Rsqr (V k))).
11851186
intros.
11861187
specialize (H Vsqle n).
11871188
unfold sum_n in H.
1189+
11881190
rewrite (sum_split _ _ _ m) in H; trivial; [|lia].
11891191
generalize (sum_bound_prod_A F sigma A n m F1); intros.
11901192
generalize (max_prod_le (pos_sq_fun F) 0 (S m) n); intros.
@@ -1204,8 +1206,8 @@ Lemma sum_bound_prod_A_sigma1
12041206
(F : nat -> posreal) (sigma : nat -> R) (A : R) (n m:nat) :
12051207
(forall r s, part_prod_n (pos_sq_fun F) r s <= A) ->
12061208
(forall n, 0 <= sigma n) ->
1207-
sum_n_m (fun k => (sigma k)*(part_prod_n (pos_sq_fun F) (S k) n)) (S m) n <=
1208-
(sum_n_m sigma (S m) n) * A.
1209+
@sum_n_m R_AbelianGroup (fun k => (sigma k)*(part_prod_n (pos_sq_fun F) (S k) n)) (S m) n <=
1210+
(@sum_n_m R_AbelianGroup sigma (S m) n) * A.
12091211
Proof.
12101212
intros.
12111213
rewrite <- sum_n_m_mult_r with (a := A).
@@ -1218,8 +1220,8 @@ Qed.
12181220
Lemma sum_bound3_max_sigma1 (F : nat -> posreal) (sigma : nat -> R) (n m:nat) :
12191221
(S m <= n)%nat ->
12201222
(forall n, 0 <= sigma n) ->
1221-
sum_n (fun k => (sigma k)*(part_prod_n (pos_sq_fun F) (S k) n)) m <=
1222-
(sum_n sigma m) * (max_prod_fun (pos_sq_fun F) (S m) n).
1223+
@sum_n R_AbelianGroup (fun k => (sigma k)*(part_prod_n (pos_sq_fun F) (S k) n)) m <=
1224+
(@sum_n R_AbelianGroup sigma m) * (max_prod_fun (pos_sq_fun F) (S m) n).
12231225
Proof.
12241226
intros.
12251227
rewrite <- sum_n_mult_r with (a := (max_prod_fun (pos_sq_fun F) (S m) n)).
@@ -1238,8 +1240,8 @@ Theorem Dvoretzky4_8_5_V1 (F : nat -> posreal) (sigma V: nat -> R) (n m:nat) (A:
12381240
(forall (n:nat), 0 <= sigma n) ->
12391241
(m<n)%nat ->
12401242
V (S n) <=
1241-
(sum_n_m sigma (S m) n) * A +
1242-
(V 0%nat + sum_n sigma m) *
1243+
(@sum_n_m R_AbelianGroup sigma (S m) n) * A +
1244+
(V 0%nat + @sum_n R_AbelianGroup sigma m) *
12431245
(max_prod_fun (pos_sq_fun F) (S m) n).
12441246
Proof.
12451247
intros F1 Vle Vpos sigma_pos mn.
@@ -1269,12 +1271,12 @@ Theorem Dvoretzky4_8_5_1 (F : nat -> posreal) (sigma V: nat -> R) (n m:nat) (A s
12691271
is_series (fun n => Rsqr (sigma n)) sigmasum ->
12701272
(m<n)%nat ->
12711273
Rsqr (V (S n)) <=
1272-
(sum_n_m (fun k => Rsqr (sigma k)) (S m) n) * A +
1274+
(@sum_n_m R_AbelianGroup (fun k => Rsqr (sigma k)) (S m) n) * A +
12731275
(Rsqr (V 0%nat) + sigmasum) * (max_prod_fun (pos_sq_fun F) (S m) n).
12741276
Proof.
12751277
intros.
12761278
generalize (Dvoretzky4_8_5 F sigma V n m A H H0 H2); intros.
1277-
assert (sum_n (fun k : nat => (sigma k)²) m <= sigmasum).
1279+
assert (@sum_n R_AbelianGroup (fun k : nat => (sigma k)²) m <= sigmasum).
12781280
- assert (H1' := H1).
12791281
apply is_series_unique in H1.
12801282
assert (ex_series (fun k : nat => (sigma k)²)).
@@ -1300,12 +1302,12 @@ Theorem Dvoretzky4_8_5_1_V1 (F : nat -> posreal) (sigma V: nat -> R) (n m:nat) (
13001302
is_series sigma sigmasum ->
13011303
(m<n)%nat ->
13021304
V (S n) <=
1303-
(sum_n_m sigma (S m) n) * A +
1305+
(@sum_n_m R_AbelianGroup sigma (S m) n) * A +
13041306
(V 0%nat + sigmasum) * (max_prod_fun (pos_sq_fun F) (S m) n).
13051307
Proof.
13061308
intros.
13071309
generalize (Dvoretzky4_8_5_V1 F sigma V n m A H H0 H2 H1 H4); intros.
1308-
assert (sum_n sigma m <= sigmasum).
1310+
assert (@sum_n R_AbelianGroup sigma m <= sigmasum).
13091311
- assert (H3' := H3).
13101312
apply is_series_unique in H3.
13111313
assert (ex_series sigma).

coq/QLearn/slln.v

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
Require Import Qreals.
21
Require Import Lra Lia Reals RealAdd RandomVariableL2 Coquelicot.Coquelicot.
32
Require Import Morphisms FiniteType List ListAdd Permutation infprod Almost NumberIso.
43
Require Import Sums SimpleExpectation PushNeg.
54
Require Import EquivDec.
65
Require Import Classical.
76
Require Import ClassicalChoice.
87
Require Import IndefiniteDescription ClassicalDescription.
9-
Require QArith.
108
Require Import BorelSigmaAlgebra.
119
Require Import utils.Utils.
1210
Require Import ConditionalExpectation.
@@ -1693,7 +1691,7 @@ Qed.
16931691
rv_unfold.
16941692
rewrite Rmax_list_app by now simpl.
16951693
unfold Rmax.
1696-
rewrite plus_0_l.
1694+
rewrite Nat.add_0_l.
16971695
destruct (Rle_dec (Rmax_list (map (fun n : nat => F n a) (seq 0 (S k)))) (F (S k) a)); trivial.
16981696
}
16991697
apply IsFiniteExpectation_case.
@@ -2867,12 +2865,12 @@ Qed.
28672865
Qed.
28682866

28692867
Lemma sum_shift_diff (X : nat -> R) (m a : nat) :
2870-
sum_n X (a + S m) - sum_n X m =
2871-
sum_n (fun n0 : nat => X (n0 + S m)%nat) a.
2868+
@sum_n R_AbelianGroup X (a + S m) - @sum_n R_AbelianGroup X m =
2869+
@sum_n R_AbelianGroup (fun n0 : nat => X (n0 + S m)%nat) a.
28722870
Proof.
28732871
rewrite <- sum_n_m_shift.
28742872
unfold sum_n.
2875-
rewrite (@sum_split _ _ _ _ m); try lia.
2873+
rewrite (@sum_split R_AbelianGroup _ _ _ m); try lia.
28762874
unfold plus; simpl.
28772875
lra.
28782876
Qed.
@@ -3997,7 +3995,7 @@ Qed.
39973995
match_destr.
39983996
}
39993997
unfold independent_event_collection in indep.
4000-
destruct (in_dec NPeano.Nat.eq_dec 0%nat l).
3998+
destruct (in_dec Nat.eq_dec 0%nat l).
40013999
- pose (ll := 1%nat :: map (fun n => match n with
40024000
| 0%nat => n
40034001
| S n' => S n
@@ -4024,13 +4022,28 @@ Qed.
40244022
etransitivity; [| etransitivity]; [| apply indep' |].
40254023
+ apply ps_proper.
40264024
unfold ll.
4027-
rewrite perm.
4028-
simpl.
4025+
etransitivity.
4026+
{ apply list_inter_equivlist_proper.
4027+
apply Permutation_equivlist.
4028+
apply Permutation_map.
4029+
apply perm.
4030+
}
4031+
etransitivity; cycle 1.
4032+
{
4033+
apply list_inter_equivlist_proper.
4034+
apply Permutation_equivlist.
4035+
apply Permutation_map.
4036+
apply Permutation_cons; [reflexivity |].
4037+
apply Permutation_map.
4038+
symmetry.
4039+
apply perm.
4040+
}
4041+
repeat rewrite map_cons.
40294042
repeat rewrite list_inter_cons.
40304043
rewrite event_inter_assoc.
40314044
apply event_inter_proper.
4032-
* rewrite event_inter_comm.
4033-
apply H6.
4045+
* red; simpl.
4046+
now rewrite pre_event_inter_comm.
40344047
* apply list_inter_proper.
40354048
rewrite map_map.
40364049
apply Forall2_map_f.
@@ -4924,7 +4937,7 @@ Qed.
49244937
- apply collection_take_preserves_disjoint.
49254938
intros ????[??][??]; simpl in *.
49264939
apply H.
4927-
apply le_antisym.
4940+
apply Nat.le_antisymm.
49284941
+ assert (INR n1 < INR (S n2)) by (rewrite S_INR; lra).
49294942
apply INR_lt in H4.
49304943
lia.
@@ -5292,7 +5305,7 @@ Qed.
52925305
apply Rbar_finite_eq.
52935306
lra.
52945307
-- intros.
5295-
rewrite sum_split with (m := n); try lia.
5308+
rewrite (@sum_split R_AbelianGroup) with (m := n); try lia.
52965309
rewrite sum_n_m_ext_loc with (b := fun _ => zero).
52975310
++ rewrite sum_n_m_const_zero.
52985311
rewrite plus_zero_l.
@@ -5324,7 +5337,7 @@ Qed.
53245337
apply ps_pos.
53255338
+ intros.
53265339
unfold sum_n.
5327-
rewrite sum_split with (m := n); try lia.
5340+
rewrite (@sum_split R_AbelianGroup) with (m := n); try lia.
53285341
reflexivity.
53295342
Qed.
53305343

@@ -5387,7 +5400,7 @@ Qed.
53875400
-- replace (n0 + S (S a))%nat with (S (n0 + S a)) by lia.
53885401
rewrite sum_Rbar_n_finite_sum_n.
53895402
unfold sum_n.
5390-
rewrite sum_split with (m := a); try lia.
5403+
rewrite (@sum_split R_AbelianGroup) with (m := a); try lia.
53915404
rewrite plus_comm.
53925405
rewrite sum_n_m_ext_loc with (b := (fun _ => @zero R_AbelianGroup)).
53935406
++ rewrite sum_n_m_const_zero.

coq/utils/Sums.v

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,7 +1243,7 @@ Qed.
12431243

12441244

12451245
Lemma sum_n_m_shift (α : nat -> R) (k n0 : nat) :
1246-
sum_n_m α k (n0 + k)%nat = sum_n (fun n1 : nat => α (n1 + k)%nat) n0.
1246+
@sum_n_m R_AbelianGroup α k (n0 + k)%nat = @sum_n R_AbelianGroup (fun n1 : nat => α (n1 + k)%nat) n0.
12471247
Proof.
12481248
unfold sum_n.
12491249
induction n0.
@@ -1259,7 +1259,7 @@ Qed.
12591259

12601260
Lemma sum_n_m_pos a n1 n2 :
12611261
(forall n, (n1 <= n <= n2)%nat -> 0 <= a n) ->
1262-
0 <= (sum_n_m a n1 n2).
1262+
0 <= (@sum_n_m R_AbelianGroup a n1 n2).
12631263
Proof.
12641264
intros.
12651265
rewrite sum_n_m_fold_right_seq.
@@ -1276,7 +1276,7 @@ Qed.
12761276

12771277

12781278
Lemma sum_n_pos_incr a n1 n2 : (forall n, (n1 < n <= n2)%nat -> 0 <= a n) ->
1279-
(n1 <= n2)%nat -> sum_n a n1 <= sum_n a n2.
1279+
(n1 <= n2)%nat -> @sum_n R_AbelianGroup a n1 <= @sum_n R_AbelianGroup a n2.
12801280
Proof.
12811281
intros.
12821282
destruct (Nat.eq_dec n1 n2); [rewrite e; lra|].

0 commit comments

Comments
 (0)