-
Notifications
You must be signed in to change notification settings - Fork 297
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(ring_theory/algebraic): algebraic extensions, algebraic elements (…
…#1519) * chore(ring_theory/algebra): make first type argument explicit in alg_hom Now this works, and it didn't work previously even with `@` ```lean structure alg_equiv (α β γ : Type*) [comm_ring α] [ring β] [ring γ] [algebra α β] [algebra α γ] extends alg_hom α β γ := ``` * Update algebra.lean * feat(field_theory/algebraic_closure) * Remove sorries about minimal polynomials * Define alg_equiv.symm * typo * Remove another sorry, in base_extension * Work in progress * Remove a sorry in maximal_extension_chain * Merge two sorries * More sorries removed * More work on transitivity of algebraicity * WIP * Sorry-free definition of algebraic closure * More or less sorries * Removing some sorries * WIP * Fix algebraic.lean * Fix build, mostly * Remove stuff about UMP of alg clos * Prove transitivity of algebraic extensions * Add some docstrings * Remove files with stuff for future PRs * Add a bit to the module docstring * Fix module docstring * Include assumption in section injective * Aesthetic changes to is_integral_of_mem_of_fg * Little improvements of proofs in algebraic.lean * Improve some proofs in integral_closure.lean * Make variable name explicit * Process comments
- Loading branch information
1 parent
cbf81df
commit ee863ec
Showing
4 changed files
with
359 additions
and
122 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
/- | ||
Copyright (c) 2019 Johan Commelin. All rights reserved. | ||
Released under Apache 2.0 license as described in the file LICENSE. | ||
Authors: Johan Commelin | ||
-/ | ||
|
||
import ring_theory.integral_closure | ||
|
||
/-! | ||
# Algebraic elements and algebraic extensions | ||
An element of an R-algebra is algebraic over R if it is the root of a nonzero polynomial. | ||
An R-algebra is algebraic over R if and only if all its elements are algebraic over R. | ||
The main result in this file proves transitivity of algebraicity: | ||
a tower of algebraic field extensions is algebraic. | ||
-/ | ||
|
||
universe variables u v | ||
|
||
open_locale classical | ||
open polynomial | ||
|
||
section | ||
variables (R : Type u) {A : Type v} [comm_ring R] [comm_ring A] [algebra R A] | ||
|
||
/-- An element of an R-algebra is algebraic over R if it is the root of a nonzero polynomial. -/ | ||
def is_algebraic (x : A) : Prop := | ||
∃ p : polynomial R, p ≠ 0 ∧ aeval R A x p = 0 | ||
|
||
variables {R} | ||
|
||
/-- A subalgebra is algebraic if all its elements are algebraic. -/ | ||
def subalgebra.is_algebraic (S : subalgebra R A) : Prop := ∀ x ∈ S, is_algebraic R x | ||
|
||
variables (R A) | ||
|
||
/-- An algebra is algebraic if all its elements are algebraic. -/ | ||
def algebra.is_algebraic : Prop := ∀ x : A, is_algebraic R x | ||
|
||
variables {R A} | ||
|
||
/-- A subalgebra is algebraic if and only if it is algebraic an algebra. -/ | ||
def subalgebra.is_algebraic_iff (S : subalgebra R A) : | ||
S.is_algebraic ↔ @algebra.is_algebraic R S _ _ (by convert S.algebra) := | ||
begin | ||
delta algebra.is_algebraic subalgebra.is_algebraic, | ||
rw [subtype.forall'], | ||
apply forall_congr, rintro ⟨x, hx⟩, | ||
apply exists_congr, intro p, | ||
apply and_congr iff.rfl, | ||
have h : function.injective (S.val) := subtype.val_injective, | ||
conv_rhs { rw [← h.eq_iff, alg_hom.map_zero], }, | ||
apply eq_iff_eq_cancel_right.mpr, | ||
symmetry, apply hom_eval₂, | ||
end | ||
|
||
/-- An algebra is algebraic if and only if it is algebraic as a subalgebra. -/ | ||
lemma algebra.is_algebraic_iff : algebra.is_algebraic R A ↔ (⊤ : subalgebra R A).is_algebraic := | ||
begin | ||
delta algebra.is_algebraic subalgebra.is_algebraic, | ||
simp only [algebra.mem_top, forall_prop_of_true, iff_self], | ||
end | ||
|
||
end | ||
|
||
section zero_ne_one | ||
variables (R : Type u) {A : Type v} [nonzero_comm_ring R] [comm_ring A] [algebra R A] | ||
|
||
/-- An integral element of an algebra is algebraic.-/ | ||
lemma is_integral.is_algebraic {x : A} (h : is_integral R x) : is_algebraic R x := | ||
by { rcases h with ⟨p, hp, hpx⟩, exact ⟨p, hp.ne_zero, hpx⟩ } | ||
|
||
end zero_ne_one | ||
|
||
section field | ||
variables (K : Type u) {A : Type v} [discrete_field K] [comm_ring A] [algebra K A] | ||
|
||
/-- An element of an algebra over a field is algebraic if and only if it is integral.-/ | ||
lemma is_algebraic_iff_is_integral {x : A} : | ||
is_algebraic K x ↔ is_integral K x := | ||
begin | ||
refine ⟨_, is_integral.is_algebraic K⟩, | ||
rintro ⟨p, hp, hpx⟩, | ||
refine ⟨_, monic_mul_leading_coeff_inv hp, _⟩, | ||
rw [alg_hom.map_mul, hpx, zero_mul], | ||
end | ||
|
||
end field | ||
|
||
namespace algebra | ||
variables {K : Type*} {L : Type*} {A : Type*} | ||
variables [discrete_field K] [discrete_field L] [comm_ring A] | ||
variables [algebra K L] [algebra L A] | ||
|
||
/-- If L is an algebraic field extension of K and A is an algebraic algebra over L, | ||
then A is algebraic over K. -/ | ||
lemma is_algebraic_trans (L_alg : is_algebraic K L) (A_alg : is_algebraic L A) : | ||
is_algebraic K (comap K L A) := | ||
begin | ||
simp only [is_algebraic, is_algebraic_iff_is_integral] at L_alg A_alg ⊢, | ||
exact is_integral_trans L_alg A_alg, | ||
end | ||
|
||
end algebra |
Oops, something went wrong.