1046 apply (simp add: ring_simps) |
1046 apply (simp add: ring_simps) |
1047 by (simp only: right_distrib[symmetric])} |
1047 by (simp only: right_distrib[symmetric])} |
1048 note th0 = this |
1048 note th0 = this |
1049 let ?g = "\<lambda>x. if x = 0 then 0 else norm x *s f (inverse (norm x) *s x)" |
1049 let ?g = "\<lambda>x. if x = 0 then 0 else norm x *s f (inverse (norm x) *s x)" |
1050 {fix x:: "real ^'n" assume nx: "norm x = 1" |
1050 {fix x:: "real ^'n" assume nx: "norm x = 1" |
1051 have "?g x = f x" using nx by (simp add: norm_eq_0[symmetric])} |
1051 have "?g x = f x" using nx by auto} |
1052 hence thfg: "\<forall>x. norm x = 1 \<longrightarrow> ?g x = f x" by blast |
1052 hence thfg: "\<forall>x. norm x = 1 \<longrightarrow> ?g x = f x" by blast |
1053 have g0: "?g 0 = 0" by simp |
1053 have g0: "?g 0 = 0" by simp |
1054 {fix x y :: "real ^'n" |
1054 {fix x y :: "real ^'n" |
1055 {assume "x = 0" "y = 0" |
1055 {assume "x = 0" "y = 0" |
1056 then have "dist (?g x) (?g y) = dist x y" by simp } |
1056 then have "dist (?g x) (?g y) = dist x y" by simp } |
1057 moreover |
1057 moreover |
1058 {assume "x = 0" "y \<noteq> 0" |
1058 {assume "x = 0" "y \<noteq> 0" |
1059 then have "dist (?g x) (?g y) = dist x y" |
1059 then have "dist (?g x) (?g y) = dist x y" |
1060 apply (simp add: dist_def norm_neg norm_mul norm_eq_0) |
1060 apply (simp add: dist_def norm_mul) |
1061 apply (rule f1[rule_format]) |
1061 apply (rule f1[rule_format]) |
1062 by(simp add: norm_mul norm_eq_0 field_simps)} |
1062 by(simp add: norm_mul field_simps)} |
1063 moreover |
1063 moreover |
1064 {assume "x \<noteq> 0" "y = 0" |
1064 {assume "x \<noteq> 0" "y = 0" |
1065 then have "dist (?g x) (?g y) = dist x y" |
1065 then have "dist (?g x) (?g y) = dist x y" |
1066 apply (simp add: dist_def norm_neg norm_mul norm_eq_0) |
1066 apply (simp add: dist_def norm_mul) |
1067 apply (rule f1[rule_format]) |
1067 apply (rule f1[rule_format]) |
1068 by(simp add: norm_mul norm_eq_0 field_simps)} |
1068 by(simp add: norm_mul field_simps)} |
1069 moreover |
1069 moreover |
1070 {assume z: "x \<noteq> 0" "y \<noteq> 0" |
1070 {assume z: "x \<noteq> 0" "y \<noteq> 0" |
1071 have th00: "x = norm x *s inverse (norm x) *s x" "y = norm y *s inverse (norm y) *s y" "norm x *s f (inverse (norm x) *s x) = norm x *s f (inverse (norm x) *s x)" |
1071 have th00: "x = norm x *s inverse (norm x) *s x" "y = norm y *s inverse (norm y) *s y" "norm x *s f (inverse (norm x) *s x) = norm x *s f (inverse (norm x) *s x)" |
1072 "norm y *s f (inverse (norm y) *s y) = norm y *s f (inverse (norm y) *s y)" |
1072 "norm y *s f (inverse (norm y) *s y) = norm y *s f (inverse (norm y) *s y)" |
1073 "norm (inverse (norm x) *s x) = 1" |
1073 "norm (inverse (norm x) *s x) = 1" |
1075 "norm (inverse (norm y) *s y) = 1" |
1075 "norm (inverse (norm y) *s y) = 1" |
1076 "norm (f (inverse (norm y) *s y)) = 1" |
1076 "norm (f (inverse (norm y) *s y)) = 1" |
1077 "norm (f (inverse (norm x) *s x) - f (inverse (norm y) *s y)) = |
1077 "norm (f (inverse (norm x) *s x) - f (inverse (norm y) *s y)) = |
1078 norm (inverse (norm x) *s x - inverse (norm y) *s y)" |
1078 norm (inverse (norm x) *s x - inverse (norm y) *s y)" |
1079 using z |
1079 using z |
1080 by (auto simp add: norm_eq_0 vector_smult_assoc field_simps norm_mul intro: f1[rule_format] fd1[rule_format, unfolded dist_def]) |
1080 by (auto simp add: vector_smult_assoc field_simps norm_mul intro: f1[rule_format] fd1[rule_format, unfolded dist_def]) |
1081 from z th0[OF th00] have "dist (?g x) (?g y) = dist x y" |
1081 from z th0[OF th00] have "dist (?g x) (?g y) = dist x y" |
1082 by (simp add: dist_def)} |
1082 by (simp add: dist_def)} |
1083 ultimately have "dist (?g x) (?g y) = dist x y" by blast} |
1083 ultimately have "dist (?g x) (?g y) = dist x y" by blast} |
1084 note thd = this |
1084 note thd = this |
1085 show ?thesis |
1085 show ?thesis |