1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: NumberField.Units.dirichletUnitTheorem.seq_norm_le
File: Mathlib/NumberTheory/NumberField/Units/DirichletTheorem.lean

tactic: cases n with
| zero =>
    have : 1 ≤ B := by
      contrapose! hB
      simp only [Nat.lt_one_iff.mp hB, CharP.cast_eq_zero, mul_zero, zero_le]
    simp only [ne_eq, seq, map_one, Int.natAbs_one, this]
| succ n =>
    rw [← Nat.cast_le (α := ℚ), Int.cast_natAbs, Int.cast_abs, Algebra.coe_norm_int]
    exact (seq_next K w₁ hB (seq K w₁ hB n).prop).choose_spec.2.2
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
w₁ : InfinitePlace K
B : ℕ
hB : minkowskiBound K 1 < ↑(convexBodyLTFactor K) * ↑B
n : ℕ
⊢ ((Algebra.norm ℤ) ↑(seq K w₁ hB n)).natAbs ≤ B
state_after: no goals

tactic: have : 1 ≤ B := by
  contrapose! hB
  simp only [Nat.lt_one_iff.mp hB, CharP.cast_eq_zero, mul_zero, zero_le]
state_before: case zero
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
w₁ : InfinitePlace K
B : ℕ
hB : minkowskiBound K 1 < ↑(convexBodyLTFactor K) * ↑B
⊢ ((Algebra.norm ℤ) ↑(seq K w₁ hB 0)).natAbs ≤ B
state_after: case zero
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
w₁ : InfinitePlace K
B : ℕ
hB : minkowskiBound K 1 < ↑(convexBodyLTFactor K) * ↑B
this : 1 ≤ B
⊢ ((Algebra.norm ℤ) ↑(seq K w₁ hB 0)).natAbs ≤ B

tactic: simp only [ne_eq, seq, map_one, Int.natAbs_one, this]
state_before: case zero
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
w₁ : InfinitePlace K
B : ℕ
hB : minkowskiBound K 1 < ↑(convexBodyLTFactor K) * ↑B
this : 1 ≤ B
⊢ ((Algebra.norm ℤ) ↑(seq K w₁ hB 0)).natAbs ≤ B
state_after: no goals

tactic: contrapose! hB
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
w₁ : InfinitePlace K
B : ℕ
hB : minkowskiBound K 1 < ↑(convexBodyLTFactor K) * ↑B
⊢ 1 ≤ B
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
w₁ : InfinitePlace K
B : ℕ
hB : B < 1
⊢ ↑(convexBodyLTFactor K) * ↑B ≤ minkowskiBound K 1

tactic: simp only [Nat.lt_one_iff.mp hB, CharP.cast_eq_zero, mul_zero, zero_le]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
w₁ : InfinitePlace K
B : ℕ
hB : B < 1
⊢ ↑(convexBodyLTFactor K) * ↑B ≤ minkowskiBound K 1
state_after: no goals

tactic: rw [← Nat.cast_le (α := ℚ), Int.cast_natAbs, Int.cast_abs, Algebra.coe_norm_int]
state_before: case succ
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
w₁ : InfinitePlace K
B : ℕ
hB : minkowskiBound K 1 < ↑(convexBodyLTFactor K) * ↑B
n : ℕ
⊢ ((Algebra.norm ℤ) ↑(seq K w₁ hB (n + 1))).natAbs ≤ B
state_after: case succ
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
w₁ : InfinitePlace K
B : ℕ
hB : minkowskiBound K 1 < ↑(convexBodyLTFactor K) * ↑B
n : ℕ
⊢ |(Algebra.norm ℚ) ↑↑(seq K w₁ hB (n + 1))| ≤ ↑B

tactic: exact (seq_next K w₁ hB (seq K w₁ hB n).prop).choose_spec.2.2
state_before: case succ
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
w₁ : InfinitePlace K
B : ℕ
hB : minkowskiBound K 1 < ↑(convexBodyLTFactor K) * ↑B
n : ℕ
⊢ |(Algebra.norm ℚ) ↑↑(seq K w₁ hB (n + 1))| ≤ ↑B
state_after: no goals
Theorem: CategoryTheory.ComposableArrows.exact_of_δ₀
File: Mathlib/Algebra/Homology/ExactSequence.lean

