1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Basis.tensorProduct_repr_tmul_apply
File: Mathlib/LinearAlgebra/TensorProduct/Basis.lean

tactic: simp [Basis.tensorProduct, mul_comm]
state_before: R : Type u_1
S : Type u_2
M : Type u_3
N : Type u_4
ι : Type u_5
κ : Type u_6
inst✝⁸ : CommSemiring R
inst✝⁷ : Semiring S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
b : Basis ι R M
c : Basis κ R N
m : M
n : N
i : ι
j : κ
⊢ ((b.tensorProduct c).repr (m ⊗ₜ[R] n)) (i, j) = (b.repr m) i * (c.repr n) j
state_after: no goals
Theorem: NonUnitalSubsemiring.prod_top
File: Mathlib/RingTheory/NonUnitalSubsemiring/Basic.lean

tactic: simp [mem_prod, MonoidHom.coe_fst]
state_before: R : Type u
S : Type v
T : Type w
inst✝⁴ : NonUnitalNonAssocSemiring R
M : Subsemigroup R
inst✝³ : NonUnitalNonAssocSemiring S
inst✝² : NonUnitalNonAssocSemiring T
F : Type u_1
inst✝¹ : FunLike F R S
inst✝ : NonUnitalRingHomClass F R S
s : NonUnitalSubsemiring R
x : R × S
⊢ x ∈ s.prod ⊤ ↔ x ∈ comap (NonUnitalRingHom.fst R S) s
state_after: no goals
Theorem: Nat.le_find_iff
File: Mathlib/Data/Nat/Defs.lean

tactic: simp only [← not_lt, find_lt_iff, not_exists, not_and]
state_before: a b c d m n✝ k : ℕ
p q : ℕ → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∃ n, p n
n : ℕ
⊢ n ≤ Nat.find h ↔ ∀ (m : ℕ), m < n → ¬p m
state_after: no goals
Theorem: Polynomial.smul_eq_C_mul
File: Mathlib/Algebra/Polynomial/Coeff.lean

tactic: simp [ext_iff]
state_before: R : Type u
S : Type v
a✝ b : R
n m : ℕ
inst✝ : Semiring R
p q r : R[X]
a : R
⊢ a • p = C a * p
state_after: no goals
Theorem: AList.insertRec_empty
File: Mathlib/Data/List/AList.lean

tactic: change @insertRec α β _ C H0 IH ⟨[], _⟩ = H0
state_before: α : Type u
β : α → Type v
inst✝ : DecidableEq α
C : AList β → Sort u_1
H0 : C ∅
IH : (a : α) → (b : β a) → (l : AList β) → a ∉ l → C l → C (insert a b l)
⊢ insertRec H0 IH ∅ = H0
state_after: α : Type u
β : α → Type v
inst✝ : DecidableEq α
C : AList β → Sort u_1
H0 : C ∅
IH : (a : α) → (b : β a) → (l : AList β) → a ∉ l → C l → C (insert a b l)
⊢ insertRec H0 IH { entries := [], nodupKeys := ⋯ } = H0

tactic: rw [insertRec]
state_before: α : Type u
β : α → Type v
inst✝ : DecidableEq α
C : AList β → Sort u_1
H0 : C ∅
IH : (a : α) → (b : β a) → (l : AList β) → a ∉ l → C l → C (insert a b l)
⊢ insertRec H0 IH { entries := [], nodupKeys := ⋯ } = H0
state_after: no goals
Theorem: Polynomial.coe_C
File: Mathlib/RingTheory/PowerSeries/Basic.lean

tactic: have := coe_monomial 0 a
state_before: σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ : R[X]
a : R
⊢ ↑(C a) = (PowerSeries.C R) a
state_after: σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ : R[X]
a : R
this : ↑((monomial 0) a) = (PowerSeries.monomial R 0) a
⊢ ↑(C a) = (PowerSeries.C R) a

tactic: rwa [PowerSeries.monomial_zero_eq_C_apply] at this
state_before: σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ : R[X]
a : R
this : ↑((monomial 0) a) = (PowerSeries.monomial R 0) a
⊢ ↑(C a) = (PowerSeries.C R) a
state_after: no goals
Theorem: Subgroup.relindex_mul_relindex
File: Mathlib/GroupTheory/Index.lean

