ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Prod.snd_sum
@[to_additive]
theorem snd_prod : (∏ c ∈ s, f c).2 = ∏ c ∈ s, (f c).2 
Arguments: {α : Type u_1} {β : Type u_2} {γ : Type u_3} [AddCommMonoid α] [AddCommMonoid β] {s : Finset γ} {f : γ → α × β}
Goal: (∑ c ∈ s, f c).2 = ∑ c ∈ s, (f c).2
-- WithTop.coe_sum
@[simp, norm_cast] lemma coe_sum (s : Finset ι) (f : ι → α) :
    ∑ i ∈ s, f i = ∑ i ∈ s, (f i : WithTop α) 
Arguments: {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] (s : Finset ι) (f : ι → α)
Goal: ↑(∑ i ∈ s, f i) = ∑ i ∈ s, ↑(f i)
-- WithTop.sum_eq_top_iff
lemma sum_eq_top_iff : ∑ i ∈ s, f i = ⊤ ↔ ∃ i ∈ s, f i = ⊤ 
Arguments: {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] {s : Finset ι} {f : ι → WithTop α}
Goal: ∑ i ∈ s, f i = ⊤ ↔ ∃ i ∈ s, f i = ⊤
-- WithTop.sum_lt_top_iff
lemma sum_lt_top_iff : ∑ i ∈ s, f i < ⊤ ↔ ∀ i ∈ s, f i < ⊤ 
Arguments: {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] [LT α] {s : Finset ι} {f : ι → WithTop α}
Goal: ∑ i ∈ s, f i < ⊤ ↔ ∀ i ∈ s, f i < ⊤
-- WithTop.sum_lt_top
lemma sum_lt_top (h : ∀ i ∈ s, f i ≠ ⊤) : ∑ i ∈ s, f i < ⊤ 
Arguments: {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] [LT α] {s : Finset ι} {f : ι → WithTop α} (h : ∀ i ∈ s, f i ≠ ⊤)
Goal: ∑ i ∈ s, f i < ⊤
-- WithTop.prod_lt_top
lemma prod_lt_top [CommMonoidWithZero α] [NoZeroDivisors α] [Nontrivial α] [DecidableEq α] [LT α]
    {s : Finset ι} {f : ι → WithTop α} (h : ∀ i ∈ s, f i ≠ ⊤) : ∏ i ∈ s, f i < ⊤ 
Arguments: {ι : Type u_1} {α : Type u_2} [CommMonoidWithZero α] [NoZeroDivisors α] [Nontrivial α] [DecidableEq α] [LT α] {s : Finset ι} {f : ι → WithTop α} (h : ∀ i ∈ s, f i ≠ ⊤)
Goal: ∏ i ∈ s, f i < ⊤
-- WithBot.coe_sum
@[simp, norm_cast] lemma coe_sum (s : Finset ι) (f : ι → α) :
    ∑ i ∈ s, f i = ∑ i ∈ s, (f i : WithBot α) 
Arguments: {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] (s : Finset ι) (f : ι → α)
Goal: ↑(∑ i ∈ s, f i) = ∑ i ∈ s, ↑(f i)
-- WithBot.sum_eq_bot_iff
lemma sum_eq_bot_iff : ∑ i ∈ s, f i = ⊥ ↔ ∃ i ∈ s, f i = ⊥ 
Arguments: {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] {s : Finset ι} {f : ι → WithBot α}
Goal: ∑ i ∈ s, f i = ⊥ ↔ ∃ i ∈ s, f i = ⊥
-- WithBot.bot_lt_sum_iff
lemma bot_lt_sum_iff : ⊥ < ∑ i ∈ s, f i ↔ ∀ i ∈ s, ⊥ < f i 
Arguments: {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] [LT α] {s : Finset ι} {f : ι → WithBot α}
Goal: ⊥ < ∑ i ∈ s, f i ↔ ∀ i ∈ s, ⊥ < f i
-- WithBot.sum_lt_bot
lemma sum_lt_bot (h : ∀ i ∈ s, f i ≠ ⊥) : ⊥ < ∑ i ∈ s, f i 
Arguments: {ι : Type u_1} {α : Type u_2} [AddCommMonoid α] [LT α] {s : Finset ι} {f : ι → WithBot α} (h : ∀ i ∈ s, f i ≠ ⊥)
Goal: ⊥ < ∑ i ∈ s, f i
-- WithBot.prod_lt_bot
lemma prod_lt_bot [CommMonoidWithZero α] [NoZeroDivisors α] [Nontrivial α] [DecidableEq α] [LT α]
    {s : Finset ι} {f : ι → WithBot α} (h : ∀ i ∈ s, f i ≠ ⊥) : ⊥ < ∏ i ∈ s, f i 
