Theorem: HahnSeries.embDomain_mul
File: Mathlib/RingTheory/HahnSeries/Multiplication.lean

tactic: ext g
state_before: Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
⊢ embDomain f (x * y) = embDomain f x * embDomain f y
state_after: case coeff.h
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ'
⊢ (embDomain f (x * y)).coeff g = (embDomain f x * embDomain f y).coeff g

tactic: by_cases hg : g ∈ Set.range f
state_before: case coeff.h
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ'
⊢ (embDomain f (x * y)).coeff g = (embDomain f x * embDomain f y).coeff g
state_after: case pos
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ'
hg : g ∈ Set.range ⇑f
⊢ (embDomain f (x * y)).coeff g = (embDomain f x * embDomain f y).coeff g

case neg
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ'
hg : g ∉ Set.range ⇑f
⊢ (embDomain f (x * y)).coeff g = (embDomain f x * embDomain f y).coeff g

tactic: obtain ⟨g, rfl⟩ := hg
state_before: case pos
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ'
hg : g ∈ Set.range ⇑f
⊢ (embDomain f (x * y)).coeff g = (embDomain f x * embDomain f y).coeff g
state_after: case pos.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ (embDomain f (x * y)).coeff (f g) = (embDomain f x * embDomain f y).coeff (f g)

tactic: simp only [mul_coeff, embDomain_coeff]
state_before: case pos.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ (embDomain f (x * y)).coeff (f g) = (embDomain f x * embDomain f y).coeff (f g)
state_after: case pos.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ ∑ ij ∈ addAntidiagonal ⋯ ⋯ g, x.coeff ij.1 * y.coeff ij.2 =
    ∑ ij ∈ addAntidiagonal ⋯ ⋯ (f g), (embDomain f x).coeff ij.1 * (embDomain f y).coeff ij.2

tactic: trans
  ∑ ij in
    (addAntidiagonal x.isPWO_support y.isPWO_support g).map
      (Function.Embedding.prodMap f.toEmbedding f.toEmbedding),
    (embDomain f x).coeff ij.1 * (embDomain f y).coeff ij.2
state_before: case pos.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ ∑ ij ∈ addAntidiagonal ⋯ ⋯ g, x.coeff ij.1 * y.coeff ij.2 =
    ∑ ij ∈ addAntidiagonal ⋯ ⋯ (f g), (embDomain f x).coeff ij.1 * (embDomain f y).coeff ij.2
state_after: Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ ∑ ij ∈ addAntidiagonal ⋯ ⋯ g, x.coeff ij.1 * y.coeff ij.2 =
    ∑ ij ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g),
      (embDomain f x).coeff ij.1 * (embDomain f y).coeff ij.2

Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ ∑ ij ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g),
      (embDomain f x).coeff ij.1 * (embDomain f y).coeff ij.2 =
    ∑ ij ∈ addAntidiagonal ⋯ ⋯ (f g), (embDomain f x).coeff ij.1 * (embDomain f y).coeff ij.2

tactic: apply sum_subset
state_before: Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ ∑ ij ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g),
      (embDomain f x).coeff ij.1 * (embDomain f y).coeff ij.2 =
    ∑ ij ∈ addAntidiagonal ⋯ ⋯ (f g), (embDomain f x).coeff ij.1 * (embDomain f y).coeff ij.2
state_after: case h
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g) ⊆ addAntidiagonal ⋯ ⋯ (f g)

case hf
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ ∀ x_1 ∈ addAntidiagonal ⋯ ⋯ (f g),
    x_1 ∉ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g) →
      (embDomain f x).coeff x_1.1 * (embDomain f y).coeff x_1.2 = 0

tactic: simp
state_before: Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ ∑ ij ∈ addAntidiagonal ⋯ ⋯ g, x.coeff ij.1 * y.coeff ij.2 =
    ∑ ij ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g),
      (embDomain f x).coeff ij.1 * (embDomain f y).coeff ij.2
state_after: no goals

tactic: rintro ⟨i, j⟩ hij
state_before: case h
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g) ⊆ addAntidiagonal ⋯ ⋯ (f g)
state_after: case h.mk
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
i j : Γ'
hij : (i, j) ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g)
⊢ (i, j) ∈ addAntidiagonal ⋯ ⋯ (f g)

