1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Polynomial.natDegree_pow
File: Mathlib/Algebra/Polynomial/RingDivision.lean

tactic: obtain rfl | hp := eq_or_ne p 0
state_before: R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q p : R[X]
n : ℕ
⊢ (p ^ n).natDegree = n * p.natDegree
state_after: case inl
R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p q : R[X]
n : ℕ
⊢ (0 ^ n).natDegree = n * natDegree 0

case inr
R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q p : R[X]
n : ℕ
hp : p ≠ 0
⊢ (p ^ n).natDegree = n * p.natDegree

tactic: exact natDegree_pow' $ by
  rw [← leadingCoeff_pow, Ne, leadingCoeff_eq_zero]; exact pow_ne_zero _ hp
state_before: case inr
R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q p : R[X]
n : ℕ
hp : p ≠ 0
⊢ (p ^ n).natDegree = n * p.natDegree
state_after: no goals

tactic: obtain rfl | hn := eq_or_ne n 0 <;> simp [*]
state_before: case inl
R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p q : R[X]
n : ℕ
⊢ (0 ^ n).natDegree = n * natDegree 0
state_after: no goals

tactic: rw [← leadingCoeff_pow, Ne, leadingCoeff_eq_zero]
state_before: R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q p : R[X]
n : ℕ
hp : p ≠ 0
⊢ p.leadingCoeff ^ n ≠ 0
state_after: R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q p : R[X]
n : ℕ
hp : p ≠ 0
⊢ ¬p ^ n = 0

tactic: exact pow_ne_zero _ hp
state_before: R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q p : R[X]
n : ℕ
hp : p ≠ 0
⊢ ¬p ^ n = 0
state_after: no goals
Theorem: RootPairing.ne_zero
File: Mathlib/LinearAlgebra/RootSystem/Defs.lean

tactic: simpa [h] using P.root_coroot_two i
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup N
inst✝¹ : Module R N
P : RootPairing ι R M N
i j : ι
inst✝ : CharZero R
h : P.root i = 0
⊢ False
state_after: no goals
Theorem: PartENat.casesOn
File: Mathlib/Data/Nat/PartENat.lean

tactic: exact PartENat.casesOn'
state_before: P : PartENat → Prop
⊢ ∀ (a : PartENat), P ⊤ → (∀ (n : ℕ), P ↑n) → P a
state_after: no goals
Theorem: Real.one_le_exp
File: Mathlib/Data/Complex/Exponential.lean

tactic: linarith [add_one_le_exp_of_nonneg hx]
state_before: x✝ y x : ℝ
hx : 0 ≤ x
⊢ 1 ≤ rexp x
state_after: no goals
Theorem: AlgebraicTopology.DoldKan.PInfty_comp_QInfty
File: Mathlib/AlgebraicTopology/DoldKan/PInfty.lean

tactic: ext n
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
⊢ PInfty ≫ QInfty = 0
state_after: case h
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ (PInfty ≫ QInfty).f n = HomologicalComplex.Hom.f 0 n

tactic: apply PInfty_f_comp_QInfty_f
state_before: case h
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ (PInfty ≫ QInfty).f n = HomologicalComplex.Hom.f 0 n
state_after: no goals
Theorem: contMDiff_one
File: Mathlib/Geometry/Manifold/ContMDiff/Basic.lean

tactic: simp only [Pi.one_def, contMDiff_const]
state_before: 𝕜 : Type u_1
inst✝¹⁸ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_3
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝¹⁴ : TopologicalSpace M
inst✝¹³ : ChartedSpace H M
inst✝¹² : SmoothManifoldWithCorners I M
E' : Type u_5
inst✝¹¹ : NormedAddCommGroup E'
inst✝¹⁰ : NormedSpace 𝕜 E'
H' : Type u_6
inst✝⁹ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M' : Type u_7
inst✝⁸ : TopologicalSpace M'
inst✝⁷ : ChartedSpace H' M'
inst✝⁶ : SmoothManifoldWithCorners I' M'
E'' : Type u_8
inst✝⁵ : NormedAddCommGroup E''
inst✝⁴ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝³ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝² : TopologicalSpace M''
inst✝¹ : ChartedSpace H'' M''
e : PartialHomeomorph M H
e' : PartialHomeomorph M' H'
f f₁ : M → M'
s s₁ t : Set M
x : M
m n : ℕ∞
c : M'
inst✝ : One M'
⊢ ContMDiff I I' n 1
state_after: no goals
Theorem: CategoryTheory.Subgroupoid.hom.inj_on_objects
File: Mathlib/CategoryTheory/Groupoid/Subgroupoid.lean

