Zulip Chat Archive
Stream: general
Topic: Field of 4 elements
Kenny Lau (Feb 22 2019 at 22:17):
Does the field of 4 elements have its place in mathlib? I am using it in my little project as a ring that is not generated by 1, and the decidability was quite useful; if I PR my use case to mathlib, do I need to replace it by a more "regular" ring such as ZxZ or Z[X]?
Kenny Lau (Feb 22 2019 at 22:20):
@[derive decidable_eq] inductive F4 : Type | z | o | a | b namespace F4 instance : fintype F4 := { elems := {z, o, a, b}, complete := λ x, by cases x; simp } def add : F4 → F4 → F4 | z x := x | x z := x | o o := z | o a := b | o b := a | a o := b | a a := z | a b := o | b o := a | b a := o | b b := z def mul : F4 → F4 → F4 | z x := z | x z := z | o x := x | x o := x | a a := b | a b := o | b a := o | b b := a def inv : F4 → F4 | z := z | o := o | a := b | b := a instance : discrete_field F4 := by refine { add := add, zero := z, neg := id, mul := mul, one := o, inv := inv, has_decidable_eq := F4.decidable_eq, .. }; tactic.exact_dec_trivial end F4
Chris Hughes (Feb 22 2019 at 22:50):
You can prove discrete_field
constructively for adjoin_root
using euclidean division I guess, or just for finite fields using a search.
Kevin Buzzard (Feb 22 2019 at 23:09):
I think there's a place in mathlib for the field with q elements, and one could define it as the splitting field of X^q-X over Z/pZ if q is a power of p
Kenny Lau (Feb 22 2019 at 23:09):
yeah but specifically 4 elements
Mario Carneiro (Feb 22 2019 at 23:36):
insert q= 4?
Kenny Lau (Feb 22 2019 at 23:41):
that seems too much work for something not with that purpose
Mario Carneiro (Feb 22 2019 at 23:42):
but this seems like a lot of case analysis for a more abstract thing
Mario Carneiro (Feb 22 2019 at 23:43):
If you just need to know a field with 4 elements exists, that's definitely part of a more general theorem
Kenny Lau (Feb 22 2019 at 23:44):
no I just want a simple ring that is not generated by 1
Kenny Lau (Feb 22 2019 at 23:44):
simple as in not complicated
Mario Carneiro (Feb 22 2019 at 23:44):
ring? How about zmod 2 x zmod 2
Mario Carneiro (Feb 22 2019 at 23:45):
or rat
or real
Kenny Lau (Feb 22 2019 at 23:48):
and you need to be able to prove that it is not generated by 1
Mario Carneiro (Feb 22 2019 at 23:48):
sqrt 2 is not in Q
Kenny Lau (Feb 22 2019 at 23:50):
sqrt 2 is easier than 1/2?
Mario Carneiro (Feb 22 2019 at 23:51):
I wasn't sure which "generated" you meant. 1/2 works too
Mario Carneiro (Feb 22 2019 at 23:51):
I recall Kevin looking for a short proof that 1/2 is not an integer. I think noting it has denominator 2 works
Mario Carneiro (Feb 22 2019 at 23:52):
or 0 < 1/2 <1
Kenny Lau (Feb 22 2019 at 23:52):
lemme try that later
Kevin Buzzard (Feb 22 2019 at 23:59):
Q is not generated by 1 because Z is a subring and 1/2 is not an integer
Kevin Buzzard (Feb 23 2019 at 00:01):
The complexes are not generated by 1 because the reals are a subring and i is not real, maybe that's easier
Kenny Lau (Feb 23 2019 at 00:01):
yeah but are they in mathlib?
Mario Carneiro (Feb 23 2019 at 00:03):
We usually don'r state such theorems explicitly, but sqrt 2 not in Q is an exception
Kenny Lau (Feb 23 2019 at 00:03):
oh brilliant
Mario Carneiro (Feb 23 2019 at 00:03):
i not real also sound like a good candidate
Kevin Buzzard (Feb 23 2019 at 00:03):
You mean the fact that the reals are a subring? Everything else is. Why do you want examples anyway? It's theorems we need :-)
Mario Carneiro (Feb 23 2019 at 00:04):
That's my point. Most of these are just "examples" so they don't go in mathlib
Kevin Buzzard (Feb 23 2019 at 00:04):
Lack of examples makes maths UG example sheets harder to do
Mario Carneiro (Feb 23 2019 at 00:04):
There are a few cases of examples that are actually useful for theorems, and I think having simple things like this is good
Mario Carneiro (Feb 23 2019 at 00:05):
that's a good thing, it means the kids can't cheat :)
Mario Carneiro (Feb 23 2019 at 00:06):
I consider example making part of the educator's job
Kenny Lau (Feb 23 2019 at 01:05):
we have theorems about irrational numbers but not rational numbers?
Kenny Lau (Feb 23 2019 at 01:09):
thanks, sqrt 2 worked like a charm! @Mario Carneiro
Kenny Lau (Feb 23 2019 at 01:09):
theorem is_supported_pure {p} {s : set α} : is_supported (pure p) s ↔ p ∈ s := suffices is_supported (pure p) s → p ∈ s, from ⟨this, λ hps, ring.subset_closure ⟨p, hps, rfl⟩⟩, assume hps : is_supported (pure p) s, begin classical, have : ∀ x, is_supported x s → ∃ q : ℚ, lift (λ q, if q ∈ s then 0 else real.sqrt 2) x = ↑q, { intros x hx, refine ring.in_closure.rec_on hx _ _ _ _, { use 1, rw [lift_one, rat.cast_one] }, { use -1, rw [lift_neg, lift_one, rat.cast_neg, rat.cast_one], }, { rintros _ ⟨z, hzs, rfl⟩ _ _, use 0, rw [lift_mul, lift_of, if_pos hzs, zero_mul, rat.cast_zero] }, { rintros x y ⟨q, hq⟩ ⟨r, hr⟩, use q+r, rw [lift_add, hq, hr, rat.cast_add] } }, specialize this (of p) hps, rw [lift_of] at this, split_ifs at this, { exact h }, exfalso, exact irr_sqrt_two this end
Mario Carneiro (Feb 23 2019 at 01:10):
what is is_supported pure
?
Kenny Lau (Feb 23 2019 at 01:11):
def is_supported (x : free_comm_ring α) (s : set α) : Prop := x ∈ ring.closure (of '' s)
Last updated: Dec 20 2023 at 11:08 UTC