ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: TendstoUniformlyOnFilter.congr
File: Mathlib/Topology/UniformSpace/UniformConvergence.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
F' : ι → α → β
hf : TendstoUniformlyOnFilter F f p p'
hff' : ∀ᶠ (n : ι × α) in p ×ˢ p', F n.1 n.2 = F' n.1 n.2
⊢ TendstoUniformlyOnFilter F' f p p'
state_after: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
F' : ι → α → β
hf : TendstoUniformlyOnFilter F f p p'
hff' : ∀ᶠ (n : ι × α) in p ×ˢ p', F n.1 n.2 = F' n.1 n.2
u : Set (β × β)
hu : u ∈ 𝓤 β
n : ι × α
h : (f n.2, F n.1 n.2) ∈ u ∧ F n.1 n.2 = F' n.1 n.2
⊢ (f n.2, F' n.1 n.2) ∈ u
tactic: refine fun u hu => ((hf u hu).and hff').mono fun n h => ?_
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
F' : ι → α → β
hf : TendstoUniformlyOnFilter F f p p'
hff' : ∀ᶠ (n : ι × α) in p ×ˢ p', F n.1 n.2 = F' n.1 n.2
u : Set (β × β)
hu : u ∈ 𝓤 β
n : ι × α
h : (f n.2, F n.1 n.2) ∈ u ∧ F n.1 n.2 = F' n.1 n.2
⊢ (f n.2, F' n.1 n.2) ∈ u
state_after: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
F' : ι → α → β
hf : TendstoUniformlyOnFilter F f p p'
hff' : ∀ᶠ (n : ι × α) in p ×ˢ p', F n.1 n.2 = F' n.1 n.2
u : Set (β × β)
hu : u ∈ 𝓤 β
n : ι × α
h : (f n.2, F n.1 n.2) ∈ u ∧ F n.1 n.2 = F' n.1 n.2
⊢ (f n.2, F n.1 n.2) ∈ u
tactic: rw [← h.right]
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
F' : ι → α → β
hf : TendstoUniformlyOnFilter F f p p'
hff' : ∀ᶠ (n : ι × α) in p ×ˢ p', F n.1 n.2 = F' n.1 n.2
u : Set (β × β)
hu : u ∈ 𝓤 β
n : ι × α
h : (f n.2, F n.1 n.2) ∈ u ∧ F n.1 n.2 = F' n.1 n.2
⊢ (f n.2, F n.1 n.2) ∈ u
state_after: no goals
tactic: exact h.left
Theorem: Set.sUnion_eq_univ_iff
File: Mathlib/Data/Set/Lattice.lean

Proof steps:
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
c : Set (Set α)
⊢ ⋃₀ c = univ ↔ ∀ (a : α), ∃ b ∈ c, a ∈ b
state_after: no goals
tactic: simp only [eq_univ_iff_forall, mem_sUnion]
Theorem: WeierstrassCurve.Jacobian.dblY_smul
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → R
u : R
⊢ W'.dblY (u • P) = (u ^ 4) ^ 3 * W'.dblY P
state_after: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → R
u : R
⊢ -((u ^ 4) ^ 3 * W'.negDblY P) - W'.a₁ * ((u ^ 4) ^ 2 * W'.dblX P) * (u ^ 4 * W'.dblZ P) -
      W'.a₃ * (u ^ 4 * W'.dblZ P) ^ 3 =
    (u ^ 4) ^ 3 * (-W'.negDblY P - W'.a₁ * W'.dblX P * W'.dblZ P - W'.a₃ * W'.dblZ P ^ 3)
tactic: simp only [dblY, negY, dblX_smul, negDblY_smul, dblZ_smul, fin3_def_ext]
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → R
u : R
⊢ -((u ^ 4) ^ 3 * W'.negDblY P) - W'.a₁ * ((u ^ 4) ^ 2 * W'.dblX P) * (u ^ 4 * W'.dblZ P) -
      W'.a₃ * (u ^ 4 * W'.dblZ P) ^ 3 =
    (u ^ 4) ^ 3 * (-W'.negDblY P - W'.a₁ * W'.dblX P * W'.dblZ P - W'.a₃ * W'.dblZ P ^ 3)
state_after: no goals
tactic: ring1
Theorem: MonoidAlgebra.single_one_mul_apply
File: Mathlib/Algebra/MonoidAlgebra/Basic.lean

Proof steps:
state_before: k : Type u₁
G : Type u₂
H : Type u_1
R : Type u_2
inst✝¹ : Semiring k
inst✝ : MulOneClass G
f : MonoidAlgebra k G
r : k
x a : G
⊢ 1 * a = x ↔ a = x
state_after: no goals
tactic: rw [one_mul]
Theorem: CategoryTheory.MonoidalCategory.associator_inv_naturality_left
File: Mathlib/CategoryTheory/Monoidal/Category.lean

Proof steps:
state_before: C✝ : Type u
𝒞 : Category.{v, u} C✝
inst✝² : MonoidalCategory C✝
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : MonoidalCategory C
U V W X✝ Y✝ Z✝ X X' : C
f : X ⟶ X'
Y Z : C
⊢ f ▷ (Y ⊗ Z) ≫ (α_ X' Y Z).inv = (α_ X Y Z).inv ≫ f ▷ Y ▷ Z
state_after: no goals
tactic: simp
Theorem: IsLocalization.bot_lt_comap_prime
File: Mathlib/RingTheory/Localization/Ideal.lean

Proof steps:
state_before: R : Type u_1
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_2
inst✝³ : CommRing S
inst✝² : Algebra R S
inst✝¹ : IsLocalization M S
inst✝ : IsDomain R
hM : M ≤ R⁰
p : Ideal S
hpp : p.IsPrime
hp0 : p ≠ ⊥
⊢ ⊥ < Ideal.comap (algebraMap R S) p
state_after: R : Type u_1
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_2
inst✝³ : CommRing S
inst✝² : Algebra R S
inst✝¹ : IsLocalization M S
inst✝ : IsDomain R
hM : M ≤ R⁰
p : Ideal S
hpp : p.IsPrime
hp0 : p ≠ ⊥
this : IsDomain S
⊢ ⊥ < Ideal.comap (algebraMap R S) p
tactic: haveI : IsDomain S := isDomain_of_le_nonZeroDivisors _ hM
state_before: R : Type u_1
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_2
inst✝³ : CommRing S
inst✝² : Algebra R S
inst✝¹ : IsLocalization M S
inst✝ : IsDomain R
hM : M ≤ R⁰
p : Ideal S
hpp : p.IsPrime
hp0 : p ≠ ⊥
this : IsDomain S
⊢ ⊥ < Ideal.comap (algebraMap R S) p
state_after: R : Type u_1
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_2
inst✝³ : CommRing S
inst✝² : Algebra R S
inst✝¹ : IsLocalization M S
inst✝ : IsDomain R
hM : M ≤ R⁰
p : Ideal S
hpp : p.IsPrime
hp0 : p ≠ ⊥
this : IsDomain S
⊢ Ideal.comap (algebraMap R S) ⊥ < Ideal.comap (algebraMap R S) p
tactic: rw [← Ideal.comap_bot_of_injective (algebraMap R S) (IsLocalization.injective _ hM)]
state_before: R : Type u_1
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_2
inst✝³ : CommRing S
inst✝² : Algebra R S
inst✝¹ : IsLocalization M S
inst✝ : IsDomain R
hM : M ≤ R⁰
p : Ideal S
hpp : p.IsPrime
hp0 : p ≠ ⊥
this : IsDomain S
⊢ Ideal.comap (algebraMap R S) ⊥ < Ideal.comap (algebraMap R S) p
state_after: no goals
tactic: convert (orderIsoOfPrime M S).lt_iff_lt.mpr (show (⟨⊥, Ideal.bot_prime⟩ :
    { p : Ideal S // p.IsPrime }) < ⟨p, hpp⟩ from hp0.bot_lt)
Theorem: Polynomial.eraseLead_support_card_lt
File: Mathlib/Algebra/Polynomial/EraseLead.lean

Proof steps:
state_before: R : Type u_1
inst✝ : Semiring R
f : R[X]
h : f ≠ 0
⊢ f.eraseLead.support.card < f.support.card
state_after: R : Type u_1
inst✝ : Semiring R
f : R[X]
h : f ≠ 0
⊢ (f.support.erase f.natDegree).card < f.support.card
tactic: rw [eraseLead_support]
state_before: R : Type u_1
inst✝ : Semiring R
f : R[X]
h : f ≠ 0
⊢ (f.support.erase f.natDegree).card < f.support.card
state_after: no goals
tactic: exact card_lt_card (erase_ssubset <| natDegree_mem_support_of_nonzero h)
Theorem: MeasureTheory.OuterMeasure.restrict_iSup
File: Mathlib/MeasureTheory/OuterMeasure/Operations.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
m✝ : OuterMeasure α
ι : Sort u_3
s : Set α
m : ι → OuterMeasure α
⊢ (restrict s) (⨆ i, m i) = ⨆ i, (restrict s) (m i)
state_after: no goals
tactic: simp [restrict]
Theorem: AddSubmonoid.nontrivial_iff_exists_ne_zero
File: Mathlib/Algebra/Group/Submonoid/Operations.lean

Proof steps:
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : MulOneClass P
S✝ : Submonoid M
A : Type u_4
inst✝ : SetLike A M
hA : SubmonoidClass A M
S' : A
S : Submonoid M
⊢ (∃ x, ∃ (hx : x ∈ S), ⟨x, hx⟩ ≠ ⟨1, ⋯⟩) ↔ ∃ x ∈ S, x ≠ 1
state_after: no goals
tactic: simp [Ne]
Theorem: _private.Mathlib.AlgebraicGeometry.EllipticCurve.Jacobian.0.WeierstrassCurve.Jacobian.Point.toAffine_add_of_Z_ne_zero
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → F
hP : W.Nonsingular P
hQ : W.Nonsingular Q
hPz : P z ≠ 0
hQz : Q z ≠ 0
hxy : P x * Q z ^ 2 = Q x * P z ^ 2 → P y * Q z ^ 3 ≠ W.negY Q * P z ^ 3
⊢ toAffine W
      ![W.toAffine.addX (P x / P z ^ 2) (Q x / Q z ^ 2)
          (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3)),
        W.toAffine.addY (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3)
          (W.toAffine.slope (P x / P z ^ 2) (Q x / Q z ^ 2) (P y / P z ^ 3) (Q y / Q z ^ 3)),
        1] =
    toAffine W P + toAffine W Q
state_after: no goals
tactic: rw [toAffine_some <| nonsingular_add_of_Z_ne_zero hP hQ hPz hQz hxy, toAffine_of_Z_ne_zero hP hPz,
    toAffine_of_Z_ne_zero hQ hQz,
    Affine.Point.add_of_imp <| by rwa [← X_eq_iff hPz hQz, ne_eq, ← Y_eq_iff' hPz hQz]]
Theorem: QuadraticMap.Ring.associated_pi
File: Mathlib/LinearAlgebra/QuadraticForm/Prod.lean

Proof steps:
state_before: ι : Type u_1
R : Type u_2
M₁ : Type u_3
M₂ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
P : Type u_7
Mᵢ : ι → Type u_8
Nᵢ : ι → Type u_9
inst✝⁸ : CommRing R
inst✝⁷ : (i : ι) → AddCommGroup (Mᵢ i)
inst✝⁶ : (i : ι) → AddCommGroup (Nᵢ i)
inst✝⁵ : AddCommGroup P
inst✝⁴ : (i : ι) → Module R (Mᵢ i)
inst✝³ : (i : ι) → Module R (Nᵢ i)
inst✝² : Module R P
inst✝¹ : Fintype ι
inst✝ : Invertible 2
Q : (i : ι) → QuadraticMap R (Mᵢ i) P
⊢ associated (pi Q) = ∑ i : ι, LinearMap.compl₁₂ (associated (Q i)) (LinearMap.proj i) (LinearMap.proj i)
state_after: ι : Type u_1
R : Type u_2
M₁ : Type u_3
M₂ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
P : Type u_7
Mᵢ : ι → Type u_8
Nᵢ : ι → Type u_9
inst✝⁸ : CommRing R
inst✝⁷ : (i : ι) → AddCommGroup (Mᵢ i)
inst✝⁶ : (i : ι) → AddCommGroup (Nᵢ i)
inst✝⁵ : AddCommGroup P
inst✝⁴ : (i : ι) → Module R (Mᵢ i)
inst✝³ : (i : ι) → Module R (Nᵢ i)
inst✝² : Module R P
inst✝¹ : Fintype ι
inst✝ : Invertible 2
Q : (i : ι) → QuadraticMap R (Mᵢ i) P
⊢ ⟨⅟2, ⋯⟩ • (pi Q).polarBilin =
    ∑ i : ι, LinearMap.compl₁₂ (⟨⅟2, ⋯⟩ • (Q i).polarBilin) (LinearMap.proj i) (LinearMap.proj i)
tactic: dsimp [associated, associatedHom]
state_before: ι : Type u_1
R : Type u_2
M₁ : Type u_3
M₂ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
P : Type u_7
Mᵢ : ι → Type u_8
Nᵢ : ι → Type u_9
inst✝⁸ : CommRing R
inst✝⁷ : (i : ι) → AddCommGroup (Mᵢ i)
inst✝⁶ : (i : ι) → AddCommGroup (Nᵢ i)
inst✝⁵ : AddCommGroup P
inst✝⁴ : (i : ι) → Module R (Mᵢ i)
inst✝³ : (i : ι) → Module R (Nᵢ i)
inst✝² : Module R P
inst✝¹ : Fintype ι
inst✝ : Invertible 2
Q : (i : ι) → QuadraticMap R (Mᵢ i) P
⊢ ⟨⅟2, ⋯⟩ • (pi Q).polarBilin =
    ∑ i : ι, LinearMap.compl₁₂ (⟨⅟2, ⋯⟩ • (Q i).polarBilin) (LinearMap.proj i) (LinearMap.proj i)
state_after: ι : Type u_1
R : Type u_2
M₁ : Type u_3
M₂ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
P : Type u_7
Mᵢ : ι → Type u_8
Nᵢ : ι → Type u_9
inst✝⁸ : CommRing R
inst✝⁷ : (i : ι) → AddCommGroup (Mᵢ i)
inst✝⁶ : (i : ι) → AddCommGroup (Nᵢ i)
inst✝⁵ : AddCommGroup P
inst✝⁴ : (i : ι) → Module R (Mᵢ i)
inst✝³ : (i : ι) → Module R (Nᵢ i)
inst✝² : Module R P
inst✝¹ : Fintype ι
inst✝ : Invertible 2
Q : (i : ι) → QuadraticMap R (Mᵢ i) P
⊢ ∑ x : ι, ⟨⅟2, ⋯⟩ • LinearMap.compl₁₂ (Q x).polarBilin (LinearMap.proj x) (LinearMap.proj x) =
    ∑ i : ι, LinearMap.compl₁₂ (⟨⅟2, ⋯⟩ • (Q i).polarBilin) (LinearMap.proj i) (LinearMap.proj i)
tactic: rw [polarBilin_pi, Finset.smul_sum]
state_before: ι : Type u_1
R : Type u_2
M₁ : Type u_3
M₂ : Type u_4
N₁ : Type u_5
N₂ : Type u_6
P : Type u_7
Mᵢ : ι → Type u_8
Nᵢ : ι → Type u_9
inst✝⁸ : CommRing R
inst✝⁷ : (i : ι) → AddCommGroup (Mᵢ i)
inst✝⁶ : (i : ι) → AddCommGroup (Nᵢ i)
inst✝⁵ : AddCommGroup P
inst✝⁴ : (i : ι) → Module R (Mᵢ i)
inst✝³ : (i : ι) → Module R (Nᵢ i)
inst✝² : Module R P
inst✝¹ : Fintype ι
inst✝ : Invertible 2
Q : (i : ι) → QuadraticMap R (Mᵢ i) P
⊢ ∑ x : ι, ⟨⅟2, ⋯⟩ • LinearMap.compl₁₂ (Q x).polarBilin (LinearMap.proj x) (LinearMap.proj x) =
    ∑ i : ι, LinearMap.compl₁₂ (⟨⅟2, ⋯⟩ • (Q i).polarBilin) (LinearMap.proj i) (LinearMap.proj i)
state_after: no goals
tactic: rfl
Theorem: Complex.neg_ofReal_mem_slitPlane
File: Mathlib/Analysis/Complex/Basic.lean

Proof steps:
state_before: x : ℝ
⊢ -↑x ∈ slitPlane ↔ x < 0
state_after: no goals
tactic: simpa using ofReal_mem_slitPlane (x := -x)
Theorem: sup_le_inf
File: Mathlib/Order/Lattice.lean

Proof steps:
state_before: α : Type u
β : Type v
inst✝ : Lattice α
a b c d : α
⊢ a ⊔ b ≤ a ⊓ b ↔ a = b
state_after: no goals
tactic: simp [le_antisymm_iff, and_comm]
Theorem: ProbabilityTheory.iSup_countableFiltration
File: Mathlib/Probability/Process/PartitionFiltration.lean

Proof steps:
state_before: α✝ : Type u_1
inst✝² : MeasurableSpace α✝
inst✝¹ : CountablyGenerated α✝
α : Type u_2
m : MeasurableSpace α
inst✝ : CountablyGenerated α
⊢ ⨆ n, ↑(countableFiltration α) n = m
state_after: α✝ : Type u_1
inst✝² : MeasurableSpace α✝
inst✝¹ : CountablyGenerated α✝
α : Type u_2
m : MeasurableSpace α
inst✝ : CountablyGenerated α
⊢ ⨆ n, ↑(countableFiltration α) n = ⨆ i, generateFrom (countablePartition α i)
tactic: conv_rhs => rw [← generateFrom_iUnion_countablePartition α, ← iSup_generateFrom]
state_before: α✝ : Type u_1
inst✝² : MeasurableSpace α✝
inst✝¹ : CountablyGenerated α✝
α : Type u_2
m : MeasurableSpace α
inst✝ : CountablyGenerated α
⊢ ⨆ n, ↑(countableFiltration α) n = ⨆ i, generateFrom (countablePartition α i)
state_after: no goals
tactic: rfl
Theorem: Measurable.max
File: Mathlib/MeasureTheory/Constructions/BorelSpace/Order.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s t u : Set α
inst✝⁶ : TopologicalSpace α
inst✝⁵ : MeasurableSpace α
inst✝⁴ : OpensMeasurableSpace α
inst✝³ : MeasurableSpace δ
inst✝² : LinearOrder α
inst✝¹ : OrderClosedTopology α
a b x : α
inst✝ : SecondCountableTopology α
f g : δ → α
hf : Measurable f
hg : Measurable g
⊢ Measurable fun a => Max.max (f a) (g a)
state_after: no goals
tactic: simpa only [max_def'] using hf.piecewise (measurableSet_le hg hf) hg
Theorem: ContinuousLinearMap.pi_eq_zero
File: Mathlib/Topology/Algebra/Module/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝⁹ : Semiring R
M : Type u_2
inst✝⁸ : TopologicalSpace M
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
M₂ : Type u_3
inst✝⁵ : TopologicalSpace M₂
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
ι : Type u_4
φ : ι → Type u_5
inst✝² : (i : ι) → TopologicalSpace (φ i)
inst✝¹ : (i : ι) → AddCommMonoid (φ i)
inst✝ : (i : ι) → Module R (φ i)
f : (i : ι) → M →L[R] φ i
⊢ pi f = 0 ↔ ∀ (i : ι), f i = 0
state_after: R : Type u_1
inst✝⁹ : Semiring R
M : Type u_2
inst✝⁸ : TopologicalSpace M
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
M₂ : Type u_3
inst✝⁵ : TopologicalSpace M₂
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
ι : Type u_4
φ : ι → Type u_5
inst✝² : (i : ι) → TopologicalSpace (φ i)
inst✝¹ : (i : ι) → AddCommMonoid (φ i)
inst✝ : (i : ι) → Module R (φ i)
f : (i : ι) → M →L[R] φ i
⊢ (∀ (x : M) (a : ι), (f a) x = 0 x a) ↔ ∀ (i : ι) (x : M), (f i) x = 0 x
tactic: simp only [ContinuousLinearMap.ext_iff, pi_apply, Function.funext_iff]
state_before: R : Type u_1
inst✝⁹ : Semiring R
M : Type u_2
inst✝⁸ : TopologicalSpace M
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
M₂ : Type u_3
inst✝⁵ : TopologicalSpace M₂
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
ι : Type u_4
φ : ι → Type u_5
inst✝² : (i : ι) → TopologicalSpace (φ i)
inst✝¹ : (i : ι) → AddCommMonoid (φ i)
inst✝ : (i : ι) → Module R (φ i)
f : (i : ι) → M →L[R] φ i
⊢ (∀ (x : M) (a : ι), (f a) x = 0 x a) ↔ ∀ (i : ι) (x : M), (f i) x = 0 x
state_after: no goals
tactic: exact forall_swap
Theorem: card_perms_of_finset
File: Mathlib/Data/Fintype/Perm.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
⊢ ∀ (s : Finset α), (permsOfFinset s).card = s.card !
state_after: case mk.mk
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
val✝ : Multiset α
l : List α
hs : Multiset.Nodup (Quot.mk Setoid.r l)
⊢ (permsOfFinset { val := Quot.mk Setoid.r l, nodup := hs }).card = { val := Quot.mk Setoid.r l, nodup := hs }.card !
tactic: rintro ⟨⟨l⟩, hs⟩
state_before: case mk.mk
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
val✝ : Multiset α
l : List α
hs : Multiset.Nodup (Quot.mk Setoid.r l)
⊢ (permsOfFinset { val := Quot.mk Setoid.r l, nodup := hs }).card = { val := Quot.mk Setoid.r l, nodup := hs }.card !
state_after: no goals
tactic: exact length_permsOfList l
Theorem: Function.Injective.mem_finset_image
File: Mathlib/Data/Finset/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq β
f g : α → β
s : Finset α
t : Finset β
a : α
b c : β
hf : Injective f
⊢ f a ∈ image f s ↔ a ∈ s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq β
f g : α → β
s : Finset α
t : Finset β
a : α
b c : β
hf : Injective f
h : f a ∈ image f s
⊢ a ∈ s
tactic: refine ⟨fun h => ?_, Finset.mem_image_of_mem f⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq β
f g : α → β
s : Finset α
t : Finset β
a : α
b c : β
hf : Injective f
h : f a ∈ image f s
⊢ a ∈ s
state_after: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq β
f g : α → β
s : Finset α
t : Finset β
a : α
b c : β
hf : Injective f
h : f a ∈ image f s
y : α
hy : y ∈ s
heq : f y = f a
⊢ a ∈ s
tactic: obtain ⟨y, hy, heq⟩ := mem_image.1 h
state_before: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq β
f g : α → β
s : Finset α
t : Finset β
a : α
b c : β
hf : Injective f
h : f a ∈ image f s
y : α
hy : y ∈ s
heq : f y = f a
⊢ a ∈ s
state_after: no goals
tactic: exact hf heq ▸ hy
Theorem: AlgebraicGeometry.isAffineOpen_of_isAffineOpen_basicOpen
File: Mathlib/AlgebraicGeometry/Morphisms/Affine.lean

Proof steps:
state_before: X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : X.Opens
s : Set ↑Γ(X, U)
hs : Ideal.span s = ⊤
hs₂ : ∀ i ∈ s, IsAffineOpen (X.basicOpen i)
⊢ IsAffineOpen U
state_after: case hs
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : X.Opens
s : Set ↑Γ(X, U)
hs : Ideal.span s = ⊤
hs₂ : ∀ i ∈ s, IsAffineOpen (X.basicOpen i)
⊢ Ideal.span (⇑U.topIso.inv '' s) = ⊤

case hs₂
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
U : X.Opens
s : Set ↑Γ(X, U)
hs : Ideal.span s = ⊤
hs₂ : ∀ i ∈ s, IsAffineOpen (X.basicOpen i)
⊢ ∀ i ∈ ⇑U.topIso.inv '' s, IsAffineOpen ((↑U).basicOpen i)
tactic: apply isAffine_of_isAffineOpen_basicOpen (U.topIso.inv '' s)
Theorem: EReal.preimage_coe_Ioo_bot_top
File: Mathlib/Data/Real/EReal.lean

Proof steps:
state_before: ⊢ Real.toEReal ⁻¹' Ioo ⊥ ⊤ = univ
state_after: ⊢ Real.toEReal ⁻¹' (Ioi ⊥ ∩ Iio ⊤) = univ
tactic: rw [← Ioi_inter_Iio]
state_before: ⊢ Real.toEReal ⁻¹' (Ioi ⊥ ∩ Iio ⊤) = univ
state_after: no goals
tactic: simp
Theorem: CategoryTheory.ShortComplex.ShortExact.singleTriangleIso_inv_hom₁
File: Mathlib/Algebra/Homology/DerivedCategory/SingleTriangle.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
S : ShortComplex C
hS : S.ShortExact
⊢ hS.singleTriangle ≅ triangleOfSES ⋯
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
S : ShortComplex C
hS : S.ShortExact
e : (SingleFunctors.evaluation C (DerivedCategory C) 0).obj (singleFunctors C) ≅
  (SingleFunctors.evaluation C (DerivedCategory C) 0).obj ((CochainComplex.singleFunctors C).postcomp Q) :=
  (SingleFunctors.evaluation C (DerivedCategory C) 0).mapIso (singleFunctorsPostcompQIso C)
⊢ hS.singleTriangle ≅ triangleOfSES ⋯
tactic: let e := (SingleFunctors.evaluation _ _ 0).mapIso (singleFunctorsPostcompQIso C)
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
S : ShortComplex C
hS : S.ShortExact
e : (SingleFunctors.evaluation C (DerivedCategory C) 0).obj (singleFunctors C) ≅
  (SingleFunctors.evaluation C (DerivedCategory C) 0).obj ((CochainComplex.singleFunctors C).postcomp Q) :=
  (SingleFunctors.evaluation C (DerivedCategory C) 0).mapIso (singleFunctorsPostcompQIso C)
⊢ hS.singleTriangle ≅ triangleOfSES ⋯
state_after: case refine_1
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
S : ShortComplex C
hS : S.ShortExact
e : (SingleFunctors.evaluation C (DerivedCategory C) 0).obj (singleFunctors C) ≅
  (SingleFunctors.evaluation C (DerivedCategory C) 0).obj ((CochainComplex.singleFunctors C).postcomp Q) :=
  (SingleFunctors.evaluation C (DerivedCategory C) 0).mapIso (singleFunctorsPostcompQIso C)
⊢ hS.singleTriangle.mor₁ ≫ (e.app S.X₂).hom = (e.app S.X₁).hom ≫ (triangleOfSES ⋯).mor₁

case refine_2
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
S : ShortComplex C
hS : S.ShortExact
e : (SingleFunctors.evaluation C (DerivedCategory C) 0).obj (singleFunctors C) ≅
  (SingleFunctors.evaluation C (DerivedCategory C) 0).obj ((CochainComplex.singleFunctors C).postcomp Q) :=
  (SingleFunctors.evaluation C (DerivedCategory C) 0).mapIso (singleFunctorsPostcompQIso C)
⊢ hS.singleTriangle.mor₂ ≫ (e.app S.X₃).hom = (e.app S.X₂).hom ≫ (triangleOfSES ⋯).mor₂

case refine_3
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
S : ShortComplex C
hS : S.ShortExact
e : (SingleFunctors.evaluation C (DerivedCategory C) 0).obj (singleFunctors C) ≅
  (SingleFunctors.evaluation C (DerivedCategory C) 0).obj ((CochainComplex.singleFunctors C).postcomp Q) :=
  (SingleFunctors.evaluation C (DerivedCategory C) 0).mapIso (singleFunctorsPostcompQIso C)
⊢ hS.singleTriangle.mor₃ ≫ (shiftFunctor (DerivedCategory C) 1).map (e.app S.X₁).hom =
    (e.app S.X₃).hom ≫ (triangleOfSES ⋯).mor₃
tactic: refine Triangle.isoMk _ _ (e.app S.X₁) (e.app S.X₂) (e.app S.X₃) ?_ ?_ ?_
Theorem: Polynomial.eval₂_mul_eq_zero_of_left
File: Mathlib/Algebra/Polynomial/Eval.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p q✝ r : R[X]
inst✝ : CommSemiring S
f : R →+* S
x : S
q : R[X]
hp : eval₂ f x p = 0
⊢ eval₂ f x (p * q) = 0
state_after: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p q✝ r : R[X]
inst✝ : CommSemiring S
f : R →+* S
x : S
q : R[X]
hp : eval₂ f x p = 0
⊢ eval₂ f x p * eval₂ f x q = 0
tactic: rw [eval₂_mul f x]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p q✝ r : R[X]
inst✝ : CommSemiring S
f : R →+* S
x : S
q : R[X]
hp : eval₂ f x p = 0
⊢ eval₂ f x p * eval₂ f x q = 0
state_after: no goals
tactic: exact mul_eq_zero_of_left hp (q.eval₂ f x)
Theorem: DiscreteQuotient.ofLE_refl
File: Mathlib/Topology/DiscreteQuotient.lean

Proof steps:
state_before: α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
S A B C : DiscreteQuotient X
⊢ ofLE ⋯ = id
state_after: case h.mk
α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
S A B C : DiscreteQuotient X
x✝ : Quotient A.toSetoid
a✝ : X
⊢ ofLE ⋯ (Quot.mk Setoid.r a✝) = id (Quot.mk Setoid.r a✝)
tactic: ext ⟨⟩
state_before: case h.mk
α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
S A B C : DiscreteQuotient X
x✝ : Quotient A.toSetoid
a✝ : X
⊢ ofLE ⋯ (Quot.mk Setoid.r a✝) = id (Quot.mk Setoid.r a✝)
state_after: no goals
tactic: rfl
Theorem: List.indexOf_getElem
File: Mathlib/Data/List/Nodup.lean

Proof steps:
state_before: α : Type u
β : Type v
l✝ l₁ l₂ : List α
r : α → α → Prop
a b : α
inst✝ : DecidableEq α
l : List α
H : l.Nodup
i : ℕ
h : i < l.length
⊢ l.get ⟨indexOf l[i] l, ⋯⟩ = l.get ⟨i, h⟩
state_after: no goals
tactic: simp
Theorem: AddAction.mem_stabilizer_finset'
File: Mathlib/Algebra/Pointwise/Stabilizer.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
α : Type u_3
inst✝³ : Group G
inst✝² : Group H
inst✝¹ : MulAction G α
a : G
inst✝ : DecidableEq α
s : Finset α
⊢ a ∈ stabilizer G s ↔ ∀ ⦃b : α⦄, b ∈ s → a • b ∈ s
state_after: G : Type u_1
H : Type u_2
α : Type u_3
inst✝³ : Group G
inst✝² : Group H
inst✝¹ : MulAction G α
a : G
inst✝ : DecidableEq α
s : Finset α
⊢ s ⊆ a⁻¹ • s ↔ ∀ ⦃b : α⦄, b ∈ s → a • b ∈ s
tactic: rw [← Subgroup.inv_mem_iff, mem_stabilizer_finset_iff_subset_smul_finset]
state_before: G : Type u_1
H : Type u_2
α : Type u_3
inst✝³ : Group G
inst✝² : Group H
inst✝¹ : MulAction G α
a : G
inst✝ : DecidableEq α
s : Finset α
⊢ s ⊆ a⁻¹ • s ↔ ∀ ⦃b : α⦄, b ∈ s → a • b ∈ s
state_after: no goals
tactic: simp_rw [← Finset.mem_inv_smul_finset_iff, Finset.subset_iff]