tasksource/leandojo huggingface dataset:
Theorem: Rat.maybeNormalize_eq_normalize
File: Std/Data/Rat/Lemmas.lean

tactic: simp only [maybeNormalize_eq, mk_eq_normalize, Int.div_eq_ediv_of_dvd hn]
state_before: num : Int
den g : Nat
den_nz : den / g ≠ 0
reduced : Nat.coprime (Int.natAbs (Int.div num ↑g)) (den / g)
hn : ↑g ∣ num
hd : g ∣ den
⊢ maybeNormalize num den g den_nz reduced = normalize num den

tactic: rw [← normalize_mul_right _ this, Int.ediv_mul_cancel hn]
state_before: num : Int
den g : Nat
den_nz : den / g ≠ 0
reduced : Nat.coprime (Int.natAbs (Int.div num ↑g)) (den / g)
hn : ↑g ∣ num
hd : g ∣ den
this : g ≠ 0
⊢ normalize (num / ↑g) (den / g) = normalize num den

tactic: congr 1
state_before: num : Int
den g : Nat
den_nz : den / g ≠ 0
reduced : Nat.coprime (Int.natAbs (Int.div num ↑g)) (den / g)
hn : ↑g ∣ num
hd : g ∣ den
this : g ≠ 0
⊢ normalize num (den / g * g) = normalize num den

tactic: exact Nat.div_mul_cancel hd
state_before: case e_den
num : Int
den g : Nat
den_nz : den / g ≠ 0
reduced : Nat.coprime (Int.natAbs (Int.div num ↑g)) (den / g)
hn : ↑g ∣ num
hd : g ∣ den
this : g ≠ 0
⊢ den / g * g = den
Theorem: mem_closure_iff_nhds_basis'
File: Mathlib/Topology/Basic.lean

tactic: simp only [exists_prop, forall_const]
state_before: α : Type u
β : Type v
ι : Sort w
a✝ : α
s✝ s₁ s₂ t✝ : Set α
p✝ p₁ p₂ : α → Prop
inst✝ : TopologicalSpace α
a : α
p : ι → Prop
s : ι → Set α
h : HasBasis (𝓝 a) p s
t : Set α
⊢ (∀ ⦃i : ι⦄, p i → ∀ ⦃j : Unit⦄, True → Set.Nonempty (s i ∩ t)) ↔ ∀ (i : ι), p i → Set.Nonempty (s i ∩ t)
Theorem: finrank_real_of_complex
File: Mathlib/Data/Complex/Module.lean

tactic: rw [← FiniteDimensional.finrank_mul_finrank ℝ ℂ E, Complex.finrank_real_complex]
state_before: E : Type u_1
inst✝¹ : AddCommGroup E
inst✝ : Module ℂ E
⊢ FiniteDimensional.finrank ℝ E = 2 * FiniteDimensional.finrank ℂ E
Theorem: List.diff_erase
File: Std/Data/List/Lemmas.lean

tactic: rw [← diff_cons_right, diff_cons]
state_before: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
a : α
⊢ List.erase (List.diff l₁ l₂) a = List.diff (List.erase l₁ a) l₂
Theorem: Set.inv_insert
File: Mathlib/Data/Set/Pointwise/Basic.lean

tactic: rw [insert_eq, union_inv, inv_singleton, insert_eq]
state_before: F : Type ?u.7176
α : Type u_1
β : Type ?u.7182
γ : Type ?u.7185
inst✝ : InvolutiveInv α
s✝ t : Set α
a✝ a : α
s : Set α
⊢ (insert a s)⁻¹ = insert a⁻¹ s⁻¹
Theorem: homothety_one_half
File: Mathlib/LinearAlgebra/AffineSpace/MidpointZero.lean

tactic: rw [one_div, homothety_inv_two]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝⁴ : Field k
inst✝³ : CharZero k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AddTorsor V P
a b : P
⊢ ↑(homothety a (1 / 2)) b = midpoint k a b
Theorem: spectrum.zero_not_mem_iff
File: Mathlib/Algebra/Algebra/Spectrum.lean

tactic: rw [zero_mem_iff, Classical.not_not]
state_before: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
a : A
⊢ ¬0 ∈ σ a ↔ IsUnit a
Theorem: left_eq_mul₀
File: Mathlib/Algebra/GroupWithZero/Basic.lean

