Theorem: PowerBasis.repr_pow_isIntegral
File: Mathlib/RingTheory/Adjoin/PowerBasis.lean

tactic: nontriviality A using Subsingleton.elim (x ^ n) 0, isIntegral_zero
state_before: K : Type ?u.206197
S : Type u_1
inst✝¹¹ : Field K
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra K S
R : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R K
inst✝⁵ : IsScalarTower R K S
A : Type u_2
inst✝⁴ : CommRing A
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : IsScalarTower R S A
B : PowerBasis S A
hB : IsIntegral R B.gen
inst✝ : IsDomain S
x : A
hx : ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)
hmin : minpoly S B.gen = Polynomial.map (algebraMap R S) (minpoly R B.gen)
n : ℕ
⊢ ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr (x ^ n)) i)

tactic: revert hx
state_before: K : Type ?u.206197
S : Type u_1
inst✝¹¹ : Field K
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra K S
R : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R K
inst✝⁵ : IsScalarTower R K S
A : Type u_2
inst✝⁴ : CommRing A
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : IsScalarTower R S A
B : PowerBasis S A
hB : IsIntegral R B.gen
inst✝ : IsDomain S
x : A
hx : ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)
hmin : minpoly S B.gen = Polynomial.map (algebraMap R S) (minpoly R B.gen)
n : ℕ
✝ : Nontrivial A
⊢ ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr (x ^ n)) i)

tactic: refine' Nat.case_strong_induction_on
  (p := fun n ↦ _ → ∀ (i : Fin B.dim), IsIntegral R (B.basis.repr (x ^ n) i))
  n _ fun n hn => _
state_before: K : Type ?u.206197
S : Type u_1
inst✝¹¹ : Field K
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra K S
R : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R K
inst✝⁵ : IsScalarTower R K S
A : Type u_2
inst✝⁴ : CommRing A
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : IsScalarTower R S A
B : PowerBasis S A
hB : IsIntegral R B.gen
inst✝ : IsDomain S
x : A
hmin : minpoly S B.gen = Polynomial.map (algebraMap R S) (minpoly R B.gen)
n : ℕ
✝ : Nontrivial A
⊢ (∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)) →
    ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr (x ^ n)) i)

tactic: intro _ i
state_before: case refine'_1
K : Type ?u.206197
S : Type u_1
inst✝¹¹ : Field K
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra K S
R : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R K
inst✝⁵ : IsScalarTower R K S
A : Type u_2
inst✝⁴ : CommRing A
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : IsScalarTower R S A
B : PowerBasis S A
hB : IsIntegral R B.gen
inst✝ : IsDomain S
x : A
hmin : minpoly S B.gen = Polynomial.map (algebraMap R S) (minpoly R B.gen)
n : ℕ
✝ : Nontrivial A
⊢ (fun n =>
      (∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)) →
        ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr (x ^ n)) i))
    0

tactic: rw [pow_zero, ← pow_zero B.gen, ← Fin.val_mk B.dim_pos, ← B.basis_eq_pow,
  B.basis.repr_self_apply]
state_before: case refine'_1
K : Type ?u.206197
S : Type u_1
inst✝¹¹ : Field K
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra K S
R : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R K
inst✝⁵ : IsScalarTower R K S
A : Type u_2
inst✝⁴ : CommRing A
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : IsScalarTower R S A
B : PowerBasis S A
hB : IsIntegral R B.gen
inst✝ : IsDomain S
x : A
hmin : minpoly S B.gen = Polynomial.map (algebraMap R S) (minpoly R B.gen)
n : ℕ
✝ : Nontrivial A
a✝ : ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)
i : Fin B.dim
⊢ IsIntegral R (↑(↑B.basis.repr (x ^ 0)) i)

tactic: split_ifs
state_before: case refine'_1
K : Type ?u.206197
S : Type u_1
inst✝¹¹ : Field K
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra K S
R : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R K
inst✝⁵ : IsScalarTower R K S
A : Type u_2
inst✝⁴ : CommRing A
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : IsScalarTower R S A
B : PowerBasis S A
hB : IsIntegral R B.gen
inst✝ : IsDomain S
x : A
hmin : minpoly S B.gen = Polynomial.map (algebraMap R S) (minpoly R B.gen)
n : ℕ
✝ : Nontrivial A
a✝ : ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)
i : Fin B.dim
⊢ IsIntegral R (if { val := 0, isLt := (_ : 0 < B.dim) } = i then 1 else 0)

