ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: LieHom.mem_idealRange_iff
File: Mathlib/Algebra/Lie/Submodule.lean

Proof steps:
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
h : f.IsIdealMorphism
y : L'
⊢ y ∈ f.idealRange ↔ ∃ x, f x = y
state_after: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
h : lieIdealSubalgebra R L' f.idealRange = f.range
y : L'
⊢ y ∈ f.idealRange ↔ ∃ x, f x = y
tactic: rw [f.isIdealMorphism_def] at h
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
h : lieIdealSubalgebra R L' f.idealRange = f.range
y : L'
⊢ y ∈ f.idealRange ↔ ∃ x, f x = y
state_after: no goals
tactic: rw [← LieSubmodule.mem_coe, ← LieIdeal.coe_toSubalgebra, h, f.range_coe, Set.mem_range]
Theorem: Ideal.le_pow_of_le_ramificationIdx
File: Mathlib/NumberTheory/RamificationInertia.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
S : Type v
inst✝ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
n : ℕ
hn : n ≤ ramificationIdx f p P
⊢ map f p ≤ P ^ n
state_after: R : Type u
inst✝¹ : CommRing R
S : Type v
inst✝ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
n : ℕ
hn : ¬map f p ≤ P ^ n
⊢ ramificationIdx f p P < n
tactic: contrapose! hn
state_before: R : Type u
inst✝¹ : CommRing R
S : Type v
inst✝ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
n : ℕ
hn : ¬map f p ≤ P ^ n
⊢ ramificationIdx f p P < n
state_after: no goals
tactic: exact ramificationIdx_lt hn
Theorem: cfc_pow_id
File: Mathlib/Analysis/CstarAlgebra/ContinuousFunctionalCalculus/Unital.lean

