Integral domains #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Assorted theorems about integral domains.
Main theorems #
is_cyclic_of_subgroup_is_domain
: A finite subgroup of the units of an integral domain is cyclic.fintype.field_of_domain
: A finite integral domain is a field.
TODO #
Prove Wedderburn's little theorem, which shows that all finite division rings are actually fields.
Tags #
integral domain, finite integral domain, finite field
Every finite nontrivial cancel_monoid_with_zero is a group_with_zero.
Equations
- fintype.group_with_zero_of_cancel M = {mul := cancel_monoid_with_zero.mul _inst_3, mul_assoc := _, one := cancel_monoid_with_zero.one _inst_3, one_mul := _, mul_one := _, npow := cancel_monoid_with_zero.npow _inst_3, npow_zero' := _, npow_succ' := _, zero := cancel_monoid_with_zero.zero _inst_3, zero_mul := _, mul_zero := _, inv := λ (a : M), dite (a = 0) (λ (h : a = 0), 0) (λ (h : ¬a = 0), fintype.bij_inv _ 1), div := div_inv_monoid.div._default cancel_monoid_with_zero.mul cancel_monoid_with_zero.mul_assoc cancel_monoid_with_zero.one cancel_monoid_with_zero.one_mul cancel_monoid_with_zero.mul_one cancel_monoid_with_zero.npow cancel_monoid_with_zero.npow_zero' cancel_monoid_with_zero.npow_succ' (λ (a : M), dite (a = 0) (λ (h : a = 0), 0) (λ (h : ¬a = 0), fintype.bij_inv _ 1)), div_eq_mul_inv := _, zpow := div_inv_monoid.zpow._default cancel_monoid_with_zero.mul cancel_monoid_with_zero.mul_assoc cancel_monoid_with_zero.one cancel_monoid_with_zero.one_mul cancel_monoid_with_zero.mul_one cancel_monoid_with_zero.npow cancel_monoid_with_zero.npow_zero' cancel_monoid_with_zero.npow_succ' (λ (a : M), dite (a = 0) (λ (h : a = 0), 0) (λ (h : ¬a = 0), fintype.bij_inv _ 1)), zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, inv_zero := _, mul_inv_cancel := _}
Every finite domain is a division ring.
TODO: Prove Wedderburn's little theorem, which shows a finite domain is in fact commutative, hence a field.
Equations
- fintype.division_ring_of_is_domain R = {add := ring.add _inst_4, add_assoc := _, zero := group_with_zero.zero (show group_with_zero R, from fintype.group_with_zero_of_cancel R), zero_add := _, add_zero := _, nsmul := ring.nsmul _inst_4, nsmul_zero' := _, nsmul_succ' := _, neg := ring.neg _inst_4, sub := ring.sub _inst_4, sub_eq_add_neg := _, zsmul := ring.zsmul _inst_4, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, int_cast := ring.int_cast _inst_4, nat_cast := ring.nat_cast _inst_4, one := group_with_zero.one (show group_with_zero R, from fintype.group_with_zero_of_cancel R), nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := group_with_zero.mul (show group_with_zero R, from fintype.group_with_zero_of_cancel R), mul_assoc := _, one_mul := _, mul_one := _, npow := group_with_zero.npow (show group_with_zero R, from fintype.group_with_zero_of_cancel R), npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, inv := group_with_zero.inv (show group_with_zero R, from fintype.group_with_zero_of_cancel R), div := group_with_zero.div (show group_with_zero R, from fintype.group_with_zero_of_cancel R), div_eq_mul_inv := _, zpow := group_with_zero.zpow (show group_with_zero R, from fintype.group_with_zero_of_cancel R), zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, rat_cast := rat.cast_rec (div_inv_monoid.to_has_inv R), mul_inv_cancel := _, inv_zero := _, rat_cast_mk := _, qsmul := qsmul_rec rat.cast_rec (distrib.to_has_mul R), qsmul_eq_mul' := _}
Every finite commutative domain is a field.
TODO: Prove Wedderburn's little theorem, which shows a finite domain is automatically commutative, dropping one assumption from this theorem.
Equations
- fintype.field_of_domain R = {add := comm_ring.add _inst_4, add_assoc := _, zero := group_with_zero.zero (fintype.group_with_zero_of_cancel R), zero_add := _, add_zero := _, nsmul := comm_ring.nsmul _inst_4, nsmul_zero' := _, nsmul_succ' := _, neg := comm_ring.neg _inst_4, sub := comm_ring.sub _inst_4, sub_eq_add_neg := _, zsmul := comm_ring.zsmul _inst_4, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, int_cast := comm_ring.int_cast _inst_4, nat_cast := comm_ring.nat_cast _inst_4, one := group_with_zero.one (fintype.group_with_zero_of_cancel R), nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := group_with_zero.mul (fintype.group_with_zero_of_cancel R), mul_assoc := _, one_mul := _, mul_one := _, npow := group_with_zero.npow (fintype.group_with_zero_of_cancel R), npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, mul_comm := _, inv := group_with_zero.inv (fintype.group_with_zero_of_cancel R), div := group_with_zero.div (fintype.group_with_zero_of_cancel R), div_eq_mul_inv := _, zpow := group_with_zero.zpow (fintype.group_with_zero_of_cancel R), zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, rat_cast := division_ring.rat_cast._default comm_ring.add comm_ring.add_assoc group_with_zero.zero comm_ring.zero_add comm_ring.add_zero comm_ring.nsmul comm_ring.nsmul_zero' comm_ring.nsmul_succ' comm_ring.neg comm_ring.sub comm_ring.sub_eq_add_neg comm_ring.zsmul comm_ring.zsmul_zero' comm_ring.zsmul_succ' comm_ring.zsmul_neg' comm_ring.add_left_neg comm_ring.add_comm comm_ring.int_cast comm_ring.nat_cast group_with_zero.one comm_ring.nat_cast_zero comm_ring.nat_cast_succ comm_ring.int_cast_of_nat comm_ring.int_cast_neg_succ_of_nat group_with_zero.mul _ _ _ group_with_zero.npow _ _ comm_ring.left_distrib comm_ring.right_distrib group_with_zero.inv group_with_zero.div _ group_with_zero.zpow _ _ _, mul_inv_cancel := _, inv_zero := _, rat_cast_mk := _, qsmul := division_ring.qsmul._default (… comm_ring.zsmul_zero' comm_ring.zsmul_succ' comm_ring.zsmul_neg' comm_ring.add_left_neg comm_ring.add_comm comm_ring.int_cast comm_ring.nat_cast group_with_zero.one comm_ring.nat_cast_zero comm_ring.nat_cast_succ comm_ring.int_cast_of_nat comm_ring.int_cast_neg_succ_of_nat group_with_zero.mul _ _ _ group_with_zero.npow _ _ comm_ring.left_distrib comm_ring.right_distrib group_with_zero.inv group_with_zero.div _ group_with_zero.zpow _ _ _) comm_ring.add comm_ring.add_assoc group_with_zero.zero comm_ring.zero_add comm_ring.add_zero comm_ring.nsmul comm_ring.nsmul_zero' comm_ring.nsmul_succ' comm_ring.neg comm_ring.sub comm_ring.sub_eq_add_neg comm_ring.zsmul comm_ring.zsmul_zero' comm_ring.zsmul_succ' comm_ring.zsmul_neg' comm_ring.add_left_neg comm_ring.add_comm comm_ring.int_cast comm_ring.nat_cast group_with_zero.one comm_ring.nat_cast_zero comm_ring.nat_cast_succ comm_ring.int_cast_of_nat comm_ring.int_cast_neg_succ_of_nat group_with_zero.mul _ _ _ group_with_zero.npow _ _ comm_ring.left_distrib comm_ring.right_distrib, qsmul_eq_mul' := _}
In an integral domain, a sum indexed by a homomorphism from a finite group is zero, unless the homomorphism is trivial, in which case the sum is equal to the cardinality of the group.