Arguments: {ι : Type u_1} {α : Type u_2} [CommMonoidWithZero α] [NoZeroDivisors α] [Nontrivial α] [DecidableEq α] [LT α] {s : Finset ι} {f : ι → WithBot α} (h : ∀ i ∈ s, f i ≠ ⊥)
Goal: ⊥ < ∏ i ∈ s, f i
-- Finset.prod_eq_zero
lemma prod_eq_zero (hi : i ∈ s) (h : f i = 0) : ∏ j ∈ s, f j = 0 
Arguments: {ι : Type u_1} {M₀ : Type u_4} [CommMonoidWithZero M₀] {f : ι → M₀} {s : Finset ι} {i : ι} (hi : i ∈ s) (h : f i = 0)
Goal: ∏ j ∈ s, f j = 0
-- Finset.prod_boole
lemma prod_boole : ∏ i ∈ s, (ite (p i) 1 0 : M₀) = ite (∀ i ∈ s, p i) 1 0 
Arguments: {ι : Type u_1} {M₀ : Type u_4} [CommMonoidWithZero M₀] {p : ι → Prop} [DecidablePred p] {s : Finset ι}
Goal: (∏ i ∈ s, if p i then 1 else 0) = if ∀ i ∈ s, p i then 1 else 0
-- Finset.support_prod_subset
lemma support_prod_subset (s : Finset ι) (f : ι → κ → M₀) :
    support (fun x ↦ ∏ i ∈ s, f i x) ⊆ ⋂ i ∈ s, support (f i) 
Arguments: {ι : Type u_1} {κ : Type u_2} {M₀ : Type u_4} [CommMonoidWithZero M₀] (s : Finset ι) (f : ι → κ → M₀)
Goal: (Function.support fun x => ∏ i ∈ s, f i x) ⊆ ⋂ i ∈ s, Function.support (f i)
-- Finset.prod_eq_zero_iff
lemma prod_eq_zero_iff : ∏ x ∈ s, f x = 0 ↔ ∃ a ∈ s, f a = 0 
Arguments: {ι : Type u_1} {M₀ : Type u_4} [CommMonoidWithZero M₀] {f : ι → M₀} {s : Finset ι} [Nontrivial M₀] [NoZeroDivisors M₀]
Goal: ∏ x ∈ s, f x = 0 ↔ ∃ a ∈ s, f a = 0
-- Finset.prod_ne_zero_iff
lemma prod_ne_zero_iff : ∏ x ∈ s, f x ≠ 0 ↔ ∀ a ∈ s, f a ≠ 0 
Arguments: {ι : Type u_1} {M₀ : Type u_4} [CommMonoidWithZero M₀] {f : ι → M₀} {s : Finset ι} [Nontrivial M₀] [NoZeroDivisors M₀]
Goal: ∏ x ∈ s, f x ≠ 0 ↔ ∀ a ∈ s, f a ≠ 0
-- Finset.support_prod
lemma support_prod (s : Finset ι) (f : ι → κ → M₀) :
    support (fun j ↦ ∏ i ∈ s, f i j) = ⋂ i ∈ s, support (f i) 
Arguments: {ι : Type u_1} {κ : Type u_2} {M₀ : Type u_4} [CommMonoidWithZero M₀] [Nontrivial M₀] [NoZeroDivisors M₀] (s : Finset ι) (f : ι → κ → M₀)
Goal: (Function.support fun j => ∏ i ∈ s, f i j) = ⋂ i ∈ s, Function.support (f i)
-- Fintype.prod_boole
lemma prod_boole : ∏ i, (ite (p i) 1 0 : M₀) = ite (∀ i, p i) 1 0 
Arguments: {ι : Type u_1} {M₀ : Type u_4} [Fintype ι] [CommMonoidWithZero M₀] {p : ι → Prop} [DecidablePred p]
Goal: (∏ i : ι, if p i then 1 else 0) = if ∀ (i : ι), p i then 1 else 0
-- Units.mk0_prod
lemma Units.mk0_prod [CommGroupWithZero G₀] (s : Finset ι) (f : ι → G₀) (h) :
    Units.mk0 (∏ i ∈ s, f i) h =
      ∏ i ∈ s.attach, Units.mk0 (f i) fun hh ↦ h (Finset.prod_eq_zero i.2 hh) 
