Theorem: Ideal.add_pow_mem_of_pow_mem_of_le
File: Mathlib/RingTheory/Ideal/Basic.lean

tactic: rw [add_pow]
state_before: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
⊢ (a + b) ^ k ∈ I
state_after: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
⊢ ∑ m ∈ Finset.range (k + 1), a ^ m * b ^ (k - m) * ↑(k.choose m) ∈ I

tactic: apply I.sum_mem
state_before: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
⊢ ∑ m ∈ Finset.range (k + 1), a ^ m * b ^ (k - m) * ↑(k.choose m) ∈ I
state_after: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
⊢ ∀ c ∈ Finset.range (k + 1), a ^ c * b ^ (k - c) * ↑(k.choose c) ∈ I

tactic: intro c _
state_before: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
⊢ ∀ c ∈ Finset.range (k + 1), a ^ c * b ^ (k - c) * ↑(k.choose c) ∈ I
state_after: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
⊢ a ^ c * b ^ (k - c) * ↑(k.choose c) ∈ I

tactic: apply mul_mem_right
state_before: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
⊢ a ^ c * b ^ (k - c) * ↑(k.choose c) ∈ I
state_after: case h
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
⊢ a ^ c * b ^ (k - c) ∈ I

tactic: by_cases h : m ≤ c
state_before: case h
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
⊢ a ^ c * b ^ (k - c) ∈ I
state_after: case pos
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : m ≤ c
⊢ a ^ c * b ^ (k - c) ∈ I

case neg
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : ¬m ≤ c
⊢ a ^ c * b ^ (k - c) ∈ I

tactic: exact I.mul_mem_right _ (I.pow_mem_of_pow_mem ha h)
state_before: case pos
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : m ≤ c
⊢ a ^ c * b ^ (k - c) ∈ I
state_after: no goals

tactic: refine I.mul_mem_left _ (I.pow_mem_of_pow_mem hb ?_)
state_before: case neg
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : ¬m ≤ c
⊢ a ^ c * b ^ (k - c) ∈ I
state_after: case neg
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : ¬m ≤ c
⊢ n ≤ k - c

tactic: simp only [not_le, Nat.lt_iff_add_one_le] at h
state_before: case neg
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : ¬m ≤ c
⊢ n ≤ k - c
state_after: case neg
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : c + 1 ≤ m
⊢ n ≤ k - c

tactic: have hck : c ≤ k := by
  rw [← add_le_add_iff_right 1]
  exact le_trans h (le_trans (Nat.le_add_right _ _) hk)
state_before: case neg
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : c + 1 ≤ m
⊢ n ≤ k - c
state_after: case neg
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : c + 1 ≤ m
hck : c ≤ k
⊢ n ≤ k - c

tactic: rw [Nat.le_sub_iff_add_le hck, ← add_le_add_iff_right 1]
state_before: case neg
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : c + 1 ≤ m
hck : c ≤ k
⊢ n ≤ k - c
state_after: case neg
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : c + 1 ≤ m
hck : c ≤ k
⊢ n + c + 1 ≤ k + 1

tactic: exact le_trans (by rwa [add_comm _ n, add_assoc, add_le_add_iff_left]) hk
state_before: case neg
α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : c + 1 ≤ m
hck : c ≤ k
⊢ n + c + 1 ≤ k + 1
state_after: no goals

tactic: rw [← add_le_add_iff_right 1]
state_before: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : c + 1 ≤ m
⊢ c ≤ k
state_after: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : c + 1 ≤ m
⊢ c + 1 ≤ k + 1

tactic: exact le_trans h (le_trans (Nat.le_add_right _ _) hk)
state_before: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : c + 1 ≤ m
⊢ c + 1 ≤ k + 1
state_after: no goals

tactic: rwa [add_comm _ n, add_assoc, add_le_add_iff_left]
state_before: α : Type u
β : Type v
a b : α
inst✝ : CommSemiring α
I : Ideal α
m n k : ℕ
ha : a ^ m ∈ I
hb : b ^ n ∈ I
hk : m + n ≤ k + 1
c : ℕ
a✝ : c ∈ Finset.range (k + 1)
h : c + 1 ≤ m
hck : c ≤ k
⊢ n + c + 1 ≤ m + n
state_after: no goals