ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Set.op_smul_inter_ne_empty_iff
File: Mathlib/Data/Set/Pointwise/SMul.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Group α
inst✝ : MulAction α β
s✝ t✝ A B : Set β
a : α
x✝ : β
s t : Set α
x : αᵐᵒᵖ
⊢ x • s ∩ t ≠ ∅ ↔ ∃ a b, (a ∈ s ∧ b ∈ t) ∧ a⁻¹ * b = unop x
state_after: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Group α
inst✝ : MulAction α β
s✝ t✝ A B : Set β
a : α
x✝ : β
s t : Set α
x : αᵐᵒᵖ
⊢ (x • s ∩ t).Nonempty ↔ ∃ a b, (a ∈ s ∧ b ∈ t) ∧ a⁻¹ * b = unop x
tactic: rw [← nonempty_iff_ne_empty]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Group α
inst✝ : MulAction α β
s✝ t✝ A B : Set β
a : α
x✝ : β
s t : Set α
x : αᵐᵒᵖ
⊢ (x • s ∩ t).Nonempty ↔ ∃ a b, (a ∈ s ∧ b ∈ t) ∧ a⁻¹ * b = unop x
state_after: case mp
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Group α
inst✝ : MulAction α β
s✝ t✝ A B : Set β
a : α
x✝ : β
s t : Set α
x : αᵐᵒᵖ
⊢ (x • s ∩ t).Nonempty → ∃ a b, (a ∈ s ∧ b ∈ t) ∧ a⁻¹ * b = unop x

case mpr
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝¹ : Group α
inst✝ : MulAction α β
s✝ t✝ A B : Set β
a : α
x✝ : β
s t : Set α
x : αᵐᵒᵖ
⊢ (∃ a b, (a ∈ s ∧ b ∈ t) ∧ a⁻¹ * b = unop x) → (x • s ∩ t).Nonempty
tactic: constructor
Theorem: WeierstrassCurve.map_Ψ₃
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Basic.lean

Proof steps:
state_before: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
f : R →+* S
⊢ (W.map f).Ψ₃ = Polynomial.map f W.Ψ₃
state_after: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
f : R →+* S
⊢ 3 * X ^ 4 + C (f W.b₂) * X ^ 3 + 3 * C (f W.b₄) * X ^ 2 + 3 * C (f W.b₆) * X + C (f W.b₈) =
    Polynomial.map f (3 * X ^ 4 + C W.b₂ * X ^ 3 + 3 * C W.b₄ * X ^ 2 + 3 * C W.b₆ * X + C W.b₈)
tactic: simp only [Ψ₃, map_b₂, map_b₄, map_b₆, map_b₈]
state_before: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
f : R →+* S
⊢ 3 * X ^ 4 + C (f W.b₂) * X ^ 3 + 3 * C (f W.b₄) * X ^ 2 + 3 * C (f W.b₆) * X + C (f W.b₈) =
    Polynomial.map f (3 * X ^ 4 + C W.b₂ * X ^ 3 + 3 * C W.b₄ * X ^ 2 + 3 * C W.b₆ * X + C W.b₈)
state_after: no goals
tactic: map_simp
Theorem: Zsqrtd.nonneg_antisymm
File: Mathlib/NumberTheory/Zsqrtd/Basic.lean

