src/HOL/Library/Inner_Product.thy
changeset 61518 ff12606337e9
parent 60679 ade12ef2773c
child 61915 e9812a95d108
equal deleted inserted replaced
61515:c64628dbac00 61518:ff12606337e9
    78 lemma inner_gt_zero_iff [simp]: "0 < inner x x \<longleftrightarrow> x \<noteq> 0"
    78 lemma inner_gt_zero_iff [simp]: "0 < inner x x \<longleftrightarrow> x \<noteq> 0"
    79   by (simp add: order_less_le)
    79   by (simp add: order_less_le)
    80 
    80 
    81 lemma power2_norm_eq_inner: "(norm x)\<^sup>2 = inner x x"
    81 lemma power2_norm_eq_inner: "(norm x)\<^sup>2 = inner x x"
    82   by (simp add: norm_eq_sqrt_inner)
    82   by (simp add: norm_eq_sqrt_inner)
       
    83 
       
    84 text \<open>Identities involving real multiplication and division.\<close>
       
    85 
       
    86 lemma inner_mult_left: "inner (of_real m * a) b = m * (inner a b)"
       
    87   by (metis real_inner_class.inner_scaleR_left scaleR_conv_of_real)
       
    88 
       
    89 lemma inner_mult_right: "inner a (of_real m * b) = m * (inner a b)"
       
    90   by (metis real_inner_class.inner_scaleR_right scaleR_conv_of_real)
       
    91 
       
    92 lemma inner_mult_left': "inner (a * of_real m) b = m * (inner a b)"
       
    93   by (simp add: of_real_def)
       
    94 
       
    95 lemma inner_mult_right': "inner a (b * of_real m) = (inner a b) * m"
       
    96   by (simp add: of_real_def real_inner_class.inner_scaleR_right)
    83 
    97 
    84 lemma Cauchy_Schwarz_ineq:
    98 lemma Cauchy_Schwarz_ineq:
    85   "(inner x y)\<^sup>2 \<le> inner x x * inner y y"
    99   "(inner x y)\<^sup>2 \<le> inner x x * inner y y"
    86 proof (cases)
   100 proof (cases)
    87   assume "y = 0"
   101   assume "y = 0"
   138     unfolding norm_eq_sqrt_inner
   152     unfolding norm_eq_sqrt_inner
   139     by (simp add: power2_eq_square mult.assoc)
   153     by (simp add: power2_eq_square mult.assoc)
   140 qed
   154 qed
   141 
   155 
   142 end
   156 end
       
   157 
       
   158 lemma inner_divide_left:
       
   159   fixes a :: "'a :: {real_inner,real_div_algebra}"
       
   160   shows "inner (a / of_real m) b = (inner a b) / m"
       
   161   by (metis (no_types) divide_inverse inner_commute inner_scaleR_right mult.left_neutral mult.right_neutral mult_scaleR_right of_real_inverse scaleR_conv_of_real times_divide_eq_left)
       
   162 
       
   163 lemma inner_divide_right:
       
   164   fixes a :: "'a :: {real_inner,real_div_algebra}"
       
   165   shows "inner a (b / of_real m) = (inner a b) / m"
       
   166   by (metis inner_commute inner_divide_left)
   143 
   167 
   144 text \<open>
   168 text \<open>
   145   Re-enable constraints for @{term "open"},
   169   Re-enable constraints for @{term "open"},
   146   @{term dist}, and @{term norm}.
   170   @{term dist}, and @{term norm}.
   147 \<close>
   171 \<close>