-rw-r--r-- 1345 leangoppa-20230726/Goppadecoding/sq.lean raw
import Mathlib.RingTheory.Polynomial.Basic import Mathlib.Algebra.Squarefree open Polynomial namespace Goppadecoding section lemmas_sq theorem mul_sq {R: Type _} [CommMonoid R] (a b: R): (a*b)^2 = a^2*b^2 := mul_pow a b 2 theorem div_sq {R: Type _} [DivisionCommMonoid R] (a b: R): (a/b)^2 = a^2/b^2 := div_pow a b 2 theorem div_sq_self_eq_recip {k: Type _} [Field k] (r: k): r / r^2 = 1 / r := by by_cases r0: r = 0 . rw[r0,zero_pow,div_zero,div_zero] exact Nat.succ_pos 1 have rrnonzero: r*r ≠ 0 := mul_ne_zero r0 r0 apply eq_one_div_of_mul_eq_one_right rw[mul_div,sq] exact div_self rrnonzero theorem div_sq_mul_mul {k: Type _} [Field k] (a b c: k): a / b^2 * (b*c) = a / b * c := by calc _ = a * c * (b / b^2) := by group _ = a * c * (1 / b) := by rw[div_sq_self_eq_recip b] _ = a / b * c := by group theorem squarefree_dvd_square {k: Type _} [Field k] (g q: k[X]): Squarefree g → g ∣ q^2 → g ∣ q := by intro sqfree have twone0: 2 ≠ 0 := by norm_num exact (UniqueFactorizationMonoid.dvd_pow_iff_dvd_of_squarefree sqfree twone0).mp theorem squarefree_dvd_square_2 {k: Type _} [Field k] (g q: k[X]): Squarefree g → g ∣ q^2 → g^2 ∣ q^2 := by intro sqfree gq2 have gq: g ∣ q := squarefree_dvd_square g q sqfree gq2 exact pow_dvd_pow_of_dvd gq 2 end lemmas_sq