1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: summable_sum_mul_antidiagonal_of_summable_mul
File: Mathlib/Topology/Algebra/InfiniteSum/Ring.lean

tactic: rw [summable_mul_prod_iff_summable_mul_sigma_antidiagonal] at h
state_before: ι : Type u_1
κ : Type u_2
R : Type u_3
α : Type u_4
A : Type u_5
inst✝⁵ : AddCommMonoid A
inst✝⁴ : HasAntidiagonal A
inst✝³ : TopologicalSpace α
inst✝² : NonUnitalNonAssocSemiring α
f g : A → α
inst✝¹ : T3Space α
inst✝ : TopologicalSemiring α
h : Summable fun x => f x.1 * g x.2
⊢ Summable fun n => ∑ kl ∈ antidiagonal n, f kl.1 * g kl.2
state_after: ι : Type u_1
κ : Type u_2
R : Type u_3
α : Type u_4
A : Type u_5
inst✝⁵ : AddCommMonoid A
inst✝⁴ : HasAntidiagonal A
inst✝³ : TopologicalSpace α
inst✝² : NonUnitalNonAssocSemiring α
f g : A → α
inst✝¹ : T3Space α
inst✝ : TopologicalSemiring α
h : Summable fun x => f (↑x.snd).1 * g (↑x.snd).2
⊢ Summable fun n => ∑ kl ∈ antidiagonal n, f kl.1 * g kl.2

tactic: conv => congr; ext; rw [← Finset.sum_finset_coe, ← tsum_fintype]
state_before: ι : Type u_1
κ : Type u_2
R : Type u_3
α : Type u_4
A : Type u_5
inst✝⁵ : AddCommMonoid A
inst✝⁴ : HasAntidiagonal A
inst✝³ : TopologicalSpace α
inst✝² : NonUnitalNonAssocSemiring α
f g : A → α
inst✝¹ : T3Space α
inst✝ : TopologicalSemiring α
h : Summable fun x => f (↑x.snd).1 * g (↑x.snd).2
⊢ Summable fun n => ∑ kl ∈ antidiagonal n, f kl.1 * g kl.2
state_after: ι : Type u_1
κ : Type u_2
R : Type u_3
α : Type u_4
A : Type u_5
inst✝⁵ : AddCommMonoid A
inst✝⁴ : HasAntidiagonal A
inst✝³ : TopologicalSpace α
inst✝² : NonUnitalNonAssocSemiring α
f g : A → α
inst✝¹ : T3Space α
inst✝ : TopologicalSemiring α
h : Summable fun x => f (↑x.snd).1 * g (↑x.snd).2
⊢ Summable fun x => ∑' (b : ↑↑(antidiagonal x)), f (↑b).1 * g (↑b).2

tactic: exact h.sigma' fun n ↦ (hasSum_fintype _).summable
state_before: ι : Type u_1
κ : Type u_2
R : Type u_3
α : Type u_4
A : Type u_5
inst✝⁵ : AddCommMonoid A
inst✝⁴ : HasAntidiagonal A
inst✝³ : TopologicalSpace α
inst✝² : NonUnitalNonAssocSemiring α
f g : A → α
inst✝¹ : T3Space α
inst✝ : TopologicalSemiring α
h : Summable fun x => f (↑x.snd).1 * g (↑x.snd).2
⊢ Summable fun x => ∑' (b : ↑↑(antidiagonal x)), f (↑b).1 * g (↑b).2
state_after: no goals
Theorem: LieDerivation.injective_ad_of_center_eq_bot
File: Mathlib/Algebra/Lie/Derivation/AdjointAction.lean

tactic: rw [← LieHom.ker_eq_bot, ad_ker_eq_center, h]
state_before: R : Type u_1
L : Type u_2
inst✝² : CommRing R
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
h : LieAlgebra.center R L = ⊥
⊢ Function.Injective ⇑(ad R L)
state_after: no goals
Theorem: Subgroup.comap_normalClosure
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

