Skip to content

Commit 2a5197b

Browse files
affeldt-aistthery
andcommitted
wip
Co-Authored-By: thery <[email protected]>
1 parent f18dfd4 commit 2a5197b

File tree

1 file changed

+47
-50
lines changed

1 file changed

+47
-50
lines changed

extra_trigo.v

Lines changed: 47 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -277,58 +277,60 @@ Proof. by apply/eqP; rewrite eq_complex/= mulr0 !mul0r subr0 addr0 !eqxx. Qed.
277277

278278
End backport_complex.
279279

280-
Section backport_trigo.
281-
Variable R : realType.
280+
Section backport_trigo_alternating.
281+
Variables (U : zmodType) (V : ringType).
282+
Implicit Type f : U -> V.
282283

283-
Lemma sin_nat_pi (n : nat) : sin (n%:R * pi) = 0 :> R.
284-
Proof.
285-
elim: n => [|n ih]; first by rewrite mul0r sin0.
286-
by rewrite -addn1 natrD mulrDl mul1r sinD ih sinpi mul0r mulr0 add0r.
287-
Qed.
284+
Lemma alternatingN f (T : U) : alternating f T -> alternating f (- T).
285+
Proof. by move=> fT u; rewrite -[LHS]opprK -fT subrK. Qed.
288286