tactic: rw [exact_iff_δ₀]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C (n + 2)
h : (mk₂ (S.map' 0 1 ⋯ ⋯) (S.map' 1 2 ⋯ ⋯)).Exact
h₀ : S.δ₀.Exact
⊢ S.Exact
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C (n + 2)
h : (mk₂ (S.map' 0 1 ⋯ ⋯) (S.map' 1 2 ⋯ ⋯)).Exact
h₀ : S.δ₀.Exact
⊢ (mk₂ (S.map' 0 1 ⋯ ⋯) (S.map' 1 2 ⋯ ⋯)).Exact ∧ S.δ₀.Exact

tactic: constructor <;> assumption
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C (n + 2)
h : (mk₂ (S.map' 0 1 ⋯ ⋯) (S.map' 1 2 ⋯ ⋯)).Exact
h₀ : S.δ₀.Exact
⊢ (mk₂ (S.map' 0 1 ⋯ ⋯) (S.map' 1 2 ⋯ ⋯)).Exact ∧ S.δ₀.Exact
state_after: no goals
Theorem: EuclideanDomain.GCD.induction
File: Mathlib/Algebra/EuclideanDomain/Defs.lean

tactic: exact a0.symm ▸ H0 b
state_before: R : Type u
inst✝ : EuclideanDomain R
P : R → R → Prop
a b : R
H0 : ∀ (x : R), P 0 x
H1 : ∀ (a b : R), a ≠ 0 → P (b % a) a → P a b
a0 : a = 0
⊢ P a b
state_after: no goals
Theorem: CategoryTheory.Limits.colimit.pre_id
File: Mathlib/CategoryTheory/Limits/HasLimits.lean

tactic: aesop_cat
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u
inst✝¹ : Category.{v, u} C
F✝ : J ⥤ C
inst✝ : HasColimitsOfShape J C
G : J ⥤ C
α : F✝ ⟶ G
F : J ⥤ C
⊢ pre F (𝟭 J) = colim.map F.leftUnitor.hom
state_after: no goals
Theorem: IntermediateField.finInsepDegree_bot
File: Mathlib/FieldTheory/SeparableClosure.lean

tactic: rw [finInsepDegree_eq_of_equiv _ _ _ (botEquiv F E), finInsepDegree_self]
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
⊢ finInsepDegree F ↥⊥ = 1
state_after: no goals
Theorem: LinearIsometry.norm_toContinuousLinearMap
File: Mathlib/Analysis/NormedSpace/OperatorNorm/NormedSpace.lean

tactic: simp
state_before: 𝕜 : Type u_1
𝕜₂ : Type u_2
𝕜₃ : Type u_3
E : Type u_4
Eₗ : Type u_5
F : Type u_6
Fₗ : Type u_7
G : Type u_8
Gₗ : Type u_9
𝓕 : Type u_10
inst✝¹² : NormedAddCommGroup E
inst✝¹¹ : NormedAddCommGroup F
inst✝¹⁰ : NormedAddCommGroup G
inst✝⁹ : NormedAddCommGroup Fₗ
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NontriviallyNormedField 𝕜₂
inst✝⁶ : NontriviallyNormedField 𝕜₃
inst✝⁵ : NormedSpace 𝕜 E
inst✝⁴ : NormedSpace 𝕜₂ F
inst✝³ : NormedSpace 𝕜₃ G
inst✝² : NormedSpace 𝕜 Fₗ
c : 𝕜
σ₁₂ : 𝕜 →+* 𝕜₂
σ₂₃ : 𝕜₂ →+* 𝕜₃
f✝ g : E →SL[σ₁₂] F
x y z : E
inst✝¹ : Nontrivial E
inst✝ : RingHomIsometric σ₁₂
f : E →ₛₗᵢ[σ₁₂] F
⊢ ∀ (x : E), ‖f.toContinuousLinearMap x‖ = 1 * ‖x‖
state_after: no goals
Theorem: MvPolynomial.IsSymmetric.map
File: Mathlib/RingTheory/MvPolynomial/Symmetric.lean

