Theorem: HasSum.int_rec
File: Mathlib/Topology/Algebra/InfiniteSum/Basic.lean

tactic: have h₁ : Injective ((↑) : ℕ → ℤ) := @Int.ofNat.inj
state_before: α : Type u_1
β : Type ?u.474506
γ : Type ?u.474509
δ : Type ?u.474512
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f✝ g✝ : β → α
a a₁ a₂ b : α
f g : ℕ → α
hf : HasSum f a
hg : HasSum g b
⊢ HasSum (Int.rec f g) (a + b)

tactic: have h₂ : Injective Int.negSucc := @Int.negSucc.inj
state_before: α : Type u_1
β : Type ?u.474506
γ : Type ?u.474509
δ : Type ?u.474512
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f✝ g✝ : β → α
a a₁ a₂ b : α
f g : ℕ → α
hf : HasSum f a
hg : HasSum g b
h₁ : Injective Nat.cast
⊢ HasSum (Int.rec f g) (a + b)

tactic: exact HasSum.add_isCompl this (h₁.hasSum_range_iff.mpr hf) (h₂.hasSum_range_iff.mpr hg)
state_before: α : Type u_1
β : Type ?u.474506
γ : Type ?u.474509
δ : Type ?u.474512
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f✝ g✝ : β → α
a a₁ a₂ b : α
f g : ℕ → α
hf : HasSum f a
hg : HasSum g b
h₁ : Injective Nat.cast
h₂ : Injective Int.negSucc
this : IsCompl (Set.range Nat.cast) (Set.range Int.negSucc)
⊢ HasSum (Int.rec f g) (a + b)

tactic: constructor
state_before: α : Type u_1
β : Type ?u.474506
γ : Type ?u.474509
δ : Type ?u.474512
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f✝ g✝ : β → α
a a₁ a₂ b : α
f g : ℕ → α
hf : HasSum f a
hg : HasSum g b
h₁ : Injective Nat.cast
h₂ : Injective Int.negSucc
⊢ IsCompl (Set.range Nat.cast) (Set.range Int.negSucc)

tactic: rw [disjoint_iff_inf_le]
state_before: case disjoint
α : Type u_1
β : Type ?u.474506
γ : Type ?u.474509
δ : Type ?u.474512
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f✝ g✝ : β → α
a a₁ a₂ b : α
f g : ℕ → α
hf : HasSum f a
hg : HasSum g b
h₁ : Injective Nat.cast
h₂ : Injective Int.negSucc
⊢ Disjoint (Set.range Nat.cast) (Set.range Int.negSucc)

tactic: rintro _ ⟨⟨i, rfl⟩, ⟨j, ⟨⟩⟩⟩
state_before: case disjoint
α : Type u_1
β : Type ?u.474506
γ : Type ?u.474509
δ : Type ?u.474512
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f✝ g✝ : β → α
a a₁ a₂ b : α
f g : ℕ → α
hf : HasSum f a
hg : HasSum g b
h₁ : Injective Nat.cast
h₂ : Injective Int.negSucc
⊢ Set.range Nat.cast ⊓ Set.range Int.negSucc ≤ ⊥

tactic: rw [codisjoint_iff_le_sup]
state_before: case codisjoint
α : Type u_1
β : Type ?u.474506
γ : Type ?u.474509
δ : Type ?u.474512
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f✝ g✝ : β → α
a a₁ a₂ b : α
f g : ℕ → α
hf : HasSum f a
hg : HasSum g b
h₁ : Injective Nat.cast
h₂ : Injective Int.negSucc
⊢ Codisjoint (Set.range Nat.cast) (Set.range Int.negSucc)

tactic: rintro (i | j) _
state_before: case codisjoint
α : Type u_1
β : Type ?u.474506
γ : Type ?u.474509
δ : Type ?u.474512
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f✝ g✝ : β → α
a a₁ a₂ b : α
f g : ℕ → α
hf : HasSum f a
hg : HasSum g b
h₁ : Injective Nat.cast
h₂ : Injective Int.negSucc
⊢ ⊤ ≤ Set.range Nat.cast ⊔ Set.range Int.negSucc

tactic: exacts [Or.inl ⟨_, rfl⟩, Or.inr ⟨_, rfl⟩]
state_before: case codisjoint.ofNat
α : Type u_1
β : Type ?u.474506
γ : Type ?u.474509
δ : Type ?u.474512
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f✝ g✝ : β → α
a a₁ a₂ b : α
f g : ℕ → α
hf : HasSum f a
hg : HasSum g b
h₁ : Injective Nat.cast
h₂ : Injective Int.negSucc
i : ℕ
a✝ : Int.ofNat i ∈ ⊤
⊢ Int.ofNat i ∈ Set.range Nat.cast ⊔ Set.range Int.negSucc

case codisjoint.negSucc
α : Type u_1
β : Type ?u.474506
γ : Type ?u.474509
δ : Type ?u.474512
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f✝ g✝ : β → α
a a₁ a₂ b : α
f g : ℕ → α
hf : HasSum f a
hg : HasSum g b
h₁ : Injective Nat.cast
h₂ : Injective Int.negSucc
j : ℕ
a✝ : Int.negSucc j ∈ ⊤
⊢ Int.negSucc j ∈ Set.range Nat.cast ⊔ Set.range Int.negSucc