lemma gauss_cnj_i [simp]: ‹cnj i = - i› by (simp add: gauss_eq_iff)
lemma gauss_add_cnj: ‹z + cnj z = of_int (2 * Re z)› by (simp add: gauss_eq_iff)
lemma gauss_diff_cnj: ‹z - cnj z = of_int (2 * Im z) * i› by (simp add: gauss_eq_iff)
lemma gauss_mult_cnj: ‹z * cnj z = of_int ((Re z)🚫2 + (Im z)🚫2)› by (simp add: gauss_eq_iff power2_eq_square)
lemma cnj_add_mult_eq_Re: ‹z * cnj w + cnj z * w = of_int (2 * Re (z * cnj w))› by (simp add: gauss_eq_iff)
lemma gauss_In_mult_cnj_zero [simp]: ‹Im (z * cnj z) = 0› by simp
subsection‹Algebraic division›
instantiation gauss :: idom_modulo begin
primcorec divide_gauss :: ‹gauss ==> gauss ==> gauss› where ‹Re (x div y) = (Re x * Re y + Im x * Im y) cdiv ((Re y)🚫2 + (Im y)🚫2)›
| ‹Im (x div y) = (Im x * Re y - Re x * Im y) cdiv ((Re y)🚫2 + (Im y)🚫2)›
primcorec modulo_gauss :: ‹gauss ==> gauss ==> gauss› where ‹Re (x mod y) = Re x -
((Re x * Re y + Im x * Im y) cdiv ((Re y)🚫2 + (Im y)🚫2) * Re y -
(Im x * Re y - Re x * Im y) cdiv ((Re y)🚫2 + (Im y)🚫2) * Im y)›
| ‹Im (x mod y) = Im x -
((Re x * Re y + Im x * Im y) cdiv ((Re y)🚫2 + (Im y)🚫2) * Im y +
(Im x * Re y - Re x * Im y) cdiv ((Re y)🚫2 + (Im y)🚫2) * Re y)›
instanceproof fix x y :: gauss show‹x div 0 = 0› by (simp add: gauss_eq_iff) show‹x * y div y = x›if‹y ≠ 0› proof -
define Y where‹Y = (Re y)🚫2 + (Im y)🚫2› moreoverhave‹Y > 0› using that by (simp add: gauss_eq_0 less_le Y_def) have *: ‹Im y * (Im y * Re x) + Re x * (Re y * Re y) = Re x * Y› ‹Im x * (Im y * Im y) + Im x * (Re y * Re y) = Im x * Y› ‹(Im y)🚫2 + (Re y)🚫2 = Y› by (simp_all add: power2_eq_square algebra_simps Y_def) from‹Y > 0›show ?thesis by (simp add: gauss_eq_iff algebra_simps) (simp add: * nonzero_mult_cdiv_cancel_right) qed show‹x div y * y + x mod y = x› by (simp add: gauss_eq_iff) qed
instanceproof show‹euclidean_size (0::gauss) = 0› by (simp add: euclidean_size_gauss_def) show‹euclidean_size (x mod y) < euclidean_size y›if‹y ≠ 0›for x y :: gauss
proof-
define X and Y and R and I where‹X = (Re x)🚫2 + (Im x)🚫2›and‹Y = (Re y)🚫2 + (Im y)🚫2› and‹R = Re x * Re y + Im x * Im y›and‹I = Im x * Re y - Re x * Im y› with that have‹0 < Y›and rhs: ‹int (euclidean_size y) = Y› by (simp_all add: gauss_neq_0 euclidean_size_gauss_def) have‹X * Y = R🚫2 + I🚫2› by (simp add: R_def I_def X_def Y_def power2_eq_square algebra_simps) let ?lhs = ‹X - I * (I cdiv Y) - R * (R cdiv Y)
- I cdiv Y * (I cmod Y) - R cdiv Y * (R cmod Y)› have‹?lhs = X + Y * (R cdiv Y) * (R cdiv Y) + Y * (I cdiv Y) * (I cdiv Y)
- 2 * (R cdiv Y * R + I cdiv Y * I)› by (simp flip: minus_cmod_eq_mult_cdiv add: algebra_simps) alsohave‹… = (Re (x mod y))🚫2 + (Im (x mod y))🚫2› by (simp add: X_def Y_def R_def I_def algebra_simps power2_eq_square) finallyhave lhs: ‹int (euclidean_size (x mod y)) = ?lhs› by (simp add: euclidean_size_gauss_def) have‹?lhs * Y = (I cmod Y)🚫2 + (R cmod Y)🚫2› apply (simp add: algebra_simps power2_eq_square ‹X * Y = R🚫2 + I🚫2›) apply (simp flip: mult.assoc add.assoc minus_cmod_eq_mult_cdiv) apply (simp add: algebra_simps) done alsohave‹…≤ (Y div 2)🚫2 + (Y div 2)🚫2› by (rule add_mono) (use‹Y > 0› abs_cmod_less_equal [of Y] in‹simp_all add: power2_le_iff_abs_le›) alsohave‹… < Y🚫2› using‹Y > 0›by (cases ‹Y = 1›) (simp_all add: power2_eq_square mult_le_less_imp_less flip: mult.assoc) finallyhave‹?lhs * Y < Y🚫2› . with‹Y > 0›have‹?lhs < Y› by (simp add: power2_eq_square) thenhave‹int (euclidean_size (x mod y)) < int (euclidean_size y)› by (simp only: lhs rhs) thenshow ?thesis by simp qed show‹euclidean_size x ≤ euclidean_size (x * y)›if‹y ≠ 0›for x y :: gauss proof - from that have‹euclidean_size y > 0› by (simp add: euclidean_size_gauss_def gauss_neq_0) thenhave‹euclidean_size x ≤ euclidean_size x * euclidean_size y› by simp alsohave‹… = nat (((Re x)🚫2 + (Im x)🚫2) * ((Re y)🚫2 + (Im y)🚫2))› by (simp add: euclidean_size_gauss_def nat_mult_distrib) alsohave‹… = euclidean_size (x * y)› by (simp add: euclidean_size_gauss_def eq_nat_nat_iff) (simp add: algebra_simps power2_eq_square) finallyshow ?thesis . qed qed
end
end
Messung V0.5
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.