tactic: rw [← map_rename, hφ]
state_before: σ : Type u_1
R : Type u_2
τ : Type u_3
S : Type u_4
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
φ ψ : MvPolynomial σ R
hφ : φ.IsSymmetric
f : R →+* S
e : Perm σ
⊢ (rename ⇑e) ((MvPolynomial.map f) φ) = (MvPolynomial.map f) φ
state_after: no goals
Theorem: Polynomial.zero_of_eval_zero
File: Mathlib/Algebra/Polynomial/Roots.lean

tactic: classical
by_contra hp
refine @Fintype.false R _ ?_
exact ⟨p.roots.toFinset, fun x => Multiset.mem_toFinset.mpr ((mem_roots hp).mpr (h _))⟩
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : IsDomain R
p✝ q : R[X]
inst✝ : Infinite R
p : R[X]
h : ∀ (x : R), eval x p = 0
⊢ p = 0
state_after: no goals

tactic: by_contra hp
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : IsDomain R
p✝ q : R[X]
inst✝ : Infinite R
p : R[X]
h : ∀ (x : R), eval x p = 0
⊢ p = 0
state_after: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : IsDomain R
p✝ q : R[X]
inst✝ : Infinite R
p : R[X]
h : ∀ (x : R), eval x p = 0
hp : ¬p = 0
⊢ False

tactic: refine @Fintype.false R _ ?_
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : IsDomain R
p✝ q : R[X]
inst✝ : Infinite R
p : R[X]
h : ∀ (x : R), eval x p = 0
hp : ¬p = 0
⊢ False
state_after: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : IsDomain R
p✝ q : R[X]
inst✝ : Infinite R
p : R[X]
h : ∀ (x : R), eval x p = 0
hp : ¬p = 0
⊢ Fintype R

tactic: exact ⟨p.roots.toFinset, fun x => Multiset.mem_toFinset.mpr ((mem_roots hp).mpr (h _))⟩
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : IsDomain R
p✝ q : R[X]
inst✝ : Infinite R
p : R[X]
h : ∀ (x : R), eval x p = 0
hp : ¬p = 0
⊢ Fintype R
state_after: no goals
Theorem: CompleteLattice.independent_iff_forall_dfinsupp
File: Mathlib/LinearAlgebra/DFinsupp.lean

tactic: simp_rw [CompleteLattice.independent_def, Submodule.disjoint_def,
  Submodule.mem_biSup_iff_exists_dfinsupp, exists_imp, filter_ne_eq_erase]
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
⊢ Independent p ↔
    ∀ (i : ι) (x : ↥(p i)) (v : Π₀ (i : ι), ↥(p i)), ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ↑x → x = 0
state_after: ι : Type u_1
R : Type u_2
S : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
⊢ (∀ (i : ι), ∀ x ∈ p i, ∀ (x_1 : Π₀ (i : ι), ↥(p i)), ((lsum ℕ) fun i => (p i).subtype) (erase i x_1) = x → x = 0) ↔
    ∀ (i : ι) (x : ↥(p i)) (v : Π₀ (i : ι), ↥(p i)), ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ↑x → x = 0

tactic: refine forall_congr' fun i => Subtype.forall'.trans ?_
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
⊢ (∀ (i : ι), ∀ x ∈ p i, ∀ (x_1 : Π₀ (i : ι), ↥(p i)), ((lsum ℕ) fun i => (p i).subtype) (erase i x_1) = x → x = 0) ↔
    ∀ (i : ι) (x : ↥(p i)) (v : Π₀ (i : ι), ↥(p i)), ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ↑x → x = 0
state_after: ι : Type u_1
R : Type u_2
S : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
i : ι
⊢ (∀ (x : ↥(p i)) (x_1 : Π₀ (i : ι), ↥(p i)), ((lsum ℕ) fun i => (p i).subtype) (erase i x_1) = ↑x → ↑x = 0) ↔
    ∀ (x : ↥(p i)) (v : Π₀ (i : ι), ↥(p i)), ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ↑x → x = 0

tactic: simp_rw [Submodule.coe_eq_zero]
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
i : ι
⊢ (∀ (x : ↥(p i)) (x_1 : Π₀ (i : ι), ↥(p i)), ((lsum ℕ) fun i => (p i).subtype) (erase i x_1) = ↑x → ↑x = 0) ↔
    ∀ (x : ↥(p i)) (v : Π₀ (i : ι), ↥(p i)), ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ↑x → x = 0
