src/HOL/Multivariate_Analysis/Operator_Norm.thy
changeset 55715 c4159fe6fa46
parent 54825 63892cfef47f
child 57565 7696903b9e61
     1.1 --- a/src/HOL/Multivariate_Analysis/Operator_Norm.thy	Tue Nov 05 09:45:00 2013 +0100
     1.2 +++ b/src/HOL/Multivariate_Analysis/Operator_Norm.thy	Tue Nov 05 09:45:02 2013 +0100
     1.3 @@ -8,7 +8,7 @@
     1.4  imports Linear_Algebra
     1.5  begin
     1.6  
     1.7 -definition "onorm f = Sup {norm (f x)| x. norm x = 1}"
     1.8 +definition "onorm f = (SUP x:{x. norm x = 1}. norm (f x))"
     1.9  
    1.10  lemma norm_bound_generalize:
    1.11    fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
    1.12 @@ -67,25 +67,22 @@
    1.13    shows "norm (f x) \<le> onorm f * norm x"
    1.14      and "\<forall>x. norm (f x) \<le> b * norm x \<Longrightarrow> onorm f \<le> b"
    1.15  proof -
    1.16 -  let ?S = "{norm (f x) |x. norm x = 1}"
    1.17 +  let ?S = "(\<lambda>x. norm (f x))`{x. norm x = 1}"
    1.18    have "norm (f (SOME i. i \<in> Basis)) \<in> ?S"
    1.19      by (auto intro!: exI[of _ "SOME i. i \<in> Basis"] norm_Basis SOME_Basis)
    1.20    then have Se: "?S \<noteq> {}"
    1.21      by auto
    1.22 -  from linear_bounded[OF lf] have b: "\<exists> b. ?S *<= b"
    1.23 -    unfolding norm_bound_generalize[OF lf, symmetric]
    1.24 -    by (auto simp add: setle_def)
    1.25 -  from isLub_cSup[OF Se b, unfolded onorm_def[symmetric]]
    1.26 -  show "norm (f x) \<le> onorm f * norm x"
    1.27 +  from linear_bounded[OF lf] have b: "bdd_above ?S"
    1.28 +    unfolding norm_bound_generalize[OF lf, symmetric] by auto
    1.29 +  then show "norm (f x) \<le> onorm f * norm x"
    1.30      apply -
    1.31      apply (rule spec[where x = x])
    1.32      unfolding norm_bound_generalize[OF lf, symmetric]
    1.33 -    apply (auto simp add: isLub_def isUb_def leastP_def setge_def setle_def)
    1.34 +    apply (auto simp: onorm_def intro!: cSUP_upper)
    1.35      done
    1.36    show "\<forall>x. norm (f x) \<le> b * norm x \<Longrightarrow> onorm f \<le> b"
    1.37 -    using isLub_cSup[OF Se b, unfolded onorm_def[symmetric]]
    1.38      unfolding norm_bound_generalize[OF lf, symmetric]
    1.39 -    by (auto simp add: isLub_def isUb_def leastP_def setge_def setle_def)
    1.40 +    using Se by (auto simp: onorm_def intro!: cSUP_least b)
    1.41  qed
    1.42  
    1.43  lemma onorm_pos_le:
    1.44 @@ -107,18 +104,8 @@
    1.45    apply arith
    1.46    done
    1.47  
    1.48 -lemma onorm_const:
    1.49 -  "onorm (\<lambda>x::'a::euclidean_space. y::'b::euclidean_space) = norm y"
    1.50 -proof -
    1.51 -  let ?f = "\<lambda>x::'a. y::'b"
    1.52 -  have th: "{norm (?f x)| x. norm x = 1} = {norm y}"
    1.53 -    by (auto simp: SOME_Basis intro!: exI[of _ "SOME i. i \<in> Basis"])
    1.54 -  show ?thesis
    1.55 -    unfolding onorm_def th
    1.56 -    apply (rule cSup_unique)
    1.57 -    apply (simp_all  add: setle_def)
    1.58 -    done
    1.59 -qed
    1.60 +lemma onorm_const: "onorm (\<lambda>x::'a::euclidean_space. y::'b::euclidean_space) = norm y"
    1.61 +  using SOME_Basis by (auto simp add: onorm_def intro!: cSUP_const norm_Basis)
    1.62  
    1.63  lemma onorm_pos_lt:
    1.64    fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"