tactic: simp only [exists_prop, mem_map, Prod.mk.inj_iff, mem_addAntidiagonal,
  Function.Embedding.coe_prodMap, mem_support, Prod.exists] at hij
state_before: case h.mk
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
i j : Γ'
hij : (i, j) ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g)
⊢ (i, j) ∈ addAntidiagonal ⋯ ⋯ (f g)
state_after: case h.mk
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
i j : Γ'
hij : ∃ a b, (x.coeff a ≠ 0 ∧ y.coeff b ≠ 0 ∧ a + b = g) ∧ Prod.map ⇑f.toEmbedding ⇑f.toEmbedding (a, b) = (i, j)
⊢ (i, j) ∈ addAntidiagonal ⋯ ⋯ (f g)

tactic: obtain ⟨i, j, ⟨hx, hy, rfl⟩, rfl, rfl⟩ := hij
state_before: case h.mk
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
i j : Γ'
hij : ∃ a b, (x.coeff a ≠ 0 ∧ y.coeff b ≠ 0 ∧ a + b = g) ∧ Prod.map ⇑f.toEmbedding ⇑f.toEmbedding (a, b) = (i, j)
⊢ (i, j) ∈ addAntidiagonal ⋯ ⋯ (f g)
state_after: case h.mk.intro.intro.intro.intro.intro.refl
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
i j : Γ
hx : x.coeff i ≠ 0
hy : y.coeff j ≠ 0
⊢ (f.toEmbedding i, f.toEmbedding j) ∈ addAntidiagonal ⋯ ⋯ (f (i + j))

tactic: simp [hx, hy, hf]
state_before: case h.mk.intro.intro.intro.intro.intro.refl
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
i j : Γ
hx : x.coeff i ≠ 0
hy : y.coeff j ≠ 0
⊢ (f.toEmbedding i, f.toEmbedding j) ∈ addAntidiagonal ⋯ ⋯ (f (i + j))
state_after: no goals

tactic: rintro ⟨_, _⟩ h1 h2
state_before: case hf
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
⊢ ∀ x_1 ∈ addAntidiagonal ⋯ ⋯ (f g),
    x_1 ∉ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g) →
      (embDomain f x).coeff x_1.1 * (embDomain f y).coeff x_1.2 = 0
state_after: case hf.mk
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
fst✝ snd✝ : Γ'
h1 : (fst✝, snd✝) ∈ addAntidiagonal ⋯ ⋯ (f g)
h2 : (fst✝, snd✝) ∉ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g)
⊢ (embDomain f x).coeff (fst✝, snd✝).1 * (embDomain f y).coeff (fst✝, snd✝).2 = 0

tactic: contrapose! h2
state_before: case hf.mk
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
fst✝ snd✝ : Γ'
h1 : (fst✝, snd✝) ∈ addAntidiagonal ⋯ ⋯ (f g)
h2 : (fst✝, snd✝) ∉ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g)
⊢ (embDomain f x).coeff (fst✝, snd✝).1 * (embDomain f y).coeff (fst✝, snd✝).2 = 0
state_after: case hf.mk
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
fst✝ snd✝ : Γ'
h1 : (fst✝, snd✝) ∈ addAntidiagonal ⋯ ⋯ (f g)
h2 : (embDomain f x).coeff (fst✝, snd✝).1 * (embDomain f y).coeff (fst✝, snd✝).2 ≠ 0
⊢ (fst✝, snd✝) ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g)

tactic: obtain ⟨i, _, rfl⟩ := support_embDomain_subset (ne_zero_and_ne_zero_of_mul h2).1
state_before: case hf.mk
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
fst✝ snd✝ : Γ'
h1 : (fst✝, snd✝) ∈ addAntidiagonal ⋯ ⋯ (f g)
h2 : (embDomain f x).coeff (fst✝, snd✝).1 * (embDomain f y).coeff (fst✝, snd✝).2 ≠ 0
⊢ (fst✝, snd✝) ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g)
state_after: case hf.mk.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
snd✝ : Γ'
i : Γ
left✝ : i ∈ x.support
h1 : (f i, snd✝) ∈ addAntidiagonal ⋯ ⋯ (f g)
h2 : (embDomain f x).coeff (f i, snd✝).1 * (embDomain f y).coeff (f i, snd✝).2 ≠ 0
⊢ (f i, snd✝) ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g)