tactic: rintro ⟨c, hc⟩ ⟨d, hd⟩ hcd
state_before: C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
⊢ Function.Injective S.hom.obj
state_after: case mk.mk
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c : C
hc : c ∈ S.objs
d : C
hd : d ∈ S.objs
hcd : S.hom.obj ⟨c, hc⟩ = S.hom.obj ⟨d, hd⟩
⊢ ⟨c, hc⟩ = ⟨d, hd⟩

tactic: simp only [Subtype.mk_eq_mk]
state_before: case mk.mk
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c : C
hc : c ∈ S.objs
d : C
hd : d ∈ S.objs
hcd : S.hom.obj ⟨c, hc⟩ = S.hom.obj ⟨d, hd⟩
⊢ ⟨c, hc⟩ = ⟨d, hd⟩
state_after: case mk.mk
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c : C
hc : c ∈ S.objs
d : C
hd : d ∈ S.objs
hcd : S.hom.obj ⟨c, hc⟩ = S.hom.obj ⟨d, hd⟩
⊢ c = d

tactic: exact hcd
state_before: case mk.mk
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c : C
hc : c ∈ S.objs
d : C
hd : d ∈ S.objs
hcd : S.hom.obj ⟨c, hc⟩ = S.hom.obj ⟨d, hd⟩
⊢ c = d
state_after: no goals
Theorem: CategoryTheory.ShortComplex.rightHomologyι_comp_fromOpcycles
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

tactic: rw [comp_id]
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.RightHomologyData
A : C
k : S.X₂ ⟶ A
hk : S.f ≫ k = 0
inst✝ : S.HasRightHomology
⊢ S.g = S.g ≫ 𝟙 S.X₃
state_after: no goals
Theorem: sub_smul_dslope
File: Mathlib/Analysis/Calculus/Dslope.lean

tactic: rcases eq_or_ne b a with (rfl | hne) <;> simp [dslope_of_ne, *]
state_before: 𝕜 : Type u_1
E : Type u_2
inst✝² : NontriviallyNormedField 𝕜
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f✝ : 𝕜 → E
a✝ b✝ : 𝕜
s : Set 𝕜
f : 𝕜 → E
a b : 𝕜
⊢ (b - a) • dslope f a b = f b - f a
state_after: no goals
Theorem: Int.modEq_add_fac
File: Mathlib/Data/Int/ModEq.lean

tactic: rw [add_zero]
state_before: m n✝ a✝ b✝ c✝ d a b n c : ℤ
ha : a ≡ b [ZMOD n]
⊢ b + 0 ≡ b [ZMOD n]
state_after: no goals
Theorem: RingHom.IsIntegralElem.of_mem_closure
File: Mathlib/RingTheory/IntegralClosure.lean

tactic: letI : Algebra R S := f.toAlgebra
state_before: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x y z : S
hx : f.IsIntegralElem x
hy : f.IsIntegralElem y
hz : z ∈ Subring.closure {x, y}
⊢ f.IsIntegralElem z
state_after: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x y z : S
hx : f.IsIntegralElem x
hy : f.IsIntegralElem y
hz : z ∈ Subring.closure {x, y}
this : Algebra R S := f.toAlgebra
⊢ f.IsIntegralElem z

tactic: have := (IsIntegral.fg_adjoin_singleton hx).mul (IsIntegral.fg_adjoin_singleton hy)
state_before: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x y z : S
hx : f.IsIntegralElem x
hy : f.IsIntegralElem y
hz : z ∈ Subring.closure {x, y}
this : Algebra R S := f.toAlgebra
⊢ f.IsIntegralElem z
state_after: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x y z : S
hx : f.IsIntegralElem x
hy : f.IsIntegralElem y
hz : z ∈ Subring.closure {x, y}
this✝ : Algebra R S := f.toAlgebra
this : (Subalgebra.toSubmodule (Algebra.adjoin R {x}) * Subalgebra.toSubmodule (Algebra.adjoin R {y})).FG
⊢ f.IsIntegralElem z

