Library AILS.ails_trajectory


Require Import Reals.
Require Import trajectory_const.
Require Import trajectory_def.
Require Import constants.
Require Import ycngftys.
Require Import ycngstys.
Require Import tau.
Require Import ails.
Require Import trajectory.
Require Import measure2state.

Lemma d_distance :
  (intr : Trajectory) (evad : EvaderTrajectory),
 distance (measure2state (tr evad) 0) (measure2state intr 0) = d intr evad.
Proof with trivial.
unfold distance, d in |- *; unfold Die in |- *; simpl in |- *;
 unfold xi, yi in |- ×...
Qed.

Lemma R_T :
  (intr : Trajectory) (evad : EvaderTrajectory) (T : TimeT),
 h (tr evad) = V
 Rsqr (RR (measure2state intr 0) (measure2state (tr evad) 0) T) =
 (Rsqr (l intr evad T × cos (beta intr evad T + thetat intr 0) - V × T) +
  Rsqr (l intr evad T × sin (beta intr evad T + thetat intr 0)))%R.
Proof with trivial.
intros intr evad T hyp_evad; rewrite Rsqr_minus...
unfold Rminus in |- ×...
repeat rewrite Rplus_assoc...
set (z := 250%R)...
rewrite
 (Rplus_comm (Rsqr (l intr evad T × cos (beta intr evad T + thetat intr 0))))
 ...
repeat rewrite Rplus_assoc...
replace
 (Rsqr (l intr evad T × sin (beta intr evad T + thetat intr 0)) +
  Rsqr (l intr evad T × cos (beta intr evad T + thetat intr 0)))%R with
 (Rsqr (l intr evad T))...
rewrite <- (Rplus_comm (Rsqr (l intr evad T)))...
repeat rewrite <- Rplus_assoc...
replace
 (2 × (l intr evad T × cos (beta intr evad T + thetat intr 0)) × (V × T))%R
 with
 (2 × (l intr evad T × (V × T) × cos (beta intr evad T + thetat intr 0)))%R...
cut
 (l intr evad T =
  dist_euc (x (tr evad) T) (y (tr evad) T) (x intr 0%R) (y intr 0%R))...
intro...
rewrite H...
cut
 ((V × T)%R =
  dist_euc (x (tr evad) 0%R + T × z - T × z × cos (thetat intr 0))
    (y (tr evad) 0%R - T × z × sin (thetat intr 0))
    (x (tr evad) T) (y (tr evad) T))...
intro...
rewrite H0...
cut
 (RR (measure2state intr 0) (measure2state (tr evad) 0) T =
  dist_euc (x (tr evad) 0%R + T × z - T × z × cos (thetat intr 0))
    (y (tr evad) 0%R - T × z × sin (thetat intr 0))
    (x intr 0%R) (y intr 0%R))...
intro; rewrite H1...
replace
 (Rsqr
    (dist_euc (x (tr evad) 0 + T × z - T × z × cos (thetat intr 0))
       (y (tr evad) 0 - T × z × sin (thetat intr 0))
       (x (tr evad) T) (y (tr evad) T)) +
  Rsqr (dist_euc (x (tr evad) T) (y (tr evad) T) (x intr 0) (y intr 0)) +
  -
  (2 ×
   (dist_euc (x (tr evad) T) (y (tr evad) T) (x intr 0) (y intr 0) ×
    dist_euc (x (tr evad) 0 + T × z - T × z × cos (thetat intr 0))
      (y (tr evad) 0 - T × z × sin (thetat intr 0))
      (x (tr evad) T) (y (tr evad) T) ×
    cos (beta intr evad T + thetat intr 0))))%R with
 (Rsqr
    (dist_euc (x (tr evad) 0 + T × z - T × z × cos (thetat intr 0))
       (y (tr evad) 0 - T × z × sin (thetat intr 0))
       (x (tr evad) T) (y (tr evad) T)) +
  Rsqr (dist_euc (x (tr evad) T) (y (tr evad) T) (x intr 0) (y intr 0)) -
  2 ×
  (dist_euc (x (tr evad) T) (y (tr evad) T) (x intr 0) (y intr 0) ×
   dist_euc (x (tr evad) 0 + T × z - T × z × cos (thetat intr 0))
     (y (tr evad) 0 - T × z × sin (thetat intr 0))
     (x (tr evad) T) (y (tr evad) T) × cos (beta intr evad T + thetat intr 0)))%R...
apply law_cosines...
unfold dist_euc in |- ×...
replace
 (sqrt
    (Rsqr (x (tr evad) T - x intr 0%R) + Rsqr (y (tr evad) T - y intr 0%R)))
 with (l intr evad T)...
generalize (tr_cond1 evad (val T))...
intro; rewrite H2...
generalize (tr_cond2 evad (val T)); intro...
rewrite H3...
replace
 (x (tr evad) 0 + T × z - T × z × cos (thetat intr 0) -
  (x (tr evad) 0 + h (tr evad) × T))%R with (- T × z × cos (thetat intr 0))%R...