Proof steps:
state_before: d : ℕ
dnsq : Nonsquare d
x : ℕ
xy : { re := -[x+1], im := 0 }.Nonneg
x✝ : (-{ re := -[x+1], im := 0 }).Nonneg
⊢ 0 < 1
state_after: no goals
tactic: decide
state_before: d : ℕ
dnsq : Nonsquare d
x : ℕ
x✝ : { re := ↑(x + 1), im := 0 }.Nonneg
yx : (-{ re := ↑(x + 1), im := 0 }).Nonneg
⊢ 0 < 1
state_after: no goals
tactic: decide
state_before: d : ℕ
dnsq : Nonsquare d
x y : ℕ
xy : SqLe (y + 1) d (x + 1) 1
yx : SqLe (x + 1) 1 y.succ d
⊢ { re := ↑(x + 1), im := -[y+1] } = 0
state_after: d : ℕ
dnsq : Nonsquare d
x y : ℕ
xy : SqLe (y + 1) d (x + 1) 1
yx : SqLe (x + 1) 1 y.succ d
t : 1 * (x + 1) * (x + 1) = d * y.succ * y.succ := le_antisymm yx xy
⊢ { re := ↑(x + 1), im := -[y+1] } = 0
tactic: let t := le_antisymm yx xy
state_before: d : ℕ
dnsq : Nonsquare d
x y : ℕ
xy : SqLe (y + 1) d (x + 1) 1
yx : SqLe (x + 1) 1 y.succ d
t : 1 * (x + 1) * (x + 1) = d * y.succ * y.succ := le_antisymm yx xy
⊢ { re := ↑(x + 1), im := -[y+1] } = 0
state_after: d : ℕ
dnsq : Nonsquare d
x y : ℕ
xy : SqLe (y + 1) d (x + 1) 1
yx : SqLe (x + 1) 1 y.succ d
t : (x + 1) * (x + 1) = d * y.succ * y.succ
⊢ { re := ↑(x + 1), im := -[y+1] } = 0
tactic: rw [one_mul] at t
state_before: d : ℕ
dnsq : Nonsquare d
x y : ℕ
xy : SqLe (y + 1) d (x + 1) 1
yx : SqLe (x + 1) 1 y.succ d
t : (x + 1) * (x + 1) = d * y.succ * y.succ
⊢ { re := ↑(x + 1), im := -[y+1] } = 0
state_after: no goals
tactic: exact absurd t (not_divides_sq _ _)
state_before: d : ℕ
dnsq : Nonsquare d
x y : ℕ
xy : SqLe (x + 1) 1 (y + 1) d
yx : SqLe (y + 1) d x.succ 1
⊢ { re := -[x+1], im := ↑(y + 1) } = 0
state_after: d : ℕ
dnsq : Nonsquare d
x y : ℕ
xy : SqLe (x + 1) 1 (y + 1) d
yx : SqLe (y + 1) d x.succ 1
t : 1 * (x + 1) * (x + 1) = d * (y + 1) * (y + 1) := le_antisymm xy yx
⊢ { re := -[x+1], im := ↑(y + 1) } = 0
tactic: let t := le_antisymm xy yx
state_before: d : ℕ
dnsq : Nonsquare d
x y : ℕ
xy : SqLe (x + 1) 1 (y + 1) d
yx : SqLe (y + 1) d x.succ 1
t : 1 * (x + 1) * (x + 1) = d * (y + 1) * (y + 1) := le_antisymm xy yx
⊢ { re := -[x+1], im := ↑(y + 1) } = 0
state_after: d : ℕ
dnsq : Nonsquare d
x y : ℕ
xy : SqLe (x + 1) 1 (y + 1) d
yx : SqLe (y + 1) d x.succ 1
t : (x + 1) * (x + 1) = d * (y + 1) * (y + 1)
⊢ { re := -[x+1], im := ↑(y + 1) } = 0
tactic: rw [one_mul] at t
state_before: d : ℕ
dnsq : Nonsquare d
x y : ℕ
xy : SqLe (x + 1) 1 (y + 1) d
yx : SqLe (y + 1) d x.succ 1
t : (x + 1) * (x + 1) = d * (y + 1) * (y + 1)
⊢ { re := -[x+1], im := ↑(y + 1) } = 0
state_after: no goals
tactic: exact absurd t (not_divides_sq _ _)
Theorem: SimpleGraph.edgeFinset_replaceVertex_of_adj
File: Mathlib/Combinatorics/SimpleGraph/Operations.lean

Proof steps:
state_before: V : Type u_1
inst✝² : DecidableEq V
G : SimpleGraph V
s t : V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
ha : G.Adj s t
⊢ (G.replaceVertex s t).edgeFinset =
    (G.edgeFinset \ G.incidenceFinset t ∪ image (fun x => s(x, t)) (G.neighborFinset s)) \ {s(t, t)}