tactic: rw [← Algebra.adjoin_union_coe_submodule, Set.singleton_union] at this
state_before: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x y z : S
hx : f.IsIntegralElem x
hy : f.IsIntegralElem y
hz : z ∈ Subring.closure {x, y}
this✝ : Algebra R S := f.toAlgebra
this : (Subalgebra.toSubmodule (Algebra.adjoin R {x}) * Subalgebra.toSubmodule (Algebra.adjoin R {y})).FG
⊢ f.IsIntegralElem z
state_after: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x y z : S
hx : f.IsIntegralElem x
hy : f.IsIntegralElem y
hz : z ∈ Subring.closure {x, y}
this✝ : Algebra R S := f.toAlgebra
this : (Subalgebra.toSubmodule (Algebra.adjoin R {x, y})).FG
⊢ f.IsIntegralElem z

tactic: exact
  IsIntegral.of_mem_of_fg (Algebra.adjoin R {x, y}) this z
    (Algebra.mem_adjoin_iff.2 <| Subring.closure_mono Set.subset_union_right hz)
state_before: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f : R →+* S
x y z : S
hx : f.IsIntegralElem x
hy : f.IsIntegralElem y
hz : z ∈ Subring.closure {x, y}
this✝ : Algebra R S := f.toAlgebra
this : (Subalgebra.toSubmodule (Algebra.adjoin R {x, y})).FG
⊢ f.IsIntegralElem z
state_after: no goals
Theorem: MonoidHom.tendsto_coe_cofinite_of_discrete
File: Mathlib/Topology/Algebra/UniformGroup.lean

tactic: replace hf : Function.Injective f.rangeRestrict := by simpa
state_before: G : Type u_1
inst✝⁴ : Group G
inst✝³ : TopologicalSpace G
inst✝² : TopologicalGroup G
inst✝¹ : T2Space G
H : Type u_2
inst✝ : Group H
f : H →* G
hf : Function.Injective ⇑f
hf' : DiscreteTopology ↥f.range
⊢ Tendsto (⇑f) cofinite (cocompact G)
state_after: G : Type u_1
inst✝⁴ : Group G
inst✝³ : TopologicalSpace G
inst✝² : TopologicalGroup G
inst✝¹ : T2Space G
H : Type u_2
inst✝ : Group H
f : H →* G
hf' : DiscreteTopology ↥f.range
hf : Function.Injective ⇑f.rangeRestrict
⊢ Tendsto (⇑f) cofinite (cocompact G)

tactic: exact f.range.tendsto_coe_cofinite_of_discrete.comp hf.tendsto_cofinite
state_before: G : Type u_1
inst✝⁴ : Group G
inst✝³ : TopologicalSpace G
inst✝² : TopologicalGroup G
inst✝¹ : T2Space G
H : Type u_2
inst✝ : Group H
f : H →* G
hf' : DiscreteTopology ↥f.range
hf : Function.Injective ⇑f.rangeRestrict
⊢ Tendsto (⇑f) cofinite (cocompact G)
state_after: no goals

tactic: simpa
state_before: G : Type u_1
inst✝⁴ : Group G
inst✝³ : TopologicalSpace G
inst✝² : TopologicalGroup G
inst✝¹ : T2Space G
H : Type u_2
inst✝ : Group H
f : H →* G
hf : Function.Injective ⇑f
hf' : DiscreteTopology ↥f.range
⊢ Function.Injective ⇑f.rangeRestrict
state_after: no goals
Theorem: Metric.comap_dist_right_atTop
File: Mathlib/Topology/MetricSpace/Bounded.lean

tactic: simpa only [compl_def, mem_ball, not_lt] using hasBasis_cobounded_compl_ball c
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x : α
s t : Set α
r : ℝ
c : α
⊢ (cobounded α).HasBasis (fun x => True) fun i => (fun x => dist x c) ⁻¹' Ici i
state_after: no goals
Theorem: Set.Finite.encard_eq_coe_toFinset_card
File: Mathlib/Data/Set/Card.lean

tactic: have := h.fintype
state_before: α : Type u_1
β : Type u_2
s t : Set α
h : s.Finite
⊢ s.encard = ↑h.toFinset.card
state_after: α : Type u_1
β : Type u_2
s t : Set α
h : s.Finite
this : Fintype ↑s
⊢ s.encard = ↑h.toFinset.card

tactic: rw [encard, PartENat.card_eq_coe_fintype_card,
  PartENat.withTopEquiv_natCast, toFinite_toFinset, toFinset_card]
