src/HOL/Multivariate_Analysis/Fashoda.thy
changeset 63040 eb4ddd18d635
parent 62397 5ae24f33d343
equal deleted inserted replaced
63039:1a20fd9cf281 63040:eb4ddd18d635
   100     and "g 1 $2 = 1"
   100     and "g 1 $2 = 1"
   101   shows "\<exists>s\<in>{-1 .. 1}. \<exists>t\<in>{-1 .. 1}. f s = g t"
   101   shows "\<exists>s\<in>{-1 .. 1}. \<exists>t\<in>{-1 .. 1}. f s = g t"
   102 proof (rule ccontr)
   102 proof (rule ccontr)
   103   assume "\<not> ?thesis"
   103   assume "\<not> ?thesis"
   104   note as = this[unfolded bex_simps,rule_format]
   104   note as = this[unfolded bex_simps,rule_format]
   105   def sqprojection \<equiv> "\<lambda>z::real^2. (inverse (infnorm z)) *\<^sub>R z" 
   105   define sqprojection
   106   def negatex \<equiv> "\<lambda>x::real^2. (vector [-(x$1), x$2])::real^2"
   106     where [abs_def]: "sqprojection z = (inverse (infnorm z)) *\<^sub>R z" for z :: "real^2"
       
   107   define negatex :: "real^2 \<Rightarrow> real^2"
       
   108     where "negatex x = (vector [-(x$1), x$2])" for x
   107   have lem1: "\<forall>z::real^2. infnorm (negatex z) = infnorm z"
   109   have lem1: "\<forall>z::real^2. infnorm (negatex z) = infnorm z"
   108     unfolding negatex_def infnorm_2 vector_2 by auto
   110     unfolding negatex_def infnorm_2 vector_2 by auto
   109   have lem2: "\<forall>z. z \<noteq> 0 \<longrightarrow> infnorm (sqprojection z) = 1"
   111   have lem2: "\<forall>z. z \<noteq> 0 \<longrightarrow> infnorm (sqprojection z) = 1"
   110     unfolding sqprojection_def
   112     unfolding sqprojection_def
   111     unfolding infnorm_mul[unfolded scalar_mult_eq_scaleR]
   113     unfolding infnorm_mul[unfolded scalar_mult_eq_scaleR]
   347     and "(pathstart g)$2 = -1"
   349     and "(pathstart g)$2 = -1"
   348     and "(pathfinish g)$2 = 1"
   350     and "(pathfinish g)$2 = 1"
   349   obtains z where "z \<in> path_image f" and "z \<in> path_image g"
   351   obtains z where "z \<in> path_image f" and "z \<in> path_image g"
   350 proof -
   352 proof -
   351   note assms=assms[unfolded path_def pathstart_def pathfinish_def path_image_def]
   353   note assms=assms[unfolded path_def pathstart_def pathfinish_def path_image_def]
   352   def iscale \<equiv> "\<lambda>z::real. inverse 2 *\<^sub>R (z + 1)"
   354   define iscale where [abs_def]: "iscale z = inverse 2 *\<^sub>R (z + 1)" for z :: real
   353   have isc: "iscale ` {- 1..1} \<subseteq> {0..1}"
   355   have isc: "iscale ` {- 1..1} \<subseteq> {0..1}"
   354     unfolding iscale_def by auto
   356     unfolding iscale_def by auto
   355   have "\<exists>s\<in>{- 1..1}. \<exists>t\<in>{- 1..1}. (f \<circ> iscale) s = (g \<circ> iscale) t"
   357   have "\<exists>s\<in>{- 1..1}. \<exists>t\<in>{- 1..1}. (f \<circ> iscale) s = (g \<circ> iscale) t"
   356   proof (rule fashoda_unit)
   358   proof (rule fashoda_unit)
   357     show "(f \<circ> iscale) ` {- 1..1} \<subseteq> cbox (- 1) 1" "(g \<circ> iscale) ` {- 1..1} \<subseteq> cbox (- 1) 1"
   359     show "(f \<circ> iscale) ` {- 1..1} \<subseteq> cbox (- 1) 1" "(g \<circ> iscale) ` {- 1..1} \<subseteq> cbox (- 1) 1"