state_after: no goals
Theorem: Nat.gcd_self_add_right
File: Mathlib/Data/Nat/GCD/Basic.lean

tactic: rw [add_comm, gcd_add_self_right]
state_before: m n : ℕ
⊢ m.gcd (m + n) = m.gcd n
state_after: no goals
Theorem: toIocMod_le_toIcoMod_add
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: rw [toIcoMod, toIocMod, sub_add, sub_le_sub_iff_left, sub_le_iff_le_add, ← add_one_zsmul,
  (zsmul_strictMono_left hp).le_iff_le]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
⊢ toIocMod hp a b ≤ toIcoMod hp a b + p
state_after: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
⊢ toIcoDiv hp a b ≤ toIocDiv hp a b + 1

tactic: apply (toIocDiv_wcovBy_toIcoDiv _ _ _).le_succ
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
⊢ toIcoDiv hp a b ≤ toIocDiv hp a b + 1
state_after: no goals
Theorem: Matrix.det_updateRow_add_self
File: Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean

tactic: simp [det_updateRow_add,
  det_zero_of_row_eq hij (updateRow_self.trans (updateRow_ne hij.symm).symm)]
state_before: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix n n R
i j : n
hij : i ≠ j
⊢ (A.updateRow i (A i + A j)).det = A.det
state_after: no goals
Theorem: convexJoin_segments
File: Mathlib/Analysis/Convex/Join.lean

tactic: simp_rw [← convexHull_pair, convexHull_insert (insert_nonempty _ _),
  convexHull_insert (singleton_nonempty _), convexJoin_assoc,
  convexHull_singleton]
state_before: ι : Sort u_1
𝕜 : Type u_2
E : Type u_3
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s t u : Set E
x y a b c d : E
⊢ convexJoin 𝕜 (segment 𝕜 a b) (segment 𝕜 c d) = (convexHull 𝕜) {a, b, c, d}
state_after: no goals
Theorem: MvPolynomial.cardinal_mk_eq_max
File: Mathlib/Algebra/MvPolynomial/Cardinal.lean

tactic: simp
state_before: σ R : Type u
inst✝² : CommSemiring R
inst✝¹ : Nonempty σ
inst✝ : Nontrivial R
⊢ #(MvPolynomial σ R) = max (max #R #σ) ℵ₀
state_after: no goals
Theorem: ProjectiveSpectrum.zeroLocus_singleton_pow
File: Mathlib/AlgebraicGeometry/ProjectiveSpectrum/Topology.lean

tactic: simpa using x.isPrime.pow_mem_iff_mem n hn
state_before: R : Type u_1
A : Type u_2
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
f : A
n : ℕ
hn : 0 < n
x : ProjectiveSpectrum 𝒜
⊢ x ∈ zeroLocus 𝒜 {f ^ n} ↔ x ∈ zeroLocus 𝒜 {f}
state_after: no goals
Theorem: Nat.cast_natAbs
File: Mathlib/Algebra/Order/Ring/Int.lean

tactic: rw [← natCast_natAbs, Int.cast_natCast]
state_before: α : Type u_1
inst✝ : AddGroupWithOne α
n : ℤ
⊢ ↑n.natAbs = ↑|n|
state_after: no goals
Theorem: zpow_left_injective
File: Mathlib/Algebra/Order/Group/Basic.lean

tactic: obtain hn | hn := hn.lt_or_lt
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : LinearOrderedCommGroup α
n : ℤ
a b : α
hn : n ≠ 0
⊢ Injective fun x => x ^ n
state_after: case inl
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : LinearOrderedCommGroup α
n : ℤ
a b : α
hn✝ : n ≠ 0
hn : n < 0
⊢ Injective fun x => x ^ n

case inr
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : LinearOrderedCommGroup α
n : ℤ
a b : α
hn✝ : n ≠ 0
hn : 0 < n
⊢ Injective fun x => x ^ n

tactic: refine fun a b (hab : a ^ n = b ^ n) ↦
  (zpow_strictMono_left _ $ Int.neg_pos_of_neg hn).injective ?_
