Theorem: IsMulFreimanHom.mono
File: Mathlib/Combinatorics/Additive/FreimanHom.lean

tactic: obtain rfl | hm := m.eq_zero_or_pos
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
⊢ (map f s).prod = (map f t).prod
state_after: case inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
n : ℕ
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
h : s.prod = t.prod
hmn : 0 ≤ n
hs : card s = 0
ht : card t = 0
⊢ (map f s).prod = (map f t).prod

case inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
hm : m > 0
⊢ (map f s).prod = (map f t).prod

tactic: simp only [← hs, card_pos_iff_exists_mem] at hm
state_before: case inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
hm : m > 0
⊢ (map f s).prod = (map f t).prod
state_after: case inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
hm : ∃ a, a ∈ s
⊢ (map f s).prod = (map f t).prod

tactic: obtain ⟨a, ha⟩ := hm
state_before: case inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
hm : ∃ a, a ∈ s
⊢ (map f s).prod = (map f t).prod
state_after: case inr.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ s
⊢ (map f s).prod = (map f t).prod

tactic: suffices ((s + replicate (n - m) a).map f).prod = ((t + replicate (n - m) a).map f).prod by
  simp_rw [Multiset.map_add, prod_add] at this
  exact mul_right_cancel this
state_before: case inr.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ s
⊢ (map f s).prod = (map f t).prod
state_after: case inr.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ s
⊢ (map f (s + replicate (n - m) a)).prod = (map f (t + replicate (n - m) a)).prod

tactic: replace ha := hsA ha
state_before: case inr.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ s
⊢ (map f (s + replicate (n - m) a)).prod = (map f (t + replicate (n - m) a)).prod
state_after: case inr.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ A
⊢ (map f (s + replicate (n - m) a)).prod = (map f (t + replicate (n - m) a)).prod

tactic: refine hf.map_prod_eq_map_prod (fun a ha ↦ ?_) (fun a ha ↦ ?_) ?_ ?_ ?_
state_before: case inr.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ A
⊢ (map f (s + replicate (n - m) a)).prod = (map f (t + replicate (n - m) a)).prod
state_after: case inr.intro.refine_1
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ s + replicate (n - m) a✝
⊢ a ∈ A

case inr.intro.refine_2
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ t + replicate (n - m) a✝
⊢ a ∈ A

case inr.intro.refine_3
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ A
⊢ card (s + replicate (n - m) a) = n

case inr.intro.refine_4
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ A
⊢ card (t + replicate (n - m) a) = n

case inr.intro.refine_5
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ A
⊢ (s + replicate (n - m) a).prod = (t + replicate (n - m) a).prod

tactic: rw [card_eq_zero] at hs ht
state_before: case inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
n : ℕ
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
h : s.prod = t.prod
hmn : 0 ≤ n
hs : card s = 0
ht : card t = 0
⊢ (map f s).prod = (map f t).prod
state_after: case inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
n : ℕ
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
h : s.prod = t.prod
hmn : 0 ≤ n
hs : s = 0
ht : t = 0
⊢ (map f s).prod = (map f t).prod

tactic: rw [hs, ht]
state_before: case inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
n : ℕ
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
h : s.prod = t.prod
hmn : 0 ≤ n
hs : s = 0
ht : t = 0
⊢ (map f s).prod = (map f t).prod
state_after: no goals

tactic: simp_rw [Multiset.map_add, prod_add] at this
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ s
this : (map f (s + replicate (n - m) a)).prod = (map f (t + replicate (n - m) a)).prod
⊢ (map f s).prod = (map f t).prod
state_after: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ s
this : (map f s).prod * (map f (replicate (n - m) a)).prod = (map f t).prod * (map f (replicate (n - m) a)).prod
⊢ (map f s).prod = (map f t).prod

tactic: exact mul_right_cancel this
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ s
this : (map f s).prod * (map f (replicate (n - m) a)).prod = (map f t).prod * (map f (replicate (n - m) a)).prod
⊢ (map f s).prod = (map f t).prod
state_after: no goals

tactic: rw [Multiset.mem_add] at ha
state_before: case inr.intro.refine_1
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ s + replicate (n - m) a✝
⊢ a ∈ A
state_after: case inr.intro.refine_1
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ s ∨ a ∈ replicate (n - m) a✝
⊢ a ∈ A

tactic: obtain ha | ha := ha
state_before: case inr.intro.refine_1
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ s ∨ a ∈ replicate (n - m) a✝
⊢ a ∈ A
state_after: case inr.intro.refine_1.inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ s
⊢ a ∈ A

case inr.intro.refine_1.inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ replicate (n - m) a✝
⊢ a ∈ A

tactic: exact hsA ha
state_before: case inr.intro.refine_1.inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ s
⊢ a ∈ A
state_after: no goals

tactic: rwa [eq_of_mem_replicate ha]
state_before: case inr.intro.refine_1.inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ replicate (n - m) a✝
⊢ a ∈ A
state_after: no goals

tactic: rw [Multiset.mem_add] at ha
state_before: case inr.intro.refine_2
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ t + replicate (n - m) a✝
⊢ a ∈ A
state_after: case inr.intro.refine_2
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ t ∨ a ∈ replicate (n - m) a✝
⊢ a ∈ A

tactic: obtain ha | ha := ha
state_before: case inr.intro.refine_2
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ t ∨ a ∈ replicate (n - m) a✝
⊢ a ∈ A
state_after: case inr.intro.refine_2.inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ t
⊢ a ∈ A

case inr.intro.refine_2.inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ replicate (n - m) a✝
⊢ a ∈ A

tactic: exact htA ha
state_before: case inr.intro.refine_2.inl
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ t
⊢ a ∈ A
state_after: no goals

tactic: rwa [eq_of_mem_replicate ha]
state_before: case inr.intro.refine_2.inr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a✝ : α
ha✝ : a✝ ∈ A
a : α
ha : a ∈ replicate (n - m) a✝
⊢ a ∈ A
state_after: no goals

tactic: rw [_root_.map_add, card_replicate, hs, Nat.add_sub_cancel' hmn]
state_before: case inr.intro.refine_3
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ A
⊢ card (s + replicate (n - m) a) = n
state_after: no goals

tactic: rw [_root_.map_add, card_replicate, ht, Nat.add_sub_cancel' hmn]
state_before: case inr.intro.refine_4
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ A
⊢ card (t + replicate (n - m) a) = n
state_after: no goals

tactic: rw [prod_add, prod_add, h]
state_before: case inr.intro.refine_5
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : CancelCommMonoid β
A : Set α
B : Set β
f : α → β
m n : ℕ
hmn : m ≤ n
hf : IsMulFreimanHom n A B f
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = m
ht : card t = m
h : s.prod = t.prod
a : α
ha : a ∈ A
⊢ (s + replicate (n - m) a).prod = (t + replicate (n - m) a).prod
state_after: no goals