(***********************************************************************) (* v * The Coq Proof Assistant / The Coq Development Team *) (* sin_PI; Rewrite -> cos_PI. Unfold Rdiv; Apply Rmult_Ol. Qed. Lemma sin_3PI2 : ``(sin (3*(PI/2)))==(-1)``. Replace ``3*(PI/2)`` with ``PI+(PI/2)``. Rewrite -> sin_plus; Rewrite -> sin_PI; Rewrite -> cos_PI; Rewrite -> sin_PI2; Ring. Pattern 1 PI; Rewrite (double_var PI). Ring. Qed. Lemma tan_2PI : ``(tan (2*PI))==0``. Unfold tan; Rewrite sin_2PI; Unfold Rdiv; Apply Rmult_Ol. Qed. Lemma sin_cos_PI4 : ``(sin (PI/4)) == (cos (PI/4))``. Rewrite cos_sin. Replace ``PI/2+PI/4`` with ``-(PI/4)+PI``. Rewrite neg_sin; Rewrite sin_neg; Ring. Cut ``PI==PI/2+PI/2``; [Intro | Apply double_var]. Pattern 2 3 PI; Rewrite H. Pattern 2 3 PI; Rewrite H. Unfold Rdiv; Cut ``2*2==4``. Intro; Rewrite Rmult_Rplus_distrl. Repeat Rewrite Rmult_assoc. Rewrite <- Rinv_Rmult; [Rewrite H0; Ring | DiscrR | DiscrR]. Ring. Qed. Lemma sin_PI3_cos_PI6 : ``(sin (PI/3))==(cos (PI/6))``. Replace ``PI/6`` with ``(PI/2)-(PI/3)``. Rewrite cos_shift; Reflexivity. Pattern 2 PI; Rewrite double_var. Cut ``PI == 3*(PI/3)``. Intro. Pattern 1 PI; Rewrite H. Unfold Rdiv. Repeat Rewrite Rmult_assoc. Rewrite <- Rinv_Rmult. Unfold Rminus. Rewrite (Rmult_Rplus_distrl ``PI*/2`` ``PI*/2`` ``/3``). Repeat Rewrite Rmult_assoc. Rewrite <- Rinv_Rmult. Rewrite (Rmult_sym ``2``). Replace ``3*2`` with ``6``. Rewrite Ropp_distr1. Ring. Ring. DiscrR. DiscrR. DiscrR. DiscrR. Unfold Rdiv. Rewrite (Rmult_sym ``3``). Rewrite Rmult_assoc. Rewrite <- Rinv_l_sym. Rewrite Rmult_1r; Reflexivity. DiscrR. Qed. Lemma sin_PI6_cos_PI3 : ``(cos (PI/3))==(sin (PI/6))``. Replace ``PI/6`` with ``(PI/2)-(PI/3)``. Rewrite sin_shift; Reflexivity. Pattern 2 PI; Rewrite double_var. Cut ``PI == 3*(PI/3)``. Intro. Pattern 1 PI; Rewrite H. Unfold Rdiv. Repeat Rewrite Rmult_assoc. Rewrite <- Rinv_Rmult. Unfold Rminus. Rewrite (Rmult_Rplus_distrl ``PI*/2`` ``PI*/2`` ``/3``). Repeat Rewrite Rmult_assoc. Rewrite <- Rinv_Rmult. Rewrite (Rmult_sym ``2``). Replace ``3*2`` with ``6``. Rewrite Ropp_distr1. Ring. Ring. DiscrR. DiscrR. DiscrR. DiscrR. Unfold Rdiv. Rewrite (Rmult_sym ``3``). Rewrite Rmult_assoc. Rewrite <- Rinv_l_sym. Rewrite Rmult_1r; Reflexivity. DiscrR. Qed. Lemma PI6_RGT_0 : ``0 Degree | Degree -> Radian *) (***************************************************************) Definition plat : R := (IZR `180`). Definition toRad [x:R] : R := ``x*PI*/plat``. Definition toDeg [x:R] : R := ``x*plat*/PI``. Lemma rad_deg : (x:R) (toRad (toDeg x))==x. Intro x; Unfold toRad toDeg. Rewrite <- (Rmult_sym plat). Repeat Rewrite Rmult_assoc. Rewrite (Rmult_sym plat). Repeat Rewrite Rmult_assoc. Rewrite <- Rinv_l_sym. Rewrite Rmult_1r; Rewrite <- Rinv_l_sym. Apply Rmult_1r. Apply PI_neq0. Unfold plat. Apply not_O_IZR. Discriminate. Qed. Lemma toRad_inj : (x,y:R) (toRad x)==(toRad y) -> x==y. Intros; Unfold toRad in H; Apply r_Rmult_mult with PI. Rewrite <- (Rmult_sym x); Rewrite <- (Rmult_sym y). Apply r_Rmult_mult with ``/plat``. Rewrite <- (Rmult_sym ``x*PI``); Rewrite <- (Rmult_sym ``y*PI``); Assumption. Apply Rinv_neq_R0. Unfold plat. Apply not_O_IZR. Discriminate. Apply PI_neq0. Qed. Lemma deg_rad : (x:R) (toDeg (toRad x))==x. Intro x; Apply toRad_inj; Rewrite -> (rad_deg (toRad x)); Reflexivity. Qed. Definition sind [x:R] : R := (sin (toRad x)). Definition cosd [x:R] : R := (cos (toRad x)). Definition tand [x:R] : R := (tan (toRad x)). Lemma Rsqr_sin_cos_d_one : (x:R) ``(Rsqr (sind x))+(Rsqr (cosd x))==1``. Intro x; Unfold sind; Unfold cosd; Apply sin2_cos2. Qed. (***************************************************) (* Other properties *) (***************************************************) Lemma sin_lb_ge_0 : (a:R) ``0<=a``->``a<=PI/2``->``0<=(sin_lb a)``. Intros; Case (total_order R0 a); Intro. Left; Apply sin_lb_gt_0; Assumption. Elim H1; Intro. Rewrite <- H2; Unfold sin_lb; Unfold sin_approx; Unfold sum_f_R0; Unfold sin_term; Repeat Rewrite pow_ne_zero. Unfold Rdiv; Repeat Rewrite Rmult_Ol; Repeat Rewrite Rmult_Or; Repeat Rewrite Rplus_Or; Right; Reflexivity. Simpl; Discriminate. Simpl; Discriminate. Simpl; Discriminate. Simpl; Discriminate. Elim (Rlt_antirefl ``0`` (Rle_lt_trans ``0`` a ``0`` H H2)). Qed.