Zulip Chat Archive
Stream: new members
Topic: char_p for quotients by ideals
Kevin Buzzard (Jan 19 2021 at 14:44):
You were trying to prove alpha.beta.gamma was not zero in this ring, and now you're trying to prove that 1 is not zero. But this is easier -- you can write a ring homomorphism from the ring to Z/2Z and it sends 1 to 1.
Damiano Testa (Jan 19 2021 at 14:45):
In fact, the ideal is homogeneous, so you can simply quotient by all elements of positive degree to obtain a surjective map to the ground ring.
Kevin Buzzard (Jan 19 2021 at 14:46):
I guess it was already remarked earlier that things would be a lot easier if we had a theory of homogeneous ideals.
Eric Wieser (Jan 19 2021 at 14:48):
For the case of this thread, I only care aboutαβγ = 0
and zmod 2
. I was hoping to come up with an example of how to actually apply the lemma I propose in #5809, hence my latest message - and in that case, it would be nice to know how to prove that statement for an arbitrary base ring.
Eric Wieser (Jan 19 2021 at 14:48):
Maybe I'll start a new thread for that
Kevin Buzzard (Jan 19 2021 at 14:49):
You're trying to prove that the map from to is injective. I'm suggesting that you can do this by noting that there's one-sided inverse sending to zero.
Eric Wieser (Jan 19 2021 at 14:52):
You're trying to prove ...
Assuming I haven't confused things by moving this thread, how do I convince lean that that's the same statement as my statement above?
Eric Wieser (Jan 19 2021 at 15:02):
I've updated the top post with a full #mwe, apologies for posting before I'd stated my problem clearly!
Adam Topaz (Jan 19 2021 at 15:58):
Does mathlib have the lemma saying that when is a ring of characteristic and is a morphism then the characteristic of divides ?
Alex J. Best (Jan 19 2021 at 18:00):
Mathlib should have
lemma ring_hom.char_p_iff_char_p {K L : Type*} [division_ring K]
[nontrivial L] [semiring L] (f : K →+* L) (p : ℕ) : char_p K p ↔ char_p L p := ...
Alex J. Best (Jan 19 2021 at 18:00):
But currently docs#ring_hom.char_p_iff_char_p is not so general
Damiano Testa (Jan 19 2021 at 19:08):
It may not be difficult to show the following result:
If all the generators of an ideal evaluate to zero at the same point, then all the elements of the (submodule/ideal) span of them also evaluate to zero at that point.
This shows that your constant must be zero in the ground ring.
Damiano Testa (Jan 20 2021 at 08:12):
I have not found a lemma stating what is below (or something sufficiently close to it). Does it exist?
lemma submodule.mem_span_as_sum {R σ : Type*} [comm_semiring R] {f : R} {s : σ → R}
(hf : f ∈ submodule.span R (set.image s set.univ)) :
∃ F : σ →₀ R, f = ∑ i in F.support, s i * F i :=
Kevin Buzzard (Jan 20 2021 at 08:22):
Are you sure you need it? Sometimes this is what "the proof in the books" says but you can get around it by just using an appropriate induction principle.
Kevin Buzzard (Jan 20 2021 at 08:23):
PS there is set.range
Damiano Testa (Jan 20 2021 at 08:30):
I am trying to prove that if all the polynomials in a set evaluate to zero at some point, then all the polynomials in the ideal generated by that set also evaluate to zero at that point. My strategy was by "the proof in the books"..
Kevin Buzzard (Jan 20 2021 at 10:49):
Why not just prove that the collection of polynomials vanishing at a point is an ideal, so if it contains the set then it contains the ideal generated by the set?
Damiano Testa (Jan 20 2021 at 11:59):
I like this suggestion! As always, I should stop thinking in terms of elements...
Eric Wieser (Nov 22 2021 at 12:15):
Alex J. Best said:
Mathlib should have
lemma ring_hom.char_p_iff_char_p {K L : Type*} [division_ring K] [nontrivial L] [semiring L] (f : K →+* L) (p : ℕ) : char_p K p ↔ char_p L p := ...
We have this, but proving nontrivial (K_over R)
which that lemma needs is just as hard as the original problem
Alex J. Best (Nov 22 2021 at 12:22):
We didnt have it on January 19th though :smile:
Eric Wieser (Nov 22 2021 at 12:32):
The full mwe again, this time using the lemma you suggest
import field_theory.mv_polynomial
open mv_polynomial
@[derive [comm_ring, semiring], reducible]
def K_over (R : Type*) [comm_ring R] :=
(ideal.span {x : mv_polynomial (fin 3) R | ∃ (i : fin 3), x = X i * X i}).quotient
instance {R : Type*} [comm_ring R] [nontrivial R] : nontrivial (K_over R) :=
sorry
instance K_over_char_p {R : Type*} {p : ℕ} [field R] [char_p R p] : char_p (K_over R) p :=
begin
let f : R →+* K_over R := (ideal.quotient.mk _).comp _,
exact (f.char_p_iff_char_p p).mp (by apply_instance),
convert mv_polynomial.C using 1, -- very slow without `convert`
end
Alex J. Best (Nov 22 2021 at 12:46):
Here's a proof of the original help
, idk if you already have one?
lemma help (n : ℕ) (hn : ↑n ∈ ideal.span {x : mv_polynomial (fin 3) R | ∃ (i : fin 3), x = X i * X i}) :
(n : mv_polynomial (fin 3) R) = 0 :=
begin
have : ∀ x ∈ ideal.span {x : mv_polynomial (fin 3) R | ∃ (i : fin 3), x = X i * X i}, eval 0 x = 0,
{ intros x hx,
apply submodule.span_induction hx,
{ rintro x ⟨H_w, rfl⟩,
simp, },
{ simp, },
{ intros x y hx hy, simp [hx, hy], },
{ intros a x hx, simp [hx], }, },
specialize this _ hn,
simp at this,
obtain ⟨p, hp⟩ := char_p.exists R,
haveI := hp,
rw char_p.cast_eq_zero_iff _ p,
rwa char_p.cast_eq_zero_iff _ p at this,
apply_instance,
apply_instance,
end
Alex J. Best (Nov 22 2021 at 12:47):
We hopefully have a lemma saying the quotient by an ideal is nontrivial if the ideal is not top, and this (overkill for that purpose) proof shows the ideal is not top whenever R
is non-trivial.
Eric Wieser (Nov 22 2021 at 12:48):
Yes, that's docs#ideal.quotient.nontrivial
Alex J. Best (Nov 22 2021 at 12:51):
Ok but your original proof works with the right imports char_p.quotient
, so are you just looking for the cleanest way of doing this?
Eric Wieser (Nov 22 2021 at 12:51):
Well I never managed to reach a proof at all, so your comment above is excellent
Eric Wieser (Nov 22 2021 at 12:51):
But now I'm after the cleanest way of doing this
Alex J. Best (Nov 22 2021 at 12:54):
Yeah I guess I also don't see a way of showing 1 is not in the ideal that is easier than showing the only constant in the ideal is 0.
Alex J. Best (Nov 22 2021 at 12:56):
Like maybe if it was on paper I'd say that the ideal only contains even total degree monomials, so it can't contain everything, but formalizing that definitely seems longer, it would be a slightly more general argument though I guess
Eric Wieser (Nov 22 2021 at 13:07):
Slightly adjusted proof:
lemma C_mem_iff_zero (r : R)
(hr : C r ∈ ideal.span {x : mv_polynomial (fin 3) R | ∃ (i : fin 3), x = X i * X i}) :
(C r : mv_polynomial (fin 3) R) = 0 :=
begin
rw [←C.map_zero, C_inj, ←constant_coeff_C (r : R)],
have := ideal.apply_coe_mem_map (constant_coeff : mv_polynomial (fin 3) R →+* R) _ ⟨_, hr⟩,
rw [ideal.map_span, subtype.coe_mk] at this,
clear hr,
revert this,
generalize : constant_coeff (C r : mv_polynomial (fin 3) R) = x,
intro hx,
apply submodule.span_induction hx,
{ rintro x ⟨H_w, ⟨i, rfl⟩, rfl⟩,
simp, },
{ simp, },
{ intros x y hx hy, simp [hx, hy], },
{ intros a x hx, simp [hx], },
end
lemma nat_cast_mem_iff_zero (n : ℕ)
(hn : ↑n ∈ ideal.span {x : mv_polynomial (fin 3) R | ∃ (i : fin 3), x = X i * X i}) :
(n : mv_polynomial (fin 3) R) = 0 :=
begin
revert hn,
rw [←C.map_nat_cast],
exact C_mem_iff_zero _,
end
Last updated: Dec 20 2023 at 11:08 UTC