ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Matrix.Fin.circulant_mul_comm
File: Mathlib/LinearAlgebra/Matrix/Circulant.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
R : Type u_5
inst✝¹ : CommSemigroup α
inst✝ : AddCommMonoid α
⊢ ∀ (v w : Fin 0 → α), circulant v * circulant w = circulant w * circulant v
state_after: no goals
tactic: simp [Injective]
Theorem: MeasureTheory.lmarginal_congr
File: Mathlib/MeasureTheory/Integral/Marginal.lean

Proof steps:
state_before: δ : Type u_1
δ' : Type u_2
π : δ → Type u_3
inst✝² : (x : δ) → MeasurableSpace (π x)
μ : (i : δ) → Measure (π i)
inst✝¹ : ∀ (i : δ), SigmaFinite (μ i)
inst✝ : DecidableEq δ
s t : Finset δ
f✝ g : ((i : δ) → π i) → ℝ≥0∞
x✝ y✝ : (i : δ) → π i
i : δ
x y : (i : δ) → π i
f : ((i : δ) → π i) → ℝ≥0∞
h : ∀ i ∉ s, x i = y i
⊢ (∫⋯∫⁻_s, f ∂μ) x = (∫⋯∫⁻_s, f ∂μ) y
state_after: δ : Type u_1
δ' : Type u_2
π : δ → Type u_3
inst✝² : (x : δ) → MeasurableSpace (π x)
μ : (i : δ) → Measure (π i)
inst✝¹ : ∀ (i : δ), SigmaFinite (μ i)
inst✝ : DecidableEq δ
s t : Finset δ
f✝ g : ((i : δ) → π i) → ℝ≥0∞
x✝ y✝ : (i : δ) → π i
i : δ
x y : (i : δ) → π i
f : ((i : δ) → π i) → ℝ≥0∞
h : ∀ i ∉ s, x i = y i
⊢ (∫⁻ (y : (i : { x // x ∈ s }) → π ↑i), f fun i => if hi : i ∈ s then y ⟨i, hi⟩ else x i ∂Measure.pi fun i => μ ↑i) =
    ∫⁻ (y_1 : (i : { x // x ∈ s }) → π ↑i), f fun i => if hi : i ∈ s then y_1 ⟨i, hi⟩ else y i ∂Measure.pi fun i => μ ↑i
tactic: dsimp [lmarginal, updateFinset_def]
state_before: δ : Type u_1
δ' : Type u_2
π : δ → Type u_3
inst✝² : (x : δ) → MeasurableSpace (π x)
μ : (i : δ) → Measure (π i)
inst✝¹ : ∀ (i : δ), SigmaFinite (μ i)
inst✝ : DecidableEq δ
s t : Finset δ
f✝ g : ((i : δ) → π i) → ℝ≥0∞
x✝ y✝ : (i : δ) → π i
i : δ
x y : (i : δ) → π i
f : ((i : δ) → π i) → ℝ≥0∞
h : ∀ i ∉ s, x i = y i
⊢ (∫⁻ (y : (i : { x // x ∈ s }) → π ↑i), f fun i => if hi : i ∈ s then y ⟨i, hi⟩ else x i ∂Measure.pi fun i => μ ↑i) =
    ∫⁻ (y_1 : (i : { x // x ∈ s }) → π ↑i), f fun i => if hi : i ∈ s then y_1 ⟨i, hi⟩ else y i ∂Measure.pi fun i => μ ↑i
state_after: case e_f.h.e_a.h.e_e.h
δ : Type u_1
δ' : Type u_2
π : δ → Type u_3
inst✝² : (x : δ) → MeasurableSpace (π x)
μ : (i : δ) → Measure (π i)
inst✝¹ : ∀ (i : δ), SigmaFinite (μ i)
inst✝ : DecidableEq δ
s t : Finset δ
f✝ g : ((i : δ) → π i) → ℝ≥0∞
x✝³ y✝ : (i : δ) → π i
i : δ
x y : (i : δ) → π i
f : ((i : δ) → π i) → ℝ≥0∞
h : ∀ i ∉ s, x i = y i
x✝² : (i : { x // x ∈ s }) → π ↑i
x✝¹ : δ
x✝ : x✝¹ ∉ s
⊢ x x✝¹ = y x✝¹
tactic: rcongr
state_before: case e_f.h.e_a.h.e_e.h
δ : Type u_1
δ' : Type u_2
π : δ → Type u_3
inst✝² : (x : δ) → MeasurableSpace (π x)
μ : (i : δ) → Measure (π i)
inst✝¹ : ∀ (i : δ), SigmaFinite (μ i)
inst✝ : DecidableEq δ
s t : Finset δ
f✝ g : ((i : δ) → π i) → ℝ≥0∞
x✝³ y✝ : (i : δ) → π i
i : δ
x y : (i : δ) → π i
f : ((i : δ) → π i) → ℝ≥0∞
h : ∀ i ∉ s, x i = y i
x✝² : (i : { x // x ∈ s }) → π ↑i
x✝¹ : δ
x✝ : x✝¹ ∉ s
⊢ x x✝¹ = y x✝¹
state_after: no goals
tactic: exact h _ ‹_›
Theorem: Finset.eraseNone_inter
File: Mathlib/Data/Finset/Option.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : DecidableEq (Option α)
inst✝ : DecidableEq α
s t : Finset (Option α)
⊢ eraseNone (s ∩ t) = eraseNone s ∩ eraseNone t
state_after: case a
α : Type u_1
β : Type u_2
inst✝¹ : DecidableEq (Option α)
inst✝ : DecidableEq α
s t : Finset (Option α)
a✝ : α
⊢ a✝ ∈ eraseNone (s ∩ t) ↔ a✝ ∈ eraseNone s ∩ eraseNone t
tactic: ext
state_before: case a
α : Type u_1
β : Type u_2
inst✝¹ : DecidableEq (Option α)
inst✝ : DecidableEq α
s t : Finset (Option α)
a✝ : α
⊢ a✝ ∈ eraseNone (s ∩ t) ↔ a✝ ∈ eraseNone s ∩ eraseNone t
state_after: no goals
tactic: simp
Theorem: ite_add_zero
File: Mathlib/Algebra/Group/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M✝ : Type u_4
M : Type u
inst✝¹ : MulOneClass M
P : Prop
inst✝ : Decidable P
a b : M
⊢ (if P then a * b else 1) = (if P then a else 1) * if P then b else 1
state_after: no goals
tactic: by_cases h : P <;> simp [h]
Theorem: CategoryTheory.Idempotents.instNeg_neg
File: Mathlib/CategoryTheory/Idempotents/Karoubi.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{?u.22117, u_1} C
inst✝ : Preadditive C
P Q : Karoubi C
f : P ⟶ Q
⊢ -f.f = P.p ≫ (-f.f) ≫ Q.p
state_after: no goals
tactic: simpa only [neg_comp, comp_neg, neg_inj] using f.comm
Theorem: Continuous.tendsto_nhdsSet_nhds
File: Mathlib/Topology/NhdsSet.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ : Filter X
s t s₁ s₂ t₁ t₂ : Set X
x : X
y : Y
f : X → Y
h : Continuous f
h' : EqOn f (fun x => y) s
⊢ Tendsto f (𝓝ˢ s) (𝓝 y)
state_after: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ : Filter X
s t s₁ s₂ t₁ t₂ : Set X
x : X
y : Y
f : X → Y
h : Continuous f
h' : EqOn f (fun x => y) s
⊢ Tendsto f (𝓝ˢ s) (𝓝ˢ {y})
tactic: rw [← nhdsSet_singleton]
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ : Filter X
s t s₁ s₂ t₁ t₂ : Set X
x : X
y : Y
f : X → Y
h : Continuous f
h' : EqOn f (fun x => y) s
⊢ Tendsto f (𝓝ˢ s) (𝓝ˢ {y})
state_after: no goals
tactic: exact h.tendsto_nhdsSet h'
Theorem: CategoryTheory.Bicategory.pentagon_inv
File: Mathlib/CategoryTheory/Bicategory/Basic.lean

Proof steps:
state_before: B : Type u
inst✝ : Bicategory B
a b c d e : B
f : a ⟶ b
g : b ⟶ c
h : c ⟶ d
i : d ⟶ e
⊢ inv (f ◁ (α_ g h i).inv ≫ (α_ f (g ≫ h) i).inv ≫ (α_ f g h).inv ▷ i) =
    inv ((α_ f g (h ≫ i)).inv ≫ (α_ (f ≫ g) h i).inv)
state_after: no goals
tactic: simp
Theorem: Bornology.ext
File: Mathlib/Topology/Bornology/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
t t' : Bornology α
h_cobounded : cobounded α = cobounded α
⊢ t = t'
state_after: case mk
ι : Type u_1
α : Type u_2
β : Type u_3
t' : Bornology α
cobounded'✝ : Filter α
le_cofinite'✝ : cobounded'✝ ≤ cofinite
h_cobounded : cobounded α = cobounded α
⊢ { cobounded' := cobounded'✝, le_cofinite' := le_cofinite'✝ } = t'
tactic: cases t
state_before: case mk
ι : Type u_1
α : Type u_2
β : Type u_3
t' : Bornology α
cobounded'✝ : Filter α
le_cofinite'✝ : cobounded'✝ ≤ cofinite
h_cobounded : cobounded α = cobounded α
⊢ { cobounded' := cobounded'✝, le_cofinite' := le_cofinite'✝ } = t'
state_after: case mk.mk
ι : Type u_1
α : Type u_2
β : Type u_3
cobounded'✝¹ : Filter α
le_cofinite'✝¹ : cobounded'✝¹ ≤ cofinite
cobounded'✝ : Filter α
le_cofinite'✝ : cobounded'✝ ≤ cofinite
h_cobounded : cobounded α = cobounded α
⊢ { cobounded' := cobounded'✝¹, le_cofinite' := le_cofinite'✝¹ } =
    { cobounded' := cobounded'✝, le_cofinite' := le_cofinite'✝ }
tactic: cases t'
state_before: case mk.mk
ι : Type u_1
α : Type u_2
β : Type u_3
cobounded'✝¹ : Filter α
le_cofinite'✝¹ : cobounded'✝¹ ≤ cofinite
cobounded'✝ : Filter α
le_cofinite'✝ : cobounded'✝ ≤ cofinite
h_cobounded : cobounded α = cobounded α
⊢ { cobounded' := cobounded'✝¹, le_cofinite' := le_cofinite'✝¹ } =
    { cobounded' := cobounded'✝, le_cofinite' := le_cofinite'✝ }
state_after: no goals
tactic: congr
Theorem: CategoryTheory.WithInitial.map₂_app
File: Mathlib/CategoryTheory/WithTerminal.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
D : Type u_1
inst✝ : Category.{?u.282116, u_1} D
F G : C ⥤ D
η : F ⟶ G
⊢ ∀ ⦃X Y : WithInitial C⦄ (f : X ⟶ Y),
    (map F).map f ≫
        (fun X =>
            match X with
            | of x => η.app x
            | star => 𝟙 star)
          Y =
      (fun X =>
            match X with
            | of x => η.app x
            | star => 𝟙 star)
          X ≫
        (map G).map f
state_after: C : Type u
inst✝¹ : Category.{v, u} C
D : Type u_1
inst✝ : Category.{?u.282116, u_1} D
F G : C ⥤ D
η : F ⟶ G
X Y : WithInitial C
f : X ⟶ Y
⊢ (map F).map f ≫
      (fun X =>
          match X with
          | of x => η.app x
          | star => 𝟙 star)
        Y =
    (fun X =>
          match X with
          | of x => η.app x
          | star => 𝟙 star)
        X ≫
      (map G).map f
tactic: intro X Y f
state_before: C : Type u
inst✝¹ : Category.{v, u} C
D : Type u_1
inst✝ : Category.{?u.282116, u_1} D
F G : C ⥤ D
η : F ⟶ G
X Y : WithInitial C
f : X ⟶ Y
⊢ (map F).map f ≫
      (fun X =>
          match X with
          | of x => η.app x
          | star => 𝟙 star)
        Y =
    (fun X =>
          match X with
          | of x => η.app x
          | star => 𝟙 star)
        X ≫
      (map G).map f
state_after: no goals
tactic: match X, Y, f with
    | of x, of y, f => exact η.naturality f
    | star, of x, _ => rfl
    | star, star, _ => rfl
Theorem: Finset.finsetCongr_piAntidiag_eq_antidiag
File: Mathlib/Algebra/Order/Antidiag/Pi.lean

Proof steps:
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝¹ : μ
s : Finset ι
n✝ : μ
f : ι → μ
n : μ
⊢ (Equiv.boolArrowEquivProd μ).finsetCongr (univ.piAntidiag n) = antidiagonal n
state_after: case a.mk
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝¹ : μ
s : Finset ι
n✝ : μ
f : ι → μ
n x₁ x₂ : μ
⊢ (x₁, x₂) ∈ (Equiv.boolArrowEquivProd μ).finsetCongr (univ.piAntidiag n) ↔ (x₁, x₂) ∈ antidiagonal n
tactic: ext ⟨x₁, x₂⟩
state_before: case a.mk
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝¹ : μ
s : Finset ι
n✝ : μ
f : ι → μ
n x₁ x₂ : μ
⊢ (x₁, x₂) ∈ (Equiv.boolArrowEquivProd μ).finsetCongr (univ.piAntidiag n) ↔ (x₁, x₂) ∈ antidiagonal n
state_after: case a.mk
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝¹ : μ
s : Finset ι
n✝ : μ
f : ι → μ
n x₁ x₂ : μ
⊢ (∃ a ∈ univ.piAntidiag n, a = (Equiv.boolArrowEquivProd μ).symm (x₁, x₂)) ↔ (x₁, x₂) ∈ antidiagonal n
tactic: simp_rw [Equiv.finsetCongr_apply, mem_map, Equiv.toEmbedding, Function.Embedding.coeFn_mk,
    ← Equiv.eq_symm_apply]
state_before: case a.mk
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝¹ : μ
s : Finset ι
n✝ : μ
f : ι → μ
n x₁ x₂ : μ
⊢ (∃ a ∈ univ.piAntidiag n, a = (Equiv.boolArrowEquivProd μ).symm (x₁, x₂)) ↔ (x₁, x₂) ∈ antidiagonal n
state_after: no goals
tactic: simp [add_comm]
Theorem: List.mem_lookupAll
File: Mathlib/Data/List/Sigma.lean

Proof steps:
state_before: α : Type u
β : α → Type v
l l₁ l₂ : List (Sigma β)
inst✝ : DecidableEq α
a : α
b : β a
⊢ b ∈ lookupAll a [] ↔ ⟨a, b⟩ ∈ []
state_after: no goals
tactic: simp
state_before: α : Type u
β : α → Type v
l✝ l₁ l₂ : List (Sigma β)
inst✝ : DecidableEq α
a : α
b : β a
a' : α
b' : β a'
l : List (Sigma β)
⊢ b ∈ lookupAll a (⟨a', b'⟩ :: l) ↔ ⟨a, b⟩ ∈ ⟨a', b'⟩ :: l
state_after: case pos
α : Type u
β : α → Type v
l✝ l₁ l₂ : List (Sigma β)
inst✝ : DecidableEq α
a : α
b : β a
a' : α
b' : β a'
l : List (Sigma β)
h : a = a'
⊢ b ∈ lookupAll a (⟨a', b'⟩ :: l) ↔ ⟨a, b⟩ ∈ ⟨a', b'⟩ :: l

case neg
α : Type u
β : α → Type v
l✝ l₁ l₂ : List (Sigma β)
inst✝ : DecidableEq α
a : α
b : β a
a' : α
b' : β a'
l : List (Sigma β)
h : ¬a = a'
⊢ b ∈ lookupAll a (⟨a', b'⟩ :: l) ↔ ⟨a, b⟩ ∈ ⟨a', b'⟩ :: l
tactic: by_cases h : a = a'
Theorem: CategoryTheory.IsPushout.inr_isoPushout_inv
File: Mathlib/CategoryTheory/Limits/Shapes/Pullback/CommSq.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
Z X Y P : C
f : Z ⟶ X
g : Z ⟶ Y
inl : X ⟶ P
inr : Y ⟶ P
h : IsPushout f g inl inr
inst✝ : HasPushout f g
⊢ pushout.inr f g ≫ h.isoPushout.inv = inr
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
Z X Y P : C
f : Z ⟶ X
g : Z ⟶ Y
inl : X ⟶ P
inr : Y ⟶ P
h : IsPushout f g inl inr
inst✝ : HasPushout f g
⊢ pushout.inr f g ≫ (colimit.isoColimitCocone { cocone := PushoutCocone.mk inl inr ⋯, isColimit := h.isColimit }).hom =
    inr
tactic: dsimp [isoPushout, cocone, CommSq.cocone]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
Z X Y P : C
f : Z ⟶ X
g : Z ⟶ Y
inl : X ⟶ P
inr : Y ⟶ P
h : IsPushout f g inl inr
inst✝ : HasPushout f g
⊢ pushout.inr f g ≫ (colimit.isoColimitCocone { cocone := PushoutCocone.mk inl inr ⋯, isColimit := h.isColimit }).hom =
    inr
state_after: no goals
tactic: simp
Theorem: Set.Definable.image_comp_equiv
File: Mathlib/ModelTheory/Definability.lean

Proof steps:
state_before: M : Type w
A : Set M
L : Language
inst✝ : L.Structure M
α : Type u₁
β : Type u_1
B : Set M
s✝ : Set (α → M)
s : Set (β → M)
h : A.Definable L s
f : α ≃ β
⊢ A.Definable L ((fun g => g ∘ ⇑f) '' s)
state_after: M : Type w
A : Set M
L : Language
inst✝ : L.Structure M
α : Type u₁
β : Type u_1
B : Set M
s✝ : Set (α → M)
s : Set (β → M)
h : A.Definable L s
f : α ≃ β
⊢ (fun g => g ∘ ⇑f.symm) ⁻¹' s = (fun g => g ∘ ⇑f) '' s
tactic: refine (congr rfl ?_).mp (h.preimage_comp f.symm)
state_before: M : Type w
A : Set M
L : Language
inst✝ : L.Structure M
α : Type u₁
β : Type u_1
B : Set M
s✝ : Set (α → M)
s : Set (β → M)
h : A.Definable L s
f : α ≃ β
⊢ (fun g => g ∘ ⇑f.symm) ⁻¹' s = (fun g => g ∘ ⇑f) '' s
state_after: case h₁
M : Type w
A : Set M
L : Language
inst✝ : L.Structure M
α : Type u₁
β : Type u_1
B : Set M
s✝ : Set (α → M)
s : Set (β → M)
h : A.Definable L s
f : α ≃ β
⊢ Function.LeftInverse (fun g => g ∘ ⇑f.symm) fun g => g ∘ ⇑f

case h₂
M : Type w
A : Set M
L : Language
inst✝ : L.Structure M
α : Type u₁
β : Type u_1
B : Set M
s✝ : Set (α → M)
s : Set (β → M)
h : A.Definable L s
f : α ≃ β
⊢ Function.RightInverse (fun g => g ∘ ⇑f.symm) fun g => g ∘ ⇑f
tactic: rw [image_eq_preimage_of_inverse]
Theorem: PiTensorProduct.reindex_tprod
File: Mathlib/LinearAlgebra/PiTensorProduct.lean

Proof steps:
state_before: ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
e : ι ≃ ι₂
f : (i : ι) → s i
⊢ (reindex R s e) ((tprod R) f) = (tprod R) fun i => f (e.symm i)
state_after: ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
e : ι ≃ ι₂
f : (i : ι) → s i
⊢ (lift { toFun := ⇑(tprod R) ∘ ⇑(Equiv.piCongrLeft' s e), map_add' := ⋯, map_smul' := ⋯ }) ((tprod R) f) =
    (tprod R) fun i => f (e.symm i)
tactic: dsimp [reindex]
state_before: ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
e : ι ≃ ι₂
f : (i : ι) → s i
⊢ (lift { toFun := ⇑(tprod R) ∘ ⇑(Equiv.piCongrLeft' s e), map_add' := ⋯, map_smul' := ⋯ }) ((tprod R) f) =
    (tprod R) fun i => f (e.symm i)
state_after: no goals
tactic: exact liftAux_tprod _ f
Theorem: Nat.divisors_mul
File: Mathlib/Data/Finset/NatDivisors.lean

Proof steps:
state_before: m n : ℕ
⊢ (m * n).divisors = m.divisors * n.divisors
state_after: case a
m n k : ℕ
⊢ k ∈ (m * n).divisors ↔ k ∈ m.divisors * n.divisors
tactic: ext k
state_before: case a
m n k : ℕ
⊢ k ∈ (m * n).divisors ↔ k ∈ m.divisors * n.divisors
state_after: case a
m n k : ℕ
⊢ (∃ x x_1, (x ∣ m ∧ x_1 ∣ n ∧ x * x_1 = k) ∧ m ≠ 0 ∧ n ≠ 0) ↔ ∃ y x, (y ∣ m ∧ m ≠ 0) ∧ (x ∣ n ∧ n ≠ 0) ∧ y * x = k
tactic: simp_rw [mem_mul, mem_divisors, dvd_mul, mul_ne_zero_iff, ← exists_and_left, ← exists_and_right]
state_before: case a
m n k : ℕ
⊢ (∃ x x_1, (x ∣ m ∧ x_1 ∣ n ∧ x * x_1 = k) ∧ m ≠ 0 ∧ n ≠ 0) ↔ ∃ y x, (y ∣ m ∧ m ≠ 0) ∧ (x ∣ n ∧ n ≠ 0) ∧ y * x = k
state_after: no goals
tactic: simp only [and_assoc, and_comm, and_left_comm]
Theorem: integrableOn_Ioc_iff_integrableOn_Ioo
File: Mathlib/MeasureTheory/Integral/IntegrableOn.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
inst✝⁴ : MeasurableSpace α
inst✝³ : NormedAddCommGroup E
inst✝² : PartialOrder α
inst✝¹ : MeasurableSingletonClass α
f : α → E
μ : Measure α
a b : α
inst✝ : NoAtoms μ
⊢ μ {b} ≠ ⊤
state_after: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
inst✝⁴ : MeasurableSpace α
inst✝³ : NormedAddCommGroup E
inst✝² : PartialOrder α
inst✝¹ : MeasurableSingletonClass α
f : α → E
μ : Measure α
a b : α
inst✝ : NoAtoms μ
⊢ 0 ≠ ⊤
tactic: rw [measure_singleton]
state_before: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
inst✝⁴ : MeasurableSpace α
inst✝³ : NormedAddCommGroup E
inst✝² : PartialOrder α
inst✝¹ : MeasurableSingletonClass α
f : α → E
μ : Measure α
a b : α
inst✝ : NoAtoms μ
⊢ 0 ≠ ⊤
state_after: no goals
tactic: exact ENNReal.zero_ne_top
Theorem: iter_deriv_pow
File: Mathlib/Analysis/Calculus/Deriv/ZPow.lean

Proof steps:
state_before: 𝕜 : Type u
inst✝² : NontriviallyNormedField 𝕜
E : Type v
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
x✝ : 𝕜
s : Set 𝕜
m : ℤ
n : ℕ
x : 𝕜
k : ℕ
⊢ deriv^[k] (fun x => x ^ n) x = (∏ i ∈ Finset.range k, (↑n - ↑i)) * x ^ (n - k)
state_after: 𝕜 : Type u
inst✝² : NontriviallyNormedField 𝕜
E : Type v
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
x✝ : 𝕜
s : Set 𝕜
m : ℤ
n : ℕ
x : 𝕜
k : ℕ
⊢ (∏ x ∈ Finset.range k, (↑n - ↑x)) * x ^ (↑n - ↑k) = (∏ i ∈ Finset.range k, (↑n - ↑i)) * x ^ ↑(n - k)
tactic: simp only [← zpow_natCast, iter_deriv_zpow, Int.cast_natCast]
state_before: 𝕜 : Type u
inst✝² : NontriviallyNormedField 𝕜
E : Type v
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
x✝ : 𝕜
s : Set 𝕜
m : ℤ
n : ℕ
x : 𝕜
k : ℕ
⊢ (∏ x ∈ Finset.range k, (↑n - ↑x)) * x ^ (↑n - ↑k) = (∏ i ∈ Finset.range k, (↑n - ↑i)) * x ^ ↑(n - k)
state_after: case inl
𝕜 : Type u
inst✝² : NontriviallyNormedField 𝕜
E : Type v
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
x✝ : 𝕜
s : Set 𝕜
m : ℤ
n : ℕ
x : 𝕜
k : ℕ
hkn : k ≤ n
⊢ (∏ x ∈ Finset.range k, (↑n - ↑x)) * x ^ (↑n - ↑k) = (∏ i ∈ Finset.range k, (↑n - ↑i)) * x ^ ↑(n - k)

case inr
𝕜 : Type u
inst✝² : NontriviallyNormedField 𝕜
E : Type v
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
x✝ : 𝕜
s : Set 𝕜
m : ℤ
n : ℕ
x : 𝕜
k : ℕ
hnk : n < k
⊢ (∏ x ∈ Finset.range k, (↑n - ↑x)) * x ^ (↑n - ↑k) = (∏ i ∈ Finset.range k, (↑n - ↑i)) * x ^ ↑(n - k)
tactic: rcases le_or_lt k n with hkn | hnk
Theorem: nhds_inv₀
File: Mathlib/Topology/Algebra/GroupWithZero.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
G₀ : Type u_3
inst✝² : GroupWithZero G₀
inst✝¹ : TopologicalSpace G₀
inst✝ : HasContinuousInv₀ G₀
x : G₀
hx : x ≠ 0
⊢ 𝓝 x⁻¹ = (𝓝 x)⁻¹
state_after: α : Type u_1
β : Type u_2
G₀ : Type u_3
inst✝² : GroupWithZero G₀
inst✝¹ : TopologicalSpace G₀
inst✝ : HasContinuousInv₀ G₀
x : G₀
hx : x ≠ 0
⊢ (𝓝 x⁻¹)⁻¹ ≤ 𝓝 x
tactic: refine le_antisymm (inv_le_iff_le_inv.1 ?_) (tendsto_inv₀ hx)
state_before: α : Type u_1
β : Type u_2
G₀ : Type u_3
inst✝² : GroupWithZero G₀
inst✝¹ : TopologicalSpace G₀
inst✝ : HasContinuousInv₀ G₀
x : G₀
hx : x ≠ 0
⊢ (𝓝 x⁻¹)⁻¹ ≤ 𝓝 x
state_after: no goals
tactic: simpa only [inv_inv] using tendsto_inv₀ (inv_ne_zero hx)
Theorem: QuadraticMap.basisRepr_apply
File: Mathlib/LinearAlgebra/QuadraticForm/Basic.lean

Proof steps:
state_before: S : Type u_1
T : Type u_2
R : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
A : Type u_7
inst✝⁵ : CommSemiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_8
inst✝ : Fintype ι
v : Basis ι R M
Q : QuadraticMap R M N
w : ι → R
⊢ (Q.basisRepr v) w = Q (∑ i : ι, w i • v i)
state_after: S : Type u_1
T : Type u_2
R : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
A : Type u_7
inst✝⁵ : CommSemiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_8
inst✝ : Fintype ι
v : Basis ι R M
Q : QuadraticMap R M N
w : ι → R
⊢ (Q.basisRepr v) w = Q (v.equivFun.symm w)
tactic: rw [← v.equivFun_symm_apply]
state_before: S : Type u_1
T : Type u_2
R : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
A : Type u_7
inst✝⁵ : CommSemiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid N
inst✝¹ : Module R N
ι : Type u_8
inst✝ : Fintype ι
v : Basis ι R M
Q : QuadraticMap R M N
w : ι → R
⊢ (Q.basisRepr v) w = Q (v.equivFun.symm w)
state_after: no goals
tactic: rfl
Theorem: CategoryTheory.unit_mateEquiv_symm
File: Mathlib/CategoryTheory/Adjunction/Mates.lean

Proof steps:
state_before: C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : R₁ ⋙ G ⟶ H ⋙ R₂
c : C
⊢ G.map (adj₁.unit.app c) ≫ α.app (L₁.obj c) =
    adj₂.unit.app (G.obj ((𝟭 C).obj c)) ≫ R₂.map (((mateEquiv adj₁ adj₂).symm α).app ((𝟭 C).obj c))
state_after: C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : R₁ ⋙ G ⟶ H ⋙ R₂
c : C
⊢ G.map (adj₁.unit.app c) ≫ ((mateEquiv adj₁ adj₂).toFun ((mateEquiv adj₁ adj₂).invFun α)).app (L₁.obj c) =
    adj₂.unit.app (G.obj ((𝟭 C).obj c)) ≫ R₂.map (((mateEquiv adj₁ adj₂).symm α).app ((𝟭 C).obj c))
tactic: conv_lhs => rw [← (mateEquiv adj₁ adj₂).right_inv α]
state_before: C : Type u₁
D : Type u₂
E : Type u₃
F : Type u₄
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
inst✝ : Category.{v₄, u₄} F
G : C ⥤ E
H : D ⥤ F
L₁ : C ⥤ D
R₁ : D ⥤ C
L₂ : E ⥤ F
R₂ : F ⥤ E
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
α : R₁ ⋙ G ⟶ H ⋙ R₂
c : C
⊢ G.map (adj₁.unit.app c) ≫ ((mateEquiv adj₁ adj₂).toFun ((mateEquiv adj₁ adj₂).invFun α)).app (L₁.obj c) =
    adj₂.unit.app (G.obj ((𝟭 C).obj c)) ≫ R₂.map (((mateEquiv adj₁ adj₂).symm α).app ((𝟭 C).obj c))
state_after: no goals
tactic: exact (unit_mateEquiv adj₁ adj₂ ((mateEquiv adj₁ adj₂).symm α) c)
Theorem: CategoryTheory.Pi.isoApp_inv
File: Mathlib/CategoryTheory/Pi/Basic.lean

Proof steps:
state_before: I : Type w₀
J : Type w₁
C : I → Type u₁
inst✝ : (i : I) → Category.{v₁, u₁} (C i)
X Y : (i : I) → C i
f : X ≅ Y
i : I
⊢ f.hom i ≫ f.inv i = 𝟙 (X i)
state_after: no goals
tactic: rw [← comp_apply, Iso.hom_inv_id, id_apply]
state_before: I : Type w₀
J : Type w₁
C : I → Type u₁
inst✝ : (i : I) → Category.{v₁, u₁} (C i)
X Y : (i : I) → C i
f : X ≅ Y
i : I
⊢ f.inv i ≫ f.hom i = 𝟙 (Y i)
state_after: no goals
tactic: rw [← comp_apply, Iso.inv_hom_id, id_apply]
Theorem: Turing.ToPartrec.Code.zero_eval
File: Mathlib/Computability/TMToPartrec.lean

Proof steps:
state_before: v : List ℕ
⊢ zero.eval v = pure [0]
state_after: no goals
tactic: simp [zero]
Theorem: Ring.DirectLimit.congr_symm_apply_of
File: Mathlib/Algebra/DirectLimit.lean

Proof steps:
state_before: R : Type u
inst✝⁷ : Ring R
ι : Type v
inst✝⁶ : Preorder ι
G : ι → Type w
inst✝⁵ : (i : ι) → CommRing (G i)
f✝ : (i j : ι) → i ≤ j → G i → G j
f'✝ : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝⁴ : CommRing P
g✝ : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), (g✝ j) (f✝ i j hij x) = (g✝ i) x
f : (i j : ι) → i ≤ j → G i →+* G j
G' : ι → Type v'
inst✝³ : (i : ι) → CommRing (G' i)
f' : (i j : ι) → i ≤ j → G' i →+* G' j
G'' : ι → Type v''
inst✝² : (i : ι) → CommRing (G'' i)
f'' : (i j : ι) → i ≤ j → G'' i →+* G'' j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
e : (i : ι) → G i ≃+* G' i
he : ∀ (i j : ι) (h : i ≤ j), (e j).toRingHom.comp (f i j h) = (f' i j h).comp ↑(e i)
i : ι
g : G' i
⊢ (congr e he).symm ((of G' (fun x x_1 h => ⇑(f' x x_1 h)) i) g) = (of G (fun x x_1 h => ⇑(f x x_1 h)) i) ((e i).symm g)
state_after: no goals
tactic: simp only [congr, RingEquiv.ofHomInv_symm_apply, map_apply_of, RingHom.coe_coe]