state_before: case inl
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : LinearOrderedCommGroup α
n : ℤ
a b : α
hn✝ : n ≠ 0
hn : n < 0
⊢ Injective fun x => x ^ n
state_after: case inl
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : LinearOrderedCommGroup α
n : ℤ
a✝ b✝ : α
hn✝ : n ≠ 0
hn : n < 0
a b : α
hab : a ^ n = b ^ n
⊢ a ^ (-n) = b ^ (-n)

tactic: rw [zpow_neg, zpow_neg, hab]
state_before: case inl
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : LinearOrderedCommGroup α
n : ℤ
a✝ b✝ : α
hn✝ : n ≠ 0
hn : n < 0
a b : α
hab : a ^ n = b ^ n
⊢ a ^ (-n) = b ^ (-n)
state_after: no goals

tactic: exact (zpow_strictMono_left _ hn).injective
state_before: case inr
α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : LinearOrderedCommGroup α
n : ℤ
a b : α
hn✝ : n ≠ 0
hn : 0 < n
⊢ Injective fun x => x ^ n
state_after: no goals
Theorem: CategoryTheory.Limits.hasCoequalizer_of_common_section
File: Mathlib/CategoryTheory/Limits/Shapes/Reflexive.lean

tactic: letI := IsReflexivePair.mk' r rf rg
state_before: C : Type u
inst✝² : Category.{v, u} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
A✝ B✝ : C
f✝ g✝ : A✝ ⟶ B✝
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝ : HasReflexiveCoequalizers C
A B : C
f g : A ⟶ B
r : B ⟶ A
rf : r ≫ f = 𝟙 B
rg : r ≫ g = 𝟙 B
⊢ HasCoequalizer f g
state_after: C : Type u
inst✝² : Category.{v, u} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
A✝ B✝ : C
f✝ g✝ : A✝ ⟶ B✝
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝ : HasReflexiveCoequalizers C
A B : C
f g : A ⟶ B
r : B ⟶ A
rf : r ≫ f = 𝟙 B
rg : r ≫ g = 𝟙 B
this : IsReflexivePair f g := IsReflexivePair.mk' r rf rg
⊢ HasCoequalizer f g

tactic: infer_instance
state_before: C : Type u
inst✝² : Category.{v, u} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
A✝ B✝ : C
f✝ g✝ : A✝ ⟶ B✝
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝ : HasReflexiveCoequalizers C
A B : C
f g : A ⟶ B
r : B ⟶ A
rf : r ≫ f = 𝟙 B
rg : r ≫ g = 𝟙 B
this : IsReflexivePair f g := IsReflexivePair.mk' r rf rg
⊢ HasCoequalizer f g
state_after: no goals
Theorem: CategoryTheory.Adjunction.natTransEquiv_comp
File: Mathlib/CategoryTheory/Adjunction/Unique.lean

tactic: apply (natTransEquiv adj1 adj3).symm.injective
state_before: C : Type u_1
D : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Category.{u_4, u_2} D
F F' F'' : C ⥤ D
G G' G'' : D ⥤ C
adj1 : F ⊣ G
adj2 : F' ⊣ G'
adj3 : F'' ⊣ G''
f : G ⟶ G'
g : G' ⟶ G''
⊢ (adj2.natTransEquiv adj3) g ≫ (adj1.natTransEquiv adj2) f = (adj1.natTransEquiv adj3) (f ≫ g)
state_after: case a
C : Type u_1
D : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Category.{u_4, u_2} D
F F' F'' : C ⥤ D
G G' G'' : D ⥤ C
adj1 : F ⊣ G
adj2 : F' ⊣ G'
adj3 : F'' ⊣ G''
f : G ⟶ G'
g : G' ⟶ G''
⊢ (adj1.natTransEquiv adj3).symm ((adj2.natTransEquiv adj3) g ≫ (adj1.natTransEquiv adj2) f) =
    (adj1.natTransEquiv adj3).symm ((adj1.natTransEquiv adj3) (f ≫ g))

