-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
import Mathlib.LinearAlgebra.Matrix.Determinant.Basic
import Mathlib.LinearAlgebra.Eigenspace.Minpoly
import Mathlib.LinearAlgebra.Charpoly.Basic
import MIL.Common
rw [Submodule.eq_bot_iff]
rintro x hx
rw [Submodule.mem_inf, mem_ker, mem_ker] at hx
rcases h with ⟨U, V, hUV⟩
have := congr((aeval φ) $hUV.symm x)
simpa [hx]
#check Submodule.add_mem_sup
#check map_mul
#check LinearMap.mul_apply
#check LinearMap.ker_le_ker_comp
example (P Q : K[X]) (h : IsCoprime P Q) (φ : End K V) :
ker (aeval φ P) ⊔ ker (aeval φ Q) = ker (aeval φ (P*Q)) := by
apply le_antisymm
· apply sup_le
· rw [mul_comm, map_mul]
apply ker_le_ker_comp -- or alternative below:
-- intro x hx
-- rw [mul_comm, mem_ker] at *
-- simp [hx]
· rw [map_mul]
apply ker_le_ker_comp -- or alternative as above
· intro x hx
rcases h with ⟨U, V, hUV⟩
have key : x = aeval φ (U*P) x + aeval φ (V*Q) x := by simpa using congr((aeval φ) $hUV.symm x)
rw [key, add_comm]
apply Submodule.add_mem_sup <;> rw [mem_ker] at *
· rw [← mul_apply, ← map_mul, show P*(V*Q) = V*(P*Q) by ring, map_mul, mul_apply, hx,
map_zero]
· rw [← mul_apply, ← map_mul, show Q*(U*P) = U*(P*Q) by ring, map_mul, mul_apply, hx,
map_zero]