(* Algebraic integers. *)
Definition Aint : pred_class :=
fun x : algC => minCpoly x \is a polyOver Cint.
Fact Aint_key : pred_key Aint. Proof. by []. Qed.
Canonical Aint_keyed := KeyedPred Aint_key.

(* Specifications: *)
Lemma root_monic_Aint p x :
root p x -> p \is monic -> p \is a polyOver Cint -> x \in Aint.
Lemma Cint_rat_Aint z : z \in Crat -> z \in Aint -> z \in Cint.
Lemma Aint_Cint : {subset Cint <= Aint}.
Lemma Aint_int x : x%:~R \in Aint.
Lemma Aint_prim_root n z : n.-primitive_root z -> z \in Aint.
Lemma Aint_Cnat : {subset Cnat <= Aint}.
Section AlgIntSubring.
(* This is Isaacs, Theorem (3.4). *)
Theorem fin_Csubring_Aint S n (Y : n.-tuple algC) :
mulr_closed S -> (forall x, reflect (inIntSpan Y x) (x \in S)) ->
{subset S <= Aint}.
(* This is Isaacs, Corollary (3.5). *)
Corollary Aint_subring : subring_closed Aint.
Canonical Aint_opprPred := OpprPred Aint_subring.