tactic: rw [eq_comm, mul_eq_left₀ ha]
state_before: α : Type ?u.12127
M₀ : Type u_1
G₀ : Type ?u.12133
M₀' : Type ?u.12136
G₀' : Type ?u.12139
F : Type ?u.12142
F' : Type ?u.12145
inst✝ : CancelMonoidWithZero M₀
a b c : M₀
ha : a ≠ 0
⊢ a = a * b ↔ b = 1
Theorem: Mathlib.Tactic.RingNF.mul_neg
File: Mathlib/Tactic/Ring/RingNF.lean

tactic: simp
state_before: R✝ : Type ?u.74049
inst✝¹ : CommSemiring R✝
R : Type u_1
inst✝ : Ring R
a b : R
⊢ a * -b = -(a * b)
Theorem: WithTop.preimage_coe_Ico_top
File: Mathlib/Data/Set/Intervals/WithBotTop.lean

tactic: simp [← Ici_inter_Iio]
state_before: α : Type u_1
inst✝ : PartialOrder α
a b : α
⊢ some ⁻¹' Ico ↑a ⊤ = Ici a
Theorem: Finset.length_toList
File: Mathlib/Data/Finset/Card.lean

tactic: rw [toList, ← Multiset.coe_card, Multiset.coe_toList, card_def]
state_before: α : Type u_1
β : Type ?u.12605
s✝ t : Finset α
f : α → β
n : ℕ
s : Finset α
⊢ List.length (toList s) = card s
Theorem: IsAlgClosed.exists_pow_nat_eq
File: Mathlib/FieldTheory/IsAlgClosed/Basic.lean

tactic: have : degree (X ^ n - C x) ≠ 0 := by
  rw [degree_X_pow_sub_C hn x]
  exact ne_of_gt (WithBot.coe_lt_coe.2 hn)
state_before: k : Type u
inst✝¹ : Field k
inst✝ : IsAlgClosed k
x : k
n : ℕ
hn : 0 < n
⊢ ∃ z, z ^ n = x

tactic: obtain ⟨z, hz⟩ := exists_root (X ^ n - C x) this
state_before: k : Type u
inst✝¹ : Field k
inst✝ : IsAlgClosed k
x : k
n : ℕ
hn : 0 < n
this : degree (X ^ n - ↑C x) ≠ 0
⊢ ∃ z, z ^ n = x

tactic: rw [degree_X_pow_sub_C hn x]
state_before: k : Type u
inst✝¹ : Field k
inst✝ : IsAlgClosed k
x : k
n : ℕ
hn : 0 < n
⊢ degree (X ^ n - ↑C x) ≠ 0

tactic: exact ne_of_gt (WithBot.coe_lt_coe.2 hn)
state_before: k : Type u
inst✝¹ : Field k
inst✝ : IsAlgClosed k
x : k
n : ℕ
hn : 0 < n
⊢ ↑n ≠ 0

tactic: use z
state_before: case intro
k : Type u
inst✝¹ : Field k
inst✝ : IsAlgClosed k
x : k
n : ℕ
hn : 0 < n
this : degree (X ^ n - ↑C x) ≠ 0
z : k
hz : IsRoot (X ^ n - ↑C x) z
⊢ ∃ z, z ^ n = x

tactic: simp only [eval_C, eval_X, eval_pow, eval_sub, IsRoot.def] at hz
state_before: case intro
k : Type u
inst✝¹ : Field k
inst✝ : IsAlgClosed k
x : k
n : ℕ
hn : 0 < n
this : degree (X ^ n - ↑C x) ≠ 0
z : k
hz : IsRoot (X ^ n - ↑C x) z
⊢ z ^ n = x

tactic: exact sub_eq_zero.1 hz
state_before: case intro
k : Type u
inst✝¹ : Field k
inst✝ : IsAlgClosed k
x : k
n : ℕ
hn : 0 < n
this : degree (X ^ n - ↑C x) ≠ 0
z : k
hz : z ^ n - x = 0
⊢ z ^ n = x
Theorem: DistribMulActionHom.toMulActionHom_injective
File: Mathlib/Algebra/Hom/GroupAction.lean

