Section FadjoinPoly.
Variables (K : {subfield L}) (x : L).
Local Notation n := (adjoin_degree (asval K) x).
Local Notation sumKx := (Fadjoin_sum (asval K) x).

(* Specifications: *)
Lemma adjoin_degreeE : n = \dim_K <<K; x>>.
Lemma Fadjoin_sum_direct : directv sumKx.
Let nz_x_i (i : 'I_n) : x ^+ i != 0.
Lemma Fadjoin_eq_sum : <<K; x>>%VS = sumKx.
Lemma Fadjoin_poly_eq v : v \in <<K; x>>%VS -> (Fadjoin_poly K x v).[x] = v.
Lemma mempx_Fadjoin p : p \is a polyOver K -> p.[x] \in <<K; x>>%VS.
Lemma Fadjoin_polyP {v} :
reflect (exists2 p, p \in polyOver K & v = p.[x]) (v \in <<K; x>>%VS).
Lemma Fadjoin_poly_unique p v :
p \is a polyOver K -> size p <= n -> p.[x] = v -> Fadjoin_poly K x v = p.
Lemma Fadjoin_polyC v : v \in K -> Fadjoin_poly K x v = v%:P.
Lemma Fadjoin_polyX : x \notin K -> Fadjoin_poly K x x = 'X.
Lemma minPolyOver : minPoly K x \is a polyOver K.
Lemma root_minPoly : root (minPoly K x) x. Proof. exact/rootP/minPolyxx. Qed.
Lemma Fadjoin_poly_mod p :
p \is a polyOver K -> Fadjoin_poly K x p.[x] = p %% minPoly K x.
Lemma minPoly_XsubC : reflect (minPoly K x = 'X - x%:P) (x \in K).
Lemma root_small_adjoin_poly p :
p \is a polyOver K -> size p <= n -> root p x = (p == 0).
Lemma minPoly_irr p :
p \is a polyOver K -> p %| minPoly K x -> (p %= minPoly K x) || (p %= 1).
Lemma minPoly_dvdp p : p \is a polyOver K -> root p x -> (minPoly K x) %| p.
End FadjoinPoly.
Lemma minPolyS K E a : (K <= E)%VS -> minPoly E a %| minPoly K a.
Arguments Fadjoin_polyP {K x v}.
Lemma Fadjoin1_polyP x v :
reflect (exists p, v = (map_poly (in_alg L) p).[x]) (v \in <<1; x>>%VS).