Arguments: {ι : Type u_1} {G₀ : Type u_3} [CommGroupWithZero G₀] (s : Finset ι) (f : ι → G₀) (h : ∏ i ∈ s, f i ≠ 0)
Goal: Units.mk0 (∏ i ∈ s, f i) h = ∏ i ∈ s.attach, Units.mk0 (f ↑i) ⋯
-- Subsemiring.nonneg_carrier
@[simps]
def nonneg (R : Type*) [OrderedSemiring R] : Subsemiring R 
Arguments: (R : Type u_2) [OrderedSemiring R]
Goal: ↑(Subsemiring.nonneg R) = Set.Ici 0
-- Finset.Nat.prod_antidiagonal_succ
theorem prod_antidiagonal_succ {n : ℕ} {f : ℕ × ℕ → M} :
    (∏ p ∈ antidiagonal (n + 1), f p)
      = f (0, n + 1) * ∏ p ∈ antidiagonal n, f (p.1 + 1, p.2) 
Arguments: {M : Type u_1} [CommMonoid M] {n : ℕ} {f : ℕ × ℕ → M}
Goal: ∏ p ∈ Finset.antidiagonal (n + 1), f p = f (0, n + 1) * ∏ p ∈ Finset.antidiagonal n, f (p.1 + 1, p.2)
-- Finset.Nat.sum_antidiagonal_succ
theorem sum_antidiagonal_succ {n : ℕ} {f : ℕ × ℕ → N} :
    (∑ p ∈ antidiagonal (n + 1), f p) = f (0, n + 1) + ∑ p ∈ antidiagonal n, f (p.1 + 1, p.2) 
Arguments: {N : Type u_2} [AddCommMonoid N] {n : ℕ} {f : ℕ × ℕ → N}
Goal: ∑ p ∈ Finset.antidiagonal (n + 1), f p = f (0, n + 1) + ∑ p ∈ Finset.antidiagonal n, f (p.1 + 1, p.2)
-- Finset.Nat.prod_antidiagonal_swap
@[to_additive]
theorem prod_antidiagonal_swap {n : ℕ} {f : ℕ × ℕ → M} :
    ∏ p ∈ antidiagonal n, f p.swap = ∏ p ∈ antidiagonal n, f p 
Arguments: {M : Type u_1} [CommMonoid M] {n : ℕ} {f : ℕ × ℕ → M}
Goal: ∏ p ∈ Finset.antidiagonal n, f p.swap = ∏ p ∈ Finset.antidiagonal n, f p
-- Finset.Nat.sum_antidiagonal_swap
@[to_additive]
theorem prod_antidiagonal_swap {n : ℕ} {f : ℕ × ℕ → M} :
    ∏ p ∈ antidiagonal n, f p.swap = ∏ p ∈ antidiagonal n, f p 
Arguments: {M : Type u_1} [AddCommMonoid M] {n : ℕ} {f : ℕ × ℕ → M}
Goal: ∑ p ∈ Finset.antidiagonal n, f p.swap = ∑ p ∈ Finset.antidiagonal n, f p
-- Finset.Nat.prod_antidiagonal_succ'
theorem prod_antidiagonal_succ' {n : ℕ} {f : ℕ × ℕ → M} : (∏ p ∈ antidiagonal (n + 1), f p) =
    f (n + 1, 0) * ∏ p ∈ antidiagonal n, f (p.1, p.2 + 1) 
Arguments: {M : Type u_1} [CommMonoid M] {n : ℕ} {f : ℕ × ℕ → M}
Goal: ∏ p ∈ Finset.antidiagonal (n + 1), f p = f (n + 1, 0) * ∏ p ∈ Finset.antidiagonal n, f (p.1, p.2 + 1)
-- Finset.Nat.sum_antidiagonal_succ'
theorem sum_antidiagonal_succ' {n : ℕ} {f : ℕ × ℕ → N} :
    (∑ p ∈ antidiagonal (n + 1), f p) = f (n + 1, 0) + ∑ p ∈ antidiagonal n, f (p.1, p.2 + 1) 
Arguments: {N : Type u_2} [AddCommMonoid N] {n : ℕ} {f : ℕ × ℕ → N}
Goal: ∑ p ∈ Finset.antidiagonal (n + 1), f p = f (n + 1, 0) + ∑ p ∈ Finset.antidiagonal n, f (p.1, p.2 + 1)
-- Finset.Nat.sum_antidiagonal_subst
@[to_additive]
theorem prod_antidiagonal_subst {n : ℕ} {f : ℕ × ℕ → ℕ → M} :
    ∏ p ∈ antidiagonal n, f p n = ∏ p ∈ antidiagonal n, f p (p.1 + p.2) 