replace (y (tr evad) 0 - T × z × sin (thetat intr 0) - y (tr evad) 0)%R with
 (- T × z × sin (thetat intr 0))%R...
replace
 (Rsqr (- T × z × cos (thetat intr 0)) + Rsqr (- T × z × sin (thetat intr 0)))%R
 with (Rsqr (T × z))...
rewrite sqrt_Rsqr...
rewrite <- H2...
rewrite <- H3...
generalize xe_0; intro...
unfold xe, xi in H4...
rewrite (H4 intr evad T)...
generalize ye_0; intro...
unfold ye, yi in H5...
rewrite (H5 intr evad T)...
replace (x intr 0 - (l intr evad T × cos (beta intr evad T) + x intr 0))%R
 with (- (l intr evad T × cos (beta intr evad T)))%R...
unfold Rminus in |- ×...
replace
 (y intr 0 + - (y intr 0 + - (l intr evad T × sin (beta intr evad T))))%R
 with (l intr evad T × sin (beta intr evad T))%R...
rewrite cos_plus...
unfold Rminus in |- ×...
rewrite Rmult_plus_distr_l...
replace
 (- (l intr evad T × cos (beta intr evad T)) ×
  (- T × z × cos (thetat intr 0)) +
  l intr evad T × sin (beta intr evad T) × (- T × z × sin (thetat intr 0)))%R
 with
 (l intr evad T × cos (beta intr evad T) × T × z × cos (thetat intr 0) +
  l intr evad T × - sin (beta intr evad T) × T × z × sin (thetat intr 0))%R...
replace (- (sin (beta intr evad T) × sin (thetat intr 0)))%R with
 (- sin (beta intr evad T) × sin (thetat intr 0))%R...
repeat rewrite <- Rmult_assoc...
repeat rewrite Rmult_assoc...
pattern (cos (beta intr evad T)) at 1 in |- *;
 rewrite (Rmult_comm (cos (beta intr evad T)))...
repeat rewrite <- Rmult_assoc...
replace
 (l intr evad T × T × z × cos (beta intr evad T) × cos (thetat intr 0))%R
 with
 (l intr evad T × T × z × cos (thetat intr 0) × cos (beta intr evad T))%R...
apply Rplus_eq_compat_l...
repeat rewrite Rmult_assoc...
apply Rmult_eq_compat_l...
repeat rewrite <- Rmult_assoc...
repeat rewrite <- (Rmult_comm (sin (thetat intr 0)))...
repeat rewrite Rmult_assoc...
apply Rmult_eq_compat_l...
rewrite (Rmult_comm (- sin (beta intr evad T)))...
repeat rewrite Rmult_assoc...
repeat rewrite Rmult_assoc...
repeat apply Rmult_eq_compat_l...
ring...
rewrite Ropp_mult_distr_l_reverse...
rewrite <- Ropp_mult_distr_l_reverse...
replace
 (- l intr evad T × cos (beta intr evad T) × (- T × z × cos (thetat intr 0)))%R
 with
 (l intr evad T × cos (beta intr evad T) × T × z × cos (thetat intr 0))%R...
apply Rplus_eq_compat_l...
repeat rewrite Rmult_assoc...
apply Rmult_eq_compat_l...
repeat rewrite <- Rmult_assoc...
repeat rewrite <- (Rmult_comm (sin (thetat intr 0)))...
apply Rmult_eq_compat_l...
repeat rewrite <- (Rmult_comm z)...
apply Rmult_eq_compat_l...
ring...
repeat rewrite <- Rmult_assoc...
repeat rewrite <- (Rmult_comm (cos (thetat intr 0)))...
apply Rmult_eq_compat_l...
repeat rewrite <- (Rmult_comm z)...
apply Rmult_eq_compat_l...
ring...
ring...
ring...
left; apply Rmult_lt_0_compat...
apply Rlt_le_trans with MinT...
apply MinT_is_pos...
apply (cond_1 T)...
unfold z in |- *; prove_sup...
replace (- T × z × cos (thetat intr 0))%R with
 (- T × (z × cos (thetat intr 0)))%R...
replace (- T × z × sin (thetat intr 0))%R with
 (- T × (z × sin (thetat intr 0)))%R...
repeat rewrite Rsqr_mult...
repeat rewrite <- Rsqr_neg...
rewrite cos2...
unfold Rminus in |- *; rewrite Rmult_plus_distr_l...
rewrite Rmult_1_r...
ring...
repeat rewrite Rmult_assoc...
repeat rewrite Rmult_assoc...
unfold Rminus in |- ×...
rewrite (Rplus_comm (y (tr evad) 0%R))...
repeat rewrite Rplus_assoc...
rewrite Rplus_opp_r; rewrite Rplus_0_r...
repeat rewrite <- Ropp_mult_distr_l_reverse...
rewrite hyp_evad...
replace (v V) with z...
unfold Rminus in |- ×...
ring...
unfold Rminus in |- *; unfold RR, dist_euc in |- ×...
replace
 (sqrt
    (Rsqr (dx (measure2state intr 0) (measure2state (tr evad) 0) T) +
     Rsqr (dy (measure2state intr 0) (measure2state (tr evad) 0) T))) with
 (sqrt
    (Rsqr
       (x intr 0%R + T × z × cosd (toDeg (theta intr 0%R)) -
        (x (tr evad) 0%R + T × z)) +
     Rsqr
       (y intr 0%R + T × z × sind (toDeg (theta intr 0%R)) - y (tr evad) 0%R)))...
