@@ -73,7 +73,8 @@ lemma offunvK pv: tofunv (offunv pv) = vclamp pv.
73
73
proof. by rewrite /tofunv /offunv eqv_repr vclamp_idemp. qed.
74
74
75
75
lemma vectorW (P : vector -> bool):
76
- (forall pv, P (offunv pv)) => forall v, P v by smt(tofunvK).
76
+ (forall pv, P (offunv pv)) => forall v, P v.
77
+ proof. by move=> P_pv v; rewrite -tofunvK; apply: P_pv. qed.
77
78
78
79
(* Dimension of the vector *)
79
80
op size v = (tofunv v).`2.
@@ -593,8 +594,10 @@ qed.
593
594
lemma dvector1E (d : R distr) (v : vector) : mu1 (dvector d (size v)) v =
594
595
BRM.bigi predT (fun i => mu1 d v.[i]) 0 (size v).
595
596
proof.
596
- rewrite -{2}[v]tolistK dmapE /(\o) /pred1.
597
- rewrite (@mu_eq _ _ (pred1 (tolist v))); 1: smt(oflist_inj).
597
+ rewrite -{2}[v]tolistK dmapE /(\o) /pred1.
598
+ rewrite (@mu_eq _ _ (pred1 (tolist v))).
599
+ + move=> x; rewrite eq_iff /pred1 /=; split=> />.
600
+ exact: oflist_inj.
598
601
rewrite dlist1E 1:/# size_tolist max0size /=.
599
602
by rewrite BRM.big_mapT /(\o) &BRM.eq_big.
600
603
qed.
@@ -694,7 +697,8 @@ proof. by rewrite /tofunm /offunm eqv_repr. qed.
694
697
hint simplify offunmK.
695
698
696
699
lemma matrixW (P : matrix -> bool) : (forall pm, P (offunm pm)) =>
697
- forall m, P m by smt(tofunmK).
700
+ forall m, P m.
701
+ proof. by move=> P_pm m; rewrite -tofunmK; exact: P_pm. qed.
698
702
699
703
(* Number of rows and columns of matrices *)
700
704
op rows m = (tofunm m).`2.
@@ -1451,16 +1455,17 @@ qed.
1451
1455
lemma catmrA (m1 m2 m3: matrix): ((m1 || m2) || m3) = (m1 || (m2 || m3)).
1452
1456
proof.
1453
1457
rewrite eq_matrixP.
1454
- split => [| i j bound]; 1: smt(size_catmr).
1458
+ split => [| i j bound]; 1:smt(size_catmr rows_catmr cols_catmr ).
1455
1459
rewrite 4!get_catmr cols_catmr // addrA.
1456
- algebra.
1460
+ by algebra.
1457
1461
qed.
1458
1462
1459
1463
lemma catmrDr (m1 m2 m3: matrix): m1 * (m2 || m3) = ((m1 * m2) || (m1 * m3)).
1460
1464
proof.
1461
1465
rewrite eq_matrixP.
1462
1466
rewrite rows_mulmx cols_mulmx cols_catmr.
1463
- split => [| i j bound]; 1: smt(size_mulmx size_catmr).
1467
+ split => [| i j bound].
1468
+ + by rewrite !size_catmr !rows_mulmx !cols_mulmx /#.
1464
1469
rewrite get_catmr 3!get_mulmx.
1465
1470
case (j < cols m2) => bound2.
1466
1471
- rewrite [col m3 _]col0E 1:/# dotpv0 addr0 !dotpE 2!size_col rows_catmr.
@@ -1667,7 +1672,9 @@ case (j < n) => j_bound.
1667
1672
+ smt(size_catmr size_subm).
1668
1673
by rewrite addr0.
1669
1674
- rewrite getm0E; 1: smt(size_catmr size_subm).
1670
- rewrite add0r get_subm; smt(size_catmr size_subm).
1675
+ rewrite add0r get_subm; [3:smt()].
1676
+ + smt(rows_catmr rows_subm).
1677
+ + smt(cols_catmr cols_subm).
1671
1678
qed.
1672
1679
1673
1680
lemma subm_colmx (m: matrix) l :
@@ -1908,7 +1915,8 @@ move => r_ge0 c_ge0; split => [m_supp|]; last first.
1908
1915
- case => -[r_m c_m] m_d; rewrite /support -r_m -c_m dmatrix1E.
1909
1916
apply prodr_gt0_seq => i i_row _ /=.
1910
1917
by apply prodr_gt0_seq => j j_col _ /=; apply m_d; smt(mem_iota).
1911
- have [r_m c_m] : size m = (r,c) by smt(size_dmatrix).
1918
+ have [r_m c_m] : size m = (r,c).
1919
+ + exact: (size_dmatrix d).
1912
1920
split => [//|i j range_ij]; move: m_supp.
1913
1921
rewrite -r_m -c_m /support dmatrix1E => gt0_big.
1914
1922
pose G i0 := (fun (j0 : int) => mu1 d m.[i0, j0]).
0 commit comments