Arguments: {M : Type u_1} [AddCommMonoid M] {n : ℕ} {f : ℕ × ℕ → ℕ → M}
Goal: ∑ p ∈ Finset.antidiagonal n, f p n = ∑ p ∈ Finset.antidiagonal n, f p (p.1 + p.2)
-- Finset.Nat.prod_antidiagonal_subst
@[to_additive]
theorem prod_antidiagonal_subst {n : ℕ} {f : ℕ × ℕ → ℕ → M} :
    ∏ p ∈ antidiagonal n, f p n = ∏ p ∈ antidiagonal n, f p (p.1 + p.2) 
Arguments: {M : Type u_1} [CommMonoid M] {n : ℕ} {f : ℕ × ℕ → ℕ → M}
Goal: ∏ p ∈ Finset.antidiagonal n, f p n = ∏ p ∈ Finset.antidiagonal n, f p (p.1 + p.2)
-- Finset.Nat.sum_antidiagonal_eq_sum_range_succ_mk
@[to_additive]
theorem prod_antidiagonal_eq_prod_range_succ_mk {M : Type*} [CommMonoid M] (f : ℕ × ℕ → M)
    (n : ℕ) : ∏ ij ∈ antidiagonal n, f ij = ∏ k ∈ range n.succ, f (k, n - k) 
Arguments: {M : Type u_3} [AddCommMonoid M] (f : ℕ × ℕ → M) (n : ℕ)
Goal: ∑ ij ∈ Finset.antidiagonal n, f ij = ∑ k ∈ Finset.range n.succ, f (k, n - k)
-- Finset.Nat.prod_antidiagonal_eq_prod_range_succ_mk
@[to_additive]
theorem prod_antidiagonal_eq_prod_range_succ_mk {M : Type*} [CommMonoid M] (f : ℕ × ℕ → M)
    (n : ℕ) : ∏ ij ∈ antidiagonal n, f ij = ∏ k ∈ range n.succ, f (k, n - k) 