Proof steps:
state_before: R : Type u_1
A : Type u_2
p : A → Prop
inst✝⁹ : CommSemiring R
inst✝⁸ : StarRing R
inst✝⁷ : MetricSpace R
inst✝⁶ : TopologicalSemiring R
inst✝⁵ : ContinuousStar R
inst✝⁴ : TopologicalSpace A
inst✝³ : Ring A
inst✝² : StarRing A
inst✝¹ : Algebra R A
inst✝ : ContinuousFunctionalCalculus R p
f g : R → R
a✝ : A
ha✝ : autoParam (p a✝) _auto✝
hf : autoParam (ContinuousOn f (spectrum R a✝)) _auto✝
hg : autoParam (ContinuousOn g (spectrum R a✝)) _auto✝
a : A
n : ℕ
ha : autoParam (p a) _auto✝
⊢ cfc (fun x => x ^ n) a = a ^ n
state_after: no goals
tactic: rw [cfc_pow .., cfc_id' ..]
Theorem: ModularForm.mul_slash_SL2
File: Mathlib/NumberTheory/ModularForms/SlashActions.lean

Proof steps:
state_before: Γ : Subgroup SL(2, ℤ)
k : ℤ
f✝ : ℍ → ℂ
k1 k2 : ℤ
A : SL(2, ℤ)
f g : ℍ → ℂ
⊢ (f * g) ∣[k1 + k2] ↑A = (↑↑↑A).det • f ∣[k1] A * g ∣[k2] A
state_after: no goals
tactic: apply mul_slash
state_before: Γ : Subgroup SL(2, ℤ)
k : ℤ
f✝ : ℍ → ℂ
k1 k2 : ℤ
A : SL(2, ℤ)
f g : ℍ → ℂ
⊢ (↑↑↑A).det • f ∣[k1] A * g ∣[k2] A = 1 • f ∣[k1] A * g ∣[k2] A
state_after: no goals
tactic: rw [det_coe']
state_before: Γ : Subgroup SL(2, ℤ)
k : ℤ
f✝ : ℍ → ℂ
k1 k2 : ℤ
A : SL(2, ℤ)
f g : ℍ → ℂ
⊢ 1 • f ∣[k1] A * g ∣[k2] A = f ∣[k1] A * g ∣[k2] A
state_after: no goals
tactic: rw [one_smul]
Theorem: Orientation.oangle_rotation_self_left
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Rotation.lean

Proof steps:
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
hx : x ≠ 0
θ : Real.Angle
⊢ o.oangle ((o.rotation θ) x) x = -θ
state_after: no goals
tactic: simp [hx]
Theorem: Finset.gcd_div_eq_one
File: Mathlib/Algebra/GCDMonoid/Finset.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝³ : CancelCommMonoidWithZero α
inst✝² : NormalizedGCDMonoid α
s✝ s₁ s₂ : Finset β
f✝ : β → α
inst✝¹ : Div α
inst✝ : MulDivCancelClass α
f : ι → α
s : Finset ι
i : ι
his : i ∈ s
hfi : f i ≠ 0
⊢ (s.gcd fun j => f j / s.gcd f) = 1
state_after: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝³ : CancelCommMonoidWithZero α
inst✝² : NormalizedGCDMonoid α
s✝ s₁ s₂ : Finset β
f✝ : β → α
inst✝¹ : Div α
inst✝ : MulDivCancelClass α
f : ι → α
s : Finset ι
i : ι
his : i ∈ s
hfi : f i ≠ 0
g : ι → α
he : ∀ b ∈ s, f b = s.gcd f * g b
hg : s.gcd g = 1
⊢ (s.gcd fun j => f j / s.gcd f) = 1
tactic: obtain ⟨g, he, hg⟩ := Finset.extract_gcd f ⟨i, his⟩
state_before: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝³ : CancelCommMonoidWithZero α
inst✝² : NormalizedGCDMonoid α
s✝ s₁ s₂ : Finset β
f✝ : β → α
inst✝¹ : Div α
inst✝ : MulDivCancelClass α
f : ι → α
s : Finset ι
i : ι
his : i ∈ s
hfi : f i ≠ 0
g : ι → α
he : ∀ b ∈ s, f b = s.gcd f * g b
hg : s.gcd g = 1
⊢ (s.gcd fun j => f j / s.gcd f) = 1
state_after: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝³ : CancelCommMonoidWithZero α
inst✝² : NormalizedGCDMonoid α
s✝ s₁ s₂ : Finset β
f✝ : β → α
inst✝¹ : Div α
inst✝ : MulDivCancelClass α
f : ι → α
s : Finset ι
i : ι
his : i ∈ s
hfi : f i ≠ 0
g : ι → α
he : ∀ b ∈ s, f b = s.gcd f * g b
hg : s.gcd g = 1
a : ι
ha : a ∈ s
⊢ f a / s.gcd f = g a
tactic: refine (Finset.gcd_congr rfl fun a ha ↦ ?_).trans hg
state_before: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝³ : CancelCommMonoidWithZero α
inst✝² : NormalizedGCDMonoid α
s✝ s₁ s₂ : Finset β
f✝ : β → α
inst✝¹ : Div α
inst✝ : MulDivCancelClass α
f : ι → α
s : Finset ι
i : ι
his : i ∈ s
hfi : f i ≠ 0
g : ι → α
he : ∀ b ∈ s, f b = s.gcd f * g b
hg : s.gcd g = 1
a : ι
ha : a ∈ s
⊢ f a / s.gcd f = g a
state_after: case intro.intro.ha
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝³ : CancelCommMonoidWithZero α
inst✝² : NormalizedGCDMonoid α
s✝ s₁ s₂ : Finset β
f✝ : β → α
inst✝¹ : Div α
inst✝ : MulDivCancelClass α
f : ι → α
s : Finset ι
i : ι
his : i ∈ s
hfi : f i ≠ 0
g : ι → α
he : ∀ b ∈ s, f b = s.gcd f * g b
hg : s.gcd g = 1
a : ι
ha : a ∈ s
⊢ s.gcd f ≠ 0
tactic: rw [he a ha, mul_div_cancel_left₀]
state_before: case intro.intro.ha
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝³ : CancelCommMonoidWithZero α
inst✝² : NormalizedGCDMonoid α
s✝ s₁ s₂ : Finset β
f✝ : β → α
inst✝¹ : Div α
inst✝ : MulDivCancelClass α
f : ι → α
s : Finset ι
i : ι
his : i ∈ s
hfi : f i ≠ 0
g : ι → α
he : ∀ b ∈ s, f b = s.gcd f * g b
hg : s.gcd g = 1
a : ι
ha : a ∈ s
⊢ s.gcd f ≠ 0
state_after: no goals
tactic: exact mt Finset.gcd_eq_zero_iff.1 fun h ↦ hfi <| h i his
Theorem: FiniteDimensional.finrank_directSum
File: Mathlib/LinearAlgebra/Dimension/Constructions.lean

Proof steps:
state_before: R S : Type u
M✝ : Type v
M' : Type v'
M₁ : Type v
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝¹⁷ : Ring R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : AddCommGroup M✝
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R M✝
inst✝¹¹ : Module R M'
inst✝¹⁰ : Module R M₁
inst✝⁹ : StrongRankCondition R
inst✝⁸ : Module.Free R M✝
inst✝⁷ : Module.Free R M'
inst✝⁶ : Module.Finite R M✝
inst✝⁵ : Module.Finite R M'
ι : Type v
inst✝⁴ : Fintype ι
M : ι → Type w
inst✝³ : (i : ι) → AddCommGroup (M i)
inst✝² : (i : ι) → Module R (M i)
inst✝¹ : ∀ (i : ι), Module.Free R (M i)
inst✝ : ∀ (i : ι), Module.Finite R (M i)
⊢ finrank R (⨁ (i : ι), M i) = ∑ i : ι, finrank R (M i)
state_after: R S : Type u
M✝ : Type v
M' : Type v'
M₁ : Type v
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝¹⁷ : Ring R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : AddCommGroup M✝
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R M✝
inst✝¹¹ : Module R M'
inst✝¹⁰ : Module R M₁
inst✝⁹ : StrongRankCondition R
inst✝⁸ : Module.Free R M✝
inst✝⁷ : Module.Free R M'
inst✝⁶ : Module.Finite R M✝
inst✝⁵ : Module.Finite R M'
ι : Type v
inst✝⁴ : Fintype ι
M : ι → Type w
inst✝³ : (i : ι) → AddCommGroup (M i)
inst✝² : (i : ι) → Module R (M i)
inst✝¹ : ∀ (i : ι), Module.Free R (M i)
inst✝ : ∀ (i : ι), Module.Finite R (M i)
this : Nontrivial R := nontrivial_of_invariantBasisNumber R
⊢ finrank R (⨁ (i : ι), M i) = ∑ i : ι, finrank R (M i)
tactic: letI := nontrivial_of_invariantBasisNumber R
state_before: R S : Type u
M✝ : Type v
M' : Type v'
M₁ : Type v
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝¹⁷ : Ring R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : AddCommGroup M✝
inst✝¹⁴ : AddCommGroup M'
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R M✝
inst✝¹¹ : Module R M'
inst✝¹⁰ : Module R M₁
inst✝⁹ : StrongRankCondition R
inst✝⁸ : Module.Free R M✝
inst✝⁷ : Module.Free R M'
inst✝⁶ : Module.Finite R M✝
inst✝⁵ : Module.Finite R M'
ι : Type v
inst✝⁴ : Fintype ι
M : ι → Type w
inst✝³ : (i : ι) → AddCommGroup (M i)
inst✝² : (i : ι) → Module R (M i)
inst✝¹ : ∀ (i : ι), Module.Free R (M i)
inst✝ : ∀ (i : ι), Module.Finite R (M i)
this : Nontrivial R := nontrivial_of_invariantBasisNumber R
⊢ finrank R (⨁ (i : ι), M i) = ∑ i : ι, finrank R (M i)
state_after: no goals
tactic: simp only [finrank, fun i => rank_eq_card_chooseBasisIndex R (M i), rank_directSum, ← mk_sigma,
    mk_toNat_eq_card, card_sigma]
Theorem: EReal.mul_comm
File: Mathlib/Data/Real/EReal.lean

Proof steps:
state_before: x y : EReal
⊢ x * y = y * x
state_after: case h_real.h_real
a✝¹ a✝ : ℝ
⊢ ↑a✝¹ * ↑a✝ = ↑a✝ * ↑a✝¹
tactic: induction x <;> induction y  <;>
    try { rfl }
state_before: case h_real.h_real
a✝¹ a✝ : ℝ
⊢ ↑a✝¹ * ↑a✝ = ↑a✝ * ↑a✝¹
state_after: no goals
tactic: rw [← coe_mul, ← coe_mul, mul_comm]
Theorem: Algebra.norm_eq_prod_roots
File: Mathlib/RingTheory/Norm/Basic.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : Ring S
inst✝⁹ : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Field F
inst✝⁵ : Algebra K L
inst✝⁴ : Algebra K F
ι : Type w
E : Type u_7
inst✝³ : Field E
inst✝² : Algebra K E
inst✝¹ : Algebra.IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hF : Splits (algebraMap K F) (minpoly K x)
⊢ (algebraMap K F) ((norm K) x) = ((minpoly K x).aroots F).prod ^ finrank (↥K⟮x⟯) L
state_after: no goals
tactic: rw [norm_eq_norm_adjoin K x, map_pow, IntermediateField.AdjoinSimple.norm_gen_eq_prod_roots _ hF]
Theorem: Matrix.det_fromBlocks₁₁
File: Mathlib/LinearAlgebra/Matrix/SchurComplement.lean

Proof steps:
state_before: l : Type u_1
m : Type u_2
n : Type u_3
α : Type u_4
inst✝⁷ : Fintype l
inst✝⁶ : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : DecidableEq l
inst✝³ : DecidableEq m
inst✝² : DecidableEq n
inst✝¹ : CommRing α
A : Matrix m m α
B : Matrix m n α
C : Matrix n m α
D : Matrix n n α
inst✝ : Invertible A
⊢ (fromBlocks A B C D).det = A.det * (D - C * ⅟A * B).det
state_after: no goals
tactic: rw [fromBlocks_eq_of_invertible₁₁ (A := A), det_mul, det_mul, det_fromBlocks_zero₂₁,
    det_fromBlocks_zero₂₁, det_fromBlocks_zero₁₂, det_one, det_one, one_mul, one_mul, mul_one]
Theorem: Equiv.boolProdEquivSum_apply
File: Mathlib/Logic/Equiv/Basic.lean

Proof steps:
state_before: α : Type ?u.53748
⊢ LeftInverse (Sum.elim (Prod.mk false) (Prod.mk true)) fun p => Bool.casesOn p.1 (inl p.2) (inr p.2)
state_after: no goals
tactic: rintro ⟨_ | _, _⟩ <;> rfl
state_before: α : Type ?u.53748
⊢ Function.RightInverse (Sum.elim (Prod.mk false) (Prod.mk true)) fun p => Bool.casesOn p.1 (inl p.2) (inr p.2)
state_after: no goals
tactic: rintro (_ | _) <;> rfl
Theorem: rank_finsupp
File: Mathlib/LinearAlgebra/Dimension/Constructions.lean

Proof steps:
state_before: R S : Type u
M : Type v
M' : Type v'
M₁ : Type v
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝¹⁰ : Ring R
inst✝⁹ : CommRing S
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Module.Free R M
inst✝ : Module.Free R M'
ι : Type w
⊢ Module.rank R (ι →₀ M) = lift.{v, w} #ι * lift.{w, v} (Module.rank R M)
state_after: case intro.mk
R S : Type u
M : Type v
M' : Type v'
M₁ : Type v
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝¹⁰ : Ring R
inst✝⁹ : CommRing S
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Module.Free R M
inst✝ : Module.Free R M'
ι : Type w
fst✝ : Type v
bs : Basis fst✝ R M
⊢ Module.rank R (ι →₀ M) = lift.{v, w} #ι * lift.{w, v} (Module.rank R M)
tactic: obtain ⟨⟨_, bs⟩⟩ := Module.Free.exists_basis (R := R) (M := M)
state_before: case intro.mk
R S : Type u
M : Type v
M' : Type v'
M₁ : Type v
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝¹⁰ : Ring R
inst✝⁹ : CommRing S
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Module.Free R M
inst✝ : Module.Free R M'
ι : Type w
fst✝ : Type v
bs : Basis fst✝ R M
⊢ Module.rank R (ι →₀ M) = lift.{v, w} #ι * lift.{w, v} (Module.rank R M)
state_after: no goals
tactic: rw [← bs.mk_eq_rank'', ← (Finsupp.basis fun _ : ι => bs).mk_eq_rank'', Cardinal.mk_sigma,
    Cardinal.sum_const]
Theorem: Finset.sum_of_injOn
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

Proof steps:
state_before: ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α✝
a : α✝
f✝ g✝ : α✝ → β
inst✝¹ : CommMonoid β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝ : CommMonoid α
s : Finset ι
t : Finset κ
f : ι → α
g : κ → α
e : ι → κ
he : Set.InjOn e ↑s
hest : Set.MapsTo e ↑s ↑t
h' : ∀ i ∈ t, i ∉ e '' ↑s → g i = 1
h : ∀ i ∈ s, f i = g (e i)
⊢ ∏ i ∈ s, f i = ∏ j ∈ t, g j
state_after: no goals
tactic: classical
  exact (prod_nbij e (fun a ↦ mem_image_of_mem e) he (by simp [Set.surjOn_image]) h).trans <|
    prod_subset (image_subset_iff.2 hest) <| by simpa using h'
Theorem: NonemptyFinLinOrd.Iso.mk_hom
File: Mathlib/Order/Category/NonemptyFinLinOrd.lean

Proof steps:
state_before: α β : NonemptyFinLinOrd
e : ↑α ≃o ↑β
⊢ ↑e ≫ ↑e.symm = 𝟙 α
state_after: case w
α β : NonemptyFinLinOrd
e : ↑α ≃o ↑β
x : (forget NonemptyFinLinOrd).obj α
⊢ (↑e ≫ ↑e.symm) x = (𝟙 α) x
tactic: ext x
state_before: case w
α β : NonemptyFinLinOrd
e : ↑α ≃o ↑β
x : (forget NonemptyFinLinOrd).obj α
⊢ (↑e ≫ ↑e.symm) x = (𝟙 α) x
state_after: no goals
tactic: exact e.symm_apply_apply x
state_before: α β : NonemptyFinLinOrd
e : ↑α ≃o ↑β
⊢ ↑e.symm ≫ ↑e = 𝟙 β
state_after: case w
α β : NonemptyFinLinOrd
e : ↑α ≃o ↑β
x : (forget NonemptyFinLinOrd).obj β
⊢ (↑e.symm ≫ ↑e) x = (𝟙 β) x
tactic: ext x
state_before: case w
α β : NonemptyFinLinOrd
e : ↑α ≃o ↑β
x : (forget NonemptyFinLinOrd).obj β
⊢ (↑e.symm ≫ ↑e) x = (𝟙 β) x
state_after: no goals
tactic: exact e.apply_symm_apply x
Theorem: List.sum_eq_card_nsmul
File: Mathlib/Algebra/BigOperators/Group/List.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l✝ l₁ l₂ : List M
a : M
l : List M
m : M
h : ∀ x ∈ l, x = m
⊢ l.prod = m ^ l.length
state_after: no goals
tactic: rw [← prod_replicate, ← List.eq_replicate.mpr ⟨rfl, h⟩]
Theorem: Finset.sup'_univ_eq_ciSup
File: Mathlib/Order/ConditionallyCompleteLattice/Finset.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : ConditionallyCompleteLattice α
inst✝¹ : Fintype ι
inst✝ : Nonempty ι
f : ι → α
⊢ univ.sup' ⋯ f = ⨆ i, f i
state_after: no goals
tactic: simp [sup'_eq_csSup_image, iSup]
Theorem: InnerProductGeometry.angle_add_eq_arctan_of_inner_eq_zero
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/RightAngle.lean

Proof steps:
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ⟪x, y⟫_ℝ = 0
h0 : x ≠ 0
⊢ angle x (x + y) = Real.arctan (‖y‖ / ‖x‖)
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ⟪x, y⟫_ℝ = 0
h0 : x ≠ 0
⊢ Real.arcsin (‖y‖ / √(‖x‖ * ‖x‖ + ‖y‖ * ‖y‖)) = Real.arcsin (‖y‖ / (‖x‖ * √(1 + (‖y‖ / ‖x‖) ^ 2)))
tactic: rw [angle_add_eq_arcsin_of_inner_eq_zero h (Or.inl h0), Real.arctan_eq_arcsin, ←
    div_mul_eq_div_div, norm_add_eq_sqrt_iff_real_inner_eq_zero.2 h]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ⟪x, y⟫_ℝ = 0
h0 : x ≠ 0
⊢ Real.arcsin (‖y‖ / √(‖x‖ * ‖x‖ + ‖y‖ * ‖y‖)) = Real.arcsin (‖y‖ / (‖x‖ * √(1 + (‖y‖ / ‖x‖) ^ 2)))
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ⟪x, y⟫_ℝ = 0
h0 : x ≠ 0
⊢ Real.arcsin (‖y‖ / √(‖x‖ * ‖x‖ + ‖y‖ * ‖y‖)) = Real.arcsin (‖y‖ / (√(‖x‖ ^ 2) * √(1 + (‖y‖ / ‖x‖) ^ 2)))
tactic: nth_rw 3 [← Real.sqrt_sq (norm_nonneg x)]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ⟪x, y⟫_ℝ = 0
h0 : x ≠ 0
⊢ Real.arcsin (‖y‖ / √(‖x‖ * ‖x‖ + ‖y‖ * ‖y‖)) = Real.arcsin (‖y‖ / (√(‖x‖ ^ 2) * √(1 + (‖y‖ / ‖x‖) ^ 2)))
state_after: no goals
tactic: rw_mod_cast [← Real.sqrt_mul (sq_nonneg _), div_pow, pow_two, pow_two, mul_add, mul_one, mul_div,
    mul_comm (‖x‖ * ‖x‖), ← mul_div, div_self (mul_self_pos.2 (norm_ne_zero_iff.2 h0)).ne', mul_one]
Theorem: _private.Mathlib.GroupTheory.Nilpotent.0.comap_center_subst
File: Mathlib/GroupTheory/Nilpotent.lean

Proof steps:
state_before: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.Normal
H₁ H₂ : Subgroup G
inst✝¹ : H₁.Normal
inst✝ : H₂.Normal
h : H₁ = H₂
⊢ comap (mk' H₁) (center (G ⧸ H₁)) = comap (mk' H₂) (center (G ⧸ H₂))
state_after: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.Normal
H₁ : Subgroup G
inst✝¹ inst✝ : H₁.Normal
⊢ comap (mk' H₁) (center (G ⧸ H₁)) = comap (mk' H₁) (center (G ⧸ H₁))
tactic: subst h
state_before: G : Type u_1
inst✝³ : Group G
H : Subgroup G
inst✝² : H.Normal
H₁ : Subgroup G
inst✝¹ inst✝ : H₁.Normal
⊢ comap (mk' H₁) (center (G ⧸ H₁)) = comap (mk' H₁) (center (G ⧸ H₁))
state_after: no goals
tactic: rfl
Theorem: Finset.prod_eraseNone
File: Mathlib/Algebra/BigOperators/Option.lean

Proof steps:
state_before: α : Type u_1
M : Type u_2
inst✝ : CommMonoid M
f : α → M
s : Finset (Option α)
⊢ ∏ x ∈ eraseNone s, f x = ∏ x ∈ s, Option.elim' 1 f x
state_after: no goals
tactic: classical calc
      ∏ x ∈ eraseNone s, f x = ∏ x ∈ (eraseNone s).map Embedding.some, Option.elim' 1 f x :=
        (prod_map (eraseNone s) Embedding.some <| Option.elim' 1 f).symm
      _ = ∏ x ∈ s.erase none, Option.elim' 1 f x := by rw [map_some_eraseNone]
      _ = ∏ x ∈ s, Option.elim' 1 f x := prod_erase _ rfl
Theorem: MeasureTheory.Content.innerContent_bot
File: Mathlib/MeasureTheory/Measure/Content.lean

Proof steps:
state_before: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
⊢ μ.innerContent ⊥ = 0
state_after: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
⊢ μ.innerContent ⊥ ≤ 0
tactic: refine le_antisymm ?_ (zero_le _)
state_before: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
⊢ μ.innerContent ⊥ ≤ 0
state_after: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
⊢ μ.innerContent ⊥ ≤ (fun s => ↑(μ.toFun s)) ⊥
tactic: rw [← μ.empty]
state_before: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
⊢ μ.innerContent ⊥ ≤ (fun s => ↑(μ.toFun s)) ⊥
state_after: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
K : Compacts G
hK : ↑K ⊆ ↑⊥
⊢ (fun s => ↑(μ.toFun s)) K ≤ (fun s => ↑(μ.toFun s)) ⊥
tactic: refine iSup₂_le fun K hK => ?_
state_before: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
K : Compacts G
hK : ↑K ⊆ ↑⊥
⊢ (fun s => ↑(μ.toFun s)) K ≤ (fun s => ↑(μ.toFun s)) ⊥
state_after: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
K : Compacts G
hK : ↑K ⊆ ↑⊥
this : K = ⊥
⊢ (fun s => ↑(μ.toFun s)) K ≤ (fun s => ↑(μ.toFun s)) ⊥
tactic: have : K = ⊥ := by
    ext1
    rw [subset_empty_iff.mp hK, Compacts.coe_bot]
state_before: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
K : Compacts G
hK : ↑K ⊆ ↑⊥
this : K = ⊥
⊢ (fun s => ↑(μ.toFun s)) K ≤ (fun s => ↑(μ.toFun s)) ⊥
state_after: no goals
tactic: rw [this]
Theorem: Behrend.roth_lower_bound
File: Mathlib/Combinatorics/Additive/AP/Three/Behrend.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
⊢ ↑N * rexp (-4 * √(log ↑N)) ≤ ↑(rothNumberNat N)
state_after: case inl
α : Type u_1
β : Type u_2
n d k : ℕ
x : Fin n → ℕ
⊢ ↑0 * rexp (-4 * √(log ↑0)) ≤ ↑(rothNumberNat 0)

case inr
α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
hN : N > 0
⊢ ↑N * rexp (-4 * √(log ↑N)) ≤ ↑(rothNumberNat N)
tactic: obtain rfl | hN := Nat.eq_zero_or_pos N
state_before: case inr
α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
hN : N > 0
⊢ ↑N * rexp (-4 * √(log ↑N)) ≤ ↑(rothNumberNat N)
state_after: case inr.inl
α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
hN : N > 0
h₁ : 4096 ≤ N
⊢ ↑N * rexp (-4 * √(log ↑N)) ≤ ↑(rothNumberNat N)

case inr.inr
α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
hN : N > 0
h₁ : N < 4096
⊢ ↑N * rexp (-4 * √(log ↑N)) ≤ ↑(rothNumberNat N)
tactic: obtain h₁ | h₁ := le_or_lt 4096 N
Theorem: List.erase_append_right
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : BEq α
inst✝ : LawfulBEq α
a : α
l₁ l₂ : List α
h : ¬a ∈ l₁
⊢ (l₁ ++ l₂).erase a = l₁ ++ l₂.erase a
state_after: case a
α : Type u_1
inst✝¹ : BEq α
inst✝ : LawfulBEq α
a : α
l₁ l₂ : List α
h : ¬a ∈ l₁
⊢ ∀ (b : α), b ∈ l₁ → ¬(a == b) = true
tactic: rw [erase_eq_eraseP, erase_eq_eraseP, eraseP_append_right]
state_before: case a
α : Type u_1
inst✝¹ : BEq α
inst✝ : LawfulBEq α
a : α
l₁ l₂ : List α
h : ¬a ∈ l₁
⊢ ∀ (b : α), b ∈ l₁ → ¬(a == b) = true
state_after: case a
α : Type u_1
inst✝¹ : BEq α
inst✝ : LawfulBEq α
a : α
l₁ l₂ : List α
h : ¬a ∈ l₁
b : α
h' : b ∈ l₁
h'' : (a == b) = true
⊢ False
tactic: intros b h' h''
state_before: case a
α : Type u_1
inst✝¹ : BEq α
inst✝ : LawfulBEq α
a : α
l₁ l₂ : List α
h : ¬a ∈ l₁
b : α
h' : b ∈ l₁
h'' : (a == b) = true
⊢ False
state_after: case a
α : Type u_1
inst✝¹ : BEq α
inst✝ : LawfulBEq α
a : α
l₁ l₂ : List α
b : α
h : ¬b ∈ l₁
h' : b ∈ l₁
h'' : (a == b) = true
⊢ False
tactic: rw [eq_of_beq h''] at h
state_before: case a
α : Type u_1
inst✝¹ : BEq α
inst✝ : LawfulBEq α
a : α
l₁ l₂ : List α
b : α
h : ¬b ∈ l₁
h' : b ∈ l₁
h'' : (a == b) = true
⊢ False
state_after: no goals
tactic: exact h h'
Theorem: AddSubgroup.comap_id
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

Proof steps:
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
H K✝ : Subgroup G
k : Set G
N : Type u_5
inst✝¹ : Group N
P : Type u_6
inst✝ : Group P
K : Subgroup N
⊢ comap (MonoidHom.id N) K = K
state_after: case h
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
H K✝ : Subgroup G
k : Set G
N : Type u_5
inst✝¹ : Group N
P : Type u_6
inst✝ : Group P
K : Subgroup N
x✝ : N
⊢ x✝ ∈ comap (MonoidHom.id N) K ↔ x✝ ∈ K
tactic: ext
state_before: case h
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
H K✝ : Subgroup G
k : Set G
N : Type u_5
inst✝¹ : Group N
P : Type u_6
inst✝ : Group P
K : Subgroup N
x✝ : N
⊢ x✝ ∈ comap (MonoidHom.id N) K ↔ x✝ ∈ K
state_after: no goals
tactic: rfl