tactic: obtain ⟨j, _, rfl⟩ := support_embDomain_subset (ne_zero_and_ne_zero_of_mul h2).2
state_before: case hf.mk.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ
snd✝ : Γ'
i : Γ
left✝ : i ∈ x.support
h1 : (f i, snd✝) ∈ addAntidiagonal ⋯ ⋯ (f g)
h2 : (embDomain f x).coeff (f i, snd✝).1 * (embDomain f y).coeff (f i, snd✝).2 ≠ 0
⊢ (f i, snd✝) ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g)
state_after: case hf.mk.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g i : Γ
left✝¹ : i ∈ x.support
j : Γ
left✝ : j ∈ y.support
h1 : (f i, f j) ∈ addAntidiagonal ⋯ ⋯ (f g)
h2 : (embDomain f x).coeff (f i, f j).1 * (embDomain f y).coeff (f i, f j).2 ≠ 0
⊢ (f i, f j) ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g)

tactic: simp only [exists_prop, mem_map, Prod.mk.inj_iff, mem_addAntidiagonal,
  Function.Embedding.coe_prodMap, mem_support, Prod.exists]
state_before: case hf.mk.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g i : Γ
left✝¹ : i ∈ x.support
j : Γ
left✝ : j ∈ y.support
h1 : (f i, f j) ∈ addAntidiagonal ⋯ ⋯ (f g)
h2 : (embDomain f x).coeff (f i, f j).1 * (embDomain f y).coeff (f i, f j).2 ≠ 0
⊢ (f i, f j) ∈ map (f.prodMap f.toEmbedding) (addAntidiagonal ⋯ ⋯ g)
state_after: case hf.mk.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g i : Γ
left✝¹ : i ∈ x.support
j : Γ
left✝ : j ∈ y.support
h1 : (f i, f j) ∈ addAntidiagonal ⋯ ⋯ (f g)
h2 : (embDomain f x).coeff (f i, f j).1 * (embDomain f y).coeff (f i, f j).2 ≠ 0
⊢ ∃ a b, (x.coeff a ≠ 0 ∧ y.coeff b ≠ 0 ∧ a + b = g) ∧ Prod.map ⇑f.toEmbedding ⇑f.toEmbedding (a, b) = (f i, f j)

tactic: simp only [mem_addAntidiagonal, embDomain_coeff, mem_support, ← hf,
  OrderEmbedding.eq_iff_eq] at h1
state_before: case hf.mk.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g i : Γ
left✝¹ : i ∈ x.support
j : Γ
left✝ : j ∈ y.support
h1 : (f i, f j) ∈ addAntidiagonal ⋯ ⋯ (f g)
h2 : (embDomain f x).coeff (f i, f j).1 * (embDomain f y).coeff (f i, f j).2 ≠ 0
⊢ ∃ a b, (x.coeff a ≠ 0 ∧ y.coeff b ≠ 0 ∧ a + b = g) ∧ Prod.map ⇑f.toEmbedding ⇑f.toEmbedding (a, b) = (f i, f j)
state_after: case hf.mk.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g i : Γ
left✝¹ : i ∈ x.support
j : Γ
left✝ : j ∈ y.support
h2 : (embDomain f x).coeff (f i, f j).1 * (embDomain f y).coeff (f i, f j).2 ≠ 0
h1 : x.coeff i ≠ 0 ∧ y.coeff j ≠ 0 ∧ i + j = g
⊢ ∃ a b, (x.coeff a ≠ 0 ∧ y.coeff b ≠ 0 ∧ a + b = g) ∧ Prod.map ⇑f.toEmbedding ⇑f.toEmbedding (a, b) = (f i, f j)

tactic: exact ⟨i, j, h1, rfl⟩
state_before: case hf.mk.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g i : Γ
left✝¹ : i ∈ x.support
j : Γ
left✝ : j ∈ y.support
h2 : (embDomain f x).coeff (f i, f j).1 * (embDomain f y).coeff (f i, f j).2 ≠ 0
h1 : x.coeff i ≠ 0 ∧ y.coeff j ≠ 0 ∧ i + j = g
⊢ ∃ a b, (x.coeff a ≠ 0 ∧ y.coeff b ≠ 0 ∧ a + b = g) ∧ Prod.map ⇑f.toEmbedding ⇑f.toEmbedding (a, b) = (f i, f j)
state_after: no goals