tactic: rw [← relindex_subgroupOf hKL]
state_before: G : Type u_1
inst✝ : Group G
H K L : Subgroup G
hHK : H ≤ K
hKL : K ≤ L
⊢ H.relindex K * K.relindex L = H.relindex L
state_after: G : Type u_1
inst✝ : Group G
H K L : Subgroup G
hHK : H ≤ K
hKL : K ≤ L
⊢ (H.subgroupOf L).relindex (K.subgroupOf L) * K.relindex L = H.relindex L

tactic: exact relindex_mul_index fun x hx => hHK hx
state_before: G : Type u_1
inst✝ : Group G
H K L : Subgroup G
hHK : H ≤ K
hKL : K ≤ L
⊢ (H.subgroupOf L).relindex (K.subgroupOf L) * K.relindex L = H.relindex L
state_after: no goals
Theorem: isLittleO_rpow_exp_pos_mul_atTop
File: Mathlib/Analysis/SpecialFunctions/Pow/Asymptotics.lean

tactic: simpa only [div_eq_mul_inv, exp_neg, neg_mul] using
  tendsto_rpow_mul_exp_neg_mul_atTop_nhds_zero s b hb
state_before: s b : ℝ
hb : 0 < b
⊢ Tendsto (fun x => x ^ s / rexp (b * x)) atTop (𝓝 0)
state_after: no goals
Theorem: MeasureTheory.withDensity_eq_iff
File: Mathlib/MeasureTheory/Function/AEEqOfIntegral.lean

tactic: refine AEMeasurable.ae_eq_of_forall_setLIntegral_eq hf hg hfi ?_ fun s hs _ ↦ ?_
state_before: α : Type u_1
E : Type u_2
m✝ m0 : MeasurableSpace α
μ✝ : Measure α
s t : Set α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
p : ℝ≥0∞
m : MeasurableSpace α
μ : Measure α
f g : α → ℝ≥0∞
hf : AEMeasurable f μ
hg : AEMeasurable g μ
hfi : ∫⁻ (x : α), f x ∂μ ≠ ⊤
hfg : μ.withDensity f = μ.withDensity g
⊢ f =ᶠ[ae μ] g
state_after: case refine_1
α : Type u_1
E : Type u_2
m✝ m0 : MeasurableSpace α
μ✝ : Measure α
s t : Set α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
p : ℝ≥0∞
m : MeasurableSpace α
μ : Measure α
f g : α → ℝ≥0∞
hf : AEMeasurable f μ
hg : AEMeasurable g μ
hfi : ∫⁻ (x : α), f x ∂μ ≠ ⊤
hfg : μ.withDensity f = μ.withDensity g
⊢ ∫⁻ (x : α), g x ∂μ ≠ ⊤

case refine_2
α : Type u_1
E : Type u_2
m✝ m0 : MeasurableSpace α
μ✝ : Measure α
s✝ t : Set α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
p : ℝ≥0∞
m : MeasurableSpace α
μ : Measure α
f g : α → ℝ≥0∞
hf : AEMeasurable f μ
hg : AEMeasurable g μ
hfi : ∫⁻ (x : α), f x ∂μ ≠ ⊤
hfg : μ.withDensity f = μ.withDensity g
s : Set α
hs : MeasurableSet s
x✝ : μ s < ⊤
⊢ ∫⁻ (x : α) in s, f x ∂μ = ∫⁻ (x : α) in s, g x ∂μ

tactic: rwa [← setLIntegral_univ, ← withDensity_apply g MeasurableSet.univ, ← hfg,
  withDensity_apply f MeasurableSet.univ, setLIntegral_univ]
state_before: case refine_1
α : Type u_1
E : Type u_2
m✝ m0 : MeasurableSpace α
μ✝ : Measure α
s t : Set α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
p : ℝ≥0∞
m : MeasurableSpace α
μ : Measure α
f g : α → ℝ≥0∞
hf : AEMeasurable f μ
hg : AEMeasurable g μ
hfi : ∫⁻ (x : α), f x ∂μ ≠ ⊤
hfg : μ.withDensity f = μ.withDensity g
⊢ ∫⁻ (x : α), g x ∂μ ≠ ⊤
state_after: no goals

