src/HOL/Analysis/Finite_Cartesian_Product.thy
changeset 71044 cb504351d058
parent 70136 f03a01a18c6e
child 71174 7fac205dd737
equal deleted inserted replaced
71043:2fab72ab919a 71044:cb504351d058
   133   proof (subst bij_betw_same_card)
   133   proof (subst bij_betw_same_card)
   134     show "bij_betw vec_nth UNIV (Pi (UNIV :: 'b set) (\<lambda>_. UNIV :: 'a set))"
   134     show "bij_betw vec_nth UNIV (Pi (UNIV :: 'b set) (\<lambda>_. UNIV :: 'a set))"
   135       by (intro bij_betwI[of _ _ _ vec_lambda]) (auto simp: vec_eq_iff)
   135       by (intro bij_betwI[of _ _ _ vec_lambda]) (auto simp: vec_eq_iff)
   136     have "CARD('a) ^ CARD('b) = card (PiE (UNIV :: 'b set) (\<lambda>_. UNIV :: 'a set))"
   136     have "CARD('a) ^ CARD('b) = card (PiE (UNIV :: 'b set) (\<lambda>_. UNIV :: 'a set))"
   137       (is "_ = card ?A")
   137       (is "_ = card ?A")
   138       by (subst card_PiE) (auto simp: prod_constant)
   138       by (subst card_PiE) (auto)
   139     
       
   140     also have "?A = Pi UNIV (\<lambda>_. UNIV)" 
   139     also have "?A = Pi UNIV (\<lambda>_. UNIV)" 
   141       by auto
   140       by auto
   142     finally show "card \<dots> = CARD('a) ^ CARD('b)" ..
   141     finally show "card \<dots> = CARD('a) ^ CARD('b)" ..
   143   qed
   142   qed
   144 qed (simp_all add: infinite_UNIV_vec)
   143 qed (simp_all add: infinite_UNIV_vec)
  1073   shows "A ** (k *\<^sub>R B) = k *\<^sub>R A ** B"
  1072   shows "A ** (k *\<^sub>R B) = k *\<^sub>R A ** B"
  1074   by (simp add: matrix_matrix_mult_def sum_distrib_left mult_ac vec_eq_iff)
  1073   by (simp add: matrix_matrix_mult_def sum_distrib_left mult_ac vec_eq_iff)
  1075 
  1074 
  1076 lemma matrix_vector_mul_lid [simp]: "mat 1 *v x = (x::'a::semiring_1 ^ 'n)"
  1075 lemma matrix_vector_mul_lid [simp]: "mat 1 *v x = (x::'a::semiring_1 ^ 'n)"
  1077   apply (vector matrix_vector_mult_def mat_def)
  1076   apply (vector matrix_vector_mult_def mat_def)
  1078   apply (simp add: if_distrib if_distribR sum.delta' cong del: if_weak_cong)
  1077   apply (simp add: if_distrib if_distribR cong del: if_weak_cong)
  1079   done
  1078   done
  1080 
  1079 
  1081 lemma matrix_transpose_mul:
  1080 lemma matrix_transpose_mul:
  1082     "transpose(A ** B) = transpose B ** transpose (A::'a::comm_semiring_1^_^_)"
  1081     "transpose(A ** B) = transpose B ** transpose (A::'a::comm_semiring_1^_^_)"
  1083   by (simp add: matrix_matrix_mult_def transpose_def vec_eq_iff mult.commute)
  1082   by (simp add: matrix_matrix_mult_def transpose_def vec_eq_iff mult.commute)