Arguments: {M : Type u_3} [CommMonoid M] (f : ℕ × ℕ → M) (n : ℕ)
Goal: ∏ ij ∈ Finset.antidiagonal n, f ij = ∏ k ∈ Finset.range n.succ, f (k, n - k)
-- Finset.Nat.sum_antidiagonal_eq_sum_range_succ
@[to_additive "This lemma matches more generally than
`Finset.Nat.sum_antidiagonal_eq_sum_range_succ_mk` when using `rw ← `."]
theorem prod_antidiagonal_eq_prod_range_succ {M : Type*} [CommMonoid M] (f : ℕ → ℕ → M) (n : ℕ) :
    ∏ ij ∈ antidiagonal n, f ij.1 ij.2 = ∏ k ∈ range n.succ, f k (n - k) 
Arguments: {M : Type u_3} [AddCommMonoid M] (f : ℕ → ℕ → M) (n : ℕ)
Goal: ∑ ij ∈ Finset.antidiagonal n, f ij.1 ij.2 = ∑ k ∈ Finset.range n.succ, f k (n - k)
-- Finset.Nat.prod_antidiagonal_eq_prod_range_succ
@[to_additive "This lemma matches more generally than
`Finset.Nat.sum_antidiagonal_eq_sum_range_succ_mk` when using `rw ← `."]
theorem prod_antidiagonal_eq_prod_range_succ {M : Type*} [CommMonoid M] (f : ℕ → ℕ → M) (n : ℕ) :
    ∏ ij ∈ antidiagonal n, f ij.1 ij.2 = ∏ k ∈ range n.succ, f k (n - k) 
Arguments: {M : Type u_3} [CommMonoid M] (f : ℕ → ℕ → M) (n : ℕ)
Goal: ∏ ij ∈ Finset.antidiagonal n, f ij.1 ij.2 = ∏ k ∈ Finset.range n.succ, f k (n - k)
-- QuaternionAlgebra.Basis.i_mul_j
structure Basis {R : Type*} (A : Type*) [CommRing R] [Ring A] [Algebra R A] (c₁ c₂ : R) where
  (i j k : A)
  i_mul_i : i * i = c₁ • (1 : A)
  j_mul_j : j * j = c₂ • (1 : A)
  i_mul_j : i * j = k
  j_mul_i : j * i = -k
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (self : QuaternionAlgebra.Basis A c₁ c₂)
Goal: self.i * self.j = self.k
-- QuaternionAlgebra.Basis.i_mul_i
structure Basis {R : Type*} (A : Type*) [CommRing R] [Ring A] [Algebra R A] (c₁ c₂ : R) where
  (i j k : A)
  i_mul_i : i * i = c₁ • (1 : A)
  j_mul_j : j * j = c₂ • (1 : A)
  i_mul_j : i * j = k
  j_mul_i : j * i = -k
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (self : QuaternionAlgebra.Basis A c₁ c₂)
Goal: self.i * self.i = c₁ • 1
-- QuaternionAlgebra.Basis.j_mul_j
structure Basis {R : Type*} (A : Type*) [CommRing R] [Ring A] [Algebra R A] (c₁ c₂ : R) where
  (i j k : A)
  i_mul_i : i * i = c₁ • (1 : A)
  j_mul_j : j * j = c₂ • (1 : A)
  i_mul_j : i * j = k
  j_mul_i : j * i = -k
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (self : QuaternionAlgebra.Basis A c₁ c₂)
Goal: self.j * self.j = c₂ • 1
-- QuaternionAlgebra.Basis.j_mul_i
structure Basis {R : Type*} (A : Type*) [CommRing R] [Ring A] [Algebra R A] (c₁ c₂ : R) where
  (i j k : A)
  i_mul_i : i * i = c₁ • (1 : A)
  j_mul_j : j * j = c₂ • (1 : A)
  i_mul_j : i * j = k
  j_mul_i : j * i = -k
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (self : QuaternionAlgebra.Basis A c₁ c₂)
Goal: self.j * self.i = -self.k
-- QuaternionAlgebra.Basis.ext
@[ext]
protected theorem ext ⦃q₁ q₂ : Basis A c₁ c₂⦄ (hi : q₁.i = q₂.i) (hj : q₁.j = q₂.j) : q₁ = q₂ 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} ⦃q₁ q₂ : QuaternionAlgebra.Basis A c₁ c₂⦄ (hi : q₁.i = q₂.i) (hj : q₁.j = q₂.j)
Goal: q₁ = q₂
-- QuaternionAlgebra.Basis.self_i
@[simps i j k]
protected def self : Basis ℍ[R,c₁,c₂] c₁ c₂ 
Arguments: (R : Type u_1) [CommRing R] {c₁ c₂ : R}
Goal: (QuaternionAlgebra.Basis.self R).i = { re := 0, imI := 1, imJ := 0, imK := 0 }
-- QuaternionAlgebra.Basis.self_j
@[simps i j k]
protected def self : Basis ℍ[R,c₁,c₂] c₁ c₂ 
Arguments: (R : Type u_1) [CommRing R] {c₁ c₂ : R}
Goal: (QuaternionAlgebra.Basis.self R).j = { re := 0, imI := 0, imJ := 1, imK := 0 }
-- QuaternionAlgebra.Basis.self_k
@[simps i j k]
protected def self : Basis ℍ[R,c₁,c₂] c₁ c₂ 
Arguments: (R : Type u_1) [CommRing R] {c₁ c₂ : R}
Goal: (QuaternionAlgebra.Basis.self R).k = { re := 0, imI := 0, imJ := 0, imK := 1 }
-- QuaternionAlgebra.Basis.i_mul_k
@[simp]
theorem i_mul_k : q.i * q.k = c₁ • q.j 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂)
Goal: q.i * q.k = c₁ • q.j
-- QuaternionAlgebra.Basis.k_mul_i
@[simp]
theorem k_mul_i : q.k * q.i = -c₁ • q.j 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂)
Goal: q.k * q.i = -c₁ • q.j
-- QuaternionAlgebra.Basis.k_mul_j
@[simp]
theorem k_mul_j : q.k * q.j = c₂ • q.i 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂)
Goal: q.k * q.j = c₂ • q.i
-- QuaternionAlgebra.Basis.j_mul_k
@[simp]
theorem j_mul_k : q.j * q.k = -c₂ • q.i 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂)
Goal: q.j * q.k = -c₂ • q.i
-- QuaternionAlgebra.Basis.k_mul_k
@[simp]
theorem k_mul_k : q.k * q.k = -((c₁ * c₂) • (1 : A)) 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂)
Goal: q.k * q.k = -((c₁ * c₂) • 1)
-- QuaternionAlgebra.Basis.lift_zero
theorem lift_zero : q.lift (0 : ℍ[R,c₁,c₂]) = 0 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂)
Goal: q.lift 0 = 0
-- QuaternionAlgebra.Basis.lift_one
theorem lift_one : q.lift (1 : ℍ[R,c₁,c₂]) = 1 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂)
Goal: q.lift 1 = 1
-- QuaternionAlgebra.Basis.lift_add
theorem lift_add (x y : ℍ[R,c₁,c₂]) : q.lift (x + y) = q.lift x + q.lift y 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂) (x y : ℍ[R,c₁,c₂])
Goal: q.lift (x + y) = q.lift x + q.lift y
-- QuaternionAlgebra.Basis.lift_mul
theorem lift_mul (x y : ℍ[R,c₁,c₂]) : q.lift (x * y) = q.lift x * q.lift y 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂) (x y : ℍ[R,c₁,c₂])
Goal: q.lift (x * y) = q.lift x * q.lift y
-- QuaternionAlgebra.Basis.lift_smul
theorem lift_smul (r : R) (x : ℍ[R,c₁,c₂]) : q.lift (r • x) = r • q.lift x 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂) (r : R) (x : ℍ[R,c₁,c₂])
Goal: q.lift (r • x) = r • q.lift x
-- QuaternionAlgebra.Basis.liftHom_apply
@[simps!]
def liftHom : ℍ[R,c₁,c₂] →ₐ[R] A 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂) (a : ℍ[R,c₁,c₂])
Goal: q.liftHom a = q.lift a
-- QuaternionAlgebra.Basis.compHom_i
@[simps i j k]
def compHom (F : A →ₐ[R] B) : Basis B c₁ c₂ 
Arguments: {R : Type u_1} {A : Type u_2} {B : Type u_3} [CommRing R] [Ring A] [Ring B] [Algebra R A] [Algebra R B] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂) (F : A →ₐ[R] B)
Goal: (q.compHom F).i = F q.i
-- QuaternionAlgebra.Basis.compHom_j
@[simps i j k]
def compHom (F : A →ₐ[R] B) : Basis B c₁ c₂ 
Arguments: {R : Type u_1} {A : Type u_2} {B : Type u_3} [CommRing R] [Ring A] [Ring B] [Algebra R A] [Algebra R B] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂) (F : A →ₐ[R] B)
Goal: (q.compHom F).j = F q.j
-- QuaternionAlgebra.Basis.compHom_k
@[simps i j k]
def compHom (F : A →ₐ[R] B) : Basis B c₁ c₂ 
Arguments: {R : Type u_1} {A : Type u_2} {B : Type u_3} [CommRing R] [Ring A] [Ring B] [Algebra R A] [Algebra R B] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂) (F : A →ₐ[R] B)
Goal: (q.compHom F).k = F q.k
-- QuaternionAlgebra.lift_apply
@[simps]
def lift : Basis A c₁ c₂ ≃ (ℍ[R,c₁,c₂] →ₐ[R] A) 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (q : QuaternionAlgebra.Basis A c₁ c₂)
Goal: QuaternionAlgebra.lift q = q.liftHom
-- QuaternionAlgebra.lift_symm_apply
@[simps]
def lift : Basis A c₁ c₂ ≃ (ℍ[R,c₁,c₂] →ₐ[R] A) 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} (F : ℍ[R,c₁,c₂] →ₐ[R] A)
Goal: QuaternionAlgebra.lift.symm F = (QuaternionAlgebra.Basis.self R).compHom F
-- QuaternionAlgebra.hom_ext
@[ext]
theorem hom_ext ⦃f g : ℍ[R,c₁,c₂] →ₐ[R] A⦄
    (hi : f (Basis.self R).i = g (Basis.self R).i) (hj : f (Basis.self R).j = g (Basis.self R).j) :
    f = g 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] {c₁ c₂ : R} ⦃f g : ℍ[R,c₁,c₂] →ₐ[R] A⦄ (hi : f (QuaternionAlgebra.Basis.self R).i = g (QuaternionAlgebra.Basis.self R).i) (hj : f (QuaternionAlgebra.Basis.self R).j = g (QuaternionAlgebra.Basis.self R).j)