tactic: rw [← withDensity_apply f hs, ← withDensity_apply g hs, ← hfg]
state_before: case refine_2
α : Type u_1
E : Type u_2
m✝ m0 : MeasurableSpace α
μ✝ : Measure α
s✝ t : Set α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
p : ℝ≥0∞
m : MeasurableSpace α
μ : Measure α
f g : α → ℝ≥0∞
hf : AEMeasurable f μ
hg : AEMeasurable g μ
hfi : ∫⁻ (x : α), f x ∂μ ≠ ⊤
hfg : μ.withDensity f = μ.withDensity g
s : Set α
hs : MeasurableSet s
x✝ : μ s < ⊤
⊢ ∫⁻ (x : α) in s, f x ∂μ = ∫⁻ (x : α) in s, g x ∂μ
state_after: no goals
Theorem: Subgroup.Normal.map
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

tactic: rw [← normalizer_eq_top, ← top_le_iff, ← f.range_top_of_surjective hf, f.range_eq_map, ←
  normalizer_eq_top.2 h]
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
H✝ H : Subgroup G
h : H.Normal
f : G →* N
hf : Surjective ⇑f
⊢ (Subgroup.map f H).Normal
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
H✝ H : Subgroup G
h : H.Normal
f : G →* N
hf : Surjective ⇑f
⊢ Subgroup.map f H.normalizer ≤ (Subgroup.map f H).normalizer

tactic: exact le_normalizer_map _
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
H✝ H : Subgroup G
h : H.Normal
f : G →* N
hf : Surjective ⇑f
⊢ Subgroup.map f H.normalizer ≤ (Subgroup.map f H).normalizer
state_after: no goals
Theorem: tprod_empty
File: Mathlib/Topology/Algebra/InfiniteSum/Basic.lean

tactic: rw [tprod_eq_prod (s := (∅ : Finset β))] <;> simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f g : β → α
a a₁ a₂ : α
inst✝ : IsEmpty β
⊢ ∏' (b : β), f b = 1
state_after: no goals
Theorem: UpperSet.map_Ici
File: Mathlib/Order/UpperLower/Basic.lean

tactic: ext
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s : UpperSet α
a✝ b : α
f : α ≃o β
a : α
⊢ (map f) (Ici a) = Ici (f a)
state_after: case a.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s : UpperSet α
a✝ b : α
f : α ≃o β
a : α
x✝ : β
⊢ x✝ ∈ ↑((map f) (Ici a)) ↔ x✝ ∈ ↑(Ici (f a))

tactic: simp
state_before: case a.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s : UpperSet α
a✝ b : α
f : α ≃o β
a : α
x✝ : β
⊢ x✝ ∈ ↑((map f) (Ici a)) ↔ x✝ ∈ ↑(Ici (f a))
state_after: no goals
Theorem: Field.finSepDegree_mul_finInsepDegree
File: Mathlib/FieldTheory/PurelyInseparable.lean

tactic: by_cases halg : Algebra.IsAlgebraic F E
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
⊢ finSepDegree F E * finInsepDegree F E = finrank F E
state_after: case pos
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
halg : Algebra.IsAlgebraic F E
⊢ finSepDegree F E * finInsepDegree F E = finrank F E

case neg
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
halg : ¬Algebra.IsAlgebraic F E
⊢ finSepDegree F E * finInsepDegree F E = finrank F E

tactic: rw [finInsepDegree, finrank_of_infinite_dimensional (K := F) (V := E) fun _ ↦
    halg (Algebra.IsAlgebraic.of_finite F E),
  finrank_of_infinite_dimensional (K := separableClosure F E) (V := E) fun _ ↦
    halg ((separableClosure.isAlgebraic F E).trans),
  mul_zero]
state_before: case neg
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
halg : ¬Algebra.IsAlgebraic F E
⊢ finSepDegree F E * finInsepDegree F E = finrank F E
state_after: no goals

