1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: KaehlerDifferential.D_tensorProductTo
File: Mathlib/RingTheory/Kaehler/Basic.lean

tactic: rw [← Derivation.liftKaehlerDifferential_apply, Derivation.liftKaehlerDifferential_D]
state_before: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : ↥(ideal R S)
⊢ (D R S).tensorProductTo ↑x = (ideal R S).toCotangent x
state_after: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : ↥(ideal R S)
⊢ LinearMap.id ((ideal R S).toCotangent x) = (ideal R S).toCotangent x

tactic: rfl
state_before: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : ↥(ideal R S)
⊢ LinearMap.id ((ideal R S).toCotangent x) = (ideal R S).toCotangent x
state_after: no goals
Theorem: CircleDeg1Lift.translationNumber_eq_int_iff
File: Mathlib/Dynamics/Circle/RotationNumber/TranslationNumber.lean

tactic: constructor
state_before: f g : CircleDeg1Lift
hf : Continuous ⇑f
m : ℤ
⊢ τ f = ↑m ↔ ∃ x, f x = x + ↑m
state_after: case mp
f g : CircleDeg1Lift
hf : Continuous ⇑f
m : ℤ
⊢ τ f = ↑m → ∃ x, f x = x + ↑m

case mpr
f g : CircleDeg1Lift
hf : Continuous ⇑f
m : ℤ
⊢ (∃ x, f x = x + ↑m) → τ f = ↑m

tactic: intro h
state_before: case mp
f g : CircleDeg1Lift
hf : Continuous ⇑f
m : ℤ
⊢ τ f = ↑m → ∃ x, f x = x + ↑m
state_after: case mp
f g : CircleDeg1Lift
hf : Continuous ⇑f
m : ℤ
h : τ f = ↑m
⊢ ∃ x, f x = x + ↑m

tactic: simp only [← h]
state_before: case mp
f g : CircleDeg1Lift
hf : Continuous ⇑f
m : ℤ
h : τ f = ↑m
⊢ ∃ x, f x = x + ↑m
state_after: case mp
f g : CircleDeg1Lift
hf : Continuous ⇑f
m : ℤ
h : τ f = ↑m
⊢ ∃ x, f x = x + τ f

tactic: exact f.exists_eq_add_translationNumber hf
state_before: case mp
f g : CircleDeg1Lift
hf : Continuous ⇑f
m : ℤ
h : τ f = ↑m
⊢ ∃ x, f x = x + τ f
state_after: no goals

tactic: rintro ⟨x, hx⟩
state_before: case mpr
f g : CircleDeg1Lift
hf : Continuous ⇑f
m : ℤ
⊢ (∃ x, f x = x + ↑m) → τ f = ↑m
state_after: case mpr.intro
f g : CircleDeg1Lift
hf : Continuous ⇑f
m : ℤ
x : ℝ
hx : f x = x + ↑m
⊢ τ f = ↑m

tactic: exact f.translationNumber_of_eq_add_int hx
state_before: case mpr.intro
f g : CircleDeg1Lift
hf : Continuous ⇑f
m : ℤ
x : ℝ
hx : f x = x + ↑m
⊢ τ f = ↑m
state_after: no goals
Theorem: Matrix.equiv_block_det
File: Mathlib/LinearAlgebra/Matrix/Block.lean

tactic: convert Matrix.det_reindex_self (Equiv.subtypeEquivRight e) (toSquareBlockProp M q)
state_before: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝⁶ : CommRing R
M✝ N : Matrix m m R
b : m → α
inst✝⁵ : DecidableEq m
inst✝⁴ : Fintype m
inst✝³ : DecidableEq n
inst✝² : Fintype n
M : Matrix m m R
p q : m → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
e : ∀ (x : m), q x ↔ p x
⊢ (M.toSquareBlockProp p).det = (M.toSquareBlockProp q).det
state_after: no goals
Theorem: CategoryTheory.initial_mono
File: Mathlib/CategoryTheory/Closed/Cartesian.lean

