field_theory.is_alg_closed.classification
⟷
Mathlib.FieldTheory.IsAlgClosed.Classification
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
zmod.algebra
creates a diamond about the zmod p
-algebra structure on zmod p
:
import algebra.algebra.basic
import data.zmod.algebra
example (p : ℕ) : algebra.id (zmod p) =
(zmod.algebra (zmod p) p) := rfl --fails
This is also causing troubles with the port. We turn zmod.algebra
into a def.
@@ -158,10 +158,9 @@ variables {K L : Type} [field K] [field L] [is_alg_closed K] [is_alg_closed L]
/-- Two uncountable algebraically closed fields of characteristic zero are isomorphic
if they have the same cardinality. -/
-@[nolint def_lemma] lemma ring_equiv_of_cardinal_eq_of_char_zero [char_zero K] [char_zero L]
- (hK : ℵ₀ < #K) (hKL : #K = #L) : K ≃+* L :=
+lemma ring_equiv_of_cardinal_eq_of_char_zero [char_zero K] [char_zero L]
+ (hK : ℵ₀ < #K) (hKL : #K = #L) : nonempty (K ≃+* L) :=
begin
- apply classical.choice,
cases exists_is_transcendence_basis ℤ
(show function.injective (algebra_map ℤ K),
from int.cast_injective) with s hs,
@@ -177,9 +176,10 @@ begin
end
private lemma ring_equiv_of_cardinal_eq_of_char_p (p : ℕ) [fact p.prime]
- [char_p K p] [char_p L p] (hK : ℵ₀ < #K) (hKL : #K = #L) : K ≃+* L :=
+ [char_p K p] [char_p L p] (hK : ℵ₀ < #K) (hKL : #K = #L) : nonempty (K ≃+* L) :=
begin
- apply classical.choice,
+ letI : algebra (zmod p) K := zmod.algebra _ _,
+ letI : algebra (zmod p) L := zmod.algebra _ _,
cases exists_is_transcendence_basis (zmod p)
(show function.injective (algebra_map (zmod p) K),
from ring_hom.injective _) with s hs,
@@ -198,18 +198,19 @@ end
/-- Two uncountable algebraically closed fields are isomorphic
if they have the same cardinality and the same characteristic. -/
-@[nolint def_lemma] lemma ring_equiv_of_cardinal_eq_of_char_eq (p : ℕ) [char_p K p] [char_p L p]
- (hK : ℵ₀ < #K) (hKL : #K = #L) : K ≃+* L :=
+lemma ring_equiv_of_cardinal_eq_of_char_eq (p : ℕ) [char_p K p] [char_p L p]
+ (hK : ℵ₀ < #K) (hKL : #K = #L) : nonempty (K ≃+* L) :=
begin
- apply classical.choice,
rcases char_p.char_is_prime_or_zero K p with hp | hp,
{ haveI : fact p.prime := ⟨hp⟩,
- exact ⟨ring_equiv_of_cardinal_eq_of_char_p p hK hKL⟩ },
+ letI : algebra (zmod p) K := zmod.algebra _ _,
+ letI : algebra (zmod p) L := zmod.algebra _ _,
+ exact ring_equiv_of_cardinal_eq_of_char_p p hK hKL },
{ rw [hp] at *,
resetI,
letI : char_zero K := char_p.char_p_to_char_zero K,
letI : char_zero L := char_p.char_p_to_char_zero L,
- exact ⟨ring_equiv_of_cardinal_eq_of_char_zero hK hKL⟩ }
+ exact ring_equiv_of_cardinal_eq_of_char_zero hK hKL }
end
end is_alg_closed
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -5,8 +5,8 @@ Authors: Chris Hughes
-/
import RingTheory.AlgebraicIndependent
import FieldTheory.IsAlgClosed.Basic
-import Data.Polynomial.Cardinal
-import Data.MvPolynomial.Cardinal
+import Algebra.Polynomial.Cardinal
+import Algebra.MvPolynomial.Cardinal
import Data.ZMod.Algebra
#align_import field_theory.is_alg_closed.classification from "leanprover-community/mathlib"@"0723536a0522d24fc2f159a096fb3304bef77472"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -7,7 +7,7 @@ import RingTheory.AlgebraicIndependent
import FieldTheory.IsAlgClosed.Basic
import Data.Polynomial.Cardinal
import Data.MvPolynomial.Cardinal
-import Data.Zmod.Algebra
+import Data.ZMod.Algebra
#align_import field_theory.is_alg_closed.classification from "leanprover-community/mathlib"@"0723536a0522d24fc2f159a096fb3304bef77472"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -60,7 +60,7 @@ theorem cardinal_mk_le_sigma_polynomial :
p.2.2]⟩)
fun x y => by
intro h
- simp only at h
+ simp only at h
refine' (Subtype.heq_iff_coe_eq _).1 h.2
simp only [h.1, iff_self_iff, forall_true_iff]
#align algebra.is_algebraic.cardinal_mk_le_sigma_polynomial Algebra.IsAlgebraic.cardinal_mk_le_sigma_polynomial
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2022 Chris Hughes. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes
-/
-import Mathbin.RingTheory.AlgebraicIndependent
-import Mathbin.FieldTheory.IsAlgClosed.Basic
-import Mathbin.Data.Polynomial.Cardinal
-import Mathbin.Data.MvPolynomial.Cardinal
-import Mathbin.Data.Zmod.Algebra
+import RingTheory.AlgebraicIndependent
+import FieldTheory.IsAlgClosed.Basic
+import Data.Polynomial.Cardinal
+import Data.MvPolynomial.Cardinal
+import Data.Zmod.Algebra
#align_import field_theory.is_alg_closed.classification from "leanprover-community/mathlib"@"0723536a0522d24fc2f159a096fb3304bef77472"
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -34,7 +34,7 @@ open scoped Cardinal Polynomial
open Cardinal
-section AlgebraicClosure
+section AlgebraicClosureAux
namespace Algebra.IsAlgebraic
@@ -87,7 +87,7 @@ theorem cardinal_mk_le_max : (#L) ≤ max (#R) ℵ₀ :=
end Algebra.IsAlgebraic
-end AlgebraicClosure
+end AlgebraicClosureAux
namespace IsAlgClosed
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2022 Chris Hughes. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes
-
-! This file was ported from Lean 3 source module field_theory.is_alg_closed.classification
-! leanprover-community/mathlib commit 0723536a0522d24fc2f159a096fb3304bef77472
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.RingTheory.AlgebraicIndependent
import Mathbin.FieldTheory.IsAlgClosed.Basic
@@ -14,6 +9,8 @@ import Mathbin.Data.Polynomial.Cardinal
import Mathbin.Data.MvPolynomial.Cardinal
import Mathbin.Data.Zmod.Algebra
+#align_import field_theory.is_alg_closed.classification from "leanprover-community/mathlib"@"0723536a0522d24fc2f159a096fb3304bef77472"
+
/-!
# Classification of Algebraically closed fields
mathlib commit https://github.com/leanprover-community/mathlib/commit/0723536a0522d24fc2f159a096fb3304bef77472
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes
! This file was ported from Lean 3 source module field_theory.is_alg_closed.classification
-! leanprover-community/mathlib commit 660b3a2db3522fa0db036e569dc995a615c4c848
+! leanprover-community/mathlib commit 0723536a0522d24fc2f159a096fb3304bef77472
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -196,10 +196,9 @@ variable {K L : Type} [Field K] [Field L] [IsAlgClosed K] [IsAlgClosed L]
#print IsAlgClosed.ringEquivOfCardinalEqOfCharZero /-
/-- Two uncountable algebraically closed fields of characteristic zero are isomorphic
if they have the same cardinality. -/
-@[nolint def_lemma]
theorem ringEquivOfCardinalEqOfCharZero [CharZero K] [CharZero L] (hK : ℵ₀ < (#K))
- (hKL : (#K) = (#L)) : K ≃+* L := by
- apply Classical.choice
+ (hKL : (#K) = (#L)) : Nonempty (K ≃+* L) :=
+ by
cases'
exists_isTranscendenceBasis ℤ
(show Function.Injective (algebraMap ℤ K) from Int.cast_injective) with
@@ -219,9 +218,10 @@ theorem ringEquivOfCardinalEqOfCharZero [CharZero K] [CharZero L] (hK : ℵ₀ <
-/
private theorem ring_equiv_of_cardinal_eq_of_char_p (p : ℕ) [Fact p.Prime] [CharP K p] [CharP L p]
- (hK : ℵ₀ < (#K)) (hKL : (#K) = (#L)) : K ≃+* L :=
+ (hK : ℵ₀ < (#K)) (hKL : (#K) = (#L)) : Nonempty (K ≃+* L) :=
by
- apply Classical.choice
+ letI : Algebra (ZMod p) K := ZMod.algebra _ _
+ letI : Algebra (ZMod p) L := ZMod.algebra _ _
cases'
exists_isTranscendenceBasis (ZMod p)
(show Function.Injective (algebraMap (ZMod p) K) from RingHom.injective _) with
@@ -246,18 +246,19 @@ private theorem ring_equiv_of_cardinal_eq_of_char_p (p : ℕ) [Fact p.Prime] [Ch
#print IsAlgClosed.ringEquivOfCardinalEqOfCharEq /-
/-- Two uncountable algebraically closed fields are isomorphic
if they have the same cardinality and the same characteristic. -/
-@[nolint def_lemma]
theorem ringEquivOfCardinalEqOfCharEq (p : ℕ) [CharP K p] [CharP L p] (hK : ℵ₀ < (#K))
- (hKL : (#K) = (#L)) : K ≃+* L := by
- apply Classical.choice
+ (hKL : (#K) = (#L)) : Nonempty (K ≃+* L) :=
+ by
rcases CharP.char_is_prime_or_zero K p with (hp | hp)
· haveI : Fact p.prime := ⟨hp⟩
- exact ⟨ring_equiv_of_cardinal_eq_of_char_p p hK hKL⟩
+ letI : Algebra (ZMod p) K := ZMod.algebra _ _
+ letI : Algebra (ZMod p) L := ZMod.algebra _ _
+ exact ring_equiv_of_cardinal_eq_of_char_p p hK hKL
· rw [hp] at *
skip
letI : CharZero K := CharP.charP_to_charZero K
letI : CharZero L := CharP.charP_to_charZero L
- exact ⟨ring_equiv_of_cardinal_eq_of_char_zero hK hKL⟩
+ exact ring_equiv_of_cardinal_eq_of_char_zero hK hKL
#align is_alg_closed.ring_equiv_of_cardinal_eq_of_char_eq IsAlgClosed.ringEquivOfCardinalEqOfCharEq
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -45,6 +45,7 @@ variable (R L : Type u) [CommRing R] [CommRing L] [IsDomain L] [Algebra R L]
variable [NoZeroSMulDivisors R L] (halg : Algebra.IsAlgebraic R L)
+#print Algebra.IsAlgebraic.cardinal_mk_le_sigma_polynomial /-
theorem cardinal_mk_le_sigma_polynomial :
(#L) ≤ (#Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
@mk_le_of_injective L (Σ p : R[X], {x : L | x ∈ (p.map (algebraMap R L)).roots})
@@ -66,7 +67,9 @@ theorem cardinal_mk_le_sigma_polynomial :
refine' (Subtype.heq_iff_coe_eq _).1 h.2
simp only [h.1, iff_self_iff, forall_true_iff]
#align algebra.is_algebraic.cardinal_mk_le_sigma_polynomial Algebra.IsAlgebraic.cardinal_mk_le_sigma_polynomial
+-/
+#print Algebra.IsAlgebraic.cardinal_mk_le_max /-
/-- The cardinality of an algebraic extension is at most the maximum of the cardinality
of the base ring or `ℵ₀` -/
theorem cardinal_mk_le_max : (#L) ≤ max (#R) ℵ₀ :=
@@ -83,6 +86,7 @@ theorem cardinal_mk_le_max : (#L) ≤ max (#R) ℵ₀ :=
(max_le_max (max_le_max Polynomial.cardinal_mk_le_max le_rfl) le_rfl)
_ = max (#R) ℵ₀ := by simp only [max_assoc, max_comm ℵ₀, max_left_comm ℵ₀, max_self]
#align algebra.is_algebraic.cardinal_mk_le_max Algebra.IsAlgebraic.cardinal_mk_le_max
+-/
end Algebra.IsAlgebraic
@@ -106,15 +110,18 @@ variable {κ : Type _} (w : κ → L)
variable (hv : AlgebraicIndependent R v)
+#print IsAlgClosed.isAlgClosure_of_transcendence_basis /-
theorem isAlgClosure_of_transcendence_basis [IsAlgClosed K] (hv : IsTranscendenceBasis R v) :
IsAlgClosure (Algebra.adjoin R (Set.range v)) K :=
letI := RingHom.domain_nontrivial (algebraMap R K)
{ alg_closed := by infer_instance
algebraic := hv.is_algebraic }
#align is_alg_closed.is_alg_closure_of_transcendence_basis IsAlgClosed.isAlgClosure_of_transcendence_basis
+-/
variable (hw : AlgebraicIndependent R w)
+#print IsAlgClosed.equivOfTranscendenceBasis /-
/-- setting `R` to be `zmod (ring_char R)` this result shows that if two algebraically
closed fields have equipotent transcendence bases and the same characteristic then they are
isomorphic. -/
@@ -133,6 +140,7 @@ def equivOfTranscendenceBasis [IsAlgClosed K] [IsAlgClosed L] (e : ι ≃ κ)
exact hw.1.aevalEquiv.toRingEquiv
exact IsAlgClosure.equivOfEquiv K L e
#align is_alg_closed.equiv_of_transcendence_basis IsAlgClosed.equivOfTranscendenceBasis
+-/
end Classification
@@ -146,6 +154,7 @@ variable {ι : Type u} (v : ι → K)
variable (hv : IsTranscendenceBasis R v)
+#print IsAlgClosed.cardinal_le_max_transcendence_basis /-
theorem cardinal_le_max_transcendence_basis (hv : IsTranscendenceBasis R v) :
(#K) ≤ max (max (#R) (#ι)) ℵ₀ :=
calc
@@ -156,6 +165,7 @@ theorem cardinal_le_max_transcendence_basis (hv : IsTranscendenceBasis R v) :
_ ≤ max (max (max (#R) (#ι)) ℵ₀) ℵ₀ := (max_le_max MvPolynomial.cardinal_mk_le_max le_rfl)
_ = _ := by simp [max_assoc]
#align is_alg_closed.cardinal_le_max_transcendence_basis IsAlgClosed.cardinal_le_max_transcendence_basis
+-/
#print IsAlgClosed.cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt /-
/-- If `K` is an uncountable algebraically closed field, then its
@@ -183,6 +193,7 @@ end Cardinal
variable {K L : Type} [Field K] [Field L] [IsAlgClosed K] [IsAlgClosed L]
+#print IsAlgClosed.ringEquivOfCardinalEqOfCharZero /-
/-- Two uncountable algebraically closed fields of characteristic zero are isomorphic
if they have the same cardinality. -/
@[nolint def_lemma]
@@ -205,6 +216,7 @@ theorem ringEquivOfCardinalEqOfCharZero [CharZero K] [CharZero L] (hK : ℵ₀ <
cases' Cardinal.eq.1 this with e
exact ⟨equiv_of_transcendence_basis _ _ e hs ht⟩
#align is_alg_closed.ring_equiv_of_cardinal_eq_of_char_zero IsAlgClosed.ringEquivOfCardinalEqOfCharZero
+-/
private theorem ring_equiv_of_cardinal_eq_of_char_p (p : ℕ) [Fact p.Prime] [CharP K p] [CharP L p]
(hK : ℵ₀ < (#K)) (hKL : (#K) = (#L)) : K ≃+* L :=
@@ -231,6 +243,7 @@ private theorem ring_equiv_of_cardinal_eq_of_char_p (p : ℕ) [Fact p.Prime] [Ch
cases' Cardinal.eq.1 this with e
exact ⟨equiv_of_transcendence_basis _ _ e hs ht⟩
+#print IsAlgClosed.ringEquivOfCardinalEqOfCharEq /-
/-- Two uncountable algebraically closed fields are isomorphic
if they have the same cardinality and the same characteristic. -/
@[nolint def_lemma]
@@ -246,6 +259,7 @@ theorem ringEquivOfCardinalEqOfCharEq (p : ℕ) [CharP K p] [CharP L p] (hK :
letI : CharZero L := CharP.charP_to_charZero L
exact ⟨ring_equiv_of_cardinal_eq_of_char_zero hK hKL⟩
#align is_alg_closed.ring_equiv_of_cardinal_eq_of_char_eq IsAlgClosed.ringEquivOfCardinalEqOfCharEq
+-/
end IsAlgClosed
mathlib commit https://github.com/leanprover-community/mathlib/commit/ccdbfb6e5614667af5aa3ab2d50885e0ef44a46f
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes
! This file was ported from Lean 3 source module field_theory.is_alg_closed.classification
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit 660b3a2db3522fa0db036e569dc995a615c4c848
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -17,6 +17,9 @@ import Mathbin.Data.Zmod.Algebra
/-!
# Classification of Algebraically closed fields
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file contains results related to classifying algebraically closed fields.
## Main statements
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -154,6 +154,7 @@ theorem cardinal_le_max_transcendence_basis (hv : IsTranscendenceBasis R v) :
_ = _ := by simp [max_assoc]
#align is_alg_closed.cardinal_le_max_transcendence_basis IsAlgClosed.cardinal_le_max_transcendence_basis
+#print IsAlgClosed.cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt /-
/-- If `K` is an uncountable algebraically closed field, then its
cardinality is the same as that of a transcendence basis. -/
theorem cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt [Nontrivial R]
@@ -173,6 +174,7 @@ theorem cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt [Nontrivial R]
· exact le_max_of_le_right this)
(mk_le_of_injective (show Function.Injective v from hv.1.Injective))
#align is_alg_closed.cardinal_eq_cardinal_transcendence_basis_of_aleph_0_lt IsAlgClosed.cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt
+-/
end Cardinal
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -103,12 +103,12 @@ variable {κ : Type _} (w : κ → L)
variable (hv : AlgebraicIndependent R v)
-theorem isAlgClosureOfTranscendenceBasis [IsAlgClosed K] (hv : IsTranscendenceBasis R v) :
+theorem isAlgClosure_of_transcendence_basis [IsAlgClosed K] (hv : IsTranscendenceBasis R v) :
IsAlgClosure (Algebra.adjoin R (Set.range v)) K :=
letI := RingHom.domain_nontrivial (algebraMap R K)
{ alg_closed := by infer_instance
algebraic := hv.is_algebraic }
-#align is_alg_closed.is_alg_closure_of_transcendence_basis IsAlgClosed.isAlgClosureOfTranscendenceBasis
+#align is_alg_closed.is_alg_closure_of_transcendence_basis IsAlgClosed.isAlgClosure_of_transcendence_basis
variable (hw : AlgebraicIndependent R w)
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -79,7 +79,6 @@ theorem cardinal_mk_le_max : (#L) ≤ max (#R) ℵ₀ :=
_ ≤ max (max (max (#R) ℵ₀) ℵ₀) ℵ₀ :=
(max_le_max (max_le_max Polynomial.cardinal_mk_le_max le_rfl) le_rfl)
_ = max (#R) ℵ₀ := by simp only [max_assoc, max_comm ℵ₀, max_left_comm ℵ₀, max_self]
-
#align algebra.is_algebraic.cardinal_mk_le_max Algebra.IsAlgebraic.cardinal_mk_le_max
end Algebra.IsAlgebraic
@@ -153,7 +152,6 @@ theorem cardinal_le_max_transcendence_basis (hv : IsTranscendenceBasis R v) :
_ = max (#MvPolynomial ι R) ℵ₀ := by rw [Cardinal.eq.2 ⟨hv.1.aevalEquiv.toEquiv⟩]
_ ≤ max (max (max (#R) (#ι)) ℵ₀) ℵ₀ := (max_le_max MvPolynomial.cardinal_mk_le_max le_rfl)
_ = _ := by simp [max_assoc]
-
#align is_alg_closed.cardinal_le_max_transcendence_basis IsAlgClosed.cardinal_le_max_transcendence_basis
/-- If `K` is an uncountable algebraically closed field, then its
@@ -166,15 +164,13 @@ theorem cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt [Nontrivial R]
calc
(#K) ≤ max (max (#R) (#ι)) ℵ₀ := cardinal_le_max_transcendence_basis v hv
_ ≤ _ := max_le (max_le hR (le_of_lt h)) le_rfl
-
le_antisymm
(calc
(#K) ≤ max (max (#R) (#ι)) ℵ₀ := cardinal_le_max_transcendence_basis v hv
_ = (#ι) := by
rw [max_eq_left, max_eq_right]
· exact le_trans hR this
- · exact le_max_of_le_right this
- )
+ · exact le_max_of_le_right this)
(mk_le_of_injective (show Function.Injective v from hv.1.Injective))
#align is_alg_closed.cardinal_eq_cardinal_transcendence_basis_of_aleph_0_lt IsAlgClosed.cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -44,7 +44,7 @@ variable [NoZeroSMulDivisors R L] (halg : Algebra.IsAlgebraic R L)
theorem cardinal_mk_le_sigma_polynomial :
(#L) ≤ (#Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
- @mk_le_of_injective L (Σ p : R[X], { x : L | x ∈ (p.map (algebraMap R L)).roots })
+ @mk_le_of_injective L (Σ p : R[X], {x : L | x ∈ (p.map (algebraMap R L)).roots})
(fun x : L =>
let p := Classical.indefiniteDescription _ (halg x)
⟨p.1, x, by
@@ -70,7 +70,7 @@ theorem cardinal_mk_le_max : (#L) ≤ max (#R) ℵ₀ :=
calc
(#L) ≤ (#Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
cardinal_mk_le_sigma_polynomial R L halg
- _ = Cardinal.sum fun p : R[X] => #{ x : L | x ∈ (p.map (algebraMap R L)).roots } := by
+ _ = Cardinal.sum fun p : R[X] => #{x : L | x ∈ (p.map (algebraMap R L)).roots} := by
rw [← mk_sigma] <;> rfl
_ ≤ Cardinal.sum.{u, u} fun p : R[X] => ℵ₀ :=
(sum_le_sum _ _ fun p => (Multiset.finite_toSet _).lt_aleph0.le)
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -43,8 +43,8 @@ variable (R L : Type u) [CommRing R] [CommRing L] [IsDomain L] [Algebra R L]
variable [NoZeroSMulDivisors R L] (halg : Algebra.IsAlgebraic R L)
theorem cardinal_mk_le_sigma_polynomial :
- (#L) ≤ (#Σp : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
- @mk_le_of_injective L (Σp : R[X], { x : L | x ∈ (p.map (algebraMap R L)).roots })
+ (#L) ≤ (#Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
+ @mk_le_of_injective L (Σ p : R[X], { x : L | x ∈ (p.map (algebraMap R L)).roots })
(fun x : L =>
let p := Classical.indefiniteDescription _ (halg x)
⟨p.1, x, by
@@ -59,7 +59,7 @@ theorem cardinal_mk_le_sigma_polynomial :
p.2.2]⟩)
fun x y => by
intro h
- simp only at h
+ simp only at h
refine' (Subtype.heq_iff_coe_eq _).1 h.2
simp only [h.1, iff_self_iff, forall_true_iff]
#align algebra.is_algebraic.cardinal_mk_le_sigma_polynomial Algebra.IsAlgebraic.cardinal_mk_le_sigma_polynomial
@@ -68,7 +68,7 @@ theorem cardinal_mk_le_sigma_polynomial :
of the base ring or `ℵ₀` -/
theorem cardinal_mk_le_max : (#L) ≤ max (#R) ℵ₀ :=
calc
- (#L) ≤ (#Σp : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
+ (#L) ≤ (#Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
cardinal_mk_le_sigma_polynomial R L halg
_ = Cardinal.sum fun p : R[X] => #{ x : L | x ∈ (p.map (algebraMap R L)).roots } := by
rw [← mk_sigma] <;> rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -30,7 +30,7 @@ This file contains results related to classifying algebraically closed fields.
universe u
-open Cardinal Polynomial
+open scoped Cardinal Polynomial
open Cardinal
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -126,10 +126,8 @@ def equivOfTranscendenceBasis [IsAlgClosed K] [IsAlgClosed L] (e : ι ≃ κ)
refine'
(AlgEquiv.ofAlgHom (MvPolynomial.rename e) (MvPolynomial.rename e.symm) _ _).toRingEquiv.trans
_
- · ext
- simp
- · ext
- simp
+ · ext; simp
+ · ext; simp
exact hw.1.aevalEquiv.toRingEquiv
exact IsAlgClosure.equivOfEquiv K L e
#align is_alg_closed.equiv_of_transcendence_basis IsAlgClosed.equivOfTranscendenceBasis
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -231,7 +231,6 @@ private theorem ring_equiv_of_cardinal_eq_of_char_p (p : ℕ) [Fact p.Prime] [Ch
rwa [← hKL]
cases' Cardinal.eq.1 this with e
exact ⟨equiv_of_transcendence_basis _ _ e hs ht⟩
-#align is_alg_closed.ring_equiv_of_cardinal_eq_of_char_p is_alg_closed.ring_equiv_of_cardinal_eq_of_char_p
/-- Two uncountable algebraically closed fields are isomorphic
if they have the same cardinality and the same characteristic. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -73,11 +73,11 @@ theorem cardinal_mk_le_max : (#L) ≤ max (#R) ℵ₀ :=
_ = Cardinal.sum fun p : R[X] => #{ x : L | x ∈ (p.map (algebraMap R L)).roots } := by
rw [← mk_sigma] <;> rfl
_ ≤ Cardinal.sum.{u, u} fun p : R[X] => ℵ₀ :=
- sum_le_sum _ _ fun p => (Multiset.finite_toSet _).lt_aleph0.le
- _ = (#R[X]) * ℵ₀ := sum_const' _ _
- _ ≤ max (max (#R[X]) ℵ₀) ℵ₀ := mul_le_max _ _
+ (sum_le_sum _ _ fun p => (Multiset.finite_toSet _).lt_aleph0.le)
+ _ = (#R[X]) * ℵ₀ := (sum_const' _ _)
+ _ ≤ max (max (#R[X]) ℵ₀) ℵ₀ := (mul_le_max _ _)
_ ≤ max (max (max (#R) ℵ₀) ℵ₀) ℵ₀ :=
- max_le_max (max_le_max Polynomial.cardinal_mk_le_max le_rfl) le_rfl
+ (max_le_max (max_le_max Polynomial.cardinal_mk_le_max le_rfl) le_rfl)
_ = max (#R) ℵ₀ := by simp only [max_assoc, max_comm ℵ₀, max_left_comm ℵ₀, max_self]
#align algebra.is_algebraic.cardinal_mk_le_max Algebra.IsAlgebraic.cardinal_mk_le_max
@@ -153,7 +153,7 @@ theorem cardinal_le_max_transcendence_basis (hv : IsTranscendenceBasis R v) :
letI := is_alg_closure_of_transcendence_basis v hv
Algebra.IsAlgebraic.cardinal_mk_le_max _ _ IsAlgClosure.algebraic
_ = max (#MvPolynomial ι R) ℵ₀ := by rw [Cardinal.eq.2 ⟨hv.1.aevalEquiv.toEquiv⟩]
- _ ≤ max (max (max (#R) (#ι)) ℵ₀) ℵ₀ := max_le_max MvPolynomial.cardinal_mk_le_max le_rfl
+ _ ≤ max (max (max (#R) (#ι)) ℵ₀) ℵ₀ := (max_le_max MvPolynomial.cardinal_mk_le_max le_rfl)
_ = _ := by simp [max_assoc]
#align is_alg_closed.cardinal_le_max_transcendence_basis IsAlgClosed.cardinal_le_max_transcendence_basis
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -69,8 +69,8 @@ theorem cardinal_mk_le_max : #L ≤ max #R ℵ₀ :=
rw [← mk_sigma]; rfl
_ ≤ Cardinal.sum.{u, u} fun _ : R[X] => ℵ₀ :=
(sum_le_sum _ _ fun p => (Multiset.finite_toSet _).lt_aleph0.le)
- _ = #(R[X]) * ℵ₀ := (sum_const' _ _)
- _ ≤ max (max #(R[X]) ℵ₀) ℵ₀ := (mul_le_max _ _)
+ _ = #(R[X]) * ℵ₀ := sum_const' _ _
+ _ ≤ max (max #(R[X]) ℵ₀) ℵ₀ := mul_le_max _ _
_ ≤ max (max (max #R ℵ₀) ℵ₀) ℵ₀ :=
(max_le_max (max_le_max Polynomial.cardinal_mk_le_max le_rfl) le_rfl)
_ = max #R ℵ₀ := by simp only [max_assoc, max_comm ℵ₀, max_left_comm ℵ₀, max_self]
@@ -137,7 +137,7 @@ theorem cardinal_le_max_transcendence_basis (hv : IsTranscendenceBasis R v) :
letI := isAlgClosure_of_transcendence_basis v hv
Algebra.IsAlgebraic.cardinal_mk_le_max _ _ IsAlgClosure.algebraic
_ = max #(MvPolynomial ι R) ℵ₀ := by rw [Cardinal.eq.2 ⟨hv.1.aevalEquiv.toEquiv⟩]
- _ ≤ max (max (max #R #ι) ℵ₀) ℵ₀ := (max_le_max MvPolynomial.cardinal_mk_le_max le_rfl)
+ _ ≤ max (max (max #R #ι) ℵ₀) ℵ₀ := max_le_max MvPolynomial.cardinal_mk_le_max le_rfl
_ = _ := by simp [max_assoc]
#align is_alg_closed.cardinal_le_max_transcendence_basis IsAlgClosed.cardinal_le_max_transcendence_basis
Data
(#11751)
Polynomial
and MvPolynomial
are algebraic objects, hence should be under Algebra
(or at least not under Data
)
@@ -3,11 +3,11 @@ Copyright (c) 2022 Chris Hughes. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes
-/
-import Mathlib.RingTheory.AlgebraicIndependent
-import Mathlib.FieldTheory.IsAlgClosed.Basic
-import Mathlib.Data.Polynomial.Cardinal
-import Mathlib.Data.MvPolynomial.Cardinal
+import Mathlib.Algebra.Polynomial.Cardinal
+import Mathlib.Algebra.MvPolynomial.Cardinal
import Mathlib.Data.ZMod.Algebra
+import Mathlib.FieldTheory.IsAlgClosed.Basic
+import Mathlib.RingTheory.AlgebraicIndependent
#align_import field_theory.is_alg_closed.classification from "leanprover-community/mathlib"@"0723536a0522d24fc2f159a096fb3304bef77472"
@@ -46,7 +46,7 @@ theorem cardinal_mk_le_sigma_polynomial :
⟨p.1, x, by
dsimp
have h : p.1.map (algebraMap R L) ≠ 0 := by
- rw [Ne.def, ← Polynomial.degree_eq_bot,
+ rw [Ne, ← Polynomial.degree_eq_bot,
Polynomial.degree_map_eq_of_injective (NoZeroSMulDivisors.algebraMap_injective R L),
Polynomial.degree_eq_bot]
exact p.2.1
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -36,7 +36,6 @@ section AlgebraicClosure
namespace Algebra.IsAlgebraic
variable (R L : Type u) [CommRing R] [CommRing L] [IsDomain L] [Algebra R L]
-
variable [NoZeroSMulDivisors R L] (halg : Algebra.IsAlgebraic R L)
theorem cardinal_mk_le_sigma_polynomial :
@@ -88,15 +87,10 @@ section Classification
noncomputable section
variable {R L K : Type*} [CommRing R]
-
variable [Field K] [Algebra R K]
-
variable [Field L] [Algebra R L]
-
variable {ι : Type*} (v : ι → K)
-
variable {κ : Type*} (w : κ → L)
-
variable (hv : AlgebraicIndependent R v)
theorem isAlgClosure_of_transcendence_basis [IsAlgClosed K] (hv : IsTranscendenceBasis R v) :
@@ -132,11 +126,8 @@ end Classification
section Cardinal
variable {R L K : Type u} [CommRing R]
-
variable [Field K] [Algebra R K] [IsAlgClosed K]
-
variable {ι : Type u} (v : ι → K)
-
variable (hv : IsTranscendenceBasis R v)
theorem cardinal_le_max_transcendence_basis (hv : IsTranscendenceBasis R v) :
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -115,8 +115,8 @@ def equivOfTranscendenceBasis [IsAlgClosed K] [IsAlgClosed L] (e : ι ≃ κ)
(hv : IsTranscendenceBasis R v) (hw : IsTranscendenceBasis R w) : K ≃+* L := by
letI := isAlgClosure_of_transcendence_basis v hv
letI := isAlgClosure_of_transcendence_basis w hw
- have e : Algebra.adjoin R (Set.range v) ≃+* Algebra.adjoin R (Set.range w)
- · refine' hv.1.aevalEquiv.symm.toRingEquiv.trans _
+ have e : Algebra.adjoin R (Set.range v) ≃+* Algebra.adjoin R (Set.range w) := by
+ refine' hv.1.aevalEquiv.symm.toRingEquiv.trans _
refine' (AlgEquiv.ofAlgHom (MvPolynomial.rename e)
(MvPolynomial.rename e.symm) _ _).toRingEquiv.trans _
· ext; simp
@@ -55,7 +55,7 @@ theorem cardinal_mk_le_sigma_polynomial :
p.2.2]⟩)
fun x y => by
intro h
- simp at h
+ simp? at h says simp only [Set.coe_setOf, ne_eq, Set.mem_setOf_eq, Sigma.mk.inj_iff] at h
refine' (Subtype.heq_iff_coe_eq _).1 h.2
simp only [h.1, iff_self_iff, forall_true_iff]
#align algebra.is_algebraic.cardinal_mk_le_sigma_polynomial Algebra.IsAlgebraic.cardinal_mk_le_sigma_polynomial
@@ -40,8 +40,8 @@ variable (R L : Type u) [CommRing R] [CommRing L] [IsDomain L] [Algebra R L]
variable [NoZeroSMulDivisors R L] (halg : Algebra.IsAlgebraic R L)
theorem cardinal_mk_le_sigma_polynomial :
- #L ≤ #(Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
- @mk_le_of_injective L (Σ p : R[X], {x : L | x ∈ (p.map (algebraMap R L)).roots})
+ #L ≤ #(Σ p : R[X], { x : L // x ∈ p.aroots L }) :=
+ @mk_le_of_injective L (Σ p : R[X], {x : L | x ∈ p.aroots L})
(fun x : L =>
let p := Classical.indefiniteDescription _ (halg x)
⟨p.1, x, by
@@ -64,9 +64,9 @@ theorem cardinal_mk_le_sigma_polynomial :
of the base ring or `ℵ₀` -/
theorem cardinal_mk_le_max : #L ≤ max #R ℵ₀ :=
calc
- #L ≤ #(Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
+ #L ≤ #(Σ p : R[X], { x : L // x ∈ p.aroots L }) :=
cardinal_mk_le_sigma_polynomial R L halg
- _ = Cardinal.sum fun p : R[X] => #{x : L | x ∈ (p.map (algebraMap R L)).roots} := by
+ _ = Cardinal.sum fun p : R[X] => #{x : L | x ∈ p.aroots L} := by
rw [← mk_sigma]; rfl
_ ≤ Cardinal.sum.{u, u} fun _ : R[X] => ℵ₀ :=
(sum_le_sum _ _ fun p => (Multiset.finite_toSet _).lt_aleph0.le)
@@ -207,13 +207,10 @@ private theorem ringEquivOfCardinalEqOfCharP (p : ℕ) [Fact p.Prime] [CharP K p
/-- Two uncountable algebraically closed fields are isomorphic
if they have the same cardinality and the same characteristic. -/
-@[nolint defLemma]
theorem ringEquivOfCardinalEqOfCharEq (p : ℕ) [CharP K p] [CharP L p] (hK : ℵ₀ < #K)
(hKL : #K = #L) : Nonempty (K ≃+* L) := by
rcases CharP.char_is_prime_or_zero K p with (hp | hp)
· haveI : Fact p.Prime := ⟨hp⟩
- letI : Algebra (ZMod p) K := ZMod.algebra _ _
- letI : Algebra (ZMod p) L := ZMod.algebra _ _
exact ringEquivOfCardinalEqOfCharP p hK hKL
· simp only [hp] at *
letI : CharZero K := CharP.charP_to_charZero K
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -87,15 +87,15 @@ section Classification
noncomputable section
-variable {R L K : Type _} [CommRing R]
+variable {R L K : Type*} [CommRing R]
variable [Field K] [Algebra R K]
variable [Field L] [Algebra R L]
-variable {ι : Type _} (v : ι → K)
+variable {ι : Type*} (v : ι → K)
-variable {κ : Type _} (w : κ → L)
+variable {κ : Type*} (w : κ → L)
variable (hv : AlgebraicIndependent R v)
@@ -2,11 +2,6 @@
Copyright (c) 2022 Chris Hughes. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes
-
-! This file was ported from Lean 3 source module field_theory.is_alg_closed.classification
-! leanprover-community/mathlib commit 0723536a0522d24fc2f159a096fb3304bef77472
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.RingTheory.AlgebraicIndependent
import Mathlib.FieldTheory.IsAlgClosed.Basic
@@ -14,6 +9,8 @@ import Mathlib.Data.Polynomial.Cardinal
import Mathlib.Data.MvPolynomial.Cardinal
import Mathlib.Data.ZMod.Algebra
+#align_import field_theory.is_alg_closed.classification from "leanprover-community/mathlib"@"0723536a0522d24fc2f159a096fb3304bef77472"
+
/-!
# Classification of Algebraically closed fields
@@ -43,7 +43,7 @@ variable (R L : Type u) [CommRing R] [CommRing L] [IsDomain L] [Algebra R L]
variable [NoZeroSMulDivisors R L] (halg : Algebra.IsAlgebraic R L)
theorem cardinal_mk_le_sigma_polynomial :
- (#L) ≤ (#Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
+ #L ≤ #(Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
@mk_le_of_injective L (Σ p : R[X], {x : L | x ∈ (p.map (algebraMap R L)).roots})
(fun x : L =>
let p := Classical.indefiniteDescription _ (halg x)
@@ -65,19 +65,19 @@ theorem cardinal_mk_le_sigma_polynomial :
/-- The cardinality of an algebraic extension is at most the maximum of the cardinality
of the base ring or `ℵ₀` -/
-theorem cardinal_mk_le_max : (#L) ≤ max (#R) ℵ₀ :=
+theorem cardinal_mk_le_max : #L ≤ max #R ℵ₀ :=
calc
- (#L) ≤ (#Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
+ #L ≤ #(Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) :=
cardinal_mk_le_sigma_polynomial R L halg
_ = Cardinal.sum fun p : R[X] => #{x : L | x ∈ (p.map (algebraMap R L)).roots} := by
rw [← mk_sigma]; rfl
_ ≤ Cardinal.sum.{u, u} fun _ : R[X] => ℵ₀ :=
(sum_le_sum _ _ fun p => (Multiset.finite_toSet _).lt_aleph0.le)
- _ = (#R[X]) * ℵ₀ := (sum_const' _ _)
- _ ≤ max (max (#R[X]) ℵ₀) ℵ₀ := (mul_le_max _ _)
- _ ≤ max (max (max (#R) ℵ₀) ℵ₀) ℵ₀ :=
+ _ = #(R[X]) * ℵ₀ := (sum_const' _ _)
+ _ ≤ max (max #(R[X]) ℵ₀) ℵ₀ := (mul_le_max _ _)
+ _ ≤ max (max (max #R ℵ₀) ℵ₀) ℵ₀ :=
(max_le_max (max_le_max Polynomial.cardinal_mk_le_max le_rfl) le_rfl)
- _ = max (#R) ℵ₀ := by simp only [max_assoc, max_comm ℵ₀, max_left_comm ℵ₀, max_self]
+ _ = max #R ℵ₀ := by simp only [max_assoc, max_comm ℵ₀, max_left_comm ℵ₀, max_self]
#align algebra.is_algebraic.cardinal_mk_le_max Algebra.IsAlgebraic.cardinal_mk_le_max
end Algebra.IsAlgebraic
@@ -143,28 +143,28 @@ variable {ι : Type u} (v : ι → K)
variable (hv : IsTranscendenceBasis R v)
theorem cardinal_le_max_transcendence_basis (hv : IsTranscendenceBasis R v) :
- (#K) ≤ max (max (#R) (#ι)) ℵ₀ :=
+ #K ≤ max (max #R #ι) ℵ₀ :=
calc
- (#K) ≤ max (#Algebra.adjoin R (Set.range v)) ℵ₀ :=
+ #K ≤ max #(Algebra.adjoin R (Set.range v)) ℵ₀ :=
letI := isAlgClosure_of_transcendence_basis v hv
Algebra.IsAlgebraic.cardinal_mk_le_max _ _ IsAlgClosure.algebraic
- _ = max (#MvPolynomial ι R) ℵ₀ := by rw [Cardinal.eq.2 ⟨hv.1.aevalEquiv.toEquiv⟩]
- _ ≤ max (max (max (#R) (#ι)) ℵ₀) ℵ₀ := (max_le_max MvPolynomial.cardinal_mk_le_max le_rfl)
+ _ = max #(MvPolynomial ι R) ℵ₀ := by rw [Cardinal.eq.2 ⟨hv.1.aevalEquiv.toEquiv⟩]
+ _ ≤ max (max (max #R #ι) ℵ₀) ℵ₀ := (max_le_max MvPolynomial.cardinal_mk_le_max le_rfl)
_ = _ := by simp [max_assoc]
#align is_alg_closed.cardinal_le_max_transcendence_basis IsAlgClosed.cardinal_le_max_transcendence_basis
/-- If `K` is an uncountable algebraically closed field, then its
cardinality is the same as that of a transcendence basis. -/
theorem cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt [Nontrivial R]
- (hv : IsTranscendenceBasis R v) (hR : (#R) ≤ ℵ₀) (hK : ℵ₀ < (#K)) : (#K) = (#ι) :=
- have : ℵ₀ ≤ (#ι) := le_of_not_lt fun h => not_le_of_gt hK <|
+ (hv : IsTranscendenceBasis R v) (hR : #R ≤ ℵ₀) (hK : ℵ₀ < #K) : #K = #ι :=
+ have : ℵ₀ ≤ #ι := le_of_not_lt fun h => not_le_of_gt hK <|
calc
- (#K) ≤ max (max (#R) (#ι)) ℵ₀ := cardinal_le_max_transcendence_basis v hv
+ #K ≤ max (max #R #ι) ℵ₀ := cardinal_le_max_transcendence_basis v hv
_ ≤ _ := max_le (max_le hR (le_of_lt h)) le_rfl
le_antisymm
(calc
- (#K) ≤ max (max (#R) (#ι)) ℵ₀ := cardinal_le_max_transcendence_basis v hv
- _ = (#ι) := by
+ #K ≤ max (max #R #ι) ℵ₀ := cardinal_le_max_transcendence_basis v hv
+ _ = #ι := by
rw [max_eq_left, max_eq_right]
· exact le_trans hR this
· exact le_max_of_le_right this)
@@ -177,13 +177,13 @@ variable {K L : Type} [Field K] [Field L] [IsAlgClosed K] [IsAlgClosed L]
/-- Two uncountable algebraically closed fields of characteristic zero are isomorphic
if they have the same cardinality. -/
-theorem ringEquivOfCardinalEqOfCharZero [CharZero K] [CharZero L] (hK : ℵ₀ < (#K))
- (hKL : (#K) = (#L)) : Nonempty (K ≃+* L) := by
+theorem ringEquivOfCardinalEqOfCharZero [CharZero K] [CharZero L] (hK : ℵ₀ < #K)
+ (hKL : #K = #L) : Nonempty (K ≃+* L) := by
cases' exists_isTranscendenceBasis ℤ
(show Function.Injective (algebraMap ℤ K) from Int.cast_injective) with s hs
cases' exists_isTranscendenceBasis ℤ
(show Function.Injective (algebraMap ℤ L) from Int.cast_injective) with t ht
- have : (#s) = (#t) := by
+ have : #s = #t := by
rw [← cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt _ hs (le_of_eq mk_int) hK, ←
cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt _ ht (le_of_eq mk_int), hKL]
rwa [← hKL]
@@ -192,14 +192,14 @@ theorem ringEquivOfCardinalEqOfCharZero [CharZero K] [CharZero L] (hK : ℵ₀ <
#align is_alg_closed.ring_equiv_of_cardinal_eq_of_char_zero IsAlgClosed.ringEquivOfCardinalEqOfCharZero
private theorem ringEquivOfCardinalEqOfCharP (p : ℕ) [Fact p.Prime] [CharP K p] [CharP L p]
- (hK : ℵ₀ < (#K)) (hKL : (#K) = (#L)) : Nonempty (K ≃+* L) := by
+ (hK : ℵ₀ < #K) (hKL : #K = #L) : Nonempty (K ≃+* L) := by
letI : Algebra (ZMod p) K := ZMod.algebra _ _
letI : Algebra (ZMod p) L := ZMod.algebra _ _
cases' exists_isTranscendenceBasis (ZMod p)
(show Function.Injective (algebraMap (ZMod p) K) from RingHom.injective _) with s hs
cases' exists_isTranscendenceBasis (ZMod p)
(show Function.Injective (algebraMap (ZMod p) L) from RingHom.injective _) with t ht
- have : (#s) = (#t) := by
+ have : #s = #t := by
rw [← cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt _ hs
(lt_aleph0_of_finite (ZMod p)).le hK,
← cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt _ ht
@@ -211,8 +211,8 @@ private theorem ringEquivOfCardinalEqOfCharP (p : ℕ) [Fact p.Prime] [CharP K p
/-- Two uncountable algebraically closed fields are isomorphic
if they have the same cardinality and the same characteristic. -/
@[nolint defLemma]
-theorem ringEquivOfCardinalEqOfCharEq (p : ℕ) [CharP K p] [CharP L p] (hK : ℵ₀ < (#K))
- (hKL : (#K) = (#L)) : Nonempty (K ≃+* L) := by
+theorem ringEquivOfCardinalEqOfCharEq (p : ℕ) [CharP K p] [CharP L p] (hK : ℵ₀ < #K)
+ (hKL : #K = #L) : Nonempty (K ≃+* L) := by
rcases CharP.char_is_prime_or_zero K p with (hp | hp)
· haveI : Fact p.Prime := ⟨hp⟩
letI : Algebra (ZMod p) K := ZMod.algebra _ _
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes
! This file was ported from Lean 3 source module field_theory.is_alg_closed.classification
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit 0723536a0522d24fc2f159a096fb3304bef77472
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -177,10 +177,8 @@ variable {K L : Type} [Field K] [Field L] [IsAlgClosed K] [IsAlgClosed L]
/-- Two uncountable algebraically closed fields of characteristic zero are isomorphic
if they have the same cardinality. -/
-@[nolint defLemma]
theorem ringEquivOfCardinalEqOfCharZero [CharZero K] [CharZero L] (hK : ℵ₀ < (#K))
- (hKL : (#K) = (#L)) : K ≃+* L := by
- apply Classical.choice
+ (hKL : (#K) = (#L)) : Nonempty (K ≃+* L) := by
cases' exists_isTranscendenceBasis ℤ
(show Function.Injective (algebraMap ℤ K) from Int.cast_injective) with s hs
cases' exists_isTranscendenceBasis ℤ
@@ -194,8 +192,9 @@ theorem ringEquivOfCardinalEqOfCharZero [CharZero K] [CharZero L] (hK : ℵ₀ <
#align is_alg_closed.ring_equiv_of_cardinal_eq_of_char_zero IsAlgClosed.ringEquivOfCardinalEqOfCharZero
private theorem ringEquivOfCardinalEqOfCharP (p : ℕ) [Fact p.Prime] [CharP K p] [CharP L p]
- (hK : ℵ₀ < (#K)) (hKL : (#K) = (#L)) : K ≃+* L := by
- apply Classical.choice
+ (hK : ℵ₀ < (#K)) (hKL : (#K) = (#L)) : Nonempty (K ≃+* L) := by
+ letI : Algebra (ZMod p) K := ZMod.algebra _ _
+ letI : Algebra (ZMod p) L := ZMod.algebra _ _
cases' exists_isTranscendenceBasis (ZMod p)
(show Function.Injective (algebraMap (ZMod p) K) from RingHom.injective _) with s hs
cases' exists_isTranscendenceBasis (ZMod p)
@@ -213,15 +212,16 @@ private theorem ringEquivOfCardinalEqOfCharP (p : ℕ) [Fact p.Prime] [CharP K p
if they have the same cardinality and the same characteristic. -/
@[nolint defLemma]
theorem ringEquivOfCardinalEqOfCharEq (p : ℕ) [CharP K p] [CharP L p] (hK : ℵ₀ < (#K))
- (hKL : (#K) = (#L)) : K ≃+* L := by
- apply Classical.choice
+ (hKL : (#K) = (#L)) : Nonempty (K ≃+* L) := by
rcases CharP.char_is_prime_or_zero K p with (hp | hp)
· haveI : Fact p.Prime := ⟨hp⟩
- exact ⟨ringEquivOfCardinalEqOfCharP p hK hKL⟩
+ letI : Algebra (ZMod p) K := ZMod.algebra _ _
+ letI : Algebra (ZMod p) L := ZMod.algebra _ _
+ exact ringEquivOfCardinalEqOfCharP p hK hKL
· simp only [hp] at *
letI : CharZero K := CharP.charP_to_charZero K
letI : CharZero L := CharP.charP_to_charZero L
- exact ⟨ringEquivOfCardinalEqOfCharZero hK hKL⟩
+ exact ringEquivOfCardinalEqOfCharZero hK hKL
#align is_alg_closed.ring_equiv_of_cardinal_eq_of_char_eq IsAlgClosed.ringEquivOfCardinalEqOfCharEq
end IsAlgClosed
The unported dependencies are