state_before: α : Type u_1
β : Type u_2
s t : Set α
h : s.Finite
this : Fintype ↑s
⊢ s.encard = ↑h.toFinset.card
state_after: no goals
Theorem: Real.sin_pi_div_eight
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: trans sin (π / 2 ^ 3)
state_before: x : ℝ
⊢ sin (π / 8) = √(2 - √2) / 2
state_after: x : ℝ
⊢ sin (π / 8) = sin (π / 2 ^ 3)

x : ℝ
⊢ sin (π / 2 ^ 3) = √(2 - √2) / 2

tactic: congr
state_before: x : ℝ
⊢ sin (π / 8) = sin (π / 2 ^ 3)
state_after: case e_x.e_a
x : ℝ
⊢ 8 = 2 ^ 3

tactic: norm_num
state_before: case e_x.e_a
x : ℝ
⊢ 8 = 2 ^ 3
state_after: no goals

tactic: simp
state_before: x : ℝ
⊢ sin (π / 2 ^ 3) = √(2 - √2) / 2
state_after: no goals
Theorem: Real.sqrt_pos
File: Mathlib/Data/Real/Sqrt.lean

tactic: simp [le_antisymm_iff, sqrt_nonneg]
state_before: x y : ℝ
⊢ √x ≤ 0 ↔ √x = 0
state_after: no goals
Theorem: Nat.not_exists_sq'
File: Mathlib/Data/Nat/Defs.lean

tactic: simpa only [Nat.pow_two] using not_exists_sq
state_before: a b c d m n k : ℕ
p q : ℕ → Prop
⊢ m ^ 2 < n → n < (m + 1) ^ 2 → ¬∃ t, t ^ 2 = n
state_after: no goals
Theorem: padicValRat.inv
File: Mathlib/NumberTheory/Padics/PadicVal.lean

tactic: by_cases hq : q = 0
state_before: p : ℕ
hp : Fact (Nat.Prime p)
q : ℚ
⊢ padicValRat p q⁻¹ = -padicValRat p q
state_after: case pos
p : ℕ
hp : Fact (Nat.Prime p)
q : ℚ
hq : q = 0
⊢ padicValRat p q⁻¹ = -padicValRat p q

case neg
p : ℕ
hp : Fact (Nat.Prime p)
q : ℚ
hq : ¬q = 0
⊢ padicValRat p q⁻¹ = -padicValRat p q

tactic: simp [hq]
state_before: case pos
p : ℕ
hp : Fact (Nat.Prime p)
q : ℚ
hq : q = 0
⊢ padicValRat p q⁻¹ = -padicValRat p q
state_after: no goals

tactic: rw [eq_neg_iff_add_eq_zero, ← padicValRat.mul (inv_ne_zero hq) hq, inv_mul_cancel hq,
  padicValRat.one]
state_before: case neg
p : ℕ
hp : Fact (Nat.Prime p)
q : ℚ
hq : ¬q = 0
⊢ padicValRat p q⁻¹ = -padicValRat p q
state_after: no goals
Theorem: differentialIdeal_le_iff
File: Mathlib/RingTheory/DedekindDomain/Different.lean

tactic: simpa
state_before: A : Type u_1
K : Type u_2
L : Type u
B : Type u_3
inst✝²⁰ : CommRing A
inst✝¹⁹ : Field K
inst✝¹⁸ : CommRing B
inst✝¹⁷ : Field L
inst✝¹⁶ : Algebra A K
inst✝¹⁵ : Algebra B L
inst✝¹⁴ : Algebra A B
inst✝¹³ : Algebra K L
inst✝¹² : Algebra A L
inst✝¹¹ : IsScalarTower A K L
inst✝¹⁰ : IsScalarTower A B L
inst✝⁹ : IsDomain A
inst✝⁸ : IsDomain B
inst✝⁷ : IsFractionRing A K
inst✝⁶ : IsIntegralClosure B A L
inst✝⁵ : IsFractionRing B L
inst✝⁴ : FiniteDimensional K L
inst✝³ : IsSeparable K L
inst✝² : IsIntegrallyClosed A
inst✝¹ : IsDedekindDomain B
I : Ideal B
hI : I ≠ ⊥
inst✝ : NoZeroSMulDivisors A B
⊢ ↑I ≠ 0
state_after: no goals
Theorem: CategoryTheory.μ_inv_naturalityᵣ
File: Mathlib/CategoryTheory/Monoidal/End.lean