tactic: ext X
state_before: case a
C : Type u_1
D : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Category.{u_4, u_2} D
F F' F'' : C ⥤ D
G G' G'' : D ⥤ C
adj1 : F ⊣ G
adj2 : F' ⊣ G'
adj3 : F'' ⊣ G''
f : G ⟶ G'
g : G' ⟶ G''
⊢ (adj1.natTransEquiv adj3).symm ((adj2.natTransEquiv adj3) g ≫ (adj1.natTransEquiv adj2) f) =
    (adj1.natTransEquiv adj3).symm ((adj1.natTransEquiv adj3) (f ≫ g))
state_after: case a.w.h
C : Type u_1
D : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Category.{u_4, u_2} D
F F' F'' : C ⥤ D
G G' G'' : D ⥤ C
adj1 : F ⊣ G
adj2 : F' ⊣ G'
adj3 : F'' ⊣ G''
f : G ⟶ G'
g : G' ⟶ G''
X : D
⊢ ((adj1.natTransEquiv adj3).symm ((adj2.natTransEquiv adj3) g ≫ (adj1.natTransEquiv adj2) f)).app X =
    ((adj1.natTransEquiv adj3).symm ((adj1.natTransEquiv adj3) (f ≫ g))).app X

tactic: simp only [natTransEquiv_symm_apply_app, Functor.comp_obj, NatTrans.comp_app,
  natTransEquiv_apply_app, Functor.id_obj, whiskerLeft_app, Functor.map_comp, Category.assoc,
  unit_naturality_assoc, right_triangle_components_assoc, Equiv.symm_apply_apply,
  ← g.naturality_assoc, ← g.naturality]
state_before: case a.w.h
C : Type u_1
D : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Category.{u_4, u_2} D
F F' F'' : C ⥤ D
G G' G'' : D ⥤ C
adj1 : F ⊣ G
adj2 : F' ⊣ G'
adj3 : F'' ⊣ G''
f : G ⟶ G'
g : G' ⟶ G''
X : D
⊢ ((adj1.natTransEquiv adj3).symm ((adj2.natTransEquiv adj3) g ≫ (adj1.natTransEquiv adj2) f)).app X =
    ((adj1.natTransEquiv adj3).symm ((adj1.natTransEquiv adj3) (f ≫ g))).app X
state_after: case a.w.h
C : Type u_1
D : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Category.{u_4, u_2} D
F F' F'' : C ⥤ D
G G' G'' : D ⥤ C
adj1 : F ⊣ G
adj2 : F' ⊣ G'
adj3 : F'' ⊣ G''
f : G ⟶ G'
g : G' ⟶ G''
X : D
⊢ adj1.unit.app (G.obj X) ≫ f.app (F.obj (G.obj X)) ≫ G'.map (adj1.counit.app X) ≫ g.app X = f.app X ≫ g.app X

tactic: simp only [← Category.assoc, unit_naturality, Functor.comp_obj, right_triangle_components,
  Category.comp_id, ← f.naturality, Category.id_comp]
state_before: case a.w.h
C : Type u_1
D : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Category.{u_4, u_2} D
F F' F'' : C ⥤ D
G G' G'' : D ⥤ C
adj1 : F ⊣ G
adj2 : F' ⊣ G'
adj3 : F'' ⊣ G''
f : G ⟶ G'
g : G' ⟶ G''
X : D
⊢ adj1.unit.app (G.obj X) ≫ f.app (F.obj (G.obj X)) ≫ G'.map (adj1.counit.app X) ≫ g.app X = f.app X ≫ g.app X
state_after: no goals
Theorem: AddLECancellable.tsub_eq_iff_eq_add_of_le
File: Mathlib/Algebra/Order/Sub/Canonical.lean

tactic: rw [eq_comm, hb.eq_tsub_iff_add_eq_of_le h, eq_comm]
state_before: α : Type u_1
inst✝⁵ : AddCommSemigroup α
inst✝⁴ : PartialOrder α
inst✝³ : ExistsAddOfLE α
inst✝² : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝¹ : Sub α
inst✝ : OrderedSub α
a b c d : α
hb : AddLECancellable b
h : b ≤ a
⊢ a - b = c ↔ a = c + b
state_after: no goals
Theorem: QuaternionAlgebra.star_mul_eq_coe
File: Mathlib/Algebra/Quaternion.lean