Goal: f = g
-- Quaternion.hom_ext
@[ext]
theorem hom_ext ⦃f g : ℍ[R] →ₐ[R] A⦄
    (hi : f (Basis.self R).i = g (Basis.self R).i) (hj : f (Basis.self R).j = g (Basis.self R).j) :
    f = g 
Arguments: {R : Type u_1} {A : Type u_2} [CommRing R] [Ring A] [Algebra R A] ⦃f g : ℍ[R] →ₐ[R] A⦄ (hi : f (QuaternionAlgebra.Basis.self R).i = g (QuaternionAlgebra.Basis.self R).i) (hj : f (QuaternionAlgebra.Basis.self R).j = g (QuaternionAlgebra.Basis.self R).j)
Goal: f = g
-- Prime.exists_mem_multiset_dvd
theorem exists_mem_multiset_dvd (hp : Prime p) {s : Multiset α} : p ∣ s.prod → ∃ a ∈ s, p ∣ a 
Arguments: {α : Type u_1} [CommMonoidWithZero α] {p : α} (hp : Prime p) {s : Multiset α}
Goal: p ∣ s.prod → ∃ a ∈ s, p ∣ a
-- Prime.exists_mem_multiset_map_dvd
theorem exists_mem_multiset_map_dvd (hp : Prime p) {s : Multiset β} {f : β → α} :
    p ∣ (s.map f).prod → ∃ a ∈ s, p ∣ f a 