tactic: have := Set.preimage_equiv_eq_image_symm s f.toEquiv
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
s : Set N
f : G ≃* N
⊢ normalClosure (⇑f ⁻¹' s) = comap (↑f) (normalClosure s)
state_after: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
s : Set N
f : G ≃* N
this : ⇑f.toEquiv ⁻¹' s = ⇑f.symm '' s
⊢ normalClosure (⇑f ⁻¹' s) = comap (↑f) (normalClosure s)

tactic: simp_all [comap_equiv_eq_map_symm, map_normalClosure s f.symm f.symm.surjective]
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
s : Set N
f : G ≃* N
this : ⇑f.toEquiv ⁻¹' s = ⇑f.symm '' s
⊢ normalClosure (⇑f ⁻¹' s) = comap (↑f) (normalClosure s)
state_after: no goals
Theorem: NormedAddGroupHom.comp_zero
File: Mathlib/Analysis/Normed/Group/Hom.lean

tactic: ext
state_before: V : Type u_1
V₁ : Type u_2
V₂ : Type u_3
V₃ : Type u_4
inst✝³ : SeminormedAddCommGroup V
inst✝² : SeminormedAddCommGroup V₁
inst✝¹ : SeminormedAddCommGroup V₂
inst✝ : SeminormedAddCommGroup V₃
f✝ g : NormedAddGroupHom V₁ V₂
f : NormedAddGroupHom V₂ V₃
⊢ f.comp 0 = 0
state_after: case H
V : Type u_1
V₁ : Type u_2
V₂ : Type u_3
V₃ : Type u_4
inst✝³ : SeminormedAddCommGroup V
inst✝² : SeminormedAddCommGroup V₁
inst✝¹ : SeminormedAddCommGroup V₂
inst✝ : SeminormedAddCommGroup V₃
f✝ g : NormedAddGroupHom V₁ V₂
f : NormedAddGroupHom V₂ V₃
x✝ : V₁
⊢ (f.comp 0) x✝ = 0 x✝

tactic: exact map_zero f
state_before: case H
V : Type u_1
V₁ : Type u_2
V₂ : Type u_3
V₃ : Type u_4
inst✝³ : SeminormedAddCommGroup V
inst✝² : SeminormedAddCommGroup V₁
inst✝¹ : SeminormedAddCommGroup V₂
inst✝ : SeminormedAddCommGroup V₃
f✝ g : NormedAddGroupHom V₁ V₂
f : NormedAddGroupHom V₂ V₃
x✝ : V₁
⊢ (f.comp 0) x✝ = 0 x✝
state_after: no goals
Theorem: Algebra.FiniteType.mvPolynomial
File: Mathlib/RingTheory/FiniteType.lean

tactic: cases nonempty_fintype ι
state_before: R : Type uR
S : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring S
inst✝⁹ : Semiring A
inst✝⁸ : Semiring B
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra R B
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_1
inst✝ : Finite ι
⊢ FiniteType R (MvPolynomial ι R)
state_after: case intro
R : Type uR
S : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring S
inst✝⁹ : Semiring A
inst✝⁸ : Semiring B
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra R B
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_1
inst✝ : Finite ι
val✝ : Fintype ι
⊢ FiniteType R (MvPolynomial ι R)

tactic: exact
  ⟨⟨Finset.univ.image MvPolynomial.X, by
      rw [Finset.coe_image, Finset.coe_univ, Set.image_univ]
      exact MvPolynomial.adjoin_range_X⟩⟩
state_before: case intro
R : Type uR
S : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring S
inst✝⁹ : Semiring A
inst✝⁸ : Semiring B
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra R B
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_1
inst✝ : Finite ι
val✝ : Fintype ι
⊢ FiniteType R (MvPolynomial ι R)
state_after: no goals

tactic: rw [Finset.coe_image, Finset.coe_univ, Set.image_univ]
state_before: R : Type uR
S : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring S
inst✝⁹ : Semiring A
inst✝⁸ : Semiring B
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra R B
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_1
inst✝ : Finite ι
val✝ : Fintype ι
⊢ adjoin R ↑(Finset.image MvPolynomial.X Finset.univ) = ⊤
state_after: R : Type uR
S : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring S
inst✝⁹ : Semiring A
inst✝⁸ : Semiring B
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra R B
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_1
inst✝ : Finite ι
val✝ : Fintype ι
⊢ adjoin R (Set.range MvPolynomial.X) = ⊤

tactic: exact MvPolynomial.adjoin_range_X
state_before: R : Type uR
S : Type uS
A : Type uA
B : Type uB
M : Type uM
N : Type uN
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : CommSemiring S
inst✝⁹ : Semiring A
inst✝⁸ : Semiring B
inst✝⁷ : Algebra R S
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra R B
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_1
inst✝ : Finite ι
val✝ : Fintype ι
⊢ adjoin R (Set.range MvPolynomial.X) = ⊤
state_after: no goals
Theorem: Real.Angle.cos_nonneg_iff_abs_toReal_le_pi_div_two
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: nth_rw 1 [← coe_toReal θ]
state_before: θ : Angle
⊢ 0 ≤ θ.cos ↔ |θ.toReal| ≤ π / 2
state_after: θ : Angle
⊢ 0 ≤ (↑θ.toReal).cos ↔ |θ.toReal| ≤ π / 2

tactic: rw [abs_le, cos_coe]
state_before: θ : Angle
⊢ 0 ≤ (↑θ.toReal).cos ↔ |θ.toReal| ≤ π / 2
state_after: θ : Angle
⊢ 0 ≤ Real.cos θ.toReal ↔ -(π / 2) ≤ θ.toReal ∧ θ.toReal ≤ π / 2

tactic: refine ⟨fun h => ?_, cos_nonneg_of_mem_Icc⟩
state_before: θ : Angle
⊢ 0 ≤ Real.cos θ.toReal ↔ -(π / 2) ≤ θ.toReal ∧ θ.toReal ≤ π / 2
state_after: θ : Angle
h : 0 ≤ Real.cos θ.toReal
⊢ -(π / 2) ≤ θ.toReal ∧ θ.toReal ≤ π / 2

tactic: by_contra hn
state_before: θ : Angle
h : 0 ≤ Real.cos θ.toReal
⊢ -(π / 2) ≤ θ.toReal ∧ θ.toReal ≤ π / 2
state_after: θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : ¬(-(π / 2) ≤ θ.toReal ∧ θ.toReal ≤ π / 2)
⊢ False

tactic: rw [not_and_or, not_le, not_le] at hn
state_before: θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : ¬(-(π / 2) ≤ θ.toReal ∧ θ.toReal ≤ π / 2)
⊢ False
state_after: θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : θ.toReal < -(π / 2) ∨ π / 2 < θ.toReal
⊢ False

tactic: refine (not_lt.2 h) ?_
state_before: θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : θ.toReal < -(π / 2) ∨ π / 2 < θ.toReal
⊢ False
state_after: θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : θ.toReal < -(π / 2) ∨ π / 2 < θ.toReal
⊢ Real.cos θ.toReal < 0

tactic: rcases hn with (hn | hn)
state_before: θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : θ.toReal < -(π / 2) ∨ π / 2 < θ.toReal
⊢ Real.cos θ.toReal < 0
state_after: case inl
θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : θ.toReal < -(π / 2)
⊢ Real.cos θ.toReal < 0

case inr
θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : π / 2 < θ.toReal
⊢ Real.cos θ.toReal < 0

tactic: rw [← Real.cos_neg]
state_before: case inl
θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : θ.toReal < -(π / 2)
⊢ Real.cos θ.toReal < 0
state_after: case inl
θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : θ.toReal < -(π / 2)
⊢ Real.cos (-θ.toReal) < 0

tactic: refine cos_neg_of_pi_div_two_lt_of_lt (by linarith) ?_
state_before: case inl
θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : θ.toReal < -(π / 2)
⊢ Real.cos (-θ.toReal) < 0
state_after: case inl
θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : θ.toReal < -(π / 2)
⊢ -θ.toReal < π + π / 2

tactic: linarith [neg_pi_lt_toReal θ]
state_before: case inl
θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : θ.toReal < -(π / 2)
⊢ -θ.toReal < π + π / 2
state_after: no goals

tactic: linarith
state_before: θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : θ.toReal < -(π / 2)
⊢ π / 2 < -θ.toReal
state_after: no goals

tactic: refine cos_neg_of_pi_div_two_lt_of_lt hn ?_
state_before: case inr
θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : π / 2 < θ.toReal
⊢ Real.cos θ.toReal < 0
state_after: case inr
θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : π / 2 < θ.toReal
⊢ θ.toReal < π + π / 2

tactic: linarith [toReal_le_pi θ]
state_before: case inr
θ : Angle
h : 0 ≤ Real.cos θ.toReal
hn : π / 2 < θ.toReal
⊢ θ.toReal < π + π / 2
state_after: no goals
Theorem: mul_nonpos_iff
File: Mathlib/Algebra/Order/Ring/Defs.lean

tactic: rw [← neg_nonneg, neg_mul_eq_mul_neg, mul_nonneg_iff (α := α), neg_nonneg, neg_nonpos]
state_before: α : Type u
β : Type u_1
inst✝ : LinearOrderedRing α
a b c : α
⊢ a * b ≤ 0 ↔ 0 ≤ a ∧ b ≤ 0 ∨ a ≤ 0 ∧ 0 ≤ b
state_after: no goals
Theorem: MeasureTheory.Measure.add_left_inj
File: Mathlib/MeasureTheory/Measure/Typeclasses.lean

tactic: rw [add_comm _ μ, add_comm _ μ, μ.add_right_inj]
state_before: α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ✝ ν ν₁✝ ν₂✝ : Measure α
s t : Set α
μ ν₁ ν₂ : Measure α
inst✝ : SigmaFinite μ
⊢ ν₁ + μ = ν₂ + μ ↔ ν₁ = ν₂
state_after: no goals
Theorem: TypeVec.fst_diag
File: Mathlib/Data/TypeVec.lean

tactic: funext i
state_before: n : ℕ
α : TypeVec.{u_1} n
⊢ prod.fst ⊚ prod.diag = id
state_after: case h
n : ℕ
α : TypeVec.{u_1} n
i : Fin2 n
⊢ (prod.fst ⊚ prod.diag) i = id i

tactic: induction i with
| fz => rfl
| fs _ i_ih => apply i_ih
state_before: case h
n : ℕ
α : TypeVec.{u_1} n
i : Fin2 n
⊢ (prod.fst ⊚ prod.diag) i = id i
state_after: no goals

tactic: rfl
state_before: case h.fz
n n✝ : ℕ
α : TypeVec.{u_1} (n✝ + 1)
⊢ (prod.fst ⊚ prod.diag) Fin2.fz = id Fin2.fz
state_after: no goals

tactic: apply i_ih
state_before: case h.fs
n n✝ : ℕ
a✝ : Fin2 n✝
i_ih : ∀ {α : TypeVec.{u_1} n✝}, (prod.fst ⊚ prod.diag) a✝ = id a✝
α : TypeVec.{u_1} (n✝ + 1)
⊢ (prod.fst ⊚ prod.diag) a✝.fs = id a✝.fs
state_after: no goals
Theorem: IsLocallyInjective_iff_openEmbedding
File: Mathlib/Topology/SeparatedMap.lean

tactic: rw [isLocallyInjective_iff_isOpen_diagonal, ← range_toPullbackDiag]
state_before: X : Type u_1
Y : Type u_2
A : Type ?u.16848
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
f : X → Y
⊢ IsLocallyInjective f ↔ OpenEmbedding (toPullbackDiag f)
state_after: X : Type u_1
Y : Type u_2
A : Type ?u.16848
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
f : X → Y
⊢ IsOpen (Set.range (toPullbackDiag f)) ↔ OpenEmbedding (toPullbackDiag f)

tactic: exact ⟨fun h ↦ ⟨embedding_toPullbackDiag f, h⟩, fun h ↦ h.isOpen_range⟩
state_before: X : Type u_1
Y : Type u_2
A : Type ?u.16848
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
f : X → Y
⊢ IsOpen (Set.range (toPullbackDiag f)) ↔ OpenEmbedding (toPullbackDiag f)
state_after: no goals
Theorem: Balanced.starConvex
File: Mathlib/Analysis/Convex/Gauge.lean

tactic: rwa [Real.norm_of_nonneg ha₀]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
x✝ : E
a✝ : ℝ
hs : Balanced ℝ s
x : E
hx : x ∈ s
a : ℝ
ha₀ : 0 ≤ a
ha₁ : a ≤ 1
⊢ ‖a‖ ≤ 1
state_after: no goals
Theorem: WittVector.coeff_truncateFun
File: Mathlib/RingTheory/WittVector/Truncated.lean

tactic: rw [truncateFun, TruncatedWittVector.coeff_mk]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
n : ℕ
R : Type u_1
x : 𝕎 R
i : Fin n
⊢ TruncatedWittVector.coeff i (truncateFun n x) = x.coeff ↑i
state_after: no goals
Theorem: Real.log_two_gt_d9
File: Mathlib/Data/Complex/ExponentialBounds.lean

tactic: norm_num1
state_before: ⊢ 0.6931471803 < 287209 / 414355 - 1 / 10 ^ 10
state_after: no goals
Theorem: AddConstMapClass.map_nat'
File: Mathlib/Algebra/AddConstMap/Basic.lean

tactic: simpa using map_add_nat' f 0 n
state_before: F : Type u_1
G : Type u_2
H : Type u_3
inst✝³ : FunLike F G H
a : G
b : H
inst✝² : AddMonoidWithOne G
inst✝¹ : AddMonoid H
inst✝ : AddConstMapClass F G H 1 b
f : F
n : ℕ
⊢ f ↑n = f 0 + n • b
state_after: no goals
Theorem: QPF.Wequiv.symm
File: Mathlib/Data/QPF/Univariate/Basic.lean

tactic: intro h
state_before: F : Type u → Type u
q : QPF F
x y : (P F).W
⊢ Wequiv x y → Wequiv y x
state_after: F : Type u → Type u
q : QPF F
x y : (P F).W
h : Wequiv x y
⊢ Wequiv y x

tactic: induction h with
| ind a f f' _ ih => exact Wequiv.ind _ _ _ ih
| abs a f a' f' h => exact Wequiv.abs _ _ _ _ h.symm
| trans x y z _ _ ih₁ ih₂ => exact QPF.Wequiv.trans _ _ _ ih₂ ih₁
state_before: F : Type u → Type u
q : QPF F
x y : (P F).W
h : Wequiv x y
⊢ Wequiv y x
state_after: no goals

tactic: exact Wequiv.ind _ _ _ ih
state_before: case ind
F : Type u → Type u
q : QPF F
x y : (P F).W
a : (P F).A
f f' : (P F).B a → (P F).W
a✝ : ∀ (x : (P F).B a), Wequiv (f x) (f' x)
ih : ∀ (x : (P F).B a), Wequiv (f' x) (f x)
⊢ Wequiv (WType.mk a f') (WType.mk a f)
state_after: no goals

tactic: exact Wequiv.abs _ _ _ _ h.symm
state_before: case abs
F : Type u → Type u
q : QPF F
x y : (P F).W
a : (P F).A
f : (P F).B a → (P F).W
a' : (P F).A
f' : (P F).B a' → (P F).W
h : QPF.abs ⟨a, f⟩ = QPF.abs ⟨a', f'⟩
⊢ Wequiv (WType.mk a' f') (WType.mk a f)
state_after: no goals

tactic: exact QPF.Wequiv.trans _ _ _ ih₂ ih₁
state_before: case trans
F : Type u → Type u
q : QPF F
x✝ y✝ x y z : (P F).W
a✝¹ : Wequiv x y
a✝ : Wequiv y z
ih₁ : Wequiv y x
ih₂ : Wequiv z y
⊢ Wequiv z x
state_after: no goals
Theorem: Matrix.BlockTriangular.add
File: Mathlib/LinearAlgebra/Matrix/Block.lean

tactic: simp_rw [Matrix.add_apply, hM h, hN h, zero_add]
state_before: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝¹ : CommRing R
M N : Matrix m m R
b : m → α
inst✝ : LT α
hM : M.BlockTriangular b
hN : N.BlockTriangular b
i j : m
h : b j < b i
⊢ (M + N) i j = 0
state_after: no goals
Theorem: DenseEmbedding.subtype
File: Mathlib/Topology/DenseEmbedding.lean

tactic: ext ⟨x, hx⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
e : α → β
de : DenseEmbedding e
p : α → Prop
⊢ closure (range (subtypeEmb p e)) = univ
state_after: case h.mk
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
e : α → β
de : DenseEmbedding e
p : α → Prop
x : β
hx : x ∈ closure (e '' {x | p x})
⊢ ⟨x, hx⟩ ∈ closure (range (subtypeEmb p e)) ↔ ⟨x, hx⟩ ∈ univ

tactic: rw [image_eq_range] at hx
state_before: case h.mk
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
e : α → β
de : DenseEmbedding e
p : α → Prop
x : β
hx : x ∈ closure (e '' {x | p x})
⊢ ⟨x, hx⟩ ∈ closure (range (subtypeEmb p e)) ↔ ⟨x, hx⟩ ∈ univ
state_after: case h.mk
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
e : α → β
de : DenseEmbedding e
p : α → Prop
x : β
hx✝ : x ∈ closure (e '' {x | p x})
hx : x ∈ closure (range fun x => e ↑x)
⊢ ⟨x, hx✝⟩ ∈ closure (range (subtypeEmb p e)) ↔ ⟨x, hx✝⟩ ∈ univ
Theorem: closure_induced
File: Mathlib/Topology/Order.lean

tactic: letI := t.induced f
state_before: α : Type u_1
β : Type u_2
t : TopologicalSpace β
f✝ f : α → β
a : α
s : Set α
⊢ a ∈ closure s ↔ f a ∈ closure (f '' s)
state_after: α : Type u_1
β : Type u_2
t : TopologicalSpace β
f✝ f : α → β
a : α
s : Set α
this : TopologicalSpace α := induced f t
⊢ a ∈ closure s ↔ f a ∈ closure (f '' s)

tactic: simp only [mem_closure_iff_frequently, nhds_induced, frequently_comap, mem_image, and_comm]
state_before: α : Type u_1
β : Type u_2
t : TopologicalSpace β
f✝ f : α → β
a : α
s : Set α
this : TopologicalSpace α := induced f t
⊢ a ∈ closure s ↔ f a ∈ closure (f '' s)
state_after: no goals
Theorem: padicNormE.norm_int_le_one
File: Mathlib/NumberTheory/Padics/PadicNumbers.lean

tactic: simpa
state_before: p : ℕ
hp : Fact (Nat.Prime p)
z : ℤ
this : ‖↑↑z‖ ≤ 1
⊢ ‖↑z‖ ≤ 1
state_after: no goals

tactic: simp [hp.1.ne_one]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
z : ℤ
⊢ ¬p ∣ (↑z).den
state_after: no goals
Theorem: Set.Finite.ssubset_toFinset
File: Mathlib/Data/Set/Finite.lean

tactic: rw [← Finset.coe_ssubset, Finite.coe_toFinset]
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝ t : Set α
a : α
hs : s✝.Finite
ht : t.Finite
s : Finset α
⊢ s ⊂ ht.toFinset ↔ ↑s ⊂ t
state_after: no goals
Theorem: WeierstrassCurve.Affine.equation_iff'
File: Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean

tactic: rw [Equation, evalEval_polynomial]
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ W.Equation x y ↔ y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆) = 0
state_after: no goals
Theorem: Subgroup.commutator_eq_bot_iff_le_centralizer
File: Mathlib/GroupTheory/Commutator.lean

tactic: rw [eq_bot_iff, commutator_le]
state_before: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝³ : Group G
inst✝² : Group G'
inst✝¹ : FunLike F G G'
inst✝ : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
⊢ ⁅H₁, H₂⁆ = ⊥ ↔ H₁ ≤ centralizer ↑H₂
state_after: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝³ : Group G
inst✝² : Group G'
inst✝¹ : FunLike F G G'
inst✝ : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
⊢ (∀ g₁ ∈ H₁, ∀ g₂ ∈ H₂, ⁅g₁, g₂⁆ ∈ ⊥) ↔ H₁ ≤ centralizer ↑H₂

tactic: refine forall_congr' fun p =>
  forall_congr' fun _hp => forall_congr' fun q => forall_congr' fun hq => ?_
state_before: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝³ : Group G
inst✝² : Group G'
inst✝¹ : FunLike F G G'
inst✝ : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
⊢ (∀ g₁ ∈ H₁, ∀ g₂ ∈ H₂, ⁅g₁, g₂⁆ ∈ ⊥) ↔ H₁ ≤ centralizer ↑H₂
state_after: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝³ : Group G
inst✝² : Group G'
inst✝¹ : FunLike F G G'
inst✝ : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
p : G
_hp : p ∈ H₁
q : G
hq : q ∈ H₂
⊢ ⁅p, q⁆ ∈ ⊥ ↔ q * p = p * q

tactic: rw [mem_bot, commutatorElement_eq_one_iff_mul_comm, eq_comm]
state_before: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝³ : Group G
inst✝² : Group G'
inst✝¹ : FunLike F G G'
inst✝ : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
p : G
_hp : p ∈ H₁
q : G
hq : q ∈ H₂
⊢ ⁅p, q⁆ ∈ ⊥ ↔ q * p = p * q
state_after: no goals
Theorem: ENNReal.div_eq_zero_iff
File: Mathlib/Data/ENNReal/Inv.lean

tactic: simp [div_eq_mul_inv]
state_before: a b c d : ℝ≥0∞
r p q : ℝ≥0
⊢ a / b = 0 ↔ a = 0 ∨ b = ⊤
state_after: no goals
Theorem: CategoryTheory.IsPreconnected.of_constant_of_preserves_morphisms
File: Mathlib/CategoryTheory/IsConnected.lean

tactic: ext
state_before: J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
h : ∀ {α : Type u₁} (F : J → α), (∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂) → ∀ (j j' : J), F j = F j'
α✝ : Type u₁
F : J ⥤ Discrete α✝
j₁✝ j₂✝ : J
f : j₁✝ ⟶ j₂✝
⊢ F.obj j₁✝ = F.obj j₂✝
state_after: case as
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
h : ∀ {α : Type u₁} (F : J → α), (∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂) → ∀ (j j' : J), F j = F j'
α✝ : Type u₁
F : J ⥤ Discrete α✝
j₁✝ j₂✝ : J
f : j₁✝ ⟶ j₂✝
⊢ (F.obj j₁✝).as = (F.obj j₂✝).as

tactic: exact Discrete.eq_of_hom (F.map f)
state_before: case as
J : Type u₁
inst✝¹ : Category.{v₁, u₁} J
K : Type u₂
inst✝ : Category.{v₂, u₂} K
h : ∀ {α : Type u₁} (F : J → α), (∀ {j₁ j₂ : J}, (j₁ ⟶ j₂) → F j₁ = F j₂) → ∀ (j j' : J), F j = F j'
α✝ : Type u₁
F : J ⥤ Discrete α✝
j₁✝ j₂✝ : J
f : j₁✝ ⟶ j₂✝
⊢ (F.obj j₁✝).as = (F.obj j₂✝).as
state_after: no goals
Theorem: Finset.prod_apply_ite_of_false
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

tactic: simp_rw [apply_ite k]
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f✝ g✝ : α → β
inst✝ : CommMonoid β
p : α → Prop
hp : DecidablePred p
f g : α → γ
k : γ → β
h : ∀ x ∈ s, ¬p x
⊢ ∏ x ∈ s, k (if p x then f x else g x) = ∏ x ∈ s, k (g x)
state_after: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f✝ g✝ : α → β
inst✝ : CommMonoid β
p : α → Prop
hp : DecidablePred p
f g : α → γ
k : γ → β
h : ∀ x ∈ s, ¬p x
⊢ (∏ x ∈ s, if p x then k (f x) else k (g x)) = ∏ x ∈ s, k (g x)

tactic: exact prod_ite_of_false h _ _
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f✝ g✝ : α → β
inst✝ : CommMonoid β
p : α → Prop
hp : DecidablePred p
f g : α → γ
k : γ → β
h : ∀ x ∈ s, ¬p x
⊢ (∏ x ∈ s, if p x then k (f x) else k (g x)) = ∏ x ∈ s, k (g x)
state_after: no goals
Theorem: Function.Semiconj₂.isAssociative_right
File: Mathlib/Logic/Function/Conjugate.lean

tactic: simp only [← h.eq, Std.Associative.assoc (op := ga)]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f : α → β
ga : α → α → α
gb : β → β → β
inst✝ : Std.Associative ga
h : Semiconj₂ f ga gb
h_surj : Surjective f
x₁ x₂ x₃ : α
⊢ gb (gb (f x₁) (f x₂)) (f x₃) = gb (f x₁) (gb (f x₂) (f x₃))
state_after: no goals