state_after: V : Type u_1
inst✝² : DecidableEq V
G : SimpleGraph V
s t : V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
ha : G.Adj s t
⊢ (G.replaceVertex s t).edgeFinset =
    ((G.edgeSet \ G.incidenceSet t ∪ (fun x => s(x, t)) '' G.neighborSet s) \ {s(t, t)}).toFinset
tactic: simp only [incidenceFinset, neighborFinset, ← Set.toFinset_diff, ← Set.toFinset_image,
    ← Set.toFinset_union, ← Set.toFinset_singleton]
state_before: V : Type u_1
inst✝² : DecidableEq V
G : SimpleGraph V
s t : V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
ha : G.Adj s t
⊢ (G.replaceVertex s t).edgeFinset =
    ((G.edgeSet \ G.incidenceSet t ∪ (fun x => s(x, t)) '' G.neighborSet s) \ {s(t, t)}).toFinset
state_after: no goals
tactic: exact Set.toFinset_congr (G.edgeSet_replaceVertex_of_adj ha)
Theorem: HomologicalComplex.opcyclesToCycles_naturality
File: Mathlib/Algebra/Homology/HomologySequence.lean

Proof steps:
state_before: C : Type u_1
ι : Type u_2
inst✝⁵ : Category.{u_3, u_1} C
inst✝⁴ : HasZeroMorphisms C
c : ComplexShape ι
K L : HomologicalComplex C c
φ : K ⟶ L
i j : ι
inst✝³ : K.HasHomology i
inst✝² : K.HasHomology j
inst✝¹ : L.HasHomology i
inst✝ : L.HasHomology j
⊢ opcyclesMap φ i ≫ L.opcyclesToCycles i j = K.opcyclesToCycles i j ≫ cyclesMap φ j
state_after: no goals
tactic: simp only [← cancel_mono (L.iCycles j), ← cancel_epi (K.pOpcycles i),
    assoc, p_opcyclesMap_assoc, pOpcycles_opcyclesToCycles_iCycles, Hom.comm, cyclesMap_i,
    pOpcycles_opcyclesToCycles_iCycles_assoc]
Theorem: AddMonoidAlgebra.apply_eq_zero_of_not_le_supDegree
File: Mathlib/Algebra/MonoidAlgebra/Degree.lean

Proof steps:
state_before: R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁵ : Semiring R
inst✝⁴ : Ring R'
inst✝³ : AddZeroClass A
inst✝² : SemilatticeSup B
inst✝¹ : Add B
inst✝ : OrderBot B
D : A → B
p q : R[A]
a : A
hlt : ¬D a ≤ supDegree D p
⊢ p a = 0
state_after: R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁵ : Semiring R
inst✝⁴ : Ring R'
inst✝³ : AddZeroClass A
inst✝² : SemilatticeSup B
inst✝¹ : Add B
inst✝ : OrderBot B
D : A → B
p q : R[A]
a : A
hlt : p a ≠ 0
⊢ D a ≤ supDegree D p
tactic: contrapose! hlt
state_before: R : Type u_1
R' : Type u_2
A : Type u_3
T : Type u_4
B : Type u_5
ι : Type u_6
inst✝⁵ : Semiring R
inst✝⁴ : Ring R'
inst✝³ : AddZeroClass A
inst✝² : SemilatticeSup B
inst✝¹ : Add B
inst✝ : OrderBot B
D : A → B
p q : R[A]
a : A
hlt : p a ≠ 0
⊢ D a ≤ supDegree D p
state_after: no goals
tactic: exact Finset.le_sup (Finsupp.mem_support_iff.2 hlt)
Theorem: Set.SurjOn.bijOn_subset
File: Mathlib/Data/Set/Function.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t : Set β
f : α → β
inst✝ : Nonempty α
h : SurjOn f s t
⊢ BijOn f (invFunOn f s '' t) t
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t : Set β
f : α → β
inst✝ : Nonempty α
h : SurjOn f s t
⊢ MapsTo f (invFunOn f s '' t) t
tactic: refine h.invOn_invFunOn.bijOn ?_ (mapsTo_image _ _)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t : Set β
f : α → β
inst✝ : Nonempty α
h : SurjOn f s t
⊢ MapsTo f (invFunOn f s '' t) t
state_after: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t : Set β
f : α → β
inst✝ : Nonempty α
h : SurjOn f s t
y : β
hy : y ∈ t
⊢ f (invFunOn f s y) ∈ t
tactic: rintro _ ⟨y, hy, rfl⟩
state_before: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t : Set β
f : α → β
inst✝ : Nonempty α
h : SurjOn f s t
y : β
hy : y ∈ t
⊢ f (invFunOn f s y) ∈ t
state_after: no goals
tactic: rwa [h.rightInvOn_invFunOn hy]
Theorem: Filter.limsup_congr
File: Mathlib/Order/LiminfLimsup.lean