tactic: ext a
state_before: M' : Type ?u.113752
X : Type ?u.113755
inst✝²³ : SMul M' X
Y : Type ?u.113762
inst✝²² : SMul M' Y
Z : Type ?u.113769
inst✝²¹ : SMul M' Z
M : Type u_1
inst✝²⁰ : Monoid M
A : Type u_2
inst✝¹⁹ : AddMonoid A
inst✝¹⁸ : DistribMulAction M A
A' : Type ?u.113810
inst✝¹⁷ : AddGroup A'
inst✝¹⁶ : DistribMulAction M A'
B : Type u_3
inst✝¹⁵ : AddMonoid B
inst✝¹⁴ : DistribMulAction M B
B' : Type ?u.114112
inst✝¹³ : AddGroup B'
inst✝¹² : DistribMulAction M B'
C : Type ?u.114388
inst✝¹¹ : AddMonoid C
inst✝¹⁰ : DistribMulAction M C
R : Type ?u.114414
inst✝⁹ : Semiring R
inst✝⁸ : MulSemiringAction M R
R' : Type ?u.114441
inst✝⁷ : Ring R'
inst✝⁶ : MulSemiringAction M R'
S : Type ?u.114637
inst✝⁵ : Semiring S
inst✝⁴ : MulSemiringAction M S
S' : Type ?u.114664
inst✝³ : Ring S'
inst✝² : MulSemiringAction M S'
T : Type ?u.114860
inst✝¹ : Semiring T
inst✝ : MulSemiringAction M T
f g : A →+[M] B
h : ↑f = ↑g
⊢ f = g

tactic: exact MulActionHom.congr_fun h a
state_before: case a
M' : Type ?u.113752
X : Type ?u.113755
inst✝²³ : SMul M' X
Y : Type ?u.113762
inst✝²² : SMul M' Y
Z : Type ?u.113769
inst✝²¹ : SMul M' Z
M : Type u_1
inst✝²⁰ : Monoid M
A : Type u_2
inst✝¹⁹ : AddMonoid A
inst✝¹⁸ : DistribMulAction M A
A' : Type ?u.113810
inst✝¹⁷ : AddGroup A'
inst✝¹⁶ : DistribMulAction M A'
B : Type u_3
inst✝¹⁵ : AddMonoid B
inst✝¹⁴ : DistribMulAction M B
B' : Type ?u.114112
inst✝¹³ : AddGroup B'
inst✝¹² : DistribMulAction M B'
C : Type ?u.114388
inst✝¹¹ : AddMonoid C
inst✝¹⁰ : DistribMulAction M C
R : Type ?u.114414
inst✝⁹ : Semiring R
inst✝⁸ : MulSemiringAction M R
R' : Type ?u.114441
inst✝⁷ : Ring R'
inst✝⁶ : MulSemiringAction M R'
S : Type ?u.114637
inst✝⁵ : Semiring S
inst✝⁴ : MulSemiringAction M S
S' : Type ?u.114664
inst✝³ : Ring S'
inst✝² : MulSemiringAction M S'
T : Type ?u.114860
inst✝¹ : Semiring T
inst✝ : MulSemiringAction M T
f g : A →+[M] B
h : ↑f = ↑g
a : A
⊢ ↑f a = ↑g a
Theorem: MeasureTheory.AEEqFun.toGerm_injective
File: Mathlib/MeasureTheory/Function/AEEqFun.lean

tactic: rwa [← toGerm_eq, ← toGerm_eq]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.443960
δ : Type ?u.443963
inst✝³ : MeasurableSpace α
μ ν : Measure α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : α →ₘ[μ] β
H : toGerm f = toGerm g
⊢ ↑↑f = ↑↑g
Theorem: Ergodic.ae_empty_or_univ_of_ae_le_preimage'
File: Mathlib/Dynamics/Ergodic/Ergodic.lean