tactic: haveI := strict_initial t g
state_before: C : Type u
inst✝³ : Category.{v, u} C
A B✝ X X' Y Y' Z : C
inst✝² : HasFiniteProducts C
inst✝¹ : Exponentiable A
I B : C
t : IsInitial I
inst✝ : CartesianClosed C
Z✝ : C
g h : Z✝ ⟶ I
x✝ : g ≫ t.to B = h ≫ t.to B
⊢ g = h
state_after: C : Type u
inst✝³ : Category.{v, u} C
A B✝ X X' Y Y' Z : C
inst✝² : HasFiniteProducts C
inst✝¹ : Exponentiable A
I B : C
t : IsInitial I
inst✝ : CartesianClosed C
Z✝ : C
g h : Z✝ ⟶ I
x✝ : g ≫ t.to B = h ≫ t.to B
this : IsIso g
⊢ g = h

tactic: haveI := strict_initial t h
state_before: C : Type u
inst✝³ : Category.{v, u} C
A B✝ X X' Y Y' Z : C
inst✝² : HasFiniteProducts C
inst✝¹ : Exponentiable A
I B : C
t : IsInitial I
inst✝ : CartesianClosed C
Z✝ : C
g h : Z✝ ⟶ I
x✝ : g ≫ t.to B = h ≫ t.to B
this : IsIso g
⊢ g = h
state_after: C : Type u
inst✝³ : Category.{v, u} C
A B✝ X X' Y Y' Z : C
inst✝² : HasFiniteProducts C
inst✝¹ : Exponentiable A
I B : C
t : IsInitial I
inst✝ : CartesianClosed C
Z✝ : C
g h : Z✝ ⟶ I
x✝ : g ≫ t.to B = h ≫ t.to B
this✝ : IsIso g
this : IsIso h
⊢ g = h

tactic: exact eq_of_inv_eq_inv (t.hom_ext _ _)
state_before: C : Type u
inst✝³ : Category.{v, u} C
A B✝ X X' Y Y' Z : C
inst✝² : HasFiniteProducts C
inst✝¹ : Exponentiable A
I B : C
t : IsInitial I
inst✝ : CartesianClosed C
Z✝ : C
g h : Z✝ ⟶ I
x✝ : g ≫ t.to B = h ≫ t.to B
this✝ : IsIso g
this : IsIso h
⊢ g = h
state_after: no goals
Theorem: Ideal.torsionOf_eq_top_iff
File: Mathlib/Algebra/Module/Torsion.lean

tactic: refine ⟨fun h => ?_, fun h => by simp [h]⟩
state_before: R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
⊢ torsionOf R M m = ⊤ ↔ m = 0
state_after: R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
h : torsionOf R M m = ⊤
⊢ m = 0

tactic: rw [← one_smul R m, ← mem_torsionOf_iff m (1 : R), h]
state_before: R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
h : torsionOf R M m = ⊤
⊢ m = 0
state_after: R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
h : torsionOf R M m = ⊤
⊢ 1 ∈ ⊤

tactic: exact Submodule.mem_top
state_before: R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
h : torsionOf R M m = ⊤
⊢ 1 ∈ ⊤
state_after: no goals

tactic: simp [h]
state_before: R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
h : m = 0
⊢ torsionOf R M m = ⊤
state_after: no goals
Theorem: CategoryTheory.MonoidalCategory.dite_tensor
File: Mathlib/CategoryTheory/Monoidal/Category.lean