Proof steps:
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLattice α✝
α : Type u_6
inst✝ : ConditionallyCompleteLattice β
f : Filter α
u v : α → β
h : ∀ᶠ (a : α) in f, u a = v a
⊢ limsup u f = limsup v f
state_after: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLattice α✝
α : Type u_6
inst✝ : ConditionallyCompleteLattice β
f : Filter α
u v : α → β
h : ∀ᶠ (a : α) in f, u a = v a
⊢ sInf {a | ∀ᶠ (n : α) in f, u n ≤ a} = limsup v f
tactic: rw [limsup_eq]
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLattice α✝
α : Type u_6
inst✝ : ConditionallyCompleteLattice β
f : Filter α
u v : α → β
h : ∀ᶠ (a : α) in f, u a = v a
⊢ sInf {a | ∀ᶠ (n : α) in f, u n ≤ a} = limsup v f
state_after: case e_a.h
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLattice α✝
α : Type u_6
inst✝ : ConditionallyCompleteLattice β
f : Filter α
u v : α → β
h : ∀ᶠ (a : α) in f, u a = v a
b : β
⊢ b ∈ {a | ∀ᶠ (n : α) in f, u n ≤ a} ↔ b ∈ {a | ∀ᶠ (n : β) in map v f, n ≤ a}
tactic: congr with b
state_before: case e_a.h
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLattice α✝
α : Type u_6
inst✝ : ConditionallyCompleteLattice β
f : Filter α
u v : α → β
h : ∀ᶠ (a : α) in f, u a = v a
b : β
⊢ b ∈ {a | ∀ᶠ (n : α) in f, u n ≤ a} ↔ b ∈ {a | ∀ᶠ (n : β) in map v f, n ≤ a}
state_after: no goals
tactic: exact eventually_congr (h.mono fun x hx => by simp [hx])
Theorem: WeierstrassCurve.Jacobian.add_of_Y_eq
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
hPz : P z ≠ 0
hQz : Q z ≠ 0
hx : P x * Q z ^ 2 = Q x * P z ^ 2
hy : P y * Q z ^ 3 = Q y * P z ^ 3
hy' : P y * Q z ^ 3 = W.negY Q * P z ^ 3
⊢ W.add P Q = W.dblU P • ![1, 1, 0]
state_after: no goals
tactic: rw [add, if_pos <| equiv_of_X_eq_of_Y_eq hPz hQz hx hy, dblXYZ_of_Y_eq hQz hx hy hy']
Theorem: MvPolynomial.weightedTotalDegree'_zero
File: Mathlib/RingTheory/MvPolynomial/WeightedHomogeneous.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
inst✝² : CommSemiring R
σ : Type u_3
inst✝¹ : AddCommMonoid M
inst✝ : SemilatticeSup M
w : σ → M
⊢ weightedTotalDegree' w 0 = ⊥
state_after: no goals
tactic: simp only [weightedTotalDegree', support_zero, Finset.sup_empty]
Theorem: Multiset.dvd_gcd
File: Mathlib/Algebra/GCDMonoid/Multiset.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : NormalizedGCDMonoid α
s : Multiset α
a : α
⊢ a ∣ gcd 0 ↔ ∀ b ∈ 0, a ∣ b
state_after: no goals
tactic: simp
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : NormalizedGCDMonoid α
s : Multiset α
a : α
⊢ ∀ (a_1 : α) (s : Multiset α), (a ∣ s.gcd ↔ ∀ b ∈ s, a ∣ b) → (a ∣ (a_1 ::ₘ s).gcd ↔ ∀ b ∈ a_1 ::ₘ s, a ∣ b)
state_after: no goals
tactic: simp (config := { contextual := true }) [or_imp, forall_and, dvd_gcd_iff]
Theorem: Set.prod_univ
File: Mathlib/Data/Set/Prod.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
s✝ s₁ s₂ : Set α
t t₁ t₂ : Set β
a : α
b : β
s : Set α
⊢ s ×ˢ univ = Prod.fst ⁻¹' s
state_after: no goals
tactic: simp [prod_eq]
Theorem: minpoly.exists_algEquiv_of_root'
File: Mathlib/FieldTheory/Normal.lean

Proof steps:
state_before: F : Type u_1
K✝ : Type u_2
inst✝¹³ : Field F
inst✝¹² : Field K✝
inst✝¹¹ : Algebra F K✝
K₁ : Type u_3
K₂ : Type u_4
K₃ : Type u_5
inst✝¹⁰ : Field F
inst✝⁹ : Field K₁
inst✝⁸ : Field K₂
inst✝⁷ : Field K₃
inst✝⁶ : Algebra F K₁
inst✝⁵ : Algebra F K₂
inst✝⁴ : Algebra F K₃
ϕ : K₁ →ₐ[F] K₂
χ : K₁ ≃ₐ[F] K₂
ψ : K₂ →ₐ[F] K₃
ω : K₂ ≃ₐ[F] K₃
K : Type u_6
L : Type u_7
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Normal K L
x y : L
hy : IsAlgebraic K y
h_ev : (Polynomial.aeval x) (minpoly K y) = 0
⊢ ∃ σ, σ y = x
state_after: case intro
F : Type u_1
K✝ : Type u_2
inst✝¹³ : Field F
inst✝¹² : Field K✝
inst✝¹¹ : Algebra F K✝
K₁ : Type u_3
K₂ : Type u_4
K₃ : Type u_5
inst✝¹⁰ : Field F
inst✝⁹ : Field K₁
inst✝⁸ : Field K₂
inst✝⁷ : Field K₃
inst✝⁶ : Algebra F K₁
inst✝⁵ : Algebra F K₂
inst✝⁴ : Algebra F K₃
ϕ : K₁ →ₐ[F] K₂
χ : K₁ ≃ₐ[F] K₂
ψ : K₂ →ₐ[F] K₃
ω : K₂ ≃ₐ[F] K₃
K : Type u_6
L : Type u_7
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Normal K L
x y : L
hy : IsAlgebraic K y
h_ev : (Polynomial.aeval x) (minpoly K y) = 0
σ : L ≃ₐ[K] L
hσ : σ x = y
⊢ ∃ σ, σ y = x
tactic: obtain ⟨σ, hσ⟩ := exists_algEquiv_of_root hy h_ev
state_before: case intro
F : Type u_1
K✝ : Type u_2
inst✝¹³ : Field F
inst✝¹² : Field K✝
inst✝¹¹ : Algebra F K✝
K₁ : Type u_3
K₂ : Type u_4
K₃ : Type u_5
inst✝¹⁰ : Field F
inst✝⁹ : Field K₁
inst✝⁸ : Field K₂
inst✝⁷ : Field K₃
inst✝⁶ : Algebra F K₁
inst✝⁵ : Algebra F K₂
inst✝⁴ : Algebra F K₃
ϕ : K₁ →ₐ[F] K₂
χ : K₁ ≃ₐ[F] K₂
ψ : K₂ →ₐ[F] K₃
ω : K₂ ≃ₐ[F] K₃
K : Type u_6
L : Type u_7
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Normal K L
x y : L
hy : IsAlgebraic K y
h_ev : (Polynomial.aeval x) (minpoly K y) = 0
σ : L ≃ₐ[K] L
hσ : σ x = y
⊢ ∃ σ, σ y = x
state_after: case h
F : Type u_1
K✝ : Type u_2
inst✝¹³ : Field F
inst✝¹² : Field K✝
inst✝¹¹ : Algebra F K✝
K₁ : Type u_3
K₂ : Type u_4
K₃ : Type u_5
inst✝¹⁰ : Field F
inst✝⁹ : Field K₁
inst✝⁸ : Field K₂
inst✝⁷ : Field K₃
inst✝⁶ : Algebra F K₁
inst✝⁵ : Algebra F K₂
inst✝⁴ : Algebra F K₃
ϕ : K₁ →ₐ[F] K₂
χ : K₁ ≃ₐ[F] K₂
ψ : K₂ →ₐ[F] K₃
ω : K₂ ≃ₐ[F] K₃
K : Type u_6
L : Type u_7
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Normal K L
x y : L
hy : IsAlgebraic K y
h_ev : (Polynomial.aeval x) (minpoly K y) = 0
σ : L ≃ₐ[K] L
hσ : σ x = y
⊢ σ.symm y = x
tactic: use σ.symm
state_before: case h
F : Type u_1
K✝ : Type u_2
inst✝¹³ : Field F
inst✝¹² : Field K✝
inst✝¹¹ : Algebra F K✝
K₁ : Type u_3
K₂ : Type u_4
K₃ : Type u_5
inst✝¹⁰ : Field F
inst✝⁹ : Field K₁
inst✝⁸ : Field K₂
inst✝⁷ : Field K₃
inst✝⁶ : Algebra F K₁
inst✝⁵ : Algebra F K₂
inst✝⁴ : Algebra F K₃
ϕ : K₁ →ₐ[F] K₂
χ : K₁ ≃ₐ[F] K₂
ψ : K₂ →ₐ[F] K₃
ω : K₂ ≃ₐ[F] K₃
K : Type u_6
L : Type u_7
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Normal K L
x y : L
hy : IsAlgebraic K y
h_ev : (Polynomial.aeval x) (minpoly K y) = 0
σ : L ≃ₐ[K] L
hσ : σ x = y
⊢ σ.symm y = x
state_after: no goals
tactic: rw [← hσ, symm_apply_apply]
Theorem: Multiset.count_sum
File: Mathlib/Data/Multiset/Bind.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
δ : Type u_3
a✝ : α
s t : Multiset α
f✝ g : α → Multiset β
inst✝ : DecidableEq α
m : Multiset β
f : β → Multiset α
a : α
⊢ count a (map f 0).sum = (map (fun b => count a (f b)) 0).sum
state_after: no goals
tactic: simp
state_before: α : Type u_1
β : Type v
γ : Type u_2
δ : Type u_3
a✝ : α
s t : Multiset α
f✝ g : α → Multiset β
inst✝ : DecidableEq α
m : Multiset β
f : β → Multiset α
a : α
⊢ ∀ (a_1 : β) (s : Multiset β),
    count a (map f s).sum = (map (fun b => count a (f b)) s).sum →
      count a (map f (a_1 ::ₘ s)).sum = (map (fun b => count a (f b)) (a_1 ::ₘ s)).sum
state_after: no goals
tactic: simp
Theorem: Down.erase_mem_compression_of_mem_compression
File: Mathlib/Combinatorics/SetFamily/Compression/Down.lean

Proof steps:
state_before: α : Type u_1
inst✝ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
⊢ s ∈ 𝓓 a 𝒜 → s.erase a ∈ 𝓓 a 𝒜
state_after: α : Type u_1
inst✝ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
⊢ s ∈ 𝒜 ∧ s.erase a ∈ 𝒜 ∨ s ∉ 𝒜 ∧ insert a s ∈ 𝒜 →
    s.erase a ∈ 𝒜 ∧ s.erase a ∈ 𝒜 ∨ s.erase a ∉ 𝒜 ∧ insert a (s.erase a) ∈ 𝒜
tactic: simp_rw [mem_compression, erase_idem]
state_before: α : Type u_1
inst✝ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
⊢ s ∈ 𝒜 ∧ s.erase a ∈ 𝒜 ∨ s ∉ 𝒜 ∧ insert a s ∈ 𝒜 →
    s.erase a ∈ 𝒜 ∧ s.erase a ∈ 𝒜 ∨ s.erase a ∉ 𝒜 ∧ insert a (s.erase a) ∈ 𝒜
state_after: α : Type u_1
inst✝ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
h : s ∉ 𝒜 ∧ insert a s ∈ 𝒜
⊢ s.erase a ∉ 𝒜 ∧ insert a (s.erase a) ∈ 𝒜
tactic: refine Or.imp (fun h => ⟨h.2, h.2⟩) fun h => ?_
state_before: α : Type u_1
inst✝ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
h : s ∉ 𝒜 ∧ insert a s ∈ 𝒜
⊢ s.erase a ∉ 𝒜 ∧ insert a (s.erase a) ∈ 𝒜
state_after: no goals
tactic: rwa [erase_eq_of_not_mem (insert_ne_self.1 <| ne_of_mem_of_not_mem h.2 h.1)]
Theorem: Int.card_fintype_Ico
File: Mathlib/Data/Int/Interval.lean

Proof steps:
state_before: a b : ℤ
⊢ Fintype.card ↑(Set.Ico a b) = (b - a).toNat
state_after: no goals
tactic: rw [← card_Ico, Fintype.card_ofFinset]
Theorem: Submonoid.LocalizationMap.mk'_mul_cancel_right
File: Mathlib/GroupTheory/MonoidLocalization/Basic.lean

Proof steps:
state_before: M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
x : M
y : ↥S
⊢ f.mk' (x * ↑y) y = f.toMap x
state_after: no goals
tactic: rw [← mul_mk'_one_eq_mk', f.toMap.map_mul, mul_assoc, mul_mk'_one_eq_mk', mk'_self', mul_one]
Theorem: nhdsWithin_pi_eq'
File: Mathlib/Topology/ContinuousOn.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : TopologicalSpace α
ι : Type u_5
π : ι → Type u_6
inst✝ : (i : ι) → TopologicalSpace (π i)
I : Set ι
hI : I.Finite
s : (i : ι) → Set (π i)
x : (i : ι) → π i
⊢ 𝓝[I.pi s] x = ⨅ i, comap (fun x => x i) (𝓝 (x i) ⊓ ⨅ (_ : i ∈ I), 𝓟 (s i))
state_after: no goals
tactic: simp only [nhdsWithin, nhds_pi, Filter.pi, comap_inf, comap_iInf, pi_def, comap_principal, ←
    iInf_principal_finite hI, ← iInf_inf_eq]
Theorem: MeasureTheory.SignedMeasure.mutuallySingular_iff
File: Mathlib/MeasureTheory/Decomposition/Jordan.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
⊢ s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation
state_after: case mp
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
⊢ s ⟂ᵥ t → s.totalVariation ⟂ₘ t.totalVariation

case mpr
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
⊢ s.totalVariation ⟂ₘ t.totalVariation → s ⟂ᵥ t
tactic: constructor
Theorem: Finset.mem_insert_coe
File: Mathlib/Data/Finset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t u v : Finset α
a b : α
s : Finset α
x y : α
⊢ x ∈ insert y s ↔ x ∈ insert y ↑s
state_after: no goals
tactic: simp
Theorem: CategoryTheory.Abelian.Pseudoelement.pseudoApply_aux
File: Mathlib/CategoryTheory/Abelian/Pseudoelements.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Abelian C
P Q : C
f : P ⟶ Q
a b : Over P
x✝ : a ≈ b
R : C
p : R ⟶ a.left
q : R ⟶ b.left
ep : Epi p
Eq : Epi q
comm : p ≫ a.hom = q ≫ b.hom
⊢ p ≫ a.hom ≫ f = q ≫ b.hom ≫ f
state_after: no goals
tactic: rw [reassoc_of% comm]
Theorem: FractionalIdeal.spanFinset_eq_zero
File: Mathlib/RingTheory/FractionalIdeal/Operations.lean

Proof steps:
state_before: R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
⊢ spanFinset R₁ s f = 0 ↔ ∀ j ∈ s, f j = 0
state_after: no goals
tactic: simp only [← coeToSubmodule_inj, spanFinset_coe, coe_zero, Submodule.span_eq_bot,
    Set.mem_image, Finset.mem_coe, forall_exists_index, and_imp, forall_apply_eq_imp_iff₂]
Theorem: card_nsmul_eq_zero
File: Mathlib/GroupTheory/OrderOfElement.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝¹ : Group G
inst✝ : Fintype G
x : G
n : ℕ
⊢ x ^ card G = 1
state_after: no goals
tactic: rw [← Nat.card_eq_fintype_card, pow_card_eq_one']
Theorem: Topology.IsLawson.singleton_isClosed
File: Mathlib/Topology/Order/LawsonTopology.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝² : PartialOrder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLawson α
a : α
⊢ IsClosed {a}
state_after: α : Type u_1
β : Type u_2
inst✝² : PartialOrder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLawson α
a : α
⊢ IsClosed (⇑WithLawson.ofLawson ⁻¹' (↑(upperClosure {a}) ∩ ↑(lowerClosure {a})))
tactic: rw [← (Set.OrdConnected.upperClosure_inter_lowerClosure ordConnected_singleton),
    ← WithLawson.isClosed_preimage_ofLawson]
state_before: α : Type u_1
β : Type u_2
inst✝² : PartialOrder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLawson α
a : α
⊢ IsClosed (⇑WithLawson.ofLawson ⁻¹' (↑(upperClosure {a}) ∩ ↑(lowerClosure {a})))
state_after: α : Type u_1
β : Type u_2
inst✝² : PartialOrder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLawson α
a : α
⊢ IsClosed ↑(lowerClosure {a})
tactic: apply IsClosed.inter
    (lawsonClosed_of_lowerClosed _ (IsLower.isClosed_upperClosure (finite_singleton a)))
state_before: α : Type u_1
β : Type u_2
inst✝² : PartialOrder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLawson α
a : α
⊢ IsClosed ↑(lowerClosure {a})
state_after: α : Type u_1
β : Type u_2
inst✝² : PartialOrder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLawson α
a : α
⊢ IsClosed (⇑WithLawson.ofLawson ⁻¹' Iic a)
tactic: rw [lowerClosure_singleton, LowerSet.coe_Iic, ← WithLawson.isClosed_preimage_ofLawson]
state_before: α : Type u_1
β : Type u_2
inst✝² : PartialOrder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLawson α
a : α
⊢ IsClosed (⇑WithLawson.ofLawson ⁻¹' Iic a)
state_after: case h
α : Type u_1
β : Type u_2
inst✝² : PartialOrder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLawson α
a : α
⊢ IsClosed (⇑WithScott.ofScott ⁻¹' Iic a)
tactic: apply lawsonClosed_of_scottClosed
state_before: case h
α : Type u_1
β : Type u_2
inst✝² : PartialOrder α
inst✝¹ : TopologicalSpace α
inst✝ : IsLawson α
a : α
⊢ IsClosed (⇑WithScott.ofScott ⁻¹' Iic a)
state_after: no goals
tactic: exact IsScott.isClosed_Iic
Theorem: Nat.dist_add_add_right
File: Mathlib/Data/Nat/Dist.lean

Proof steps:
state_before: n k m : ℕ
⊢ n + k - (m + k) + (m + k - (n + k)) = n - m + (m + k - (n + k))
state_after: no goals
tactic: rw [@add_tsub_add_eq_tsub_right]
state_before: n k m : ℕ
⊢ n - m + (m + k - (n + k)) = n - m + (m - n)
state_after: no goals
tactic: rw [@add_tsub_add_eq_tsub_right]
Theorem: ExteriorAlgebra.comp_ι_sq_zero
File: Mathlib/LinearAlgebra/ExteriorAlgebra/Basic.lean

Proof steps:
state_before: R : Type u1
inst✝⁴ : CommRing R
M : Type u2
inst✝³ : AddCommGroup M
inst✝² : Module R M
A : Type u_1
inst✝¹ : Semiring A
inst✝ : Algebra R A
g : ExteriorAlgebra R M →ₐ[R] A
m : M
⊢ g ((ι R) m) * g ((ι R) m) = 0
state_after: no goals
tactic: rw [← map_mul, ι_sq_zero, map_zero]