tactic: exact isIntegral_one
state_before: case refine'_1.inl
K : Type ?u.206197
S : Type u_1
inst✝¹¹ : Field K
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra K S
R : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R K
inst✝⁵ : IsScalarTower R K S
A : Type u_2
inst✝⁴ : CommRing A
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : IsScalarTower R S A
B : PowerBasis S A
hB : IsIntegral R B.gen
inst✝ : IsDomain S
x : A
hmin : minpoly S B.gen = Polynomial.map (algebraMap R S) (minpoly R B.gen)
n : ℕ
✝ : Nontrivial A
a✝ : ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)
i : Fin B.dim
h✝ : { val := 0, isLt := (_ : 0 < B.dim) } = i
⊢ IsIntegral R 1

tactic: exact isIntegral_zero
state_before: case refine'_1.inr
K : Type ?u.206197
S : Type u_1
inst✝¹¹ : Field K
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra K S
R : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R K
inst✝⁵ : IsScalarTower R K S
A : Type u_2
inst✝⁴ : CommRing A
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : IsScalarTower R S A
B : PowerBasis S A
hB : IsIntegral R B.gen
inst✝ : IsDomain S
x : A
hmin : minpoly S B.gen = Polynomial.map (algebraMap R S) (minpoly R B.gen)
n : ℕ
✝ : Nontrivial A
a✝ : ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)
i : Fin B.dim
h✝ : ¬{ val := 0, isLt := (_ : 0 < B.dim) } = i
⊢ IsIntegral R 0

tactic: intro hx
state_before: case refine'_2
K : Type ?u.206197
S : Type u_1
inst✝¹¹ : Field K
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra K S
R : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R K
inst✝⁵ : IsScalarTower R K S
A : Type u_2
inst✝⁴ : CommRing A
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : IsScalarTower R S A
B : PowerBasis S A
hB : IsIntegral R B.gen
inst✝ : IsDomain S
x : A
hmin : minpoly S B.gen = Polynomial.map (algebraMap R S) (minpoly R B.gen)
n✝ : ℕ
✝ : Nontrivial A
n : ℕ
hn :
  ∀ (m : ℕ),
    m ≤ n →
      (fun n =>
          (∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)) →
            ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr (x ^ n)) i))
        m
⊢ (fun n =>
      (∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)) →
        ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr (x ^ n)) i))
    (Nat.succ n)

tactic: rw [pow_succ]
state_before: case refine'_2
K : Type ?u.206197
S : Type u_1
inst✝¹¹ : Field K
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra K S
R : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R K
inst✝⁵ : IsScalarTower R K S
A : Type u_2
inst✝⁴ : CommRing A
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : IsScalarTower R S A
B : PowerBasis S A
hB : IsIntegral R B.gen
inst✝ : IsDomain S
x : A
hmin : minpoly S B.gen = Polynomial.map (algebraMap R S) (minpoly R B.gen)
n✝ : ℕ
✝ : Nontrivial A
n : ℕ
hn :
  ∀ (m : ℕ),
    m ≤ n →
      (fun n =>
          (∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)) →
            ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr (x ^ n)) i))
        m
hx : ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)
⊢ ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr (x ^ Nat.succ n)) i)

tactic: exact repr_mul_isIntegral hB hx (fun _ => hn _ le_rfl (fun _ => hx _) _) hmin
state_before: case refine'_2
K : Type ?u.206197
S : Type u_1
inst✝¹¹ : Field K
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra K S
R : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R K
inst✝⁵ : IsScalarTower R K S
A : Type u_2
inst✝⁴ : CommRing A
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : IsScalarTower R S A
B : PowerBasis S A
hB : IsIntegral R B.gen
inst✝ : IsDomain S
x : A
hmin : minpoly S B.gen = Polynomial.map (algebraMap R S) (minpoly R B.gen)
n✝ : ℕ
✝ : Nontrivial A
n : ℕ
hn :
  ∀ (m : ℕ),
    m ≤ n →
      (fun n =>
          (∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)) →
            ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr (x ^ n)) i))
        m
hx : ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr x) i)
⊢ ∀ (i : Fin B.dim), IsIntegral R (↑(↑B.basis.repr (x * x ^ n)) i)