tactic: split_ifs <;> rfl
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✝ : C
P : Prop
inst✝ : Decidable P
W X Y Z : C
f : W ⟶ X
g : P → (Y ⟶ Z)
g' : ¬P → (Y ⟶ Z)
⊢ (if h : P then g h else g' h) ⊗ f = if h : P then g h ⊗ f else g' h ⊗ f
state_after: no goals
Theorem: SemiconjBy.units_inv_right
File: Mathlib/Algebra/Group/Semiconj/Units.lean

tactic: rw [Units.inv_mul_cancel_left]
state_before: M : Type u_1
G : Type u_2
inst✝ : Monoid M
a : M
x y : Mˣ
h : SemiconjBy a ↑x ↑y
⊢ a * ↑x⁻¹ = ↑y⁻¹ * (↑y * a) * ↑x⁻¹
state_after: no goals

tactic: rw [← h.eq, mul_assoc, Units.mul_inv_cancel_right]
state_before: M : Type u_1
G : Type u_2
inst✝ : Monoid M
a : M
x y : Mˣ
h : SemiconjBy a ↑x ↑y
⊢ ↑y⁻¹ * (↑y * a) * ↑x⁻¹ = ↑y⁻¹ * a
state_after: no goals
Theorem: AddChar.compAddMonoidHom_injective_left
File: Mathlib/Algebra/Group/AddChar.lean

tactic: rintro ψ χ h
state_before: A : Type u_1
B : Type u_2
M : Type u_3
N : Type u_4
inst✝³ : AddMonoid A
inst✝² : AddMonoid B
inst✝¹ : Monoid M
inst✝ : Monoid N
ψ : AddChar A M
f : A →+ B
hf : Surjective ⇑f
⊢ Injective fun ψ => ψ.compAddMonoidHom f
state_after: A : Type u_1
B : Type u_2
M : Type u_3
N : Type u_4
inst✝³ : AddMonoid A
inst✝² : AddMonoid B
inst✝¹ : Monoid M
inst✝ : Monoid N
ψ✝ : AddChar A M
f : A →+ B
hf : Surjective ⇑f
ψ χ : AddChar B M
h : (fun ψ => ψ.compAddMonoidHom f) ψ = (fun ψ => ψ.compAddMonoidHom f) χ
⊢ ψ = χ

tactic: rw [DFunLike.ext'_iff] at h ⊢
state_before: A : Type u_1
B : Type u_2
M : Type u_3
N : Type u_4
inst✝³ : AddMonoid A
inst✝² : AddMonoid B
inst✝¹ : Monoid M
inst✝ : Monoid N
ψ✝ : AddChar A M
f : A →+ B
hf : Surjective ⇑f
ψ χ : AddChar B M
h : (fun ψ => ψ.compAddMonoidHom f) ψ = (fun ψ => ψ.compAddMonoidHom f) χ
⊢ ψ = χ
state_after: A : Type u_1
B : Type u_2
M : Type u_3
N : Type u_4
inst✝³ : AddMonoid A
inst✝² : AddMonoid B
inst✝¹ : Monoid M
inst✝ : Monoid N
ψ✝ : AddChar A M
f : A →+ B
hf : Surjective ⇑f
ψ χ : AddChar B M
h : ⇑((fun ψ => ψ.compAddMonoidHom f) ψ) = ⇑((fun ψ => ψ.compAddMonoidHom f) χ)
⊢ ⇑ψ = ⇑χ

tactic: exact hf.injective_comp_right h
state_before: A : Type u_1
B : Type u_2
M : Type u_3
N : Type u_4
inst✝³ : AddMonoid A
inst✝² : AddMonoid B
inst✝¹ : Monoid M
inst✝ : Monoid N
ψ✝ : AddChar A M
f : A →+ B
hf : Surjective ⇑f
ψ χ : AddChar B M
h : ⇑((fun ψ => ψ.compAddMonoidHom f) ψ) = ⇑((fun ψ => ψ.compAddMonoidHom f) χ)
⊢ ⇑ψ = ⇑χ
state_after: no goals
Theorem: Matrix.map_updateColumn
File: Mathlib/Data/Matrix/RowCol.lean

tactic: ext
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i : m
j : n
b : n → α
c : m → α
inst✝ : DecidableEq n
f : α → β
⊢ (M.updateColumn j c).map f = (M.map f).updateColumn j (f ∘ c)
state_after: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i : m
j : n
b : n → α
c : m → α
inst✝ : DecidableEq n
f : α → β
i✝ : m
j✝ : n
⊢ (M.updateColumn j c).map f i✝ j✝ = (M.map f).updateColumn j (f ∘ c) i✝ j✝

tactic: rw [updateColumn_apply, map_apply, map_apply, updateColumn_apply]
state_before: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i : m
j : n
b : n → α
c : m → α
inst✝ : DecidableEq n
f : α → β
i✝ : m
j✝ : n
⊢ (M.updateColumn j c).map f i✝ j✝ = (M.map f).updateColumn j (f ∘ c) i✝ j✝
state_after: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i : m
j : n
b : n → α
c : m → α
inst✝ : DecidableEq n
f : α → β
i✝ : m
j✝ : n
⊢ f (if j✝ = j then c i✝ else M i✝ j✝) = if j✝ = j then (f ∘ c) i✝ else f (M i✝ j✝)

tactic: exact apply_ite f _ _ _
state_before: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i : m
j : n
b : n → α
c : m → α
inst✝ : DecidableEq n
f : α → β
i✝ : m
j✝ : n
⊢ f (if j✝ = j then c i✝ else M i✝ j✝) = if j✝ = j then (f ∘ c) i✝ else f (M i✝ j✝)
state_after: no goals
Theorem: CliffordAlgebra.lift_unique
File: Mathlib/LinearAlgebra/CliffordAlgebra/Basic.lean

tactic: convert (lift Q : _ ≃ (CliffordAlgebra Q →ₐ[R] A)).symm_apply_eq
state_before: R : Type u_1
inst✝⁴ : CommRing R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
Q : QuadraticForm R M
n : ℕ
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : M →ₗ[R] A
cond : ∀ (m : M), f m * f m = (algebraMap R A) (Q m)
g : CliffordAlgebra Q →ₐ[R] A
⊢ g.toLinearMap ∘ₗ ι Q = f ↔ g = (lift Q) ⟨f, cond⟩
state_after: case h.e'_1.a
R : Type u_1
inst✝⁴ : CommRing R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
Q : QuadraticForm R M
n : ℕ
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : M →ₗ[R] A
cond : ∀ (m : M), f m * f m = (algebraMap R A) (Q m)
g : CliffordAlgebra Q →ₐ[R] A
⊢ g.toLinearMap ∘ₗ ι Q = f ↔ (lift Q).symm g = ⟨f, cond⟩

tactic: rw [lift_symm_apply, Subtype.mk_eq_mk]
state_before: case h.e'_1.a
R : Type u_1
inst✝⁴ : CommRing R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
Q : QuadraticForm R M
n : ℕ
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : M →ₗ[R] A
cond : ∀ (m : M), f m * f m = (algebraMap R A) (Q m)
g : CliffordAlgebra Q →ₐ[R] A
⊢ g.toLinearMap ∘ₗ ι Q = f ↔ (lift Q).symm g = ⟨f, cond⟩
state_after: no goals
Theorem: LinearPMap.mem_graph_snd_inj'
File: Mathlib/LinearAlgebra/LinearPMap.lean

tactic: cases x
state_before: R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
M : Type u_5
inst✝² : Monoid M
inst✝¹ : DistribMulAction M F
inst✝ : SMulCommClass R M F
y✝ : M
f : E →ₗ.[R] F
x y : E × F
hx : x ∈ f.graph
hy : y ∈ f.graph
hxy : x.1 = y.1
⊢ x.2 = y.2
state_after: case mk
R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
M : Type u_5
inst✝² : Monoid M
inst✝¹ : DistribMulAction M F
inst✝ : SMulCommClass R M F
y✝ : M
f : E →ₗ.[R] F
y : E × F
hy : y ∈ f.graph
fst✝ : E
snd✝ : F
hx : (fst✝, snd✝) ∈ f.graph
hxy : (fst✝, snd✝).1 = y.1
⊢ (fst✝, snd✝).2 = y.2

tactic: cases y
state_before: case mk
R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
M : Type u_5
inst✝² : Monoid M
inst✝¹ : DistribMulAction M F
inst✝ : SMulCommClass R M F
y✝ : M
f : E →ₗ.[R] F
y : E × F
hy : y ∈ f.graph
fst✝ : E
snd✝ : F
hx : (fst✝, snd✝) ∈ f.graph
hxy : (fst✝, snd✝).1 = y.1
⊢ (fst✝, snd✝).2 = y.2
state_after: case mk.mk
R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
M : Type u_5
inst✝² : Monoid M
inst✝¹ : DistribMulAction M F
inst✝ : SMulCommClass R M F
y : M
f : E →ₗ.[R] F
fst✝¹ : E
snd✝¹ : F
hx : (fst✝¹, snd✝¹) ∈ f.graph
fst✝ : E
snd✝ : F
hy : (fst✝, snd✝) ∈ f.graph
hxy : (fst✝¹, snd✝¹).1 = (fst✝, snd✝).1
⊢ (fst✝¹, snd✝¹).2 = (fst✝, snd✝).2

tactic: exact f.mem_graph_snd_inj hx hy hxy
state_before: case mk.mk
R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
M : Type u_5
inst✝² : Monoid M
inst✝¹ : DistribMulAction M F
inst✝ : SMulCommClass R M F
y : M
f : E →ₗ.[R] F
fst✝¹ : E
snd✝¹ : F
hx : (fst✝¹, snd✝¹) ∈ f.graph
fst✝ : E
snd✝ : F
hy : (fst✝, snd✝) ∈ f.graph
hxy : (fst✝¹, snd✝¹).1 = (fst✝, snd✝).1
⊢ (fst✝¹, snd✝¹).2 = (fst✝, snd✝).2
state_after: no goals
Theorem: ENNReal.sInf_add
File: Mathlib/Data/ENNReal/Real.lean

tactic: simp [sInf_eq_iInf, iInf_add]
state_before: ι : Sort u_1
f g : ι → ℝ≥0∞
a b c d : ℝ≥0∞
r p q : ℝ≥0
s : Set ℝ≥0∞
⊢ sInf s + a = ⨅ b ∈ s, b + a
state_after: no goals
Theorem: insert_mem_nhds_iff
File: Mathlib/Topology/ContinuousOn.lean

tactic: simp only [nhdsWithin, mem_inf_principal, mem_compl_iff, mem_singleton_iff, or_iff_not_imp_left,
  insert_def]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : TopologicalSpace α
a : α
s : Set α
⊢ insert a s ∈ 𝓝 a ↔ s ∈ 𝓝[≠] a
state_after: no goals
Theorem: MeasurableSpace.measurable_mapNatBool
File: Mathlib/MeasureTheory/MeasurableSpace/CountablyGenerated.lean

tactic: rw [measurable_pi_iff]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : CountablyGenerated α
⊢ Measurable (mapNatBool α)
state_after: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : CountablyGenerated α
⊢ ∀ (a : ℕ), Measurable fun x => mapNatBool α x a

tactic: refine fun n ↦ measurable_to_bool ?_
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : CountablyGenerated α
⊢ ∀ (a : ℕ), Measurable fun x => mapNatBool α x a
state_after: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : CountablyGenerated α
n : ℕ
⊢ MeasurableSet ((fun x => mapNatBool α x n) ⁻¹' {true})

tactic: simp only [preimage, mem_singleton_iff, mapNatBool,
  Bool.decide_iff, setOf_mem_eq]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : CountablyGenerated α
n : ℕ
⊢ MeasurableSet ((fun x => mapNatBool α x n) ⁻¹' {true})
state_after: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : CountablyGenerated α
n : ℕ
⊢ MeasurableSet (natGeneratingSequence α n)

tactic: apply measurableSet_natGeneratingSequence
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : CountablyGenerated α
n : ℕ
⊢ MeasurableSet (natGeneratingSequence α n)
state_after: no goals
Theorem: mul_self_nonneg
File: Mathlib/Algebra/Order/Ring/Defs.lean

tactic: simpa only [sq] using sq_nonneg a
state_before: α : Type u
β : Type u_1
inst✝¹ : LinearOrderedSemiring α
a✝ b c d : α
inst✝ : ExistsAddOfLE α
a : α
⊢ 0 ≤ a * a
state_after: no goals
Theorem: List.dlookup_kunion_right
File: Mathlib/Data/List/Sigma.lean

tactic: induction l₁ generalizing l₂ with
| nil => simp
| cons _ _ ih => simp_all [not_or]
state_before: α : Type u
β : α → Type v
l l₁✝ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l₁ l₂ : List (Sigma β)
h : a ∉ l₁.keys
⊢ dlookup a (l₁.kunion l₂) = dlookup a l₂
state_after: no goals

tactic: simp
state_before: case nil
α : Type u
β : α → Type v
l l₁ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l₂ : List (Sigma β)
h : a ∉ [].keys
⊢ dlookup a ([].kunion l₂) = dlookup a l₂
state_after: no goals

tactic: simp_all [not_or]
state_before: case cons
α : Type u
β : α → Type v
l l₁ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
a : α
head✝ : Sigma β
tail✝ : List (Sigma β)
ih : ∀ {l₂ : List (Sigma β)}, a ∉ tail✝.keys → dlookup a (tail✝.kunion l₂) = dlookup a l₂
l₂ : List (Sigma β)
h : a ∉ (head✝ :: tail✝).keys
⊢ dlookup a ((head✝ :: tail✝).kunion l₂) = dlookup a l₂
state_after: no goals
Theorem: Finset.inf_congr
File: Mathlib/Data/Finset/Lattice.lean

tactic: subst hs
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝¹ : SemilatticeInf α
inst✝ : OrderTop α
s s₁ s₂ : Finset β
f✝ g✝ : β → α
a : α
f g : β → α
hs : s₁ = s₂
hfg : ∀ a ∈ s₂, f a = g a
⊢ s₁.inf f = s₂.inf g
state_after: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝¹ : SemilatticeInf α
inst✝ : OrderTop α
s s₁ : Finset β
f✝ g✝ : β → α
a : α
f g : β → α
hfg : ∀ a ∈ s₁, f a = g a
⊢ s₁.inf f = s₁.inf g

tactic: exact Finset.fold_congr hfg
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝¹ : SemilatticeInf α
inst✝ : OrderTop α
s s₁ : Finset β
f✝ g✝ : β → α
a : α
f g : β → α
hfg : ∀ a ∈ s₁, f a = g a
⊢ s₁.inf f = s₁.inf g
state_after: no goals
Theorem: isPrimePow_nat_iff_bounded
File: Mathlib/Algebra/IsPrimePow.lean

tactic: rw [isPrimePow_nat_iff]
state_before: R : Type u_1
inst✝ : CommMonoidWithZero R
n✝ p : R
k n : ℕ
⊢ IsPrimePow n ↔ ∃ p ≤ n, ∃ k ≤ n, Nat.Prime p ∧ 0 < k ∧ p ^ k = n
state_after: R : Type u_1
inst✝ : CommMonoidWithZero R
n✝ p : R
k n : ℕ
⊢ (∃ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n) ↔ ∃ p ≤ n, ∃ k ≤ n, Nat.Prime p ∧ 0 < k ∧ p ^ k = n

tactic: refine Iff.symm ⟨fun ⟨p, _, k, _, hp, hk, hn⟩ => ⟨p, k, hp, hk, hn⟩, ?_⟩
state_before: R : Type u_1
inst✝ : CommMonoidWithZero R
n✝ p : R
k n : ℕ
⊢ (∃ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n) ↔ ∃ p ≤ n, ∃ k ≤ n, Nat.Prime p ∧ 0 < k ∧ p ^ k = n
state_after: R : Type u_1
inst✝ : CommMonoidWithZero R
n✝ p : R
k n : ℕ
⊢ (∃ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n) → ∃ p ≤ n, ∃ k ≤ n, Nat.Prime p ∧ 0 < k ∧ p ^ k = n

tactic: rintro ⟨p, k, hp, hk, rfl⟩
state_before: R : Type u_1
inst✝ : CommMonoidWithZero R
n✝ p : R
k n : ℕ
⊢ (∃ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n) → ∃ p ≤ n, ∃ k ≤ n, Nat.Prime p ∧ 0 < k ∧ p ^ k = n
state_after: case intro.intro.intro.intro
R : Type u_1
inst✝ : CommMonoidWithZero R
n p✝ : R
k✝ p k : ℕ
hp : Nat.Prime p
hk : 0 < k
⊢ ∃ p_1 ≤ p ^ k, ∃ k_1 ≤ p ^ k, Nat.Prime p_1 ∧ 0 < k_1 ∧ p_1 ^ k_1 = p ^ k

tactic: refine ⟨p, ?_, k, (Nat.lt_pow_self hp.one_lt _).le, hp, hk, rfl⟩
state_before: case intro.intro.intro.intro
R : Type u_1
inst✝ : CommMonoidWithZero R
n p✝ : R
k✝ p k : ℕ
hp : Nat.Prime p
hk : 0 < k
⊢ ∃ p_1 ≤ p ^ k, ∃ k_1 ≤ p ^ k, Nat.Prime p_1 ∧ 0 < k_1 ∧ p_1 ^ k_1 = p ^ k
state_after: case intro.intro.intro.intro
R : Type u_1
inst✝ : CommMonoidWithZero R
n p✝ : R
k✝ p k : ℕ
hp : Nat.Prime p
hk : 0 < k
⊢ p ≤ p ^ k

tactic: conv => { lhs; rw [← (pow_one p)] }
state_before: case intro.intro.intro.intro
R : Type u_1
inst✝ : CommMonoidWithZero R
n p✝ : R
k✝ p k : ℕ
hp : Nat.Prime p
hk : 0 < k
⊢ p ≤ p ^ k
state_after: case intro.intro.intro.intro
R : Type u_1
inst✝ : CommMonoidWithZero R
n p✝ : R
k✝ p k : ℕ
hp : Nat.Prime p
hk : 0 < k
⊢ p ^ 1 ≤ p ^ k

tactic: exact Nat.pow_le_pow_right hp.one_lt.le hk
state_before: case intro.intro.intro.intro
R : Type u_1
inst✝ : CommMonoidWithZero R
n p✝ : R
k✝ p k : ℕ
hp : Nat.Prime p
hk : 0 < k
⊢ p ^ 1 ≤ p ^ k
state_after: no goals
Theorem: memPartitionSet_mem
File: Mathlib/Data/Set/MemPartition.lean

tactic: induction n with
| zero => simp [memPartitionSet]
| succ n ih =>
  classical
  rw [memPartitionSet_succ, memPartition_succ]
  refine ⟨memPartitionSet f n a, ?_⟩
  split_ifs <;> simp [ih]
state_before: α : Type u_1
f : ℕ → Set α
n : ℕ
a : α
⊢ memPartitionSet f n a ∈ memPartition f n
state_after: no goals

tactic: simp [memPartitionSet]
state_before: case zero
α : Type u_1
f : ℕ → Set α
a : α
⊢ memPartitionSet f 0 a ∈ memPartition f 0
state_after: no goals

tactic: classical
rw [memPartitionSet_succ, memPartition_succ]
refine ⟨memPartitionSet f n a, ?_⟩
split_ifs <;> simp [ih]
state_before: case succ
α : Type u_1
f : ℕ → Set α
a : α
n : ℕ
ih : memPartitionSet f n a ∈ memPartition f n
⊢ memPartitionSet f (n + 1) a ∈ memPartition f (n + 1)
state_after: no goals

tactic: rw [memPartitionSet_succ, memPartition_succ]
state_before: case succ
α : Type u_1
f : ℕ → Set α
a : α
n : ℕ
ih : memPartitionSet f n a ∈ memPartition f n
⊢ memPartitionSet f (n + 1) a ∈ memPartition f (n + 1)
state_after: case succ
α : Type u_1
f : ℕ → Set α
a : α
n : ℕ
ih : memPartitionSet f n a ∈ memPartition f n
⊢ (if a ∈ f n then memPartitionSet f n a ∩ f n else memPartitionSet f n a \ f n) ∈
    {s | ∃ u ∈ memPartition f n, s = u ∩ f n ∨ s = u \ f n}

tactic: refine ⟨memPartitionSet f n a, ?_⟩
state_before: case succ
α : Type u_1
f : ℕ → Set α
a : α
n : ℕ
ih : memPartitionSet f n a ∈ memPartition f n
⊢ (if a ∈ f n then memPartitionSet f n a ∩ f n else memPartitionSet f n a \ f n) ∈
    {s | ∃ u ∈ memPartition f n, s = u ∩ f n ∨ s = u \ f n}
state_after: case succ
α : Type u_1
f : ℕ → Set α
a : α
n : ℕ
ih : memPartitionSet f n a ∈ memPartition f n
⊢ memPartitionSet f n a ∈ memPartition f n ∧
    ((if a ∈ f n then memPartitionSet f n a ∩ f n else memPartitionSet f n a \ f n) = memPartitionSet f n a ∩ f n ∨
      (if a ∈ f n then memPartitionSet f n a ∩ f n else memPartitionSet f n a \ f n) = memPartitionSet f n a \ f n)

tactic: split_ifs <;> simp [ih]
state_before: case succ
α : Type u_1
f : ℕ → Set α
a : α
n : ℕ
ih : memPartitionSet f n a ∈ memPartition f n
⊢ memPartitionSet f n a ∈ memPartition f n ∧
    ((if a ∈ f n then memPartitionSet f n a ∩ f n else memPartitionSet f n a \ f n) = memPartitionSet f n a ∩ f n ∨
      (if a ∈ f n then memPartitionSet f n a ∩ f n else memPartitionSet f n a \ f n) = memPartitionSet f n a \ f n)
state_after: no goals
Theorem: CommGroup.center_eq_top
File: Mathlib/GroupTheory/Subgroup/Center.lean

tactic: rw [eq_top_iff']
state_before: G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : CommGroup G
⊢ center G = ⊤
state_after: G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : CommGroup G
⊢ ∀ (x : G), x ∈ center G

tactic: intro x
state_before: G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : CommGroup G
⊢ ∀ (x : G), x ∈ center G
state_after: G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : CommGroup G
x : G
⊢ x ∈ center G

tactic: rw [Subgroup.mem_center_iff]
state_before: G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : CommGroup G
x : G
⊢ x ∈ center G
state_after: G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : CommGroup G
x : G
⊢ ∀ (g : G), g * x = x * g

tactic: intro y
state_before: G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : CommGroup G
x : G
⊢ ∀ (g : G), g * x = x * g
state_after: G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : CommGroup G
x y : G
⊢ y * x = x * y

tactic: exact mul_comm y x
state_before: G✝ : Type u_1
inst✝¹ : Group G✝
G : Type u_2
inst✝ : CommGroup G
x y : G
⊢ y * x = x * y
state_after: no goals