unfold cosd, sind, thetat in |- ×...
rewrite rad_deg...
rewrite
 (Rsqr_neg
    (x intr 0%R + T × z × cos (theta intr 0%R) - (x (tr evad) 0%R + T × z)))
 ...
rewrite
 (Rsqr_neg (y intr 0%R + T × z × sin (theta intr 0%R) - y (tr evad) 0%R))
 ...
replace
 (- (x intr 0 + T × z × cos (theta intr 0) - (x (tr evad) 0 + T × z)))%R with
 (x (tr evad) 0 + T × z - T × z × cos (theta intr 0) - x intr 0)%R...
replace (- (y intr 0 + T × z × sin (theta intr 0) - y (tr evad) 0))%R with
 (y (tr evad) 0 - T × z × sin (theta intr 0) - y intr 0)%R...
unfold Rminus in |- ×...
repeat rewrite Ropp_plus_distr...
rewrite Ropp_involutive...
rewrite <- (Rplus_comm (y (tr evad) 0%R))...
repeat rewrite Rplus_assoc...
apply Rplus_eq_compat_l...
rewrite (Rplus_comm (- y intr 0%R))...
unfold Rminus in |- ×...
repeat rewrite Ropp_plus_distr...
repeat rewrite Ropp_involutive...
rewrite <- (Rplus_comm (x (tr evad) 0%R + T × z))...
repeat rewrite Rplus_assoc...
repeat apply Rplus_eq_compat_l...
rewrite (Rplus_comm (- x intr 0%R))...
cut (v V = z)...
intro...
rewrite H0...
unfold dist_euc in |- ×...
generalize (tr_cond1 evad (val T)); intro...
generalize (tr_cond2 evad (val T)); intro...
rewrite H1...
rewrite H2...
rewrite hyp_evad...
rewrite H0...
replace
 (x (tr evad) 0 + T × z - T × z × cos (thetat intr 0) -
  (x (tr evad) 0 + z × T))%R with (- (T × z × cos (thetat intr 0)))%R...
replace (y (tr evad) 0 - T × z × sin (thetat intr 0) - y (tr evad) 0)%R with
 (- (T × z × sin (thetat intr 0)))%R...
repeat rewrite <- Rsqr_neg...
repeat rewrite Rsqr_mult...
rewrite cos2...
replace
 (Rsqr T × Rsqr z × (1 - Rsqr (sin (thetat intr 0))) +
  Rsqr T × Rsqr z × Rsqr (sin (thetat intr 0)))%R with
 (Rsqr T × Rsqr z)%R...
rewrite <- Rsqr_mult...
rewrite sqrt_Rsqr...
apply Rmult_comm...
left; apply Rmult_lt_0_compat...
apply Rlt_le_trans with MinT...
apply MinT_is_pos...
apply (cond_1 T)...
unfold z in |- *; prove_sup...
unfold Rminus in |- ×...
rewrite Rmult_plus_distr_l...
rewrite Rmult_1_r...
ring...
unfold Rminus in |- ×...
rewrite (Rplus_comm (y (tr evad) 0%R))...
rewrite Rplus_assoc...
rewrite Rplus_opp_r...
symmetry in |- *; apply Rplus_0_r...
unfold Rminus in |- ×...
rewrite Ropp_plus_distr...
rewrite (Rplus_comm (- x (tr evad) 0%R))...
repeat rewrite Rplus_assoc...
rewrite (Rplus_comm (x (tr evad) 0%R))...
repeat rewrite Rplus_assoc...
rewrite Rplus_opp_l; rewrite Rplus_0_r...
ring...
unfold l, dist_euc in |- ×...
unfold Die in |- ×...
unfold xi, yi in |- ×...
rewrite (Rsqr_neg (x intr 0%R - x (tr evad) T))...
rewrite (Rsqr_neg (y intr 0%R - y (tr evad) T))...
unfold Rminus in |- ×...
repeat rewrite Ropp_plus_distr...
repeat rewrite Ropp_involutive...
rewrite <- (Rplus_comm (x (tr evad) T))...
rewrite <- (Rplus_comm (y (tr evad) T))...
repeat rewrite Rmult_assoc...
repeat apply Rmult_eq_compat_l...
rewrite <- (Rmult_comm (V × T))...
repeat rewrite Rmult_assoc...
repeat rewrite Rsqr_mult...
rewrite sin2...
unfold Rminus in |- ×...
rewrite Rmult_plus_distr_l...
rewrite Rmult_1_r...
ring...
Qed.