1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: PEquiv.mul_matrix_apply
File: Mathlib/Data/Matrix/PEquiv.lean

tactic: dsimp [toMatrix, Matrix.mul_apply]
state_before: k : Type u_1
l : Type u_2
m : Type u_3
n : Type u_4
α : Type v
inst✝² : Fintype m
inst✝¹ : DecidableEq m
inst✝ : Semiring α
f : l ≃. m
M : Matrix m n α
i : l
j : n
⊢ (f.toMatrix * M) i j = Option.casesOn (f i) 0 fun fi => M fi j
state_after: k : Type u_1
l : Type u_2
m : Type u_3
n : Type u_4
α : Type v
inst✝² : Fintype m
inst✝¹ : DecidableEq m
inst✝ : Semiring α
f : l ≃. m
M : Matrix m n α
i : l
j : n
⊢ ∑ j_1 : m, (if j_1 ∈ f i then 1 else 0) * M j_1 j = Option.rec 0 (fun val => M val j) (f i)

tactic: cases' h : f i with fi
state_before: k : Type u_1
l : Type u_2
m : Type u_3
n : Type u_4
α : Type v
inst✝² : Fintype m
inst✝¹ : DecidableEq m
inst✝ : Semiring α
f : l ≃. m
M : Matrix m n α
i : l
j : n
⊢ ∑ j_1 : m, (if j_1 ∈ f i then 1 else 0) * M j_1 j = Option.rec 0 (fun val => M val j) (f i)
state_after: case none
k : Type u_1
l : Type u_2
m : Type u_3
n : Type u_4
α : Type v
inst✝² : Fintype m
inst✝¹ : DecidableEq m
inst✝ : Semiring α
f : l ≃. m
M : Matrix m n α
i : l
j : n
h : f i = none
⊢ ∑ j_1 : m, (if j_1 ∈ none then 1 else 0) * M j_1 j = Option.rec 0 (fun val => M val j) none

case some
k : Type u_1
l : Type u_2
m : Type u_3
n : Type u_4
α : Type v
inst✝² : Fintype m
inst✝¹ : DecidableEq m
inst✝ : Semiring α
f : l ≃. m
M : Matrix m n α
i : l
j : n
fi : m
h : f i = some fi
⊢ ∑ j_1 : m, (if j_1 ∈ some fi then 1 else 0) * M j_1 j = Option.rec 0 (fun val => M val j) (some fi)

tactic: simp [h]
state_before: case none
k : Type u_1
l : Type u_2
m : Type u_3
n : Type u_4
α : Type v
inst✝² : Fintype m
inst✝¹ : DecidableEq m
inst✝ : Semiring α
f : l ≃. m
M : Matrix m n α
i : l
j : n
h : f i = none
⊢ ∑ j_1 : m, (if j_1 ∈ none then 1 else 0) * M j_1 j = Option.rec 0 (fun val => M val j) none
state_after: no goals

tactic: rw [Finset.sum_eq_single fi] <;> simp (config := { contextual := true }) [h, eq_comm]
state_before: case some
k : Type u_1
l : Type u_2
m : Type u_3
n : Type u_4
α : Type v
inst✝² : Fintype m
inst✝¹ : DecidableEq m
inst✝ : Semiring α
f : l ≃. m
M : Matrix m n α
i : l
j : n
fi : m
h : f i = some fi
⊢ ∑ j_1 : m, (if j_1 ∈ some fi then 1 else 0) * M j_1 j = Option.rec 0 (fun val => M val j) (some fi)
state_after: no goals
Theorem: Algebra.traceMatrix_of_basis
File: Mathlib/RingTheory/Trace.lean

tactic: ext (i j)
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁶ : CommRing A
inst✝⁵ : CommRing B
inst✝⁴ : Algebra A B
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Fintype κ
inst✝ : DecidableEq κ
b : Basis κ A B
⊢ traceMatrix A ⇑b = (BilinForm.toMatrix b) (traceForm A B)
state_after: case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁶ : CommRing A
inst✝⁵ : CommRing B
inst✝⁴ : Algebra A B
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Fintype κ
inst✝ : DecidableEq κ
b : Basis κ A B
i j : κ
⊢ traceMatrix A (⇑b) i j = (BilinForm.toMatrix b) (traceForm A B) i j

