Theory GammaFactor
theory GammaFactor
imports Complex_Main MoreComplex
begin
definition gamma_factor :: "'a::real_inner ⇒ real" ("γ") where
"γ u = (if norm u < 1 then
1 / sqrt (1 - (norm u)⇧2)
else
0)"
lemma gamma_factor_nonzero:
assumes "norm u < 1"
shows "1 / sqrt (1 - (norm u)⇧2) ≠ 0"
using assms square_norm_one by force
lemma gamma_factor_increasing:
fixes t1 t2 ::real
assumes "0 ≤ t2" "t2 < t1" "t1 < 1"
shows "γ t2 < γ t1"
proof-
have d: "cmod t1 = abs t1" "cmod t2 = abs t2"
using norm_of_real
by blast+
have "¦t2¦ * ¦t2¦ < ¦t1¦ * ¦t1¦"
by (simp add: assms mult_strict_mono')
then have "1 - ¦t1¦ * ¦t1¦ < 1 - ¦t2¦ * ¦t2¦"
by auto
then have "sqrt (1 - ¦t1¦ * ¦t1¦) < sqrt (1 - ¦t2¦ * ¦t2¦)"
using real_sqrt_less_iff
by blast
then have "1 / sqrt (1 - ¦t2¦ * ¦t2¦) < 1 / sqrt (1 - ¦t1¦ * ¦t1¦)"
using assms
by (smt (z3) frac_less2 mult_less_cancel_right2 real_sqrt_gt_zero)
moreover
have "norm t1 < 1" "norm t2 < 1"
using assms
by force+
then have "γ t1 = 1 / sqrt(1 - (abs t1)^2)" "γ t2 = 1 / sqrt(1 - (abs t2)^2)"
using assms d
unfolding gamma_factor_def
by auto
ultimately
show ?thesis
using d
by (metis power2_eq_square)
qed
lemma gamma_factor_increase_reverse:
fixes t1 t2 :: real
assumes "t1 ≥ 0" "t1 < 1" "t2 ≥ 0" "t2 < 1"
assumes "γ t1 > γ t2"
shows "t1 > t2"
using assms
by (smt (verit, best) gamma_factor_increasing)
lemma gamma_factor_u_normu:
fixes u :: real
assumes "0 ≤ u" "u ≤ 1"
shows "γ u = γ (norm u)"
unfolding gamma_factor_def
by auto
lemma gamma_factor_positive:
assumes "norm u < 1"
shows "γ u > 0"
using assms
unfolding gamma_factor_def
by (smt (verit, del_insts) divide_pos_pos norm_ge_zero power2_eq_square power2_nonneg_ge_1_iff real_sqrt_gt_0_iff)
lemma norm_square_gamma_factor:
assumes "norm u < 1"
shows "(norm u)^2 = 1 - 1 / (γ u)^2"
proof-
have "γ u = 1 / sqrt (1 - (norm u)^2)"
by (metis assms gamma_factor_def)
then have "(γ u)^2 = 1 / (1 - (norm u)^2)"
using assms
by (metis abs_power2 gamma_factor_positive less_eq_real_def norm_ge_zero norm_power power2_eq_imp_eq real_norm_def real_sqrt_abs real_sqrt_divide real_sqrt_eq_1_iff real_sqrt_eq_iff)
then show ?thesis
by auto
qed
lemma norm_square_gamma_factor':
assumes "norm u < 1"
shows "(norm u)^2 = ((γ u)^2 - 1) / (γ u)^2"
using norm_square_gamma_factor[OF assms]
by (metis assms diff_divide_distrib div_self gamma_factor_positive norm_not_less_zero norm_zero power_not_zero)
lemma gamma_factor_square_norm:
assumes "norm u < 1"
shows "(γ u)⇧2 = 1 / (1 - (norm u)⇧2)"
by (smt (verit) assms gamma_factor_def gamma_factor_positive real_sqrt_divide real_sqrt_eq_iff real_sqrt_one real_sqrt_unique)
lemma gamma_expression_eq_one_1:
assumes "norm u < 1"
shows "1 / γ u + (γ u * (norm u)^2) / (1 + γ u) = 1"
proof-
have "γ u ≠ 0" "1 + γ u ≠ 0"
using assms gamma_factor_positive
by fastforce+
have "1 / γ u + γ u * (norm u)^2 / (1 + γ u) =
(1 + γ u + (γ u)^2 * (norm u)^2) / (γ u * (1 + γ u))"
using ‹γ u ≠ 0› ‹1 + γ u ≠ 0›
by (metis (no_types, lifting) add_divide_distrib nonzero_divide_mult_cancel_right nonzero_mult_divide_mult_cancel_left numeral_One power_add_numeral2 power_one_right semiring_norm(2))
also have "… = (1 + γ u + (γ u)^2 * (1 - 1 / ((γ u)^2))) / (γ u * (1 + γ u))"
by (simp add: assms norm_square_gamma_factor)
also have "… = (1 + γ u + (γ u)^2 - 1) / (γ u * (1 + γ u))"
by (simp add: Rings.ring_distribs(4))
also have "... = (γ u * (1 + γ u)) / (γ u * (1 + γ u))"
by (simp add: power2_eq_square ring_class.ring_distribs(1))
finally show ?thesis
using ‹γ u ≠ 0› ‹1 + γ u ≠ 0›
by (metis div_by_1 divide_divide_eq_right eq_divide_eq_1)
qed
lemma gamma_expression_eq_one_2:
assumes "norm u < 1"
shows "((γ u)^2 * (norm u)^2) / (1 + γ u)^2 + (2 * γ u) / (γ u * (1 + γ u)) = 1"
proof-
have *: "γ u ≠ 0" "1 + γ u ≠ 0"
using assms gamma_factor_positive
by force+
have "((γ u)^2 * (norm u)^2) / (1 + γ u)^2 + (2 * γ u) / (γ u * (1 + γ u)) =
((γ u)^2 * (1 - 1 / (γ u)^2)) / (1 + γ u)^2 + (2 * γ u) / (γ u * (1 + γ u))"
using norm_square_gamma_factor[OF assms]
by presburger
also have "… = ((γ u)^2 - 1) / (1 + γ u)^2 + (2 * γ u) / (γ u * (1 + γ u))"
using ‹γ u ≠ 0›
by (simp add: right_diff_distrib)
also have "… = (γ u * ((γ u)^2 - 1)) / (γ u * (1 + γ u)^2) + (2 * γ u * (1 + γ u)) / (γ u * (1 + γ u)^2)"
using ‹γ u ≠ 0›
by (simp add: mult.commute power2_eq_square)
also have "… = (γ u * ((γ u)^2 - 1) + 2 * γ u * (1 + γ u)) / (γ u * (1 + γ u)^2)"
by argo
also have "… = ((γ u)^3 + γ u + 2 * (γ u)^2) / (γ u * (1 + γ u)^2)"
by (simp add: power2_eq_square power3_eq_cube right_diff_distrib ring_class.ring_distribs(1))
also have "… = (γ u * (1 + γ u) ^ 2) / (γ u * (1 + γ u)^2)"
by (simp add: field_simps power2_eq_square power3_eq_cube)
finally show ?thesis
using *
by simp
qed
end