The perfect closure of a field #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
- 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.
Instances of this typeclass
Instances of other typeclasses for perfect_ring
- perfect_ring.has_sizeof_inst
Frobenius automorphism of a perfect ring.
p
-th root of an element in a perfect_ring
as a ring_hom
.
Equations
- pth_root R p = ↑((frobenius_equiv R p).symm)
- 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)
Instances for perfect_closure
- perfect_closure.has_mul
- perfect_closure.comm_monoid
- perfect_closure.inhabited
- perfect_closure.has_add
- perfect_closure.has_neg
- perfect_closure.has_zero
- perfect_closure.add_comm_group
- perfect_closure.comm_ring
- perfect_closure.char_p
- perfect_closure.has_inv
- perfect_closure.field
- perfect_closure.perfect_ring
Constructor for perfect_closure
.
Equations
- perfect_closure.mk K p x = quot.mk (perfect_closure.r K p) x
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
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 := _}
Equations
- perfect_closure.inhabited K p = {default := 1}
Equations
- perfect_closure.has_neg K p = {neg := quot.lift (λ (x : ℕ × K), perfect_closure.mk K p (x.fst, -x.snd)) _}
Equations
- perfect_closure.has_zero K p = {zero := perfect_closure.mk K p (0, 0)}
Equations
- perfect_closure.add_comm_group K p = {add := has_add.add infer_instance, add_assoc := _, zero := 0, zero_add := _, add_zero := _, nsmul := add_group.nsmul._default 0 has_add.add _ _, nsmul_zero' := _, nsmul_succ' := _, neg := has_neg.neg infer_instance, sub := add_group.sub._default has_add.add _ 0 _ _ (add_group.nsmul._default 0 has_add.add _ _) _ _ has_neg.neg, sub_eq_add_neg := _, zsmul := add_group.zsmul._default has_add.add _ 0 _ _ (add_group.nsmul._default 0 has_add.add _ _) _ _ has_neg.neg, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _}
Equations
- perfect_closure.comm_ring K p = {add := add_comm_group.add (perfect_closure.add_comm_group K p), add_assoc := _, zero := add_comm_group.zero (perfect_closure.add_comm_group K p), zero_add := _, add_zero := _, nsmul := add_comm_group.nsmul (perfect_closure.add_comm_group K p), nsmul_zero' := _, nsmul_succ' := _, neg := add_comm_group.neg (perfect_closure.add_comm_group K p), sub := add_comm_group.sub (perfect_closure.add_comm_group K p), sub_eq_add_neg := _, zsmul := add_comm_group.zsmul (perfect_closure.add_comm_group K p), zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, int_cast := ring.int_cast._default add_monoid_with_one.nat_cast add_comm_group.add _ add_comm_group.zero _ _ add_comm_group.nsmul _ _ add_monoid_with_one.one _ _ add_comm_group.neg add_comm_group.sub _ add_comm_group.zsmul _ _ _ _, nat_cast := add_monoid_with_one.nat_cast add_monoid_with_one.unary, one := add_monoid_with_one.one add_monoid_with_one.unary, nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := comm_monoid.mul infer_instance, mul_assoc := _, one_mul := _, mul_one := _, npow := comm_monoid.npow infer_instance, npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, mul_comm := _}
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' := _}
Equations
- perfect_closure.has_inv K p = {inv := quot.lift (λ (x : ℕ × K), quot.mk (perfect_closure.r K p) (x.fst, (x.snd)⁻¹)) _}
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 := _, int_cast := comm_ring.int_cast infer_instance, nat_cast := comm_ring.nat_cast infer_instance, one := comm_ring.one infer_instance, nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := comm_ring.mul infer_instance, mul_assoc := _, 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 := division_ring.div._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ has_inv.inv, div_eq_mul_inv := _, zpow := division_ring.zpow._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ has_inv.inv, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, rat_cast := division_ring.rat_cast._default comm_ring.add _ comm_ring.zero _ _ comm_ring.nsmul _ _ comm_ring.neg comm_ring.sub _ comm_ring.zsmul _ _ _ _ _ comm_ring.int_cast comm_ring.nat_cast comm_ring.one _ _ _ _ comm_ring.mul _ _ _ comm_ring.npow _ _ _ _ has_inv.inv (division_ring.div._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ has_inv.inv) _ (division_ring.zpow._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ has_inv.inv) _ _ _, mul_inv_cancel := _, inv_zero := _, rat_cast_mk := _, qsmul := division_ring.qsmul._default (… … _ _ _ _ comm_ring.int_cast comm_ring.nat_cast comm_ring.one _ _ _ _ comm_ring.mul _ _ _ comm_ring.npow _ _ _ _ has_inv.inv (division_ring.div._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ has_inv.inv) _ (division_ring.zpow._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ has_inv.inv) _ _ _) comm_ring.add _ comm_ring.zero _ _ comm_ring.nsmul _ _ comm_ring.neg comm_ring.sub _ comm_ring.zsmul _ _ _ _ _ comm_ring.int_cast comm_ring.nat_cast comm_ring.one _ _ _ _ comm_ring.mul _ _ _ comm_ring.npow _ _ _ _, qsmul_eq_mul' := _}
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' := _}
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 := _}
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' := _}