tactic: ext <;> simp <;> ring
state_before: S : Type u_1
T : Type u_2
R : Type u_3
inst✝ : CommRing R
c₁ c₂ r x y z : R
a b c : ℍ[R,c₁,c₂]
⊢ star a * a = ↑(star a * a).re
state_after: no goals
Theorem: AddLECancellable.add_tsub_assoc_of_le
File: Mathlib/Algebra/Order/Sub/Canonical.lean

tactic: conv_lhs => rw [← add_tsub_cancel_of_le h, add_comm c, ← add_assoc, hc.add_tsub_cancel_right]
state_before: α : Type u_1
inst✝⁵ : AddCommSemigroup α
inst✝⁴ : PartialOrder α
inst✝³ : ExistsAddOfLE α
inst✝² : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝¹ : Sub α
inst✝ : OrderedSub α
a✝ b c d : α
hc : AddLECancellable c
h : c ≤ b
a : α
⊢ a + b - c = a + (b - c)
state_after: no goals
Theorem: Vector.zipWith_get
File: Mathlib/Data/Vector/Zip.lean

tactic: dsimp only [Vector.zipWith, Vector.get]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
n : ℕ
f : α → β → γ
x : Vector α n
y : Vector β n
i : Fin n
⊢ (zipWith f x y).get i = f (x.get i) (y.get i)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
n : ℕ
f : α → β → γ
x : Vector α n
y : Vector β n
i : Fin n
⊢ (List.zipWith f ↑x ↑y).get (Fin.cast ⋯ i) = f ((↑x).get (Fin.cast ⋯ i)) ((↑y).get (Fin.cast ⋯ i))

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
n : ℕ
f : α → β → γ
x : Vector α n
y : Vector β n
i : Fin n
⊢ (List.zipWith f ↑x ↑y).get (Fin.cast ⋯ i) = f ((↑x).get (Fin.cast ⋯ i)) ((↑y).get (Fin.cast ⋯ i))
state_after: no goals
Theorem: LinearMap.range_prod_le
File: Mathlib/LinearAlgebra/Prod.lean

tactic: simp only [SetLike.le_def, prod_apply, mem_range, SetLike.mem_coe, mem_prod, exists_imp]
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
f : M →ₗ[R] M₂
g : M →ₗ[R] M₃
⊢ range (f.prod g) ≤ (range f).prod (range g)
state_after: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
f : M →ₗ[R] M₂
g : M →ₗ[R] M₃
⊢ ∀ ⦃x : M₂ × M₃⦄ (x_1 : M), Pi.prod (⇑f) (⇑g) x_1 = x → (∃ y, f y = x.1) ∧ ∃ y, g y = x.2

tactic: rintro _ x rfl
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
f : M →ₗ[R] M₂
g : M →ₗ[R] M₃
⊢ ∀ ⦃x : M₂ × M₃⦄ (x_1 : M), Pi.prod (⇑f) (⇑g) x_1 = x → (∃ y, f y = x.1) ∧ ∃ y, g y = x.2
state_after: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
f : M →ₗ[R] M₂
g : M →ₗ[R] M₃
x : M
⊢ (∃ y, f y = (Pi.prod (⇑f) (⇑g) x).1) ∧ ∃ y, g y = (Pi.prod (⇑f) (⇑g) x).2

tactic: exact ⟨⟨x, rfl⟩, ⟨x, rfl⟩⟩
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
f : M →ₗ[R] M₂
g : M →ₗ[R] M₃
x : M
⊢ (∃ y, f y = (Pi.prod (⇑f) (⇑g) x).1) ∧ ∃ y, g y = (Pi.prod (⇑f) (⇑g) x).2
state_after: no goals
Theorem: Multiset.card_disjSum
File: Mathlib/Data/Multiset/Sum.lean

tactic: rw [disjSum, card_add, card_map, card_map]
state_before: α : Type u_1
β : Type u_2
s : Multiset α
t : Multiset β
⊢ card (s.disjSum t) = card s + card t
state_after: no goals
Theorem: Polynomial.cyclotomic_two
File: Mathlib/RingTheory/Polynomial/Cyclotomic/Basic.lean

tactic: simp [cyclotomic_prime]
state_before: R : Type u_1
inst✝ : Ring R
⊢ cyclotomic 2 R = X + 1
state_after: no goals