tactic: rw [traceMatrix_apply, traceForm_apply, traceForm_toMatrix]
state_before: case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁶ : CommRing A
inst✝⁵ : CommRing B
inst✝⁴ : Algebra A B
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Fintype κ
inst✝ : DecidableEq κ
b : Basis κ A B
i j : κ
⊢ traceMatrix A (⇑b) i j = (BilinForm.toMatrix b) (traceForm A B) i j
state_after: no goals
Theorem: absorbent_iff_eventually_nhdsWithin_zero
File: Mathlib/Analysis/LocallyConvex/Basic.lean

tactic: simp only [absorbs_iff_eventually_nhdsWithin_zero, mapsTo_singleton]
state_before: 𝕜 : Type u_1
𝕝 : Type u_2
E : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝² : NormedDivisionRing 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s t : Set E
x✝ : E
a b : 𝕜
x : E
⊢ Absorbs 𝕜 s {x} ↔ ∀ᶠ (c : 𝕜) in 𝓝[≠] 0, c • x ∈ s
state_after: no goals
Theorem: divp_eq_divp_iff
File: Mathlib/Algebra/Group/Units.lean

tactic: rw [divp_eq_iff_mul_eq, divp_mul_eq_mul_divp, divp_eq_iff_mul_eq]
state_before: α : Type u
inst✝ : CommMonoid α
x y : α
ux uy : αˣ
⊢ x /ₚ ux = y /ₚ uy ↔ x * ↑uy = y * ↑ux
state_after: no goals
Theorem: Finset.filter_eq_self
File: Mathlib/Data/Finset/Basic.lean

tactic: simp [Finset.ext_iff]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
p q : α → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
s : Finset α
⊢ filter p s = s ↔ ∀ x ∈ s, p x
state_after: no goals
Theorem: Stream'.unfolds_eq
File: Mathlib/Data/Stream/Init.lean

tactic: unfold unfolds
state_before: α : Type u
β : Type v
δ : Type w
g : α → β
f : α → α
a : α
⊢ unfolds g f a = g a :: unfolds g f (f a)
state_after: α : Type u
β : Type v
δ : Type w
g : α → β
f : α → α
a : α
⊢ corec g f a = g a :: corec g f (f a)

tactic: rw [corec_eq]
state_before: α : Type u
β : Type v
δ : Type w
g : α → β
f : α → α
a : α
⊢ corec g f a = g a :: corec g f (f a)
state_after: no goals
Theorem: Complex.tanh_ofReal_im
File: Mathlib/Data/Complex/Exponential.lean

tactic: rw [← ofReal_tanh_ofReal_re, ofReal_im]
state_before: x✝ y : ℂ
x : ℝ
⊢ (tanh ↑x).im = 0
state_after: no goals
Theorem: Matrix.tail_cons
File: Mathlib/Data/Fin/VecNotation.lean

tactic: ext
state_before: α : Type u
m n o : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
x : α
u : Fin m → α
⊢ vecTail (vecCons x u) = u
state_after: case h
α : Type u
m n o : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
x : α
u : Fin m → α
x✝ : Fin m
⊢ vecTail (vecCons x u) x✝ = u x✝

tactic: simp [vecTail]
state_before: case h
α : Type u
m n o : ℕ
m' : Type u_1
n' : Type u_2
o' : Type u_3
x : α
u : Fin m → α
x✝ : Fin m
⊢ vecTail (vecCons x u) x✝ = u x✝
state_after: no goals
Theorem: BoxIntegral.Prepartition.coe_eq_of_mem_split_of_mem_le
File: Mathlib/Analysis/BoxIntegral/Partition/Split.lean