tactic: replace h_fin : μ (f ⁻¹' s) ≠ ∞
state_before: α : Type u_1
m : MeasurableSpace α
f : α → α
s : Set α
μ : MeasureTheory.Measure α
hf : Ergodic f
hs : MeasurableSet s
hs' : s ≤ᶠ[ae μ] f ⁻¹' s
h_fin : ↑↑μ s ≠ ⊤
⊢ s =ᶠ[ae μ] ∅ ∨ s =ᶠ[ae μ] univ

tactic: refine' hf.quasiErgodic.ae_empty_or_univ' hs _
state_before: α : Type u_1
m : MeasurableSpace α
f : α → α
s : Set α
μ : MeasureTheory.Measure α
hf : Ergodic f
hs : MeasurableSet s
hs' : s ≤ᶠ[ae μ] f ⁻¹' s
h_fin : ↑↑μ (f ⁻¹' s) ≠ ⊤
⊢ s =ᶠ[ae μ] ∅ ∨ s =ᶠ[ae μ] univ

tactic: exact (ae_eq_of_ae_subset_of_measure_ge hs' (hf.measure_preimage hs).le hs h_fin).symm
state_before: α : Type u_1
m : MeasurableSpace α
f : α → α
s : Set α
μ : MeasureTheory.Measure α
hf : Ergodic f
hs : MeasurableSet s
hs' : s ≤ᶠ[ae μ] f ⁻¹' s
h_fin : ↑↑μ (f ⁻¹' s) ≠ ⊤
⊢ f ⁻¹' s =ᶠ[ae μ] s

tactic: rwa [hf.measure_preimage hs]
state_before: case h_fin
α : Type u_1
m : MeasurableSpace α
f : α → α
s : Set α
μ : MeasureTheory.Measure α
hf : Ergodic f
hs : MeasurableSet s
hs' : s ≤ᶠ[ae μ] f ⁻¹' s
h_fin : ↑↑μ s ≠ ⊤
⊢ ↑↑μ (f ⁻¹' s) ≠ ⊤
Theorem: Matrix.smul_mulVec_assoc
File: Mathlib/Data/Matrix/Basic.lean

tactic: ext
state_before: l : Type ?u.851375
m : Type u_3
n : Type u_1
o : Type ?u.851384
m' : o → Type ?u.851389
n' : o → Type ?u.851394
R : Type u_2
S : Type ?u.851400
α : Type v
β : Type w
γ : Type ?u.851407
inst✝⁴ : NonUnitalNonAssocSemiring α
inst✝³ : Fintype n
inst✝² : Monoid R
inst✝¹ : DistribMulAction R α
inst✝ : IsScalarTower R α α
a : R
A : Matrix m n α
b : n → α
⊢ mulVec (a • A) b = a • mulVec A b

tactic: apply smul_dotProduct
state_before: case h
l : Type ?u.851375
m : Type u_3
n : Type u_1
o : Type ?u.851384
m' : o → Type ?u.851389
n' : o → Type ?u.851394
R : Type u_2
S : Type ?u.851400
α : Type v
β : Type w
γ : Type ?u.851407
inst✝⁴ : NonUnitalNonAssocSemiring α
inst✝³ : Fintype n
inst✝² : Monoid R
inst✝¹ : DistribMulAction R α
inst✝ : IsScalarTower R α α
a : R
A : Matrix m n α
b : n → α
x✝ : m
⊢ mulVec (a • A) b x✝ = (a • mulVec A b) x✝
Theorem: isRegular_iff_ne_zero'
File: Mathlib/Algebra/Ring/Regular.lean

tactic: rintro rfl
state_before: α : Type u_1
inst✝² : Nontrivial α
inst✝¹ : NonUnitalNonAssocRing α
inst✝ : NoZeroDivisors α
k : α
h : IsRegular k
⊢ k ≠ 0

tactic: exact not_not.mpr h.left not_isLeftRegular_zero
state_before: α : Type u_1
inst✝² : Nontrivial α
inst✝¹ : NonUnitalNonAssocRing α
inst✝ : NoZeroDivisors α
h : IsRegular 0
⊢ False
Theorem: CategoryTheory.Adjunction.homEquiv_apply_eq
File: Mathlib/CategoryTheory/Adjunction/Basic.lean

tactic: cases h
state_before: C : Type u₁
inst✝¹ : Category C
D : Type u₂
inst✝ : Category D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
X' X : C
Y Y' : D
A : C
B : D
f : F.obj A ⟶ B
g : A ⟶ G.obj B
h : ↑(homEquiv adj A B) f = g
⊢ f = ↑(homEquiv adj A B).symm g

tactic: simp
state_before: case refl
C : Type u₁
inst✝¹ : Category C
D : Type u₂
inst✝ : Category D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
X' X : C
Y Y' : D
A : C
B : D
f : F.obj A ⟶ B
⊢ f = ↑(homEquiv adj A B).symm (↑(homEquiv adj A B) f)

tactic: cases h
state_before: C : Type u₁
inst✝¹ : Category C
D : Type u₂
inst✝ : Category D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
X' X : C
Y Y' : D
A : C
B : D
f : F.obj A ⟶ B
g : A ⟶ G.obj B
h : f = ↑(homEquiv adj A B).symm g
⊢ ↑(homEquiv adj A B) f = g

tactic: simp
state_before: case refl
C : Type u₁
inst✝¹ : Category C
D : Type u₂
inst✝ : Category D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
X' X : C
Y Y' : D
A : C
B : D
g : A ⟶ G.obj B
⊢ ↑(homEquiv adj A B) (↑(homEquiv adj A B).symm g) = g
Theorem: NNReal.iSup_div
File: Mathlib/Data/Real/NNReal.lean

tactic: simp only [div_eq_mul_inv, iSup_mul]
state_before: ι : Sort u_1
f✝ f : ι → ℝ≥0
a : ℝ≥0
⊢ (⨆ (i : ι), f i) / a = ⨆ (i : ι), f i / a
Theorem: adjoin_monomial_eq_reesAlgebra
File: Mathlib/RingTheory/ReesAlgebra.lean

tactic: apply le_antisymm
state_before: R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
⊢ Algebra.adjoin R ↑(Submodule.map (monomial 1) I) = reesAlgebra I

tactic: apply Algebra.adjoin_le _
state_before: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
⊢ Algebra.adjoin R ↑(Submodule.map (monomial 1) I) ≤ reesAlgebra I

tactic: rintro _ ⟨r, hr, rfl⟩
state_before: R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
⊢ ↑(Submodule.map (monomial 1) I) ⊆ ↑(reesAlgebra I)

tactic: exact reesAlgebra.monomial_mem.mpr (by rwa [pow_one])
state_before: case intro.intro
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
r : R
hr : r ∈ ↑I
⊢ ↑(monomial 1) r ∈ ↑(reesAlgebra I)

tactic: rwa [pow_one]
state_before: R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
r : R
hr : r ∈ ↑I
⊢ r ∈ I ^ 1

tactic: intro p hp
state_before: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
⊢ reesAlgebra I ≤ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: rw [p.as_sum_support]
state_before: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
p : R[X]
hp : p ∈ reesAlgebra I
⊢ p ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: apply Subalgebra.sum_mem _ _
state_before: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
p : R[X]
hp : p ∈ reesAlgebra I
⊢ ∑ i in support p, ↑(monomial i) (coeff p i) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: rintro i -
state_before: R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
p : R[X]
hp : p ∈ reesAlgebra I
⊢ ∀ (x : ℕ), x ∈ support p → ↑(monomial x) (coeff p x) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)

tactic: exact monomial_mem_adjoin_monomial (hp i)
state_before: R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
p : R[X]
hp : p ∈ reesAlgebra I
i : ℕ
⊢ ↑(monomial i) (coeff p i) ∈ Algebra.adjoin R ↑(Submodule.map (monomial 1) I)
Theorem: WittVector.constantCoeff_wittMul
File: Mathlib/RingTheory/WittVector/Defs.lean

tactic: apply constantCoeff_wittStructureInt p _ _ n
state_before: p : ℕ
R : Type ?u.121832
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
⊢ ↑constantCoeff (wittMul p n) = 0

tactic: simp only [MulZeroClass.mul_zero, RingHom.map_mul, constantCoeff_X]
state_before: p : ℕ
R : Type ?u.121832
hp : Fact (Nat.Prime p)
inst✝ : CommRing R
n : ℕ
⊢ ↑constantCoeff (X 0 * X 1) = 0
Theorem: Nat.shiftl'_ne_zero_left
File: Mathlib/Data/Nat/Size.lean

tactic: induction n <;> simp [bit_ne_zero, shiftl', *]
state_before: b : Bool
m : ℕ
h : m ≠ 0
n : ℕ
⊢ shiftl' b m n ≠ 0
Theorem: CategoryTheory.Limits.biproduct.matrix_π
File: Mathlib/CategoryTheory/Limits/Shapes/Biproducts.lean

tactic: ext
state_before: J : Type
inst✝⁴ : Fintype J
K : Type
inst✝³ : Fintype K
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasFiniteBiproducts C
f : J → C
g : K → C
m : (j : J) → (k : K) → f j ⟶ g k
k : K
⊢ matrix m ≫ π g k = desc fun j => m j k

tactic: simp [biproduct.matrix]
state_before: case w
J : Type
inst✝⁴ : Fintype J
K : Type
inst✝³ : Fintype K
C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasFiniteBiproducts C
f : J → C
g : K → C
m : (j : J) → (k : K) → f j ⟶ g k
k : K
j✝ : J
⊢ ι (fun j => f j) j✝ ≫ matrix m ≫ π g k = ι (fun j => f j) j✝ ≫ desc fun j => m j k
Theorem: CategoryTheory.MorphismProperty.StableUnderComposition.diagonal
File: Mathlib/CategoryTheory/MorphismProperty.lean

tactic: introv X h₁ h₂
state_before: C : Type u
inst✝² : Category C
D : Type ?u.77182
inst✝¹ : Category D
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : StableUnderComposition P
hP' : RespectsIso P
hP'' : StableUnderBaseChange P
⊢ StableUnderComposition (MorphismProperty.diagonal P)

tactic: rw [diagonal_iff, pullback.diagonal_comp]
state_before: C : Type u
inst✝² : Category C
D : Type ?u.77182
inst✝¹ : Category D
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : StableUnderComposition P
hP' : RespectsIso P
hP'' : StableUnderBaseChange P
X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
h₁ : MorphismProperty.diagonal P f
h₂ : MorphismProperty.diagonal P g
⊢ MorphismProperty.diagonal P (f ≫ g)

tactic: exact hP _ _ h₁ (by simpa [hP'.cancel_left_isIso] using hP''.snd _ _ h₂)
state_before: C : Type u
inst✝² : Category C
D : Type ?u.77182
inst✝¹ : Category D
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : StableUnderComposition P
hP' : RespectsIso P
hP'' : StableUnderBaseChange P
X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
h₁ : MorphismProperty.diagonal P f
h₂ : MorphismProperty.diagonal P g
⊢ P (pullback.diagonal f ≫ (pullbackDiagonalMapIdIso f f g).inv ≫ pullback.snd)

tactic: simpa [hP'.cancel_left_isIso] using hP''.snd _ _ h₂
state_before: C : Type u
inst✝² : Category C
D : Type ?u.77182
inst✝¹ : Category D
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : StableUnderComposition P
hP' : RespectsIso P
hP'' : StableUnderBaseChange P
X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
h₁ : MorphismProperty.diagonal P f
h₂ : MorphismProperty.diagonal P g
⊢ P ((pullbackDiagonalMapIdIso f f g).inv ≫ pullback.snd)
Theorem: OrderRingHom.cancel_right
File: Mathlib/Algebra/Order/Hom/Ring.lean

tactic: rw [h]
state_before: F : Type ?u.48360
α : Type u_3
β : Type u_1
γ : Type u_2
δ : Type ?u.48372
inst✝⁷ : NonAssocSemiring α
inst✝⁶ : Preorder α
inst✝⁵ : NonAssocSemiring β
inst✝⁴ : Preorder β
inst✝³ : NonAssocSemiring γ
inst✝² : Preorder γ
inst✝¹ : NonAssocSemiring δ
inst✝ : Preorder δ
f₁ f₂ : β →+*o γ
g : α →+*o β
hg : Surjective ↑g
h : f₁ = f₂
⊢ OrderRingHom.comp f₁ g = OrderRingHom.comp f₂ g
Theorem: Finset.prod_multiset_count_of_subset
File: Mathlib/Algebra/BigOperators/Basic.lean

tactic: revert hs
state_before: ι : Type ?u.595257
β : Type u
α : Type v
γ : Type w
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝² : CommMonoid β
inst✝¹ : DecidableEq α
inst✝ : CommMonoid α
m : Multiset α
s : Finset α
hs : Multiset.toFinset m ⊆ s
⊢ Multiset.prod m = ∏ i in s, i ^ Multiset.count i m

tactic: refine' Quot.induction_on m fun l => _
state_before: ι : Type ?u.595257
β : Type u
α : Type v
γ : Type w
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝² : CommMonoid β
inst✝¹ : DecidableEq α
inst✝ : CommMonoid α
m : Multiset α
s : Finset α
⊢ Multiset.toFinset m ⊆ s → Multiset.prod m = ∏ i in s, i ^ Multiset.count i m

tactic: simp only [quot_mk_to_coe'', coe_prod, coe_count]
state_before: ι : Type ?u.595257
β : Type u
α : Type v
γ : Type w
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝² : CommMonoid β
inst✝¹ : DecidableEq α
inst✝ : CommMonoid α
m : Multiset α
s : Finset α
l : List α
⊢ Multiset.toFinset (Quot.mk Setoid.r l) ⊆ s →
    Multiset.prod (Quot.mk Setoid.r l) = ∏ i in s, i ^ Multiset.count i (Quot.mk Setoid.r l)

tactic: apply prod_list_count_of_subset l s
state_before: ι : Type ?u.595257
β : Type u
α : Type v
γ : Type w
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝² : CommMonoid β
inst✝¹ : DecidableEq α
inst✝ : CommMonoid α
m : Multiset α
s : Finset α
l : List α
⊢ Multiset.toFinset ↑l ⊆ s → List.prod l = ∏ x in s, x ^ List.count x l
Theorem: thickenedIndicatorAux_one
File: Mathlib/Topology/MetricSpace/ThickenedIndicator.lean

tactic: simp [thickenedIndicatorAux, infEdist_zero_of_mem x_in_E, tsub_zero]
state_before: α : Type u_1
inst✝ : PseudoEMetricSpace α
δ : ℝ
E : Set α
x : α
x_in_E : x ∈ E
⊢ thickenedIndicatorAux δ E x = 1
Theorem: CompositionSeries.length_eq_zero_of_bot_eq_bot_of_top_eq_top_of_length_eq_zero
File: Mathlib/Order/JordanHolder.lean

tactic: have : s₁.bot = s₁.top := congr_arg s₁ (Fin.ext (by simp [hs₁]))
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s₁ s₂ : CompositionSeries X
hb : bot s₁ = bot s₂
ht : top s₁ = top s₂
hs₁ : s₁.length = 0
⊢ s₂.length = 0

tactic: have : Fin.last s₂.length = (0 : Fin s₂.length.succ) :=
  s₂.injective (hb.symm.trans (this.trans ht)).symm
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s₁ s₂ : CompositionSeries X
hb : bot s₁ = bot s₂
ht : top s₁ = top s₂
hs₁ : s₁.length = 0
this : bot s₁ = top s₁
⊢ s₂.length = 0

tactic: rw [Fin.ext_iff] at this
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s₁ s₂ : CompositionSeries X
hb : bot s₁ = bot s₂
ht : top s₁ = top s₂
hs₁ : s₁.length = 0
this✝ : bot s₁ = top s₁
this : Fin.last s₂.length = 0
⊢ s₂.length = 0

tactic: simpa
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s₁ s₂ : CompositionSeries X
hb : bot s₁ = bot s₂
ht : top s₁ = top s₂
hs₁ : s₁.length = 0
this✝ : bot s₁ = top s₁
this : ↑(Fin.last s₂.length) = ↑0
⊢ s₂.length = 0

tactic: simp [hs₁]
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s₁ s₂ : CompositionSeries X
hb : bot s₁ = bot s₂
ht : top s₁ = top s₂
hs₁ : s₁.length = 0
⊢ ↑0 = ↑(Fin.last s₁.length)
Theorem: Set.iUnion_Ico_right
File: Mathlib/Data/Set/Intervals/Disjoint.lean

tactic: simp only [← Ici_inter_Iio, ← inter_iUnion, iUnion_Iio, inter_univ]
state_before: ι : Sort u
α : Type v
β : Type w
inst✝¹ : Preorder α
a✝ b c : α
inst✝ : NoMaxOrder α
a : α
⊢ (⋃ (b : α), Ico a b) = Ici a
Theorem: Matrix.mul_smul
File: Mathlib/Data/Matrix/Basic.lean

tactic: ext
state_before: l : Type u_4
m : Type u_3
n : Type u_1
o : Type ?u.257857
m' : o → Type ?u.257862
n' : o → Type ?u.257867
R : Type u_2
S : Type ?u.257873
α : Type v
β : Type w
γ : Type ?u.257880
inst✝⁵ : AddCommMonoid α
inst✝⁴ : Mul α
inst✝³ : Fintype n
inst✝² : Monoid R
inst✝¹ : DistribMulAction R α
inst✝ : SMulCommClass R α α
M : Matrix m n α
a : R
N : Matrix n l α
⊢ M ⬝ (a • N) = a • M ⬝ N

tactic: apply dotProduct_smul
state_before: case a.h
l : Type u_4
m : Type u_3
n : Type u_1
o : Type ?u.257857
m' : o → Type ?u.257862
n' : o → Type ?u.257867
R : Type u_2
S : Type ?u.257873
α : Type v
β : Type w
γ : Type ?u.257880
inst✝⁵ : AddCommMonoid α
inst✝⁴ : Mul α
inst✝³ : Fintype n
inst✝² : Monoid R
inst✝¹ : DistribMulAction R α
inst✝ : SMulCommClass R α α
M : Matrix m n α
a : R
N : Matrix n l α
i✝ : m
x✝ : l
⊢ (M ⬝ (a • N)) i✝ x✝ = (a • M ⬝ N) i✝ x✝
Theorem: List.ofFn_get
File: Mathlib/Data/List/OfFn.lean

tactic: rw [ofFn_succ]
state_before: α : Type u
a : α
l : List α
⊢ ofFn (get (a :: l)) = a :: l

tactic: congr
state_before: α : Type u
a : α
l : List α
⊢ (get (a :: l) 0 :: ofFn fun i => get (a :: l) (Fin.succ i)) = a :: l

tactic: simp only [Fin.val_succ]
state_before: case e_tail
α : Type u
a : α
l : List α
⊢ (ofFn fun i => get (a :: l) (Fin.succ i)) = l

tactic: exact ofFn_get l
state_before: case e_tail
α : Type u
a : α
l : List α
⊢ (ofFn fun i => get (a :: l) (Fin.succ i)) = l
Theorem: tendstoLocallyUniformly_iff_filter
File: Mathlib/Topology/UniformSpace/UniformConvergence.lean

tactic: simpa [← tendstoLocallyUniformlyOn_univ, ← nhdsWithin_univ] using
  @tendstoLocallyUniformlyOn_iff_filter _ _ _ _ F f univ p _
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
inst✝ : TopologicalSpace α
⊢ TendstoLocallyUniformly F f p ↔ ∀ (x : α), TendstoUniformlyOnFilter F f p (𝓝 x)
Theorem: Set.image2_subset
File: Mathlib/Data/Set/NAry.lean

tactic: rintro _ ⟨a, b, ha, hb, rfl⟩
state_before: α : Type u_1
α' : Type ?u.1411
β : Type u_2
β' : Type ?u.1417
γ : Type u_3
γ' : Type ?u.1423
δ : Type ?u.1426
δ' : Type ?u.1429
ε : Type ?u.1432
ε' : Type ?u.1435
ζ : Type ?u.1438
ζ' : Type ?u.1441
ν : Type ?u.1444
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a a' : α
b b' : β
c c' : γ
d d' : δ
hs : s ⊆ s'
ht : t ⊆ t'
⊢ image2 f s t ⊆ image2 f s' t'

tactic: exact mem_image2_of_mem (hs ha) (ht hb)
state_before: case intro.intro.intro.intro
α : Type u_1
α' : Type ?u.1411
β : Type u_2
β' : Type ?u.1417
γ : Type u_3
γ' : Type ?u.1423
δ : Type ?u.1426
δ' : Type ?u.1429
ε : Type ?u.1432
ε' : Type ?u.1435
ζ : Type ?u.1438
ζ' : Type ?u.1441
ν : Type ?u.1444
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a✝ a' : α
b✝ b' : β
c c' : γ
d d' : δ
hs : s ⊆ s'
ht : t ⊆ t'
a : α
b : β
ha : a ∈ s
hb : b ∈ t
⊢ f a b ∈ image2 f s' t'