Arguments: {α : Type u_1} {β : Type u_2} [CommMonoidWithZero α] {p : α} (hp : Prime p) {s : Multiset β} {f : β → α}
Goal: p ∣ (Multiset.map f s).prod → ∃ a ∈ s, p ∣ f a
-- Prime.exists_mem_finset_dvd
theorem exists_mem_finset_dvd (hp : Prime p) {s : Finset β} {f : β → α} :
    p ∣ s.prod f → ∃ i ∈ s, p ∣ f i 
Arguments: {α : Type u_1} {β : Type u_2} [CommMonoidWithZero α] {p : α} (hp : Prime p) {s : Finset β} {f : β → α}
Goal: p ∣ s.prod f → ∃ i ∈ s, p ∣ f i
-- Prod.associated_iff
theorem Prod.associated_iff {M N : Type*} [Monoid M] [Monoid N] {x z : M × N} :
    x ~ᵤ z ↔ x.1 ~ᵤ z.1 ∧ x.2 ~ᵤ z.2 
Arguments: {M : Type u_5} {N : Type u_6} [Monoid M] [Monoid N] {x z : M × N}
Goal: x ~ᵤ z ↔ x.1 ~ᵤ z.1 ∧ x.2 ~ᵤ z.2
-- Associated.prod
theorem Associated.prod {M : Type*} [CommMonoid M] {ι : Type*} (s : Finset ι) (f : ι → M)
    (g : ι → M) (h : ∀ i, i ∈ s → (f i) ~ᵤ (g i)) : (∏ i ∈ s, f i) ~ᵤ (∏ i ∈ s, g i) 
Arguments: {M : Type u_5} [CommMonoid M] {ι : Type u_6} (s : Finset ι) (f g : ι → M) (h : ∀ i ∈ s, f i ~ᵤ g i)
Goal: ∏ i ∈ s, f i ~ᵤ ∏ i ∈ s, g i
-- exists_associated_mem_of_dvd_prod
theorem exists_associated_mem_of_dvd_prod [CancelCommMonoidWithZero α] {p : α} (hp : Prime p)
    {s : Multiset α} : (∀ r ∈ s, Prime r) → p ∣ s.prod → ∃ q ∈ s, p ~ᵤ q 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] {p : α} (hp : Prime p) {s : Multiset α}
Goal: (∀ r ∈ s, Prime r) → p ∣ s.prod → ∃ q ∈ s, p ~ᵤ q
-- Multiset.prod_primes_dvd
theorem Multiset.prod_primes_dvd [CancelCommMonoidWithZero α]
    [∀ a : α, DecidablePred (Associated a)] {s : Multiset α} (n : α) (h : ∀ a ∈ s, Prime a)
    (div : ∀ a ∈ s, a ∣ n) (uniq : ∀ a, s.countP (Associated a) ≤ 1) : s.prod ∣ n 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [(a : α) → DecidablePred (Associated a)] {s : Multiset α} (n : α) (h : ∀ a ∈ s, Prime a) (div : ∀ a ∈ s, a ∣ n) (uniq : ∀ (a : α), Multiset.countP (Associated a) s ≤ 1)
Goal: s.prod ∣ n
-- Finset.prod_primes_dvd
theorem Finset.prod_primes_dvd [CancelCommMonoidWithZero α] [Unique αˣ] {s : Finset α} (n : α)
    (h : ∀ a ∈ s, Prime a) (div : ∀ a ∈ s, a ∣ n) : (∏ p ∈ s, p) ∣ n 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [Unique αˣ] {s : Finset α} (n : α) (h : ∀ a ∈ s, Prime a) (div : ∀ a ∈ s, a ∣ n)
Goal: ∏ p ∈ s, p ∣ n
-- Associates.prod_mk
theorem prod_mk {p : Multiset α} : (p.map Associates.mk).prod = Associates.mk p.prod 
Arguments: {α : Type u_1} [CommMonoid α] {p : Multiset α}
Goal: (Multiset.map Associates.mk p).prod = Associates.mk p.prod
-- Associates.finset_prod_mk
theorem finset_prod_mk {p : Finset β} {f : β → α} :
    (∏ i ∈ p, Associates.mk (f i)) = Associates.mk (∏ i ∈ p, f i) 
Arguments: {α : Type u_1} {β : Type u_2} [CommMonoid α] {p : Finset β} {f : β → α}
Goal: ∏ i ∈ p, Associates.mk (f i) = Associates.mk (∏ i ∈ p, f i)
-- Associates.rel_associated_iff_map_eq_map
theorem rel_associated_iff_map_eq_map {p q : Multiset α} :
    Multiset.Rel Associated p q ↔ p.map Associates.mk = q.map Associates.mk 
