Theorem: Algebra.IsAlgebraic.cardinal_mk_le_sigma_polynomial
File: Mathlib/FieldTheory/IsAlgClosed/Classification.lean

tactic: dsimp
state_before: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x : L
p : { x_1 // x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0 } :=
  Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯
⊢ x ∈ {x_1 | x_1 ∈ (↑p).aroots L}
state_after: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x : L
p : { x_1 // x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0 } :=
  Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯
⊢ x ∈ (↑p).aroots L

tactic: have h : p.1.map (algebraMap R L) ≠ 0 := by
  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
state_before: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x : L
p : { x_1 // x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0 } :=
  Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯
⊢ x ∈ (↑p).aroots L
state_after: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x : L
p : { x_1 // x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0 } :=
  Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯
h : Polynomial.map (algebraMap R L) ↑p ≠ 0
⊢ x ∈ (↑p).aroots L

tactic: erw [Polynomial.mem_roots h, Polynomial.IsRoot, Polynomial.eval_map, ← Polynomial.aeval_def,
  p.2.2]
state_before: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x : L
p : { x_1 // x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0 } :=
  Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯
h : Polynomial.map (algebraMap R L) ↑p ≠ 0
⊢ x ∈ (↑p).aroots L
state_after: no goals

tactic: rw [Ne, ← Polynomial.degree_eq_bot,
  Polynomial.degree_map_eq_of_injective (NoZeroSMulDivisors.algebraMap_injective R L),
  Polynomial.degree_eq_bot]
state_before: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x : L
p : { x_1 // x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0 } :=
  Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯
⊢ Polynomial.map (algebraMap R L) ↑p ≠ 0
state_after: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x : L
p : { x_1 // x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0 } :=
  Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯
⊢ ¬↑p = 0

tactic: exact p.2.1
state_before: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x : L
p : { x_1 // x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0 } :=
  Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯
⊢ ¬↑p = 0
state_after: no goals

tactic: intro h
state_before: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x y : L
⊢ (fun x =>
          let p := Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯;
          ⟨↑p, ⟨x, ⋯⟩⟩)
        x =
      (fun x =>
          let p := Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯;
          ⟨↑p, ⟨x, ⋯⟩⟩)
        y →
    x = y
state_after: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x y : L
h :
  (fun x =>
        let p := Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯;
        ⟨↑p, ⟨x, ⋯⟩⟩)
      x =
    (fun x =>
        let p := Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯;
        ⟨↑p, ⟨x, ⋯⟩⟩)
      y
⊢ x = y

tactic: simp? at h says simp only [Set.coe_setOf, ne_eq, Set.mem_setOf_eq, Sigma.mk.inj_iff] at h
state_before: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x y : L
h :
  (fun x =>
        let p := Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯;
        ⟨↑p, ⟨x, ⋯⟩⟩)
      x =
    (fun x =>
        let p := Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯;
        ⟨↑p, ⟨x, ⋯⟩⟩)
      y
⊢ x = y
state_after: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x y : L
h :
  ↑(Classical.indefiniteDescription (fun x_1 => ¬x_1 = 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯) =
      ↑(Classical.indefiniteDescription (fun x => ¬x = 0 ∧ (Polynomial.aeval y) x = 0) ⋯) ∧
    HEq ⟨x, ⋯⟩ ⟨y, ⋯⟩
⊢ x = y

tactic: refine (Subtype.heq_iff_coe_eq ?_).1 h.2
state_before: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x y : L
h :
  ↑(Classical.indefiniteDescription (fun x_1 => ¬x_1 = 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯) =
      ↑(Classical.indefiniteDescription (fun x => ¬x = 0 ∧ (Polynomial.aeval y) x = 0) ⋯) ∧
    HEq ⟨x, ⋯⟩ ⟨y, ⋯⟩
⊢ x = y
state_after: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x y : L
h :
  ↑(Classical.indefiniteDescription (fun x_1 => ¬x_1 = 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯) =
      ↑(Classical.indefiniteDescription (fun x => ¬x = 0 ∧ (Polynomial.aeval y) x = 0) ⋯) ∧
    HEq ⟨x, ⋯⟩ ⟨y, ⋯⟩
⊢ ∀ (x_1 : L),
    x_1 ∈ (↑(Classical.indefiniteDescription (fun x_2 => ¬x_2 = 0 ∧ (Polynomial.aeval x) x_2 = 0) ⋯)).aroots L ↔
      x_1 ∈ (↑(Classical.indefiniteDescription (fun x => ¬x = 0 ∧ (Polynomial.aeval y) x = 0) ⋯)).aroots L

tactic: simp only [h.1, iff_self_iff, forall_true_iff]
state_before: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x y : L
h :
  ↑(Classical.indefiniteDescription (fun x_1 => ¬x_1 = 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯) =
      ↑(Classical.indefiniteDescription (fun x => ¬x = 0 ∧ (Polynomial.aeval y) x = 0) ⋯) ∧
    HEq ⟨x, ⋯⟩ ⟨y, ⋯⟩
⊢ ∀ (x_1 : L),
    x_1 ∈ (↑(Classical.indefiniteDescription (fun x_2 => ¬x_2 = 0 ∧ (Polynomial.aeval x) x_2 = 0) ⋯)).aroots L ↔
      x_1 ∈ (↑(Classical.indefiniteDescription (fun x => ¬x = 0 ∧ (Polynomial.aeval y) x = 0) ⋯)).aroots L
state_after: no goals

tactic: simp only [Set.coe_setOf, ne_eq, Set.mem_setOf_eq, Sigma.mk.inj_iff] at h
state_before: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x y : L
h :
  (fun x =>
        let p := Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯;
        ⟨↑p, ⟨x, ⋯⟩⟩)
      x =
    (fun x =>
        let p := Classical.indefiniteDescription (fun x_1 => x_1 ≠ 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯;
        ⟨↑p, ⟨x, ⋯⟩⟩)
      y
⊢ x = y
state_after: R L : Type u
inst✝⁵ : CommRing R
inst✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra R L
inst✝¹ : NoZeroSMulDivisors R L
inst✝ : Algebra.IsAlgebraic R L
x y : L
h :
  ↑(Classical.indefiniteDescription (fun x_1 => ¬x_1 = 0 ∧ (Polynomial.aeval x) x_1 = 0) ⋯) =
      ↑(Classical.indefiniteDescription (fun x => ¬x = 0 ∧ (Polynomial.aeval y) x = 0) ⋯) ∧
    HEq ⟨x, ⋯⟩ ⟨y, ⋯⟩
⊢ x = y