tactic: rw [← IsIso.comp_inv_eq, Category.assoc, ← IsIso.eq_inv_comp]
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n n' : M
g : n ⟶ n'
X : C
⊢ (F.μIso m n).inv.app X ≫ (F.map g).app ((F.obj m).obj X) = (F.map (m ◁ g)).app X ≫ (F.μIso m n').inv.app X
state_after: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n n' : M
g : n ⟶ n'
X : C
⊢ (F.map g).app ((F.obj m).obj X) ≫ inv ((F.μIso m n').inv.app X) = inv ((F.μIso m n).inv.app X) ≫ (F.map (m ◁ g)).app X

tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n n' : M
g : n ⟶ n'
X : C
⊢ (F.map g).app ((F.obj m).obj X) ≫ inv ((F.μIso m n').inv.app X) = inv ((F.μIso m n).inv.app X) ≫ (F.map (m ◁ g)).app X
state_after: no goals
Theorem: HomologicalComplex.XIsoOfEq_hom_comp_XIsoOfEq_hom
File: Mathlib/Algebra/Homology/HomologicalComplex.lean

tactic: dsimp [XIsoOfEq]
state_before: ι : Type u_1
V : Type u
inst✝¹ : Category.{v, u} V
inst✝ : HasZeroMorphisms V
c : ComplexShape ι
K : HomologicalComplex V c
p₁ p₂ p₃ : ι
h₁₂ : p₁ = p₂
h₂₃ : p₂ = p₃
⊢ (K.XIsoOfEq h₁₂).hom ≫ (K.XIsoOfEq h₂₃).hom = (K.XIsoOfEq ⋯).hom
state_after: ι : Type u_1
V : Type u
inst✝¹ : Category.{v, u} V
inst✝ : HasZeroMorphisms V
c : ComplexShape ι
K : HomologicalComplex V c
p₁ p₂ p₃ : ι
h₁₂ : p₁ = p₂
h₂₃ : p₂ = p₃
⊢ eqToHom ⋯ ≫ eqToHom ⋯ = eqToHom ⋯

tactic: simp only [eqToHom_trans]
state_before: ι : Type u_1
V : Type u
inst✝¹ : Category.{v, u} V
inst✝ : HasZeroMorphisms V
c : ComplexShape ι
K : HomologicalComplex V c
p₁ p₂ p₃ : ι
h₁₂ : p₁ = p₂
h₂₃ : p₂ = p₃
⊢ eqToHom ⋯ ≫ eqToHom ⋯ = eqToHom ⋯
state_after: no goals
Theorem: Real.tan_pos_of_pos_of_lt_pi_div_two
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: rw [tan_eq_sin_div_cos]
state_before: x : ℝ
h0x : 0 < x
hxp : x < π / 2
⊢ 0 < tan x
state_after: x : ℝ
h0x : 0 < x
hxp : x < π / 2
⊢ 0 < sin x / cos x

tactic: exact div_pos (sin_pos_of_pos_of_lt_pi h0x (by linarith)) (cos_pos_of_mem_Ioo ⟨by linarith, hxp⟩)
state_before: x : ℝ
h0x : 0 < x
hxp : x < π / 2
⊢ 0 < sin x / cos x
state_after: no goals

tactic: linarith
state_before: x : ℝ
h0x : 0 < x
hxp : x < π / 2
⊢ x < π
state_after: no goals

tactic: linarith
state_before: x : ℝ
h0x : 0 < x
hxp : x < π / 2
⊢ -(π / 2) < x
state_after: no goals
Theorem: SimpleGraph.Subgraph.neighborSet_sSup
File: Mathlib/Combinatorics/SimpleGraph/Subgraph.lean

tactic: ext
state_before: ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G₁ G₂ : G.Subgraph
a b : V
s : Set G.Subgraph
v : V
⊢ (sSup s).neighborSet v = ⋃ G' ∈ s, G'.neighborSet v
state_after: case h
ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G₁ G₂ : G.Subgraph
a b : V
s : Set G.Subgraph
v x✝ : V
⊢ x✝ ∈ (sSup s).neighborSet v ↔ x✝ ∈ ⋃ G' ∈ s, G'.neighborSet v

tactic: simp
state_before: case h
ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G₁ G₂ : G.Subgraph
a b : V
s : Set G.Subgraph
v x✝ : V
⊢ x✝ ∈ (sSup s).neighborSet v ↔ x✝ ∈ ⋃ G' ∈ s, G'.neighborSet v
state_after: no goals
Theorem: List.chain'_reverse
File: Mathlib/Data/List/Chain.lean

tactic: simp only [chain'_singleton, reverse_singleton]
state_before: α : Type u
β : Type v
R r : α → α → Prop
l l₁ l₂ : List α
a✝ b a : α
⊢ Chain' R [a].reverse ↔ Chain' (flip R) [a]
state_after: no goals

tactic: rw [chain'_cons, reverse_cons, reverse_cons, append_assoc, cons_append, nil_append,
  chain'_split, ← reverse_cons, @chain'_reverse (b :: l), and_comm, chain'_pair, flip]
state_before: α : Type u
β : Type v
R r : α → α → Prop
l✝ l₁ l₂ : List α
a✝ b✝ a b : α
l : List α
⊢ Chain' R (a :: b :: l).reverse ↔ Chain' (flip R) (a :: b :: l)
state_after: no goals
Theorem: Matrix.det_permute'
File: Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean

tactic: rw [← det_transpose, transpose_submatrix, det_permute, det_transpose]
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
σ : Perm n
M : Matrix n n R
⊢ (M.submatrix id ⇑σ).det = ↑↑(sign σ) * M.det
state_after: no goals
Theorem: List.map_coe_finRange
File: Mathlib/Data/List/FinRange.lean

tactic: simp_rw [finRange, map_pmap, pmap_eq_map]
state_before: α : Type u
n : ℕ
⊢ map Fin.val (finRange n) = range n
state_after: α : Type u
n : ℕ
⊢ map (fun a => a) (range n) = range n

tactic: exact List.map_id _
state_before: α : Type u
n : ℕ
⊢ map (fun a => a) (range n) = range n
state_after: no goals
Theorem: LieSubmodule.baseChange_top
File: Mathlib/Algebra/Lie/BaseChange.lean

tactic: simp only [baseChange, top_coeSubmodule, Submodule.baseChange_top,
  Submodule.bot_toAddSubmonoid]
state_before: R : Type u_1
A : Type u_2
L : Type u_3
M : Type u_4
inst✝⁸ : CommRing R
inst✝⁷ : LieRing L
inst✝⁶ : LieAlgebra R L
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : LieRingModule L M
inst✝² : LieModule R L M
inst✝¹ : CommRing A
inst✝ : Algebra R A
N : LieSubmodule R L M
⊢ baseChange A ⊤ = ⊤
state_after: R : Type u_1
A : Type u_2
L : Type u_3
M : Type u_4
inst✝⁸ : CommRing R
inst✝⁷ : LieRing L
inst✝⁶ : LieAlgebra R L
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : LieRingModule L M
inst✝² : LieModule R L M
inst✝¹ : CommRing A
inst✝ : Algebra R A
N : LieSubmodule R L M
⊢ { toSubmodule := ⊤, lie_mem := ⋯ } = ⊤

tactic: rfl
state_before: R : Type u_1
A : Type u_2
L : Type u_3
M : Type u_4
inst✝⁸ : CommRing R
inst✝⁷ : LieRing L
inst✝⁶ : LieAlgebra R L
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : LieRingModule L M
inst✝² : LieModule R L M
inst✝¹ : CommRing A
inst✝ : Algebra R A
N : LieSubmodule R L M
⊢ { toSubmodule := ⊤, lie_mem := ⋯ } = ⊤
state_after: no goals
Theorem: Sum.getLeft?_eq_none_iff
File: .lake/packages/batteries/Batteries/Data/Sum/Lemmas.lean

tactic: cases x <;> simp only [getLeft?, isRight, eq_self_iff_true]
state_before: α : Type u_1
β : Type u_2
x : α ⊕ β
⊢ x.getLeft? = none ↔ x.isRight = true
state_after: no goals
Theorem: Polynomial.coeff_multiset_prod_of_natDegree_le
File: Mathlib/Algebra/Polynomial/BigOperators.lean

tactic: induction t using Quotient.inductionOn
state_before: R : Type u
ι : Type w
s : Finset ι
inst✝ : CommSemiring R
f : ι → R[X]
t : Multiset R[X]
n : ℕ
hl : ∀ p ∈ t, p.natDegree ≤ n
⊢ t.prod.coeff (Multiset.card t * n) = (Multiset.map (fun p => p.coeff n) t).prod
state_after: case h
R : Type u
ι : Type w
s : Finset ι
inst✝ : CommSemiring R
f : ι → R[X]
t : Multiset R[X]
n : ℕ
a✝ : List R[X]
hl : ∀ p ∈ ⟦a✝⟧, p.natDegree ≤ n
⊢ (prod ⟦a✝⟧).coeff (Multiset.card ⟦a✝⟧ * n) = (Multiset.map (fun p => p.coeff n) ⟦a✝⟧).prod

tactic: simpa using coeff_list_prod_of_natDegree_le _ _ hl
state_before: case h
R : Type u
ι : Type w
s : Finset ι
inst✝ : CommSemiring R
f : ι → R[X]
t : Multiset R[X]
n : ℕ
a✝ : List R[X]
hl : ∀ p ∈ ⟦a✝⟧, p.natDegree ≤ n
⊢ (prod ⟦a✝⟧).coeff (Multiset.card ⟦a✝⟧ * n) = (Multiset.map (fun p => p.coeff n) ⟦a✝⟧).prod
state_after: no goals
Theorem: Array.size_zipWith
File: .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean

tactic: rw [size_eq_length_data, zipWith_eq_zipWith_data, List.length_zipWith]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
as : Array α
bs : Array β
f : α → β → γ
⊢ (as.zipWith bs f).size = min as.size bs.size
state_after: no goals
Theorem: IsRingHom.id
File: Mathlib/Deprecated/Ring.lean

tactic: constructor <;> intros <;> rfl
state_before: α : Type u
β : Type v
inst✝¹ : Ring α
inst✝ : Ring β
f : α → β
hf : IsRingHom f
x y : α
⊢ IsRingHom _root_.id
state_after: no goals
Theorem: Basis.eval_range
File: Mathlib/LinearAlgebra/Dual.lean

tactic: classical
  cases nonempty_fintype ι
  rw [← b.toDual_toDual, range_comp, b.toDual_range, Submodule.map_top, toDual_range _]
state_before: R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι✝ : Type uι
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : DecidableEq ι✝
b✝ : Basis ι✝ R M
ι : Type u_1
inst✝ : _root_.Finite ι
b : Basis ι R M
⊢ range (Dual.eval R M) = ⊤
state_after: no goals

tactic: cases nonempty_fintype ι
state_before: R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι✝ : Type uι
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : DecidableEq ι✝
b✝ : Basis ι✝ R M
ι : Type u_1
inst✝ : _root_.Finite ι
b : Basis ι R M
⊢ range (Dual.eval R M) = ⊤
state_after: case intro
R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι✝ : Type uι
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : DecidableEq ι✝
b✝ : Basis ι✝ R M
ι : Type u_1
inst✝ : _root_.Finite ι
b : Basis ι R M
val✝ : Fintype ι
⊢ range (Dual.eval R M) = ⊤

tactic: rw [← b.toDual_toDual, range_comp, b.toDual_range, Submodule.map_top, toDual_range _]
state_before: case intro
R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι✝ : Type uι
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : DecidableEq ι✝
b✝ : Basis ι✝ R M
ι : Type u_1
inst✝ : _root_.Finite ι
b : Basis ι R M
val✝ : Fintype ι
⊢ range (Dual.eval R M) = ⊤
state_after: no goals
Theorem: compl_sup_eq_top
File: Mathlib/Order/BooleanAlgebra.lean

tactic: rw [sup_comm, sup_compl_eq_top]
state_before: α : Type u
β : Type u_1
w x y z : α
inst✝ : BooleanAlgebra α
⊢ xᶜ ⊔ x = ⊤
state_after: no goals
Theorem: dist_div_right
File: Mathlib/Topology/MetricSpace/IsometricSMul.lean

tactic: simp only [div_eq_mul_inv, dist_mul_right]
state_before: M : Type u
G : Type v
X : Type w
inst✝² : DivInvMonoid M
inst✝¹ : PseudoMetricSpace M
inst✝ : IsometricSMul Mᵐᵒᵖ M
a b c : M
⊢ dist (a / c) (b / c) = dist a b
state_after: no goals