tactic: have := congr_arg Cardinal.toNat (sepDegree_mul_insepDegree F E)
state_before: case pos
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
halg : Algebra.IsAlgebraic F E
⊢ finSepDegree F E * finInsepDegree F E = finrank F E
state_after: case pos
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
halg : Algebra.IsAlgebraic F E
this : Cardinal.toNat (sepDegree F E * insepDegree F E) = Cardinal.toNat (Module.rank F E)
⊢ finSepDegree F E * finInsepDegree F E = finrank F E

tactic: rwa [Cardinal.toNat_mul, ← finSepDegree_eq F E] at this
state_before: case pos
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
halg : Algebra.IsAlgebraic F E
this : Cardinal.toNat (sepDegree F E * insepDegree F E) = Cardinal.toNat (Module.rank F E)
⊢ finSepDegree F E * finInsepDegree F E = finrank F E
state_after: no goals
Theorem: AddCommGrp.Colimits.cocone_naturality_components
File: Mathlib/Algebra/Category/Grp/Colimits.lean

tactic: rw [← cocone_naturality F f]
state_before: J : Type u
inst✝ : Category.{v, u} J
F : J ⥤ AddCommGrp
j j' : J
f : j ⟶ j'
x : ↑(F.obj j)
⊢ (coconeMorphism F j') ((F.map f) x) = (coconeMorphism F j) x
state_after: J : Type u
inst✝ : Category.{v, u} J
F : J ⥤ AddCommGrp
j j' : J
f : j ⟶ j'
x : ↑(F.obj j)
⊢ (coconeMorphism F j') ((F.map f) x) = (F.map f ≫ coconeMorphism F j') x

tactic: rfl
state_before: J : Type u
inst✝ : Category.{v, u} J
F : J ⥤ AddCommGrp
j j' : J
f : j ⟶ j'
x : ↑(F.obj j)
⊢ (coconeMorphism F j') ((F.map f) x) = (F.map f ≫ coconeMorphism F j') x
state_after: no goals
Theorem: CircleDeg1Lift.commute_add_int
File: Mathlib/Dynamics/Circle/RotationNumber/TranslationNumber.lean

tactic: simpa [sub_eq_add_neg] using f.commute_sub_nat (n + 1)
state_before: f g : CircleDeg1Lift
n : ℕ
⊢ Function.Commute ⇑f fun x => x + ↑-[n+1]
state_after: no goals
Theorem: Polynomial.associated_of_dvd_of_natDegree_le_of_leadingCoeff
File: Mathlib/Algebra/Polynomial/RingDivision.lean

tactic: rwa [Units.mul_right_dvd]
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p✝ q✝ p q : R[X]
hpq : p ∣ q
h₁ : q.natDegree ≤ p.natDegree
h₂ : q.leadingCoeff ∣ p.leadingCoeff
r : R[X]
hr : q = p * r
u : Rˣ
hu : p.leadingCoeff * ↑u = q.leadingCoeff
⊢ p * ↑((Units.map ↑C) u) ∣ q
state_after: no goals

tactic: simpa [natDegree_mul_C] using h₁
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p✝ q✝ p q : R[X]
hpq : p ∣ q
h₁ : q.natDegree ≤ p.natDegree
h₂ : q.leadingCoeff ∣ p.leadingCoeff
r : R[X]
hr : q = p * r
u : Rˣ
hu : p.leadingCoeff * ↑u = q.leadingCoeff
⊢ q.natDegree ≤ (p * ↑((Units.map ↑C) u)).natDegree
state_after: no goals

tactic: simpa using hu
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p✝ q✝ p q : R[X]
hpq : p ∣ q
h₁ : q.natDegree ≤ p.natDegree
h₂ : q.leadingCoeff ∣ p.leadingCoeff
r : R[X]
hr : q = p * r
u : Rˣ
hu : p.leadingCoeff * ↑u = q.leadingCoeff
⊢ (p * ↑((Units.map ↑C) u)).leadingCoeff = q.leadingCoeff
state_after: no goals
Theorem: WithTop.pred_untop
File: Mathlib/Order/SuccPred/Basic.lean

tactic: induction a <;> simp
state_before: α : Type u_1
β : Type u_2
inst✝² : Preorder α
inst✝¹ : OrderTop α
inst✝ : PredOrder α
a : WithTop α
ha : a ≠ ⊤
⊢ pred a ≠ ⊤
state_after: no goals
Theorem: multiplicity.ne_top_iff_finite
File: Mathlib/RingTheory/Multiplicity.lean

tactic: rw [Ne, eq_top_iff_not_finite, Classical.not_not]
state_before: α : Type u_1
β : Type u_2
inst✝³ : Monoid α
inst✝² : Monoid β
inst✝¹ : DecidableRel fun x x_1 => x ∣ x_1
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a b : α
⊢ multiplicity a b ≠ ⊤ ↔ Finite a b
state_after: no goals
Theorem: CategoryTheory.ShortComplex.RightHomologyData.isIso_p
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

tactic: rw [hf, 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
hf : S.f = 0
⊢ S.f ≫ 𝟙 S.X₂ = 0
state_after: no goals

tactic: simp only [← cancel_epi h.p, p_descQ_assoc, id_comp, 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
hf : S.f = 0
⊢ h.descQ (𝟙 S.X₂) ⋯ ≫ h.p = 𝟙 h.Q
state_after: no goals
Theorem: AlgebraicGeometry.StructureSheaf.isUnit_toStalk
File: Mathlib/AlgebraicGeometry/StructureSheaf.lean

tactic: erw [← germ_toOpen R (PrimeSpectrum.basicOpen (f : R)) ⟨x, f.2⟩ (f : R)]
state_before: R : Type u
inst✝ : CommRing R
x : ↑(PrimeSpectrum.Top R)
f : ↥x.asIdeal.primeCompl
⊢ IsUnit ((toStalk R x) ↑f)
state_after: R : Type u
inst✝ : CommRing R
x : ↑(PrimeSpectrum.Top R)
f : ↥x.asIdeal.primeCompl
⊢ IsUnit (((structureSheaf R).presheaf.germ ⟨x, ⋯⟩) ((toOpen R (PrimeSpectrum.basicOpen ↑f)) ↑f))

tactic: exact RingHom.isUnit_map _ (isUnit_to_basicOpen_self R f)
state_before: R : Type u
inst✝ : CommRing R
x : ↑(PrimeSpectrum.Top R)
f : ↥x.asIdeal.primeCompl
⊢ IsUnit (((structureSheaf R).presheaf.germ ⟨x, ⋯⟩) ((toOpen R (PrimeSpectrum.basicOpen ↑f)) ↑f))
state_after: no goals
Theorem: sSup_image2
File: Mathlib/Order/CompleteLattice.lean

tactic: rw [← image_prod, sSup_image, biSup_prod]
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : CompleteLattice α
f✝ g s✝ t✝ : ι → α
a b : α
f : β → γ → α
s : Set β
t : Set γ
⊢ sSup (image2 f s t) = ⨆ a ∈ s, ⨆ b ∈ t, f a b
state_after: no goals
Theorem: ENNReal.not_lt_zero
File: Mathlib/Data/ENNReal/Operations.lean

tactic: simp
state_before: a b c d : ℝ≥0∞
r p q : ℝ≥0
⊢ ¬a < 0
state_after: no goals
Theorem: Set.sUnion_eq_compl_sInter_compl
File: Mathlib/Data/Set/Lattice.lean

tactic: rw [← compl_compl (⋃₀S), compl_sUnion]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
S : Set (Set α)
⊢ ⋃₀ S = (⋂₀ (compl '' S))ᶜ
state_after: no goals
Theorem: QuaternionGroup.orderOf_a
File: Mathlib/GroupTheory/SpecificGroups/Quaternion.lean

tactic: conv_lhs => rw [← ZMod.natCast_zmod_val i]
state_before: n : ℕ
inst✝ : NeZero n
i : ZMod (2 * n)
⊢ orderOf (a i) = 2 * n / (2 * n).gcd i.val
state_after: n : ℕ
inst✝ : NeZero n
i : ZMod (2 * n)
⊢ orderOf (a ↑i.val) = 2 * n / (2 * n).gcd i.val

tactic: rw [← a_one_pow, orderOf_pow, orderOf_a_one]
state_before: n : ℕ
inst✝ : NeZero n
i : ZMod (2 * n)
⊢ orderOf (a ↑i.val) = 2 * n / (2 * n).gcd i.val
state_after: no goals
Theorem: Affine.Simplex.face_centroid_eq_centroid
File: Mathlib/LinearAlgebra/AffineSpace/Independent.lean

tactic: convert (Finset.univ.centroid_map k (fs.orderEmbOfFin h).toEmbedding s.points).symm
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
s : Simplex k P n
fs : Finset (Fin (n + 1))
m : ℕ
h : fs.card = m + 1
⊢ centroid k univ (s.face h).points = centroid k fs s.points
state_after: case h.e'_3.h.e'_9
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
s : Simplex k P n
fs : Finset (Fin (n + 1))
m : ℕ
h : fs.card = m + 1
⊢ fs = map (fs.orderEmbOfFin h).toEmbedding univ

tactic: rw [← Finset.coe_inj, Finset.coe_map, Finset.coe_univ, Set.image_univ]
state_before: case h.e'_3.h.e'_9
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
s : Simplex k P n
fs : Finset (Fin (n + 1))
m : ℕ
h : fs.card = m + 1
⊢ fs = map (fs.orderEmbOfFin h).toEmbedding univ
state_after: case h.e'_3.h.e'_9
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
s : Simplex k P n
fs : Finset (Fin (n + 1))
m : ℕ
h : fs.card = m + 1
⊢ ↑fs = Set.range ⇑(fs.orderEmbOfFin h).toEmbedding

tactic: simp
state_before: case h.e'_3.h.e'_9
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
s : Simplex k P n
fs : Finset (Fin (n + 1))
m : ℕ
h : fs.card = m + 1
⊢ ↑fs = Set.range ⇑(fs.orderEmbOfFin h).toEmbedding
state_after: no goals
Theorem: SimpleGraph.le_girth
File: Mathlib/Combinatorics/SimpleGraph/Girth.lean

tactic: simp [girth]
state_before: α : Type u_1
G : SimpleGraph α
n : ℕ∞
⊢ n ≤ G.girth ↔ ∀ (a : α) (w : G.Walk a a), w.IsCycle → n ≤ ↑w.length
state_after: no goals
Theorem: inv_nonpos
File: Mathlib/Algebra/Order/Field/Defs.lean

tactic: simp only [← not_lt, inv_pos]
state_before: α : Type u_1
inst✝ : LinearOrderedSemifield α
a b : α
⊢ a⁻¹ ≤ 0 ↔ a ≤ 0
state_after: no goals
Theorem: CategoryTheory.Subgroupoid.inv_mem_iff
File: Mathlib/CategoryTheory/Groupoid/Subgroupoid.lean

tactic: constructor
state_before: C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c d : C
f : c ⟶ d
⊢ Groupoid.inv f ∈ S.arrows d c ↔ f ∈ S.arrows c d
state_after: case mp
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c d : C
f : c ⟶ d
⊢ Groupoid.inv f ∈ S.arrows d c → f ∈ S.arrows c d

case mpr
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c d : C
f : c ⟶ d
⊢ f ∈ S.arrows c d → Groupoid.inv f ∈ S.arrows d c

tactic: intro h
state_before: case mp
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c d : C
f : c ⟶ d
⊢ Groupoid.inv f ∈ S.arrows d c → f ∈ S.arrows c d
state_after: case mp
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c d : C
f : c ⟶ d
h : Groupoid.inv f ∈ S.arrows d c
⊢ f ∈ S.arrows c d

tactic: simpa only [inv_eq_inv, IsIso.inv_inv] using S.inv h
state_before: case mp
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c d : C
f : c ⟶ d
h : Groupoid.inv f ∈ S.arrows d c
⊢ f ∈ S.arrows c d
state_after: no goals

tactic: apply S.inv
state_before: case mpr
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c d : C
f : c ⟶ d
⊢ f ∈ S.arrows c d → Groupoid.inv f ∈ S.arrows d c
state_after: no goals
Theorem: Nat.Prime.dvd_choose_add
File: Mathlib/Data/Nat/Choose/Dvd.lean

tactic: have h₁ : p ∣ (a + b)! := hp.dvd_factorial.2 h
state_before: p a b k : ℕ
hp : Prime p
hap : a < p
hbp : b < p
h : p ≤ a + b
⊢ p ∣ (a + b).choose a
state_after: p a b k : ℕ
hp : Prime p
hap : a < p
hbp : b < p
h : p ≤ a + b
h₁ : p ∣ (a + b)!
⊢ p ∣ (a + b).choose a

tactic: rw [← add_choose_mul_factorial_mul_factorial, ← choose_symm_add, hp.dvd_mul, hp.dvd_mul,
  hp.dvd_factorial, hp.dvd_factorial] at h₁
state_before: p a b k : ℕ
hp : Prime p
hap : a < p
hbp : b < p
h : p ≤ a + b
h₁ : p ∣ (a + b)!
⊢ p ∣ (a + b).choose a
state_after: p a b k : ℕ
hp : Prime p
hap : a < p
hbp : b < p
h : p ≤ a + b
h₁ : (p ∣ (a + b).choose a ∨ p ≤ a) ∨ p ≤ b
⊢ p ∣ (a + b).choose a

tactic: exact (h₁.resolve_right hbp.not_le).resolve_right hap.not_le
state_before: p a b k : ℕ
hp : Prime p
hap : a < p
hbp : b < p
h : p ≤ a + b
h₁ : (p ∣ (a + b).choose a ∨ p ≤ a) ∨ p ≤ b
⊢ p ∣ (a + b).choose a
state_after: no goals
Theorem: CategoryTheory.Limits.IsImage.fac_lift
File: Mathlib/CategoryTheory/Limits/Shapes/Images.lean

tactic: simp
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : X ⟶ Y
F : MonoFactorisation f
hF : IsImage F
F' : MonoFactorisation f
⊢ (F.e ≫ hF.lift F') ≫ F'.m = F'.e ≫ F'.m
state_after: no goals
Theorem: Polynomial.IsPrimitive.mul
File: Mathlib/RingTheory/Polynomial/Content.lean

tactic: rw [isPrimitive_iff_content_eq_one, content_mul, hp.content_eq_one, hq.content_eq_one, mul_one]
state_before: R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p q : R[X]
hp : p.IsPrimitive
hq : q.IsPrimitive
⊢ (p * q).IsPrimitive
state_after: no goals
Theorem: LinearMap.dualMap_injective_of_surjective
File: Mathlib/LinearAlgebra/Dual.lean

tactic: intro φ ψ h
state_before: R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f : M₁ →ₗ[R] M₂
hf : Function.Surjective ⇑f
⊢ Function.Injective ⇑f.dualMap
state_after: R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f : M₁ →ₗ[R] M₂
hf : Function.Surjective ⇑f
φ ψ : Dual R M₂
h : f.dualMap φ = f.dualMap ψ
⊢ φ = ψ

tactic: ext x
state_before: R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f : M₁ →ₗ[R] M₂
hf : Function.Surjective ⇑f
φ ψ : Dual R M₂
h : f.dualMap φ = f.dualMap ψ
⊢ φ = ψ
state_after: case h
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f : M₁ →ₗ[R] M₂
hf : Function.Surjective ⇑f
φ ψ : Dual R M₂
h : f.dualMap φ = f.dualMap ψ
x : M₂
⊢ φ x = ψ x

tactic: obtain ⟨y, rfl⟩ := hf x
state_before: case h
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f : M₁ →ₗ[R] M₂
hf : Function.Surjective ⇑f
φ ψ : Dual R M₂
h : f.dualMap φ = f.dualMap ψ
x : M₂
⊢ φ x = ψ x
state_after: case h.intro
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f : M₁ →ₗ[R] M₂
hf : Function.Surjective ⇑f
φ ψ : Dual R M₂
h : f.dualMap φ = f.dualMap ψ
y : M₁
⊢ φ (f y) = ψ (f y)

tactic: exact congr_arg (fun g : Module.Dual R M₁ => g y) h
state_before: case h.intro
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f : M₁ →ₗ[R] M₂
hf : Function.Surjective ⇑f
φ ψ : Dual R M₂
h : f.dualMap φ = f.dualMap ψ
y : M₁
⊢ φ (f y) = ψ (f y)
state_after: no goals