src/HOL/Multivariate_Analysis/Determinants.thy
changeset 39198 f967a16dfcdd
parent 37489 44e42d392c6e
child 39302 d7728f65b353
equal deleted inserted replaced
39166:19efc2af3e6c 39198:f967a16dfcdd
   139     also have "\<dots> = setprod (\<lambda>i. ?di A i (p i)) ?U"
   139     also have "\<dots> = setprod (\<lambda>i. ?di A i (p i)) ?U"
   140     proof-
   140     proof-
   141       {fix i assume i: "i \<in> ?U"
   141       {fix i assume i: "i \<in> ?U"
   142         from i permutes_inv_o[OF pU] permutes_in_image[OF pU]
   142         from i permutes_inv_o[OF pU] permutes_in_image[OF pU]
   143         have "((\<lambda>i. ?di (transpose A) i (inv p i)) o p) i = ?di A i (p i)"
   143         have "((\<lambda>i. ?di (transpose A) i (inv p i)) o p) i = ?di A i (p i)"
   144           unfolding transpose_def by (simp add: expand_fun_eq)}
   144           unfolding transpose_def by (simp add: ext_iff)}
   145       then show "setprod ((\<lambda>i. ?di (transpose A) i (inv p i)) o p) ?U = setprod (\<lambda>i. ?di A i (p i)) ?U" by (auto intro: setprod_cong)
   145       then show "setprod ((\<lambda>i. ?di (transpose A) i (inv p i)) o p) ?U = setprod (\<lambda>i. ?di A i (p i)) ?U" by (auto intro: setprod_cong)
   146     qed
   146     qed
   147     finally have "of_int (sign (inv p)) * (setprod (\<lambda>i. ?di (transpose A) i (inv p i)) ?U) = of_int (sign p) * (setprod (\<lambda>i. ?di A i (p i)) ?U)" using sth
   147     finally have "of_int (sign (inv p)) * (setprod (\<lambda>i. ?di (transpose A) i (inv p i)) ?U) = of_int (sign p) * (setprod (\<lambda>i. ?di A i (p i)) ?U)" using sth
   148       by simp}
   148       by simp}
   149   then show ?thesis unfolding det_def apply (subst setsum_permutations_inverse)
   149   then show ?thesis unfolding det_def apply (subst setsum_permutations_inverse)
   205   have fU: "finite ?U" by simp
   205   have fU: "finite ?U" by simp
   206   from finite_permutations[OF fU] have fPU: "finite ?PU" .
   206   from finite_permutations[OF fU] have fPU: "finite ?PU" .
   207   have id0: "{id} \<subseteq> ?PU" by (auto simp add: permutes_id)
   207   have id0: "{id} \<subseteq> ?PU" by (auto simp add: permutes_id)
   208   {fix p assume p: "p \<in> ?PU - {id}"
   208   {fix p assume p: "p \<in> ?PU - {id}"
   209     then have "p \<noteq> id" by simp
   209     then have "p \<noteq> id" by simp
   210     then obtain i where i: "p i \<noteq> i" unfolding expand_fun_eq by auto
   210     then obtain i where i: "p i \<noteq> i" unfolding ext_iff by auto
   211     from ld [OF i [symmetric]] have ex:"\<exists>i \<in> ?U. A$i$p i = 0" by blast
   211     from ld [OF i [symmetric]] have ex:"\<exists>i \<in> ?U. A$i$p i = 0" by blast
   212     from setprod_zero [OF fU ex] have "?pp p = 0" by simp}
   212     from setprod_zero [OF fU ex] have "?pp p = 0" by simp}
   213   then have p0: "\<forall>p \<in> ?PU - {id}. ?pp p = 0"  by blast
   213   then have p0: "\<forall>p \<in> ?PU - {id}. ?pp p = 0"  by blast
   214   from setsum_mono_zero_cong_left[OF fPU id0 p0] show ?thesis
   214   from setsum_mono_zero_cong_left[OF fPU id0 p0] show ?thesis
   215     unfolding det_def by (simp add: sign_id)
   215     unfolding det_def by (simp add: sign_id)