@@ -158,21 +158,12 @@ Proof.
158
158
now intros T fz fi fn ff [sx|sx| |sx mx ex] Hx.
159
159
Qed .
160
160
161
- Lemma canonical_mantissa_compat mx ex :
162
- canonical_mantissa mx ex
163
- = match (fexp (Z.pos (digits2_pos mx) + ex) ?= ex)%Z with
164
- | Eq => true
165
- | _ => false
166
- end .
167
- Proof . now unfold canonical_mantissa; rewrite ?Z.eqb_compare. Qed .
168
-
169
161
Theorem canonical_canonical_mantissa :
170
162
forall (sx : bool) mx ex,
171
163
canonical_mantissa mx ex = true ->
172
164
canonical radix2 fexp (Float radix2 (cond_Zopp sx (Zpos mx)) ex).
173
165
Proof .
174
166
intros sx mx ex H.
175
- rewrite ?canonical_mantissa_compat in H.
176
167
assert (Hx := Zeq_bool_eq _ _ H). clear H.
177
168
apply sym_eq.
178
169
simpl.
@@ -708,7 +699,6 @@ apply Rle_trans with ((bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix
708
699
{ rewrite Rmult_minus_distr_r, Rmult_1_l, <- bpow_plus.
709
700
apply Rplus_le_compat_r.
710
701
apply bpow_le.
711
- rewrite ?canonical_mantissa_compat in H1.
712
702
apply Zeq_bool_eq in H1.
713
703
rewrite Zpos_digits2_pos in H1.
714
704
unfold fexp, FLT_exp in H1.
@@ -734,7 +724,6 @@ Theorem bounded_lt_emax :
734
724
Proof .
735
725
intros mx ex Hx.
736
726
destruct (andb_prop _ _ Hx) as (H1,H2).
737
- rewrite ?canonical_mantissa_compat in H1.
738
727
generalize (Zeq_bool_eq _ _ H1). clear H1. intro H1.
739
728
generalize (Zle_bool_imp_le _ _ H2). clear H2. intro H2.
740
729
generalize (mag_F2R_Zdigits radix2 (Zpos mx) ex).
@@ -783,7 +772,6 @@ Theorem bounded_ge_emin :
783
772
Proof .
784
773
intros mx ex Hx.
785
774
destruct (andb_prop _ _ Hx) as [H1 _].
786
- rewrite ?canonical_mantissa_compat in H1.
787
775
apply Zeq_bool_eq in H1.
788
776
generalize (mag_F2R_Zdigits radix2 (Zpos mx) ex).
789
777
destruct (mag radix2 (F2R (Float radix2 (Zpos mx) ex))) as [e' Ex].
@@ -848,7 +836,6 @@ Proof.
848
836
intros mx ex Cx Bx.
849
837
apply andb_true_intro.
850
838
split.
851
- rewrite ?canonical_mantissa_compat.
852
839
unfold canonical_mantissa.
853
840
unfold canonical, Fexp in Cx.
854
841
rewrite Cx at 2.
@@ -1216,7 +1203,6 @@ easy.
1216
1203
unfold valid_binary, bounded.
1217
1204
rewrite Zle_bool_refl.
1218
1205
rewrite Bool.andb_true_r.
1219
- rewrite ?canonical_mantissa_compat.
1220
1206
apply Zeq_bool_true.
1221
1207
rewrite Zpos_digits2_pos.
1222
1208
replace (Zdigits radix2 _) with prec.
@@ -1378,7 +1364,6 @@ elim Rgt_not_eq with (2 := H3).
1378
1364
rewrite F2R_0.
1379
1365
now apply F2R_gt_0.
1380
1366
destruct (binary_fit_aux_correct m (Rlt_bool x 0) m2 e2) as [H5 H6].
1381
- rewrite ?canonical_mantissa_compat.
1382
1367
apply Zeq_bool_true.
1383
1368
rewrite Zpos_digits2_pos.
1384
1369
rewrite <- mag_F2R_Zdigits by easy.
@@ -1503,7 +1488,6 @@ elim Rgt_not_eq with (2 := H3).
1503
1488
rewrite F2R_0.
1504
1489
now apply F2R_gt_0.
1505
1490
destruct (binary_fit_aux_correct m (Rlt_bool x 0) m2 e2) as [H5 H6].
1506
- rewrite ?canonical_mantissa_compat.
1507
1491
apply Zeq_bool_true.
1508
1492
rewrite Zpos_digits2_pos.
1509
1493
rewrite <- mag_F2R_Zdigits by easy.
@@ -1568,7 +1552,6 @@ assert (forall m e, bounded m e = true -> fexp (Zdigits radix2 (Zpos m) + e) = e
1568
1552
clear. intros m e Hb.
1569
1553
destruct (andb_prop _ _ Hb) as (H,_).
1570
1554
apply Zeq_bool_eq.
1571
- rewrite ?canonical_mantissa_compat in H.
1572
1555
now rewrite <- Zpos_digits2_pos.
1573
1556
generalize (H _ _ Hx) (H _ _ Hy).
1574
1557
clear x y sx sy Hx Hy H.
@@ -2306,11 +2289,10 @@ apply binary_round_aux_correct'.
2306
2289
+ rewrite <- 2!F2R_Zabs, 2!abs_cond_Zopp; simpl.
2307
2290
replace (SpecFloat.new_location _ _) with (Bracket.new_location (Z.pos my) r loc_Exact);
2308
2291
[exact Bz|].
2309
- case my as [p|p|]; unfold new_location, SpecFloat.new_location; simpl.
2310
- * now unfold SpecFloat.new_location_odd; rewrite ?Z.eqb_compare.
2311
- * unfold SpecFloat.new_location_even; rewrite ?Z.eqb_compare.
2312
- now unfold new_location_even; case (2 * r ?= Z.pos p~0)%Z.
2313
- * now unfold SpecFloat.new_location_odd; rewrite ?Z.eqb_compare.
2292
+ case my as [p|p|]; [reflexivity| |reflexivity].
2293
+ unfold Bracket.new_location, SpecFloat.new_location; simpl.
2294
+ unfold Bracket.new_location_even, SpecFloat.new_location_even; simpl.
2295
+ now case Zeq_bool; [|case r as [|rp|rp]; case Z.compare].
2314
2296
+ now apply F2R_neq_0 ; case sy.
2315
2297
- rewrite <- cexp_abs, Rabs_mult, Rabs_Rinv.
2316
2298
rewrite 2!F2R_cond_Zopp, 2!abs_cond_Ropp, <- Rabs_Rinv.
@@ -2399,8 +2381,7 @@ assert (mx' = Zpos mx * Zpower radix2 (ex - 2 * e'))%Z as <-.
2399
2381
easy. }
2400
2382
clearbody mx'.
2401
2383
destruct Z.sqrtrem as [mz r].
2402
- rewrite ?Z.eqb_compare; unfold Zeq_bool.
2403
- set (lz := if match (r ?= 0)%Z with Eq => true | _ => _ end then _ else _).
2384
+ set (lz := if Zeq_bool r 0 then _ else _).
2404
2385
clearbody lz.
2405
2386
intros Bz.
2406
2387
refine (_ (binary_round_aux_correct' m (sqrt (F2R (Float radix2 (Zpos mx) ex))) mz e' lz _ _ _)) ; cycle 1.
@@ -2563,8 +2544,7 @@ Proof.
2563
2544
{ unfold mrs'. case Zlt_bool_spec; [ | easy]. intros Hex1. symmetry.
2564
2545
apply shr_limit; simpl; [now left |]. apply Z.lt_le_trans with (radix2 ^ prec)%Z.
2565
2546
- unfold bounded, canonical_mantissa, fexp in Hmxex. apply andb_prop in Hmxex.
2566
- destruct Hmxex as [Hmxex _].
2567
- rewrite ?Z.eqb_compare in Hmxex. apply Zeq_bool_eq in Hmxex.
2547
+ destruct Hmxex as [Hmxex _]. apply Zeq_bool_eq in Hmxex.
2568
2548
rewrite Zpos_digits2_pos in Hmxex. apply Z.eq_le_incl in Hmxex.
2569
2549
apply Z.max_lub_l in Hmxex.
2570
2550
assert (Hmx : (Zdigits radix2 (Z.pos mx) <= prec)%Z) by lia.
@@ -2606,9 +2586,7 @@ Proof.
2606
2586
* apply Z.opp_pos_neg in Hex0. apply Z.div_le_compat_l; [lia |].
2607
2587
split; [lia |]. apply Z.pow_le_mono_r; lia.
2608
2588
+ rewrite Zdigits_div_Zpower; [| lia |].
2609
- * rewrite Z.sub_add.
2610
- rewrite ?Z.eqb_compare in Hmxex. apply Zeq_bool_eq in Hmxex.
2611
- unfold fexp in *.
2589
+ * rewrite Z.sub_add. apply Zeq_bool_eq in Hmxex. unfold fexp in *.
2612
2590
rewrite Z.max_lub_iff. split; [| lia]. apply (Zplus_le_reg_l _ _ ex).
2613
2591
rewrite Zplus_0_r. rewrite Z.add_sub_assoc. rewrite Z.add_comm.
2614
2592
rewrite <-Hmxex at 2. apply Z.le_max_l.
@@ -2617,8 +2595,7 @@ Proof.
2617
2595
refine (_ (shl_align_correct' p 0 (fexp (Z.pos (digits2_pos p) + 0)) _)).
2618
2596
+ rewrite H1. intros [H2 H3]. rewrite <-H3 in H2.
2619
2597
apply andb_true_intro; split.
2620
- * rewrite ?Z.eqb_compare.
2621
- apply Zeq_bool_true. rewrite H3 at 2. rewrite !Zpos_digits2_pos.
2598
+ * apply Zeq_bool_true. rewrite H3 at 2. rewrite !Zpos_digits2_pos.
2622
2599
rewrite <-!mag_F2R_Zdigits; [| lia | lia].
2623
2600
now apply (f_equal (fun f => fexp (mag radix2 f))).
2624
2601
* apply Zle_bool_true. rewrite H3. transitivity 0%Z; [assumption|].
@@ -2808,7 +2785,7 @@ Lemma Bmax_float_proof :
2808
2785
= true.
2809
2786
Proof .
2810
2787
unfold valid_binary, bounded; apply andb_true_intro; split.
2811
- - rewrite ?canonical_mantissa_compat; unfold canonical_mantissa; apply Zeq_bool_true.
2788
+ - unfold canonical_mantissa; apply Zeq_bool_true.
2812
2789
set (p := Z.pos (digits2_pos _)).
2813
2790
assert (H : p = prec).
2814
2791
{ unfold p; rewrite Zpos_digits2_pos, Pos2Z.inj_sub.
@@ -2871,7 +2848,7 @@ cut (Z.pos (digits2_pos m) = prec)%Z.
2871
2848
{ now intro H; split; [ |exact H]; ring_simplify; rewrite H. }
2872
2849
revert B; unfold bounded, canonical_mantissa.
2873
2850
intro H; generalize (andb_prop _ _ H); clear H; intros [H _]; revert H.
2874
- intro H; rewrite ?Z.eqb_compare in H; generalize (Zeq_bool_eq _ _ H); clear H.
2851
+ intro H; generalize (Zeq_bool_eq _ _ H); clear H.
2875
2852
unfold fexp, emin.
2876
2853
unfold Prec_gt_0 in prec_gt_0_; unfold Prec_lt_emax in prec_lt_emax_.
2877
2854
lia.
@@ -2969,10 +2946,7 @@ set (z := fst _).
2969
2946
set (e := snd _); simpl.
2970
2947
assert (Dmx_le_prec : (Z.pos (digits2_pos mx) <= prec)%Z).
2971
2948
{ revert Bx; unfold bounded; rewrite Bool.andb_true_iff.
2972
- rewrite ?canonical_mantissa_compat.
2973
- unfold canonical_mantissa.
2974
- fold (Zeq_bool (fexp (Z.pos (digits2_pos mx) + ex)) ex).
2975
- rewrite <-Zeq_is_eq_bool; unfold fexp, FLT_exp.
2949
+ unfold canonical_mantissa; rewrite <-Zeq_is_eq_bool; unfold fexp, FLT_exp.
2976
2950
case (Z.max_spec (Z.pos (digits2_pos mx) + ex - prec) emin); lia. }
2977
2951
assert (Dmx_le_prec' : (digits2_pos mx <= Z.to_pos prec)%positive).
2978
2952
{ change (_ <= _)%positive
@@ -2994,7 +2968,6 @@ case (Pos.leb_spec _ _); simpl; intro Dmx.
2994
2968
+ apply andb_true_intro.
2995
2969
split ; cycle 1.
2996
2970
{ apply Zle_bool_true. clear -Hp ; lia. }
2997
- rewrite ?canonical_mantissa_compat.
2998
2971
apply Zeq_bool_true; unfold fexp, FLT_exp.
2999
2972
rewrite Dmx', Z2Pos.id by apply prec_gt_0_.
3000
2973
rewrite Z.max_l.
@@ -3028,7 +3001,6 @@ case (Pos.leb_spec _ _); simpl; intro Dmx.
3028
3001
+ unfold bounded; apply andb_true_intro.
3029
3002
split ; cycle 1.
3030
3003
{ apply Zle_bool_true. clear -Hp ; lia. }
3031
- rewrite ?canonical_mantissa_compat.
3032
3004
apply Zeq_bool_true; unfold fexp, FLT_exp.
3033
3005
rewrite Zpos_digits2_pos, shift_pos_correct, Z.pow_pos_fold.
3034
3006
rewrite Z2Pos.id; [|lia].
@@ -3115,8 +3087,6 @@ Lemma Bulp_correct_aux :
3115
3087
bounded 1 emin = true.
3116
3088
Proof .
3117
3089
unfold bounded, canonical_mantissa.
3118
- rewrite ?Z.eqb_compare.
3119
- fold (Zeq_bool (fexp (Z.pos (digits2_pos 1) + emin)) emin).
3120
3090
rewrite Zeq_bool_true.
3121
3091
apply Zle_bool_true.
3122
3092
apply Z.max_l_iff, fexp_emax.
0 commit comments