tactic: refine (mem_split_iff'.1 h₁).resolve_right fun H => ?_
state_before: ι : Type u_1
M : Type u_2
n : ℕ
I J : Box ι
i : ι
x : ℝ
y : ι → ℝ
h₁ : J ∈ split I i x
h₂ : y ∈ J
h₃ : y i ≤ x
⊢ ↑J = ↑I ∩ {y | y i ≤ x}
state_after: ι : Type u_1
M : Type u_2
n : ℕ
I J : Box ι
i : ι
x : ℝ
y : ι → ℝ
h₁ : J ∈ split I i x
h₂ : y ∈ J
h₃ : y i ≤ x
H : ↑J = ↑I ∩ {y | x < y i}
⊢ False

tactic: rw [← Box.mem_coe, H] at h₂
state_before: ι : Type u_1
M : Type u_2
n : ℕ
I J : Box ι
i : ι
x : ℝ
y : ι → ℝ
h₁ : J ∈ split I i x
h₂ : y ∈ J
h₃ : y i ≤ x
H : ↑J = ↑I ∩ {y | x < y i}
⊢ False
state_after: ι : Type u_1
M : Type u_2
n : ℕ
I J : Box ι
i : ι
x : ℝ
y : ι → ℝ
h₁ : J ∈ split I i x
h₂ : y ∈ ↑I ∩ {y | x < y i}
h₃ : y i ≤ x
H : ↑J = ↑I ∩ {y | x < y i}
⊢ False

tactic: exact h₃.not_lt h₂.2
state_before: ι : Type u_1
M : Type u_2
n : ℕ
I J : Box ι
i : ι
x : ℝ
y : ι → ℝ
h₁ : J ∈ split I i x
h₂ : y ∈ ↑I ∩ {y | x < y i}
h₃ : y i ≤ x
H : ↑J = ↑I ∩ {y | x < y i}
⊢ False
state_after: no goals
Theorem: measurable_of_Ici
File: Mathlib/MeasureTheory/Constructions/BorelSpace/Order.lean

tactic: apply measurable_of_Iio
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✝⁷ : BorelSpace α
inst✝⁶ : TopologicalSpace β
inst✝⁵ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : MeasurableSpace δ
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : SecondCountableTopology α
f : δ → α
hf : ∀ (x : α), MeasurableSet (f ⁻¹' Ici x)
⊢ Measurable f
state_after: case hf
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s t u : Set α
inst✝⁹ : TopologicalSpace α
inst✝⁸ : MeasurableSpace α
inst✝⁷ : BorelSpace α
inst✝⁶ : TopologicalSpace β
inst✝⁵ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : MeasurableSpace δ
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : SecondCountableTopology α
f : δ → α
hf : ∀ (x : α), MeasurableSet (f ⁻¹' Ici x)
⊢ ∀ (x : α), MeasurableSet (f ⁻¹' Iio x)

tactic: simp_rw [← compl_Ici, preimage_compl, MeasurableSet.compl_iff]
state_before: case hf
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s t u : Set α
inst✝⁹ : TopologicalSpace α
inst✝⁸ : MeasurableSpace α
inst✝⁷ : BorelSpace α
inst✝⁶ : TopologicalSpace β
inst✝⁵ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : MeasurableSpace δ
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : SecondCountableTopology α
f : δ → α
hf : ∀ (x : α), MeasurableSet (f ⁻¹' Ici x)
⊢ ∀ (x : α), MeasurableSet (f ⁻¹' Iio x)
state_after: case hf
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s t u : Set α
inst✝⁹ : TopologicalSpace α
inst✝⁸ : MeasurableSpace α
inst✝⁷ : BorelSpace α
inst✝⁶ : TopologicalSpace β
inst✝⁵ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : MeasurableSpace δ
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : SecondCountableTopology α
f : δ → α
hf : ∀ (x : α), MeasurableSet (f ⁻¹' Ici x)
⊢ ∀ (x : α), MeasurableSet (f ⁻¹' Ici x)

tactic: assumption
state_before: case hf
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s t u : Set α
inst✝⁹ : TopologicalSpace α
inst✝⁸ : MeasurableSpace α
inst✝⁷ : BorelSpace α
inst✝⁶ : TopologicalSpace β
inst✝⁵ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : MeasurableSpace δ
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : SecondCountableTopology α
f : δ → α
hf : ∀ (x : α), MeasurableSet (f ⁻¹' Ici x)
⊢ ∀ (x : α), MeasurableSet (f ⁻¹' Ici x)
state_after: no goals
Theorem: ltTrichotomy_eq_iff
File: Mathlib/Order/Basic.lean

tactic: refine ltByCases x y (fun h => ?_) (fun h => ?_) (fun h => ?_)
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : LinearOrder α
P : Sort u_5
x y : α
p q r s : P
⊢ ltTrichotomy x y p q r = s ↔ x < y ∧ p = s ∨ x = y ∧ q = s ∨ y < x ∧ r = s
state_after: case refine_1
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : LinearOrder α
P : Sort u_5
x y : α
p q r s : P
h : x < y
⊢ ltTrichotomy x y p q r = s ↔ x < y ∧ p = s ∨ x = y ∧ q = s ∨ y < x ∧ r = s

case refine_2
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : LinearOrder α
P : Sort u_5
x y : α
p q r s : P
h : x = y
⊢ ltTrichotomy x y p q r = s ↔ x < y ∧ p = s ∨ x = y ∧ q = s ∨ y < x ∧ r = s

case refine_3
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : LinearOrder α
P : Sort u_5
x y : α
p q r s : P
h : y < x
⊢ ltTrichotomy x y p q r = s ↔ x < y ∧ p = s ∨ x = y ∧ q = s ∨ y < x ∧ r = s

tactic: simp only [ltTrichotomy_lt, false_and, true_and, or_false, h, h.not_lt, h.ne]
state_before: case refine_1
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : LinearOrder α
P : Sort u_5
x y : α
p q r s : P
h : x < y
⊢ ltTrichotomy x y p q r = s ↔ x < y ∧ p = s ∨ x = y ∧ q = s ∨ y < x ∧ r = s
state_after: no goals

tactic: simp only [ltTrichotomy_eq, false_and, true_and, or_false, false_or, h, lt_irrefl]
state_before: case refine_2
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : LinearOrder α
P : Sort u_5
x y : α
p q r s : P
h : x = y
⊢ ltTrichotomy x y p q r = s ↔ x < y ∧ p = s ∨ x = y ∧ q = s ∨ y < x ∧ r = s
state_after: no goals

tactic: simp only [ltTrichotomy_gt, false_and, true_and, false_or, h, h.not_lt, h.ne']
state_before: case refine_3
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : LinearOrder α
P : Sort u_5
x y : α
p q r s : P
h : y < x
⊢ ltTrichotomy x y p q r = s ↔ x < y ∧ p = s ∨ x = y ∧ q = s ∨ y < x ∧ r = s
state_after: no goals
Theorem: ENNReal.tsum_const_eq
File: Mathlib/MeasureTheory/Integral/Lebesgue.lean

tactic: rw [← lintegral_count, lintegral_const]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν : Measure α
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSingletonClass α
c : ℝ≥0∞
⊢ ∑' (x : α), c = c * count univ
state_after: no goals
Theorem: Monoid.CoprodI.mrange_eq_iSup
File: Mathlib/GroupTheory/CoprodI.lean

tactic: rw [lift, Equiv.coe_fn_mk, Con.lift_range, FreeMonoid.mrange_lift,
  range_sigma_eq_iUnion_range, Submonoid.closure_iUnion]
state_before: ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N✝ : Type u_3
inst✝¹ : Monoid N✝
N : Type u_4
inst✝ : Monoid N
f : (i : ι) → M i →* N
⊢ MonoidHom.mrange (lift f) = ⨆ i, MonoidHom.mrange (f i)
state_after: ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N✝ : Type u_3
inst✝¹ : Monoid N✝
N : Type u_4
inst✝ : Monoid N
f : (i : ι) → M i →* N
⊢ ⨆ i, Submonoid.closure (range fun b => (f ⟨i, b⟩.fst) ⟨i, b⟩.snd) = ⨆ i, MonoidHom.mrange (f i)

tactic: simp only [MonoidHom.mclosure_range]
state_before: ι : Type u_1
M : ι → Type u_2
inst✝² : (i : ι) → Monoid (M i)
N✝ : Type u_3
inst✝¹ : Monoid N✝
N : Type u_4
inst✝ : Monoid N
f : (i : ι) → M i →* N
⊢ ⨆ i, Submonoid.closure (range fun b => (f ⟨i, b⟩.fst) ⟨i, b⟩.snd) = ⨆ i, MonoidHom.mrange (f i)
state_after: no goals
Theorem: LinearMap.lTensor_surj_iff_rTensor_surj
File: Mathlib/LinearAlgebra/TensorProduct/Basic.lean

tactic: simp [← comm_comp_rTensor_comp_comm_eq]
state_before: R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
⊢ Function.Surjective ⇑(lTensor M f) ↔ Function.Surjective ⇑(rTensor M f)
state_after: no goals
Theorem: EReal.toReal_le_toReal
File: Mathlib/Data/Real/EReal.lean

tactic: lift x to ℝ using ⟨ne_top_of_le_ne_top hy h, hx⟩
state_before: x y : EReal
h : x ≤ y
hx : x ≠ ⊥
hy : y ≠ ⊤
⊢ x.toReal ≤ y.toReal
state_after: case intro
y : EReal
hy : y ≠ ⊤
x : ℝ
h : ↑x ≤ y
hx : ↑x ≠ ⊥
⊢ (↑x).toReal ≤ y.toReal

tactic: lift y to ℝ using ⟨hy, ne_bot_of_le_ne_bot hx h⟩
state_before: case intro
y : EReal
hy : y ≠ ⊤
x : ℝ
h : ↑x ≤ y
hx : ↑x ≠ ⊥
⊢ (↑x).toReal ≤ y.toReal
state_after: case intro.intro
x : ℝ
hx : ↑x ≠ ⊥
y : ℝ
hy : ↑y ≠ ⊤
h : ↑x ≤ ↑y
⊢ (↑x).toReal ≤ (↑y).toReal

tactic: simpa using h
state_before: case intro.intro
x : ℝ
hx : ↑x ≠ ⊥
y : ℝ
hy : ↑y ≠ ⊤
h : ↑x ≤ ↑y
⊢ (↑x).toReal ≤ (↑y).toReal
state_after: no goals
Theorem: Nat.multiset_Ico_map_mod
File: Mathlib/Order/Interval/Finset/Nat.lean

tactic: convert congr_arg Finset.val (image_Ico_mod n a)
state_before: a✝ b c n a : ℕ
⊢ Multiset.map (fun x => x % a) (Multiset.Ico n (n + a)) = Multiset.range a
state_after: case h.e'_2
a✝ b c n a : ℕ
⊢ Multiset.map (fun x => x % a) (Multiset.Ico n (n + a)) = (image (fun x => x % a) (Finset.Ico n (n + a))).val

tactic: refine ((nodup_map_iff_inj_on (Finset.Ico _ _).nodup).2 <| ?_).dedup.symm
state_before: case h.e'_2
a✝ b c n a : ℕ
⊢ Multiset.map (fun x => x % a) (Multiset.Ico n (n + a)) = (image (fun x => x % a) (Finset.Ico n (n + a))).val
state_after: case h.e'_2
a✝ b c n a : ℕ
⊢ ∀ x ∈ (Finset.Ico n (n + a)).val, ∀ y ∈ (Finset.Ico n (n + a)).val, x % a = y % a → x = y

tactic: exact mod_injOn_Ico _ _
state_before: case h.e'_2
a✝ b c n a : ℕ
⊢ ∀ x ∈ (Finset.Ico n (n + a)).val, ∀ y ∈ (Finset.Ico n (n + a)).val, x % a = y % a → x = y
state_after: no goals
Theorem: Matrix.exists_vecMul_eq_zero_iff
File: Mathlib/LinearAlgebra/Matrix/ToLinearEquiv.lean

tactic: simpa only [← M.det_transpose, ← mulVec_transpose] using exists_mulVec_eq_zero_iff
state_before: n : Type u_1
inst✝⁶ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M✝
inst✝³ : Module R M✝
A : Type u_4
inst✝² : DecidableEq n
inst✝¹ : CommRing A
inst✝ : IsDomain A
M : Matrix n n A
⊢ (∃ v, v ≠ 0 ∧ v ᵥ* M = 0) ↔ M.det = 0
state_after: no goals
Theorem: LinearMap.trace_mul_comm
File: Mathlib/LinearAlgebra/Trace.lean

tactic: let ⟨s, ⟨b⟩⟩ := H
state_before: R : Type u
inst✝⁶ : CommSemiring R
M : Type v
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
ι : Type w
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
κ : Type u_1
inst✝¹ : DecidableEq κ
inst✝ : Fintype κ
b : Basis ι R M
c : Basis κ R M
f g : M →ₗ[R] M
H : ∃ s, Nonempty (Basis { x // x ∈ s } R M)
⊢ (trace R M) (f * g) = (trace R M) (g * f)
state_after: R : Type u
inst✝⁶ : CommSemiring R
M : Type v
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
ι : Type w
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
κ : Type u_1
inst✝¹ : DecidableEq κ
inst✝ : Fintype κ
b✝ : Basis ι R M
c : Basis κ R M
f g : M →ₗ[R] M
H : ∃ s, Nonempty (Basis { x // x ∈ s } R M)
s : Finset M
b : Basis { x // x ∈ s } R M
⊢ (trace R M) (f * g) = (trace R M) (g * f)

tactic: simp_rw [trace_eq_matrix_trace R b, LinearMap.toMatrix_mul]
state_before: R : Type u
inst✝⁶ : CommSemiring R
M : Type v
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
ι : Type w
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
κ : Type u_1
inst✝¹ : DecidableEq κ
inst✝ : Fintype κ
b✝ : Basis ι R M
c : Basis κ R M
f g : M →ₗ[R] M
H : ∃ s, Nonempty (Basis { x // x ∈ s } R M)
s : Finset M
b : Basis { x // x ∈ s } R M
⊢ (trace R M) (f * g) = (trace R M) (g * f)
state_after: R : Type u
inst✝⁶ : CommSemiring R
M : Type v
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
ι : Type w
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
κ : Type u_1
inst✝¹ : DecidableEq κ
inst✝ : Fintype κ
b✝ : Basis ι R M
c : Basis κ R M
f g : M →ₗ[R] M
H : ∃ s, Nonempty (Basis { x // x ∈ s } R M)
s : Finset M
b : Basis { x // x ∈ s } R M
⊢ ((toMatrix b b) f * (toMatrix b b) g).trace = ((toMatrix b b) g * (toMatrix b b) f).trace

tactic: apply Matrix.trace_mul_comm
state_before: R : Type u
inst✝⁶ : CommSemiring R
M : Type v
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
ι : Type w
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
κ : Type u_1
inst✝¹ : DecidableEq κ
inst✝ : Fintype κ
b✝ : Basis ι R M
c : Basis κ R M
f g : M →ₗ[R] M
H : ∃ s, Nonempty (Basis { x // x ∈ s } R M)
s : Finset M
b : Basis { x // x ∈ s } R M
⊢ ((toMatrix b b) f * (toMatrix b b) g).trace = ((toMatrix b b) g * (toMatrix b b) f).trace
state_after: no goals

tactic: rw [trace, dif_neg H, LinearMap.zero_apply, LinearMap.zero_apply]
state_before: R : Type u
inst✝⁶ : CommSemiring R
M : Type v
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
ι : Type w
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
κ : Type u_1
inst✝¹ : DecidableEq κ
inst✝ : Fintype κ
b : Basis ι R M
c : Basis κ R M
f g : M →ₗ[R] M
H : ¬∃ s, Nonempty (Basis { x // x ∈ s } R M)
⊢ (trace R M) (f * g) = (trace R M) (g * f)
state_after: no goals
Theorem: linearEquiv_det_rotation
File: Mathlib/Analysis/Complex/Isometry.lean

tactic: rw [← Units.eq_iff, LinearEquiv.coe_det, det_rotation, Units.val_one]
state_before: a : ↥circle
⊢ LinearEquiv.det (rotation a).toLinearEquiv = 1
state_after: no goals
Theorem: one_div_pow
File: Mathlib/Algebra/Group/Basic.lean

tactic: simp only [one_div, inv_pow]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionMonoid α
a✝ b c d a : α
n : ℕ
⊢ (1 / a) ^ n = 1 / a ^ n
state_after: no goals
Theorem: AffineBasis.toMatrix_self
File: Mathlib/LinearAlgebra/AffineSpace/Matrix.lean

tactic: ext i j
state_before: ι : Type u₁
k : Type u₂
V : Type u₃
P : Type u₄
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
inst✝ : DecidableEq ι
⊢ b.toMatrix ⇑b = 1
state_after: case a
ι : Type u₁
k : Type u₂
V : Type u₃
P : Type u₄
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
inst✝ : DecidableEq ι
i j : ι
⊢ b.toMatrix (⇑b) i j = 1 i j

tactic: rw [toMatrix_apply, coord_apply, Matrix.one_eq_pi_single, Pi.single_apply]
state_before: case a
ι : Type u₁
k : Type u₂
V : Type u₃
P : Type u₄
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
inst✝ : DecidableEq ι
i j : ι
⊢ b.toMatrix (⇑b) i j = 1 i j
state_after: no goals
Theorem: IsometryEquiv.diam_preimage
File: Mathlib/Topology/MetricSpace/Isometry.lean

tactic: rw [← image_symm, diam_image]
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
h : α ≃ᵢ β
s : Set β
⊢ Metric.diam (⇑h ⁻¹' s) = Metric.diam s
state_after: no goals
Theorem: Multiset.disjoint_iff_ne
File: Mathlib/Data/Multiset/Basic.lean

tactic: simp [disjoint_left, imp_not_comm]
state_before: α : Type u_1
β : Type v
γ : Type u_2
s t : Multiset α
⊢ s.Disjoint t ↔ ∀ a ∈ s, ∀ b ∈ t, a ≠ b
state_after: no goals
Theorem: InnerProductSpace.Core.inner_neg_left
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

tactic: rw [← neg_one_smul 𝕜 x, inner_smul_left]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝² : _root_.RCLike 𝕜
inst✝¹ : AddCommGroup F
inst✝ : Module 𝕜 F
c : Core 𝕜 F
x y : F
⊢ ⟪-x, y⟫_𝕜 = -⟪x, y⟫_𝕜
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝² : _root_.RCLike 𝕜
inst✝¹ : AddCommGroup F
inst✝ : Module 𝕜 F
c : Core 𝕜 F
x y : F
⊢ (starRingEnd 𝕜) (-1) * ⟪x, y⟫_𝕜 = -⟪x, y⟫_𝕜

tactic: simp
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝² : _root_.RCLike 𝕜
inst✝¹ : AddCommGroup F
inst✝ : Module 𝕜 F
c : Core 𝕜 F
x y : F
⊢ (starRingEnd 𝕜) (-1) * ⟪x, y⟫_𝕜 = -⟪x, y⟫_𝕜
state_after: no goals
Theorem: MulAction.mem_stabilizer_set_iff_smul_set_subset
File: Mathlib/Algebra/Pointwise/Stabilizer.lean

tactic: lift s to Finset α using hs
state_before: G : Type u_1
H : Type u_2
α : Type u_3
inst✝² : Group G
inst✝¹ : Group H
inst✝ : MulAction G α
a : G
s : Set α
hs : s.Finite
⊢ a ∈ stabilizer G s ↔ a • s ⊆ s
state_after: case intro
G : Type u_1
H : Type u_2
α : Type u_3
inst✝² : Group G
inst✝¹ : Group H
inst✝ : MulAction G α
a : G
s : Finset α
⊢ a ∈ stabilizer G ↑s ↔ a • ↑s ⊆ ↑s

tactic: classical
rw [stabilizer_coe_finset, mem_stabilizer_finset_iff_smul_finset_subset, ← Finset.coe_smul_finset,
  Finset.coe_subset]
state_before: case intro
G : Type u_1
H : Type u_2
α : Type u_3
inst✝² : Group G
inst✝¹ : Group H
inst✝ : MulAction G α
a : G
s : Finset α
⊢ a ∈ stabilizer G ↑s ↔ a • ↑s ⊆ ↑s
state_after: no goals

tactic: rw [stabilizer_coe_finset, mem_stabilizer_finset_iff_smul_finset_subset, ← Finset.coe_smul_finset,
  Finset.coe_subset]
state_before: case intro
G : Type u_1
H : Type u_2
α : Type u_3
inst✝² : Group G
inst✝¹ : Group H
inst✝ : MulAction G α
a : G
s : Finset α
⊢ a ∈ stabilizer G ↑s ↔ a • ↑s ⊆ ↑s
state_after: no goals
Theorem: Polynomial.natDegree_scaleRoots
File: Mathlib/RingTheory/Polynomial/ScaleRoots.lean

tactic: simp only [natDegree, degree_scaleRoots]
state_before: R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
⊢ (p.scaleRoots s).natDegree = p.natDegree
state_after: no goals