Arguments: {α : Type u_1} [CommMonoid α] {p q : Multiset α}
Goal: Multiset.Rel Associated p q ↔ Multiset.map Associates.mk p = Multiset.map Associates.mk q
-- Associates.prod_eq_one_iff
theorem prod_eq_one_iff {p : Multiset (Associates α)} :
    p.prod = 1 ↔ ∀ a ∈ p, (a : Associates α) = 1 
Arguments: {α : Type u_1} [CommMonoid α] {p : Multiset (Associates α)}
Goal: p.prod = 1 ↔ ∀ a ∈ p, a = 1
-- Associates.prod_le_prod
theorem prod_le_prod {p q : Multiset (Associates α)} (h : p ≤ q) : p.prod ≤ q.prod 
Arguments: {α : Type u_1} [CommMonoid α] {p q : Multiset (Associates α)} (h : p ≤ q)
Goal: p.prod ≤ q.prod
-- Associates.exists_mem_multiset_le_of_prime
theorem exists_mem_multiset_le_of_prime {s : Multiset (Associates α)} {p : Associates α}
    (hp : Prime p) : p ≤ s.prod → ∃ a ∈ s, p ≤ a 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] {s : Multiset (Associates α)} {p : Associates α} (hp : Prime p)
Goal: p ≤ s.prod → ∃ a ∈ s, p ≤ a
-- Multiset.prod_ne_zero_of_prime
theorem prod_ne_zero_of_prime [CancelCommMonoidWithZero α] [Nontrivial α] (s : Multiset α)
    (h : ∀ x ∈ s, Prime x) : s.prod ≠ 0 
Arguments: {α : Type u_1} [CancelCommMonoidWithZero α] [Nontrivial α] (s : Multiset α) (h : ∀ x ∈ s, Prime x)
Goal: s.prod ≠ 0
-- Prime.dvd_finset_prod_iff
theorem Prime.dvd_finset_prod_iff {S : Finset α} {p : M} (pp : Prime p) (g : α → M) :
    p ∣ S.prod g ↔ ∃ a ∈ S, p ∣ g a 
Arguments: {α : Type u_1} {M : Type u_5} [CommMonoidWithZero M] {S : Finset α} {p : M} (pp : Prime p) (g : α → M)
Goal: p ∣ S.prod g ↔ ∃ a ∈ S, p ∣ g a
-- Prime.not_dvd_finset_prod
theorem Prime.not_dvd_finset_prod {S : Finset α} {p : M} (pp : Prime p) {g : α → M}
    (hS : ∀ a ∈ S, ¬p ∣ g a) : ¬p ∣ S.prod g 
Arguments: {α : Type u_1} {M : Type u_5} [CommMonoidWithZero M] {S : Finset α} {p : M} (pp : Prime p) {g : α → M} (hS : ∀ a ∈ S, ¬p ∣ g a)
Goal: ¬p ∣ S.prod g
-- Prime.dvd_finsupp_prod_iff
theorem Prime.dvd_finsupp_prod_iff {f : α →₀ M} {g : α → M → ℕ} {p : ℕ} (pp : Prime p) :
    p ∣ f.prod g ↔ ∃ a ∈ f.support, p ∣ g a (f a) 
Arguments: {α : Type u_1} {M : Type u_5} [CommMonoidWithZero M] {f : α →₀ M} {g : α → M → ℕ} {p : ℕ} (pp : Prime p)
Goal: p ∣ f.prod g ↔ ∃ a ∈ f.support, p ∣ g a (f a)
-- Prime.not_dvd_finsupp_prod
theorem Prime.not_dvd_finsupp_prod {f : α →₀ M} {g : α → M → ℕ} {p : ℕ} (pp : Prime p)
    (hS : ∀ a ∈ f.support, ¬p ∣ g a (f a)) : ¬p ∣ f.prod g 
Arguments: {α : Type u_1} {M : Type u_5} [CommMonoidWithZero M] {f : α →₀ M} {g : α → M → ℕ} {p : ℕ} (pp : Prime p) (hS : ∀ a ∈ f.support, ¬p ∣ g a (f a))
Goal: ¬p ∣ f.prod g
-- Finset.even_sum_iff_even_card_odd
lemma even_sum_iff_even_card_odd {s : Finset ι} (f : ι → ℕ) :
    Even (∑ i ∈ s, f i) ↔ Even (s.filter fun x ↦ Odd (f x)).card 
Arguments: {ι : Type u_1} {s : Finset ι} (f : ι → ℕ)
Goal: Even (∑ i ∈ s, f i) ↔ Even (Finset.filter (fun x => Odd (f x)) s).card