The perfect closure of a field #
@[class]
structure
perfect_ring
(R : Type u)
[comm_semiring R]
(p : ℕ)
[fact (nat.prime p)]
[char_p R p] :
Type u
- pth_root' : R → R
- frobenius_pth_root' : ∀ (x : R), ⇑(frobenius R p) (perfect_ring.pth_root' p x) = x
- pth_root_frobenius' : ∀ (x : R), perfect_ring.pth_root' p (⇑(frobenius R p) x) = x
A perfect ring is a ring of characteristic p that has p-th root.
def
frobenius_equiv
(R : Type u)
[comm_semiring R]
(p : ℕ)
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p] :
R ≃+* R
Frobenius automorphism of a perfect ring.
def
pth_root
(R : Type u)
[comm_semiring R]
(p : ℕ)
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p] :
R →+* R
p
-th root of an element in a perfect_ring
as a ring_hom
.
Equations
- pth_root R p = ↑((frobenius_equiv R p).symm)
@[simp]
theorem
coe_frobenius_equiv
{R : Type u}
[comm_semiring R]
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p] :
⇑(frobenius_equiv R p) = ⇑(frobenius R p)
@[simp]
theorem
coe_frobenius_equiv_symm
{R : Type u}
[comm_semiring R]
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p] :
@[simp]
theorem
frobenius_pth_root
{R : Type u}
[comm_semiring R]
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p]
(x : R) :
@[simp]
theorem
pth_root_pow_p
{R : Type u}
[comm_semiring R]
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p]
(x : R) :
@[simp]
theorem
pth_root_frobenius
{R : Type u}
[comm_semiring R]
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p]
(x : R) :
@[simp]
theorem
pth_root_pow_p'
{R : Type u}
[comm_semiring R]
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p]
(x : R) :
theorem
left_inverse_pth_root_frobenius
{R : Type u}
[comm_semiring R]
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p] :
function.left_inverse ⇑(pth_root R p) ⇑(frobenius R p)
theorem
right_inverse_pth_root_frobenius
{R : Type u}
[comm_semiring R]
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p] :
function.right_inverse ⇑(pth_root R p) ⇑(frobenius R p)
theorem
commute_frobenius_pth_root
{R : Type u}
[comm_semiring R]
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p] :
function.commute ⇑(frobenius R p) ⇑(pth_root R p)
theorem
eq_pth_root_iff
{R : Type u}
[comm_semiring R]
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p]
{x y : R} :
theorem
pth_root_eq_iff
{R : Type u}
[comm_semiring R]
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p]
{x y : R} :
theorem
monoid_hom.map_pth_root
{R : Type u}
[comm_semiring R]
{S : Type v}
[comm_semiring S]
(f : R →* S)
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p]
[char_p S p]
[perfect_ring S p]
(x : R) :
theorem
monoid_hom.map_iterate_pth_root
{R : Type u}
[comm_semiring R]
{S : Type v}
[comm_semiring S]
(f : R →* S)
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p]
[char_p S p]
[perfect_ring S p]
(x : R)
(n : ℕ) :
theorem
ring_hom.map_pth_root
{R : Type u}
[comm_semiring R]
{S : Type v}
[comm_semiring S]
(g : R →+* S)
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p]
[char_p S p]
[perfect_ring S p]
(x : R) :
theorem
ring_hom.map_iterate_pth_root
{R : Type u}
[comm_semiring R]
{S : Type v}
[comm_semiring S]
(g : R →+* S)
{p : ℕ}
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p]
[char_p S p]
[perfect_ring S p]
(x : R)
(n : ℕ) :
theorem
injective_pow_p
{R : Type u}
[comm_semiring R]
(p : ℕ)
[fact (nat.prime p)]
[char_p R p]
[perfect_ring R p]
{x y : R}
(hxy : x ^ p = y ^ p) :
x = y
- intro : ∀ {K : Type u} [_inst_1 : comm_ring K] {p : ℕ} [_inst_2 : fact (nat.prime p)] [_inst_3 : char_p K p] (n : ℕ) (x : K), perfect_closure.r K p (n, x) (n + 1, ⇑(frobenius K p) x)
perfect_closure K p
is the quotient by this relation.
The perfect closure is the smallest extension that makes frobenius surjective.
Equations
- perfect_closure K p = quot (perfect_closure.r K p)
def
perfect_closure.mk
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p]
(x : ℕ × K) :
perfect_closure K p
Constructor for perfect_closure
.
Equations
- perfect_closure.mk K p x = quot.mk (perfect_closure.r K p) x
@[simp]
theorem
perfect_closure.quot_mk_eq_mk
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p]
(x : ℕ × K) :
quot.mk (perfect_closure.r K p) x = perfect_closure.mk K p x
def
perfect_closure.lift_on
{K : Type u}
[comm_ring K]
{p : ℕ}
[fact (nat.prime p)]
[char_p K p]
{L : Type u_1}
(x : perfect_closure K p)
(f : ℕ × K → L)
(hf : ∀ (x y : ℕ × K), perfect_closure.r K p x y → f x = f y) :
L
Lift a function ℕ × K → L
to a function on perfect_closure K p
.
Equations
- x.lift_on f hf = quot.lift_on x f hf
theorem
perfect_closure.induction_on
{K : Type u}
[comm_ring K]
{p : ℕ}
[fact (nat.prime p)]
[char_p K p]
(x : perfect_closure K p)
{q : perfect_closure K p → Prop}
(h : ∀ (x : ℕ × K), q (perfect_closure.mk K p x)) :
q x
@[protected, instance]
def
perfect_closure.has_mul
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
has_mul (perfect_closure K p)
@[protected, instance]
def
perfect_closure.comm_monoid
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
comm_monoid (perfect_closure K p)
Equations
- perfect_closure.comm_monoid K p = {mul := has_mul.mul infer_instance, mul_assoc := _, one := perfect_closure.mk K p (0, 1), one_mul := _, mul_one := _, npow := monoid.npow._default (perfect_closure.mk K p (0, 1)) has_mul.mul _ _, npow_zero' := _, npow_succ' := _, mul_comm := _}
theorem
perfect_closure.one_def
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
1 = perfect_closure.mk K p (0, 1)
@[protected, instance]
def
perfect_closure.inhabited
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
inhabited (perfect_closure K p)
Equations
- perfect_closure.inhabited K p = {default := 1}
@[protected, instance]
def
perfect_closure.has_add
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
has_add (perfect_closure K p)
@[protected, instance]
def
perfect_closure.has_neg
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
has_neg (perfect_closure K p)
Equations
- perfect_closure.has_neg K p = {neg := quot.lift (λ (x : ℕ × K), perfect_closure.mk K p (x.fst, -x.snd)) _}
@[protected, instance]
def
perfect_closure.has_zero
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
has_zero (perfect_closure K p)
Equations
- perfect_closure.has_zero K p = {zero := perfect_closure.mk K p (0, 0)}
theorem
perfect_closure.zero_def
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
0 = perfect_closure.mk K p (0, 0)
theorem
perfect_closure.mk_zero
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p]
(n : ℕ) :
perfect_closure.mk K p (n, 0) = 0
@[protected, instance]
def
perfect_closure.comm_ring
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
comm_ring (perfect_closure K p)
Equations
- perfect_closure.comm_ring K p = {add := has_add.add infer_instance, add_assoc := _, zero := 0, zero_add := _, add_zero := _, nsmul := ring.nsmul._default 0 has_add.add _ _, nsmul_zero' := _, nsmul_succ' := _, neg := has_neg.neg infer_instance, sub := ring.sub._default has_add.add _ 0 _ _ (ring.nsmul._default 0 has_add.add _ _) _ _ has_neg.neg, sub_eq_add_neg := _, zsmul := ring.zsmul._default has_add.add _ 0 _ _ (ring.nsmul._default 0 has_add.add _ _) _ _ has_neg.neg, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, mul := comm_monoid.mul infer_instance, mul_assoc := _, one := comm_monoid.one infer_instance, one_mul := _, mul_one := _, npow := comm_monoid.npow infer_instance, npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, mul_comm := _}
@[protected, instance]
def
perfect_closure.char_p
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
char_p (perfect_closure K p) p
theorem
perfect_closure.frobenius_mk
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p]
(x : ℕ × K) :
⇑(frobenius (perfect_closure K p) p) (perfect_closure.mk K p x) = perfect_closure.mk K p (x.fst, x.snd ^ p)
def
perfect_closure.of
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
K →+* perfect_closure K p
Embedding of K
into perfect_closure K p
Equations
- perfect_closure.of K p = {to_fun := λ (x : K), perfect_closure.mk K p (0, x), map_one' := _, map_mul' := _, map_zero' := _, map_add' := _}
theorem
perfect_closure.of_apply
(K : Type u)
[comm_ring K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p]
(x : K) :
⇑(perfect_closure.of K p) x = perfect_closure.mk K p (0, x)
@[protected, instance]
def
perfect_closure.has_inv
(K : Type u)
[field K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
has_inv (perfect_closure K p)
Equations
- perfect_closure.has_inv K p = {inv := quot.lift (λ (x : ℕ × K), quot.mk (perfect_closure.r K p) (x.fst, (x.snd)⁻¹)) _}
@[protected, instance]
def
perfect_closure.field
(K : Type u)
[field K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
field (perfect_closure K p)
Equations
- perfect_closure.field K p = {add := comm_ring.add infer_instance, add_assoc := _, zero := comm_ring.zero infer_instance, zero_add := _, add_zero := _, nsmul := comm_ring.nsmul infer_instance, nsmul_zero' := _, nsmul_succ' := _, neg := comm_ring.neg infer_instance, sub := comm_ring.sub infer_instance, sub_eq_add_neg := _, zsmul := comm_ring.zsmul infer_instance, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, mul := comm_ring.mul infer_instance, mul_assoc := _, one := comm_ring.one infer_instance, one_mul := _, mul_one := _, npow := comm_ring.npow infer_instance, npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, mul_comm := _, inv := has_inv.inv infer_instance, div := div_inv_monoid.div._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ has_inv.inv, div_eq_mul_inv := _, zpow := div_inv_monoid.zpow._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ has_inv.inv, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, mul_inv_cancel := _, inv_zero := _}
@[protected, instance]
def
perfect_closure.perfect_ring
(K : Type u)
[field K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p] :
perfect_ring (perfect_closure K p) p
Equations
- perfect_closure.perfect_ring K p = {pth_root' := λ (e : perfect_closure K p), e.lift_on (λ (x : ℕ × K), perfect_closure.mk K p (x.fst + 1, x.snd)) _, frobenius_pth_root' := _, pth_root_frobenius' := _}
theorem
perfect_closure.eq_pth_root
(K : Type u)
[field K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p]
(x : ℕ × K) :
perfect_closure.mk K p x = ⇑(pth_root (perfect_closure K p) p)^[x.fst] (⇑(perfect_closure.of K p) x.snd)
def
perfect_closure.lift
(K : Type u)
[field K]
(p : ℕ)
[fact (nat.prime p)]
[char_p K p]
(L : Type v)
[comm_semiring L]
[char_p L p]
[perfect_ring L p] :
(K →+* L) ≃ (perfect_closure K p →+* L)
Given a field K
of characteristic p
and a perfect ring L
of the same characteristic,
any homomorphism K →+* L
can be lifted to perfect_closure K p
.
Equations
- perfect_closure.lift K p L = {to_fun := λ (f : K →+* L), {to_fun := λ (e : perfect_closure K p), e.lift_on (λ (x : ℕ × K), ⇑(pth_root L p)^[x.fst] (⇑f x.snd)) _, map_one' := _, map_mul' := _, map_zero' := _, map_add' := _}, inv_fun := λ (f : perfect_closure K p →+* L), f.comp (perfect_closure.of K p), left_inv := _, right_inv := _}
noncomputable
def
perfect_ring.of_surjective
(k : Type u_1)
[comm_ring k]
[is_reduced k]
(p : ℕ)
[fact (nat.prime p)]
[char_p k p]
(h : function.surjective ⇑(frobenius k p)) :
perfect_ring k p
A reduced ring with prime characteristic and surjective frobenius map is perfect.
Equations
- perfect_ring.of_surjective k p h = {pth_root' := function.surj_inv h, frobenius_pth_root' := _, pth_root_frobenius' := _}