diff -r ad6d4a14adb5 -r f03a01a18c6e src/HOL/Analysis/Finite_Cartesian_Product.thy --- a/src/HOL/Analysis/Finite_Cartesian_Product.thy Fri Apr 12 19:48:29 2019 +0200 +++ b/src/HOL/Analysis/Finite_Cartesian_Product.thy Fri Apr 12 22:09:25 2019 +0200 @@ -13,7 +13,7 @@ "HOL-Library.FuncSet" begin -subsection%unimportant \Finite Cartesian products, with indexing and lambdas\ +subsection\<^marker>\tag unimportant\ \Finite Cartesian products, with indexing and lambdas\ typedef ('a, 'b) vec = "UNIV :: ('b::finite \ 'a) set" morphisms vec_nth vec_lambda .. @@ -165,7 +165,7 @@ by (simp add: image_comp o_def vec_nth_inverse) qed -subsection%unimportant \Group operations and class instances\ +subsection\<^marker>\tag unimportant\ \Group operations and class instances\ instantiation vec :: (zero, finite) zero begin @@ -230,7 +230,7 @@ by standard (simp_all add: vec_eq_iff) -subsection%unimportant\Basic componentwise operations on vectors\ +subsection\<^marker>\tag unimportant\\Basic componentwise operations on vectors\ instantiation vec :: (times, finite) times begin @@ -294,15 +294,15 @@ subsection \Real vector space\ -instantiation%unimportant vec :: (real_vector, finite) real_vector +instantiation\<^marker>\tag unimportant\ vec :: (real_vector, finite) real_vector begin -definition%important "scaleR \ (\ r x. (\ i. scaleR r (x$i)))" +definition\<^marker>\tag important\ "scaleR \ (\ r x. (\ i. scaleR r (x$i)))" lemma vector_scaleR_component [simp]: "(scaleR r x)$i = scaleR r (x$i)" unfolding scaleR_vec_def by simp -instance%unimportant +instance\<^marker>\tag unimportant\ by standard (simp_all add: vec_eq_iff scaleR_left_distrib scaleR_right_distrib) end @@ -310,15 +310,15 @@ subsection \Topological space\ -instantiation%unimportant vec :: (topological_space, finite) topological_space +instantiation\<^marker>\tag unimportant\ vec :: (topological_space, finite) topological_space begin -definition%important [code del]: +definition\<^marker>\tag important\ [code del]: "open (S :: ('a ^ 'b) set) \ (\x\S. \A. (\i. open (A i) \ x$i \ A i) \ (\y. (\i. y$i \ A i) \ y \ S))" -instance%unimportant proof +instance\<^marker>\tag unimportant\ proof show "open (UNIV :: ('a ^ 'b) set)" unfolding open_vec_def by auto next @@ -418,7 +418,7 @@ then show "\T. open T \ a \ T \ T \ (\x. x $ i) ` S" by - (rule exI) qed -instance%unimportant vec :: (perfect_space, finite) perfect_space +instance\<^marker>\tag unimportant\ vec :: (perfect_space, finite) perfect_space proof fix x :: "'a ^ 'b" show "\ open {x}" proof @@ -433,29 +433,29 @@ subsection \Metric space\ (* TODO: Product of uniform spaces and compatibility with metric_spaces! *) -instantiation%unimportant vec :: (metric_space, finite) dist +instantiation\<^marker>\tag unimportant\ vec :: (metric_space, finite) dist begin -definition%important +definition\<^marker>\tag important\ "dist x y = L2_set (\i. dist (x$i) (y$i)) UNIV" instance .. end -instantiation%unimportant vec :: (metric_space, finite) uniformity_dist +instantiation\<^marker>\tag unimportant\ vec :: (metric_space, finite) uniformity_dist begin -definition%important [code del]: +definition\<^marker>\tag important\ [code del]: "(uniformity :: (('a^'b::_) \ ('a^'b::_)) filter) = (INF e\{0 <..}. principal {(x, y). dist x y < e})" -instance%unimportant +instance\<^marker>\tag unimportant\ by standard (rule uniformity_vec_def) end declare uniformity_Abort[where 'a="'a :: metric_space ^ 'b :: finite", code] -instantiation%unimportant vec :: (metric_space, finite) metric_space +instantiation\<^marker>\tag unimportant\ vec :: (metric_space, finite) metric_space begin proposition dist_vec_nth_le: "dist (x $ i) (y $ i) \ dist x y" @@ -557,7 +557,7 @@ then show "\M. \m\M. \n\M. dist (X m) (X n) < r" .. qed -instance%unimportant vec :: (complete_space, finite) complete_space +instance\<^marker>\tag unimportant\ vec :: (complete_space, finite) complete_space proof fix X :: "nat \ 'a ^ 'b" assume "Cauchy X" have "\i. (\n. X n $ i) \ lim (\n. X n $ i)" @@ -572,14 +572,14 @@ subsection \Normed vector space\ -instantiation%unimportant vec :: (real_normed_vector, finite) real_normed_vector +instantiation\<^marker>\tag unimportant\ vec :: (real_normed_vector, finite) real_normed_vector begin -definition%important "norm x = L2_set (\i. norm (x$i)) UNIV" +definition\<^marker>\tag important\ "norm x = L2_set (\i. norm (x$i)) UNIV" -definition%important "sgn (x::'a^'b) = scaleR (inverse (norm x)) x" +definition\<^marker>\tag important\ "sgn (x::'a^'b) = scaleR (inverse (norm x)) x" -instance%unimportant proof +instance\<^marker>\tag unimportant\ proof fix a :: real and x y :: "'a ^ 'b" show "norm x = 0 \ x = 0" unfolding norm_vec_def @@ -609,8 +609,8 @@ fixes x :: "'a::real_normed_vector^'n" assumes "\i. norm(x$i) \ norm(y$i)" shows "norm x \ norm y" - unfolding%unimportant norm_vec_def - by%unimportant (rule L2_set_mono) (auto simp: assms) + unfolding norm_vec_def + by (rule L2_set_mono) (auto simp: assms) lemma component_le_norm_cart: "\x$i\ \ norm x" apply (simp add: norm_vec_def) @@ -638,12 +638,12 @@ subsection \Inner product space\ -instantiation%unimportant vec :: (real_inner, finite) real_inner +instantiation\<^marker>\tag unimportant\ vec :: (real_inner, finite) real_inner begin -definition%important "inner x y = sum (\i. inner (x$i) (y$i)) UNIV" +definition\<^marker>\tag important\ "inner x y = sum (\i. inner (x$i) (y$i)) UNIV" -instance%unimportant proof +instance\<^marker>\tag unimportant\ proof fix r :: real and x y z :: "'a ^ 'b" show "inner x y = inner y x" unfolding inner_vec_def @@ -672,7 +672,7 @@ text \Vectors pointing along a single axis.\ -definition%important "axis k x = (\ i. if i = k then x else 0)" +definition\<^marker>\tag important\ "axis k x = (\ i. if i = k then x else 0)" lemma axis_nth [simp]: "axis i x $ i = x" unfolding axis_def by simp @@ -696,12 +696,12 @@ lemma inner_axis': "inner(axis i y) x = inner y (x $ i)" by (simp add: inner_axis inner_commute) -instantiation%unimportant vec :: (euclidean_space, finite) euclidean_space +instantiation\<^marker>\tag unimportant\ vec :: (euclidean_space, finite) euclidean_space begin -definition%important "Basis = (\i. \u\Basis. {axis i u})" +definition\<^marker>\tag important\ "Basis = (\i. \u\Basis. {axis i u})" -instance%unimportant proof +instance\<^marker>\tag unimportant\ proof show "(Basis :: ('a ^ 'b) set) \ {}" unfolding Basis_vec_def by simp next @@ -777,7 +777,7 @@ shows "(axis_index (axis u 1 :: real^'n)) = (u::'n)" by (simp add: axis_eq_axis axis_index_def) -subsection%unimportant \A naive proof procedure to lift really trivial arithmetic stuff from the basis of the vector space\ +subsection\<^marker>\tag unimportant\ \A naive proof procedure to lift really trivial arithmetic stuff from the basis of the vector space\ lemma sum_cong_aux: "(\x. x \ A \ f x = g x) \ sum f A = sum g A" @@ -851,13 +851,13 @@ lemma cond_component: "(if b then x else y)$i = (if b then x$i else y$i)" by vector -lemmas%unimportant vector_component = +lemmas\<^marker>\tag unimportant\ vector_component = vec_component vector_add_component vector_mult_component vector_smult_component vector_minus_component vector_uminus_component vector_scaleR_component cond_component -subsection%unimportant \Some frequently useful arithmetic lemmas over vectors\ +subsection\<^marker>\tag unimportant\ \Some frequently useful arithmetic lemmas over vectors\ instance vec :: (semigroup_mult, finite) semigroup_mult by standard (vector mult.assoc) @@ -996,31 +996,31 @@ text\Matrix notation. NB: an MxN matrix is of type \<^typ>\'a^'n^'m\, not \<^typ>\'a^'m^'n\\ -definition%important map_matrix::"('a \ 'b) \ (('a, 'i::finite)vec, 'j::finite) vec \ (('b, 'i)vec, 'j) vec" where +definition\<^marker>\tag important\ map_matrix::"('a \ 'b) \ (('a, 'i::finite)vec, 'j::finite) vec \ (('b, 'i)vec, 'j) vec" where "map_matrix f x = (\ i j. f (x $ i $ j))" lemma nth_map_matrix[simp]: "map_matrix f x $ i $ j = f (x $ i $ j)" by (simp add: map_matrix_def) -definition%important matrix_matrix_mult :: "('a::semiring_1) ^'n^'m \ 'a ^'p^'n \ 'a ^ 'p ^'m" +definition\<^marker>\tag important\ matrix_matrix_mult :: "('a::semiring_1) ^'n^'m \ 'a ^'p^'n \ 'a ^ 'p ^'m" (infixl "**" 70) where "m ** m' == (\ i j. sum (\k. ((m$i)$k) * ((m'$k)$j)) (UNIV :: 'n set)) ::'a ^ 'p ^'m" -definition%important matrix_vector_mult :: "('a::semiring_1) ^'n^'m \ 'a ^'n \ 'a ^ 'm" +definition\<^marker>\tag important\ matrix_vector_mult :: "('a::semiring_1) ^'n^'m \ 'a ^'n \ 'a ^ 'm" (infixl "*v" 70) where "m *v x \ (\ i. sum (\j. ((m$i)$j) * (x$j)) (UNIV ::'n set)) :: 'a^'m" -definition%important vector_matrix_mult :: "'a ^ 'm \ ('a::semiring_1) ^'n^'m \ 'a ^'n " +definition\<^marker>\tag important\ vector_matrix_mult :: "'a ^ 'm \ ('a::semiring_1) ^'n^'m \ 'a ^'n " (infixl "v*" 70) where "v v* m == (\ j. sum (\i. ((m$i)$j) * (v$i)) (UNIV :: 'm set)) :: 'a^'n" -definition%unimportant "(mat::'a::zero => 'a ^'n^'n) k = (\ i j. if i = j then k else 0)" -definition%unimportant transpose where +definition\<^marker>\tag unimportant\ "(mat::'a::zero => 'a ^'n^'n) k = (\ i j. if i = j then k else 0)" +definition\<^marker>\tag unimportant\ transpose where "(transpose::'a^'n^'m \ 'a^'m^'n) A = (\ i j. ((A$j)$i))" -definition%unimportant "(row::'m => 'a ^'n^'m \ 'a ^'n) i A = (\ j. ((A$i)$j))" -definition%unimportant "(column::'n =>'a^'n^'m =>'a^'m) j A = (\ i. ((A$i)$j))" -definition%unimportant "rows(A::'a^'n^'m) = { row i A | i. i \ (UNIV :: 'm set)}" -definition%unimportant "columns(A::'a^'n^'m) = { column i A | i. i \ (UNIV :: 'n set)}" +definition\<^marker>\tag unimportant\ "(row::'m => 'a ^'n^'m \ 'a ^'n) i A = (\ j. ((A$i)$j))" +definition\<^marker>\tag unimportant\ "(column::'n =>'a^'n^'m =>'a^'m) j A = (\ i. ((A$i)$j))" +definition\<^marker>\tag unimportant\ "rows(A::'a^'n^'m) = { row i A | i. i \ (UNIV :: 'm set)}" +definition\<^marker>\tag unimportant\ "columns(A::'a^'n^'m) = { column i A | i. i \ (UNIV :: 'n set)}" lemma times0_left [simp]: "(0::'a::semiring_1^'n^'m) ** (A::'a ^'p^'n) = 0" by (simp add: matrix_matrix_mult_def zero_vec_def) @@ -1151,7 +1151,7 @@ text\Correspondence between matrices and linear operators.\ -definition%important matrix :: "('a::{plus,times, one, zero}^'m \ 'a ^ 'n) \ 'a^'m^'n" +definition\<^marker>\tag important\ matrix :: "('a::{plus,times, one, zero}^'m \ 'a ^ 'n) \ 'a^'m^'n" where "matrix f = (\ i j. (f(axis j 1))$i)" lemma matrix_id_mat_1: "matrix id = mat 1" @@ -1204,10 +1204,10 @@ subsection\Inverse matrices (not necessarily square)\ -definition%important +definition\<^marker>\tag important\ "invertible(A::'a::semiring_1^'n^'m) \ (\A'::'a^'m^'n. A ** A' = mat 1 \ A' ** A = mat 1)" -definition%important +definition\<^marker>\tag important\ "matrix_inv(A:: 'a::semiring_1^'n^'m) = (SOME A'::'a^'m^'n. A ** A' = mat 1 \ A' ** A = mat 1)"