tactic: rw [embDomain_notin_range hg, eq_comm]
state_before: case neg
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ'
hg : g ∉ Set.range ⇑f
⊢ (embDomain f (x * y)).coeff g = (embDomain f x * embDomain f y).coeff g
state_after: case neg
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ'
hg : g ∉ Set.range ⇑f
⊢ (embDomain f x * embDomain f y).coeff g = 0

tactic: contrapose! hg
state_before: case neg
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ'
hg : g ∉ Set.range ⇑f
⊢ (embDomain f x * embDomain f y).coeff g = 0
state_after: case neg
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ'
hg : (embDomain f x * embDomain f y).coeff g ≠ 0
⊢ g ∈ Set.range ⇑f

tactic: obtain ⟨_, hi, _, hj, rfl⟩ := support_mul_subset_add_support ((mem_support _ _).2 hg)
state_before: case neg
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
g : Γ'
hg : (embDomain f x * embDomain f y).coeff g ≠ 0
⊢ g ∈ Set.range ⇑f
state_after: case neg.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
w✝¹ : Γ'
hi : w✝¹ ∈ (embDomain f x).support
w✝ : Γ'
hj : w✝ ∈ (embDomain f y).support
hg : (embDomain f x * embDomain f y).coeff ((fun x x_1 => x + x_1) w✝¹ w✝) ≠ 0
⊢ (fun x x_1 => x + x_1) w✝¹ w✝ ∈ Set.range ⇑f

tactic: obtain ⟨i, _, rfl⟩ := support_embDomain_subset hi
state_before: case neg.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
w✝¹ : Γ'
hi : w✝¹ ∈ (embDomain f x).support
w✝ : Γ'
hj : w✝ ∈ (embDomain f y).support
hg : (embDomain f x * embDomain f y).coeff ((fun x x_1 => x + x_1) w✝¹ w✝) ≠ 0
⊢ (fun x x_1 => x + x_1) w✝¹ w✝ ∈ Set.range ⇑f
state_after: case neg.intro.intro.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
w✝ : Γ'
hj : w✝ ∈ (embDomain f y).support
i : Γ
left✝ : i ∈ x.support
hi : f i ∈ (embDomain f x).support
hg : (embDomain f x * embDomain f y).coeff ((fun x x_1 => x + x_1) (f i) w✝) ≠ 0
⊢ (fun x x_1 => x + x_1) (f i) w✝ ∈ Set.range ⇑f

tactic: obtain ⟨j, _, rfl⟩ := support_embDomain_subset hj
state_before: case neg.intro.intro.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
w✝ : Γ'
hj : w✝ ∈ (embDomain f y).support
i : Γ
left✝ : i ∈ x.support
hi : f i ∈ (embDomain f x).support
hg : (embDomain f x * embDomain f y).coeff ((fun x x_1 => x + x_1) (f i) w✝) ≠ 0
⊢ (fun x x_1 => x + x_1) (f i) w✝ ∈ Set.range ⇑f
state_after: case neg.intro.intro.intro.intro.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
i : Γ
left✝¹ : i ∈ x.support
hi : f i ∈ (embDomain f x).support
j : Γ
left✝ : j ∈ y.support
hj : f j ∈ (embDomain f y).support
hg : (embDomain f x * embDomain f y).coeff ((fun x x_1 => x + x_1) (f i) (f j)) ≠ 0
⊢ (fun x x_1 => x + x_1) (f i) (f j) ∈ Set.range ⇑f

tactic: exact ⟨i + j, hf i j⟩
state_before: case neg.intro.intro.intro.intro.intro.intro.intro.intro
Γ : Type u_1
Γ'✝ : Type u_2
R : Type u_3
inst✝² : OrderedCancelAddCommMonoid Γ
Γ' : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ'
inst✝ : NonUnitalNonAssocSemiring R
f : Γ ↪o Γ'
hf : ∀ (x y : Γ), f (x + y) = f x + f y
x y : HahnSeries Γ R
i : Γ
left✝¹ : i ∈ x.support
hi : f i ∈ (embDomain f x).support
j : Γ
left✝ : j ∈ y.support
hj : f j ∈ (embDomain f y).support
hg : (embDomain f x * embDomain f y).coeff ((fun x x_1 => x + x_1) (f i) (f j)) ≠ 0
⊢ (fun x x_1 => x + x_1) (f i) (f j) ∈ Set.range ⇑f
state_after: no goals