289-
Lemma sin_int_pi (k : int) : sin (k%:~R * pi) = 0 :> R.
287+
Lemma alternatingz f (T : U) : alternating f T ->
288+
forall k a, f (a + T *~ k) = (- 1) ^+ `|k|%N * f a.
290289
Proof.
291-
wlog k0 : k / 0 <= k.
292-
move=> h; have [k0|k0] := leP 0 k; first by rewrite h.
293-
by rewrite -(opprK (_ * _)) sinN -mulNr -mulrNz h ?oppr0// ler_oppr oppr0 ltW.
294-
by rewrite -[in LHS](gez0_abs k0) sin_nat_pi.
290+
move=> fT k; have [k0 a|k0 a] := leP 0 k.
291+
by rewrite -(gez0_abs k0) -pmulrn alternatingn.
292+
rewrite -(alternatingn (alternatingN fT)) -[in LHS](opprK k) -(ltz0_abs k0).
293+
by rewrite mulrNz mulNrn.
295294
Qed.
296295

297-
Lemma sin_eq0 (r : R) : sin r = 0 <-> exists k, r = k%:~R * pi.
296+
End backport_trigo_alternating.
297+
298+
Section backport_trigo.
299+
Variable R : realType.
300+
301+
Lemma sin_nat_pi n : sin (pi *+ n) = 0 :> R.
302+
Proof. by rewrite -[_ *+ _]add0r (alternatingn (@sinDpi _)) sin0 mulr0. Qed.
303+
304+
Lemma sin_int_pi k : sin (pi *~ k) = 0 :> R.
305+
Proof. by rewrite -[_ *~ _]add0r (alternatingz (@sinDpi _)) sin0 mulr0. Qed.
306+
307+
Lemma cos_nat_pi n : cos (pi *+ n) = (- 1) ^+ n :> R.
308+
Proof. by rewrite -[_ *+ _]add0r (alternatingn (@cosDpi _)) cos0 mulr1. Qed.
309+
310+
Lemma cos_int_pi k : cos (pi *~ k) = (- 1) ^+ `|k|%N :> R.
311+
Proof. by rewrite -[_ *~ _]add0r (alternatingz (@cosDpi _)) cos0 mulr1. Qed.
312+
313+
Lemma sin_eq0 (r : R) : sin r = 0 <-> exists k, r = pi *~ k.
298314
Proof.
299315
split; last by move=> [k ->]; rewrite sin_int_pi.
300316
wlog rpi : r / - pi < r <= pi.
301317
move=> h1 sr0; wlog r0 : r sr0 / 0 <= r.
302318
move=> h2; have [|r0] := leP 0 r; first exact: h2.
303319
have := h2 (- r); rewrite sinN sr0 oppr0 => /(_ erefl); rewrite ler_oppr.
304-
rewrite oppr0 => /(_ (ltW r0))[k rkpi]; exists (- k); rewrite mulrNz mulNr.
305-
by rewrite -rkpi opprK.
320+
by rewrite oppr0 => /(_ (ltW r0))[k rkpi]; exists (- k); rewrite mulrNz -rkpi opprK.
306321
have [rpi|pir] := leP r pi.
307322
by apply: h1 => //; rewrite rpi (lt_le_trans _ r0)// ltr_oppl oppr0 pi_gt0.
308-
have /h1 : - pi < r - (floor (r / pi))%:~R * pi <= pi.
323+
have /h1 : - pi < r - pi *~ floor (r / pi) <= pi.
309324
apply/andP; split.
310-
rewrite ltr_subr_addr addrC -[X in _ - X]mul1r -mulrBl.
325+
rewrite -mulrzl ltr_subr_addr addrC -[X in _ - X]mul1r -mulrBl.
311326
rewrite -ltr_pdivl_mulr ?pi_gt0// ltr_subl_addr -RfloorE.
312327
by rewrite (le_lt_trans (Rfloor_le _))// ltr_addl ltr01.
313-
rewrite ler_subl_addr -[X in X + _]mul1r -mulrDl.
328+
rewrite -mulrzl ler_subl_addr -[X in X + _]mul1r -mulrDl.
314329
by rewrite -ler_pdivr_mulr ?pi_gt0// addrC -RfloorE ltW // lt_succ_Rfloor.
315330
rewrite sinB sin_int_pi mulr0 subr0 sr0 mul0r => /(_ erefl)[k /eqP].
316-
by rewrite subr_eq -mulrDl -intrD => /eqP rkpi; eexists; exact: rkpi.
331+
rewrite subr_eq -mulrzDl => /eqP rkpi; eexists; exact: rkpi.
317332
by move=> /eqP; rewrite sin_eq0_Npipi// => /orP[|] /eqP ->;
318-
[exists 0; rewrite mul0r|exists 1; rewrite mul1r].
319-
Qed.
320-
321-
Lemma cos_pi_mulrn n : cos (pi *+ n) = (- 1) ^+ odd n :> R.
322-
Proof.
323-
elim: n => [|n ih]; first by rewrite mulr0n/= cos0 expr0.
324-
by rewrite mulrS cosD cospi sinpi mul0r subr0 {}ih/= signrN mulN1r.
325-
Qed.
326-
327-
Lemma cos_pi_mulrz (k : int) : cos (pi *~ k) = (- 1) ^+ odd `|k|%N :> R.
328-
Proof.
329-
have [|k0] := leP 0 k.
330-
by case: k => // k _; rewrite -pmulrn cos_pi_mulrn.
331-
by rewrite -cosN -mulrNz -ltz0_abs // -pmulrn cos_pi_mulrn.
333+
[exists 0; rewrite mulr0z|exists 1; rewrite mulr1z].
332334
Qed.
333335

334336
Lemma expR_eq0 (x : R) : expR x = 1 -> x = 0.
@@ -387,8 +389,8 @@ split.
387389
by move: (@ltr01 R); rewrite -(eqP h); rewrite pmulr_rgt0 // expR_gt0.
388390
have ok : ~~ odd `|k|%N.
389391
apply/negP => ok; move: cs0.
390-
by rewrite yk mulrzl cos_pi_mulrz ok/= expr1 ltr0N1.
391-
move: h; rewrite yk mulrzl cos_pi_mulrz (negbTE ok) expr0 mulr1 => /eqP.
392+
by rewrite yk cos_int_pi -signr_odd ok/= expr1 ltr0N1.
393+
move: h; rewrite yk cos_int_pi -signr_odd (negbTE ok) expr0 mulr1 => /eqP.
392394
move/expR_eq0 => ->{x}.
393395
rewrite (intEsg k); exists (sgz k * `|k|./2%N).
394396
rewrite (_ : _ * _%:~R = k%:~R); last first.
@@ -446,25 +448,20 @@ Let add (a b : angle R) : R :=
446448

447449
Let two_mone (x : R) : 2%:R * x - x = x.
448450
Proof.
449-
rewrite -{2}(mul1r x) -mulrBl.
450-
by rewrite {2}(_ : 1 = 1%:R)// -natrB// mul1r.
451+
by rewrite mulr2n mulrDl mul1r addrK.
451452
Qed.
452453

453454
Let add_pi (a b : angle R) : - pi < add a b <= pi.
454455
Proof.
455-
apply/andP; split; rewrite /add.
456-
case: ifPn => [piab|].
457-
by rewrite ltr_subr_addl two_mone.
458-
rewrite -leNgt => abpi; case: ifPn => [abNpi|]; last by rewrite -ltNge.
459-
rewrite -ltr_subl_addr (@lt_trans _ _ (- pi - pi))//.
460-
by rewrite ler_lt_sub// ltr_pmull// ?ltr1n// pi_gt0.
461-
by rewrite ltr_add// ?(angleNpi _).
462-
case: ifPn => [piab|].
463-
rewrite ler_subl_addl (@le_trans _ _ (pi + pi))// ler_add// ?(angle_pi _)//.
464-
by rewrite ler_pmull ?pi_gt0// ler1n.
465-
rewrite -leNgt => abpi; case: ifPn => [abNpi|//].
466-
rewrite -ler_subr_addr (le_trans abNpi)// ler_subr_addl.
467-
by rewrite two_mone.
456+
rewrite /add; have [ab_gtpi|ab_lepi] := ltrP pi.
457+
rewrite ltr_subr_addl ler_subl_addl two_mone ab_gtpi /=.
458+
rewrite ler_add ?angle_pi // (le_trans (angle_pi _)) //.
459+
by rewrite mulr2n mulrDl mul1r ler_addr ?pi_ge0.
460+
have [ab_leNpi|ab_gtNpi]:= (lerP ((a : R) + (b : R))); last by rewrite ab_gtNpi.
461+
rewrite -ltr_subl_addr -ler_subr_addr ltr_add ?angleNpi //.
462+
by rewrite -opprB two_mone ab_leNpi.
463+
rewrite mulrDl mul1r opprD (le_lt_trans _ (angleNpi _)) //.
464+
by rewrite ler_subl_addl subrr oppr_cp0 pi_ge0.
468465
Qed.
469466

470467
Definition add_angle (a b : angle R) : angle R := Angle.mk (add_pi a b).

0 commit comments

Comments
 (0)