1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Set.diff_iUnion
File: Mathlib/Data/Set/Lattice.lean

tactic: rw [diff_eq, compl_iUnion, inter_iInter]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
inst✝ : Nonempty ι
s : Set β
t : ι → Set β
⊢ s \ ⋃ i, t i = ⋂ i, s \ t i
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
inst✝ : Nonempty ι
s : Set β
t : ι → Set β
⊢ ⋂ i, s ∩ (t i)ᶜ = ⋂ i, s \ t i

tactic: rfl
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
inst✝ : Nonempty ι
s : Set β
t : ι → Set β
⊢ ⋂ i, s ∩ (t i)ᶜ = ⋂ i, s \ t i
state_after: no goals
Theorem: NormedAddGroupHom.coe_injective
File: Mathlib/Analysis/Normed/Group/Hom.lean

tactic: apply coe_inj
state_before: V : Type u_1
V₁ : Type u_2
V₂ : Type u_3
V₃ : Type u_4
inst✝³ : SeminormedAddCommGroup V
inst✝² : SeminormedAddCommGroup V₁
inst✝¹ : SeminormedAddCommGroup V₂
inst✝ : SeminormedAddCommGroup V₃
f g : NormedAddGroupHom V₁ V₂
⊢ Function.Injective toFun
state_after: no goals
Theorem: CategoryTheory.Limits.Sigma.eqToHom_comp_ι
File: Mathlib/CategoryTheory/Limits/Shapes/Products.lean

tactic: simp [w]
state_before: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
J : Type u_1
f : J → C
inst✝ : HasCoproduct f
j j' : J
w : j = j'
⊢ f j = f j'
state_after: no goals

tactic: cases w
state_before: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
J : Type u_1
f : J → C
inst✝ : HasCoproduct f
j j' : J
w : j = j'
⊢ eqToHom ⋯ ≫ ι f j' = ι f j
state_after: case refl
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
J : Type u_1
f : J → C
inst✝ : HasCoproduct f
j : J
⊢ eqToHom ⋯ ≫ ι f j = ι f j

tactic: simp
state_before: case refl
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
J : Type u_1
f : J → C
inst✝ : HasCoproduct f
j : J
⊢ eqToHom ⋯ ≫ ι f j = ι f j
state_after: no goals
Theorem: CategoryTheory.Subgroupoid.mem_discrete_iff
File: Mathlib/CategoryTheory/Groupoid/Subgroupoid.lean

tactic: rintro ⟨⟩
state_before: C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c d : C
f : c ⟶ d
⊢ f ∈ discrete.arrows c d → ∃ (h : c = d), f = eqToHom h
state_after: case id
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c d : C
⊢ ∃ (h : c = c), 𝟙 c = eqToHom h

tactic: exact ⟨rfl, rfl⟩
state_before: case id
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c d : C
⊢ ∃ (h : c = c), 𝟙 c = eqToHom h
state_after: no goals

tactic: rintro ⟨rfl, rfl⟩
state_before: C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c d : C
f : c ⟶ d
⊢ (∃ (h : c = d), f = eqToHom h) → f ∈ discrete.arrows c d
state_after: case intro
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c : C
⊢ eqToHom ⋯ ∈ discrete.arrows c c

tactic: constructor
state_before: case intro
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c : C
⊢ eqToHom ⋯ ∈ discrete.arrows c c
state_after: no goals
Theorem: has_pointwise_sum_fourier_series_of_summable
File: Mathlib/Analysis/Fourier/AddCircle.lean

tactic: convert (ContinuousMap.evalCLM ℂ x).hasSum (hasSum_fourier_series_of_summable h)
state_before: T : ℝ
hT : Fact (0 < T)
f : C(AddCircle T, ℂ)
h : Summable (fourierCoeff ⇑f)
x : AddCircle T
⊢ HasSum (fun i => fourierCoeff (⇑f) i • (fourier i) x) (f x)
state_after: no goals
Theorem: Nat.digits_eq_cons_digits_div
File: Mathlib/Data/Nat/Digits.lean

tactic: rcases b with (_ | _ | b)
state_before: n✝ b n : ℕ
h : 1 < b
w : n ≠ 0
⊢ b.digits n = n % b :: b.digits (n / b)
state_after: case zero
n✝ n : ℕ
w : n ≠ 0
h : 1 < 0
⊢ digits 0 n = n % 0 :: digits 0 (n / 0)

case succ.zero
n✝ n : ℕ
w : n ≠ 0
h : 1 < 0 + 1
⊢ (0 + 1).digits n = n % (0 + 1) :: (0 + 1).digits (n / (0 + 1))

case succ.succ
n✝ n : ℕ
w : n ≠ 0
b : ℕ
h : 1 < b + 1 + 1
⊢ (b + 1 + 1).digits n = n % (b + 1 + 1) :: (b + 1 + 1).digits (n / (b + 1 + 1))

tactic: rcases n with (_ | n)
state_before: case succ.succ
n✝ n : ℕ
w : n ≠ 0
b : ℕ
h : 1 < b + 1 + 1
⊢ (b + 1 + 1).digits n = n % (b + 1 + 1) :: (b + 1 + 1).digits (n / (b + 1 + 1))
state_after: case succ.succ.zero
n b : ℕ
h : 1 < b + 1 + 1
w : 0 ≠ 0
⊢ (b + 1 + 1).digits 0 = 0 % (b + 1 + 1) :: (b + 1 + 1).digits (0 / (b + 1 + 1))

case succ.succ.succ
n✝ b : ℕ
h : 1 < b + 1 + 1
n : ℕ
w : n + 1 ≠ 0
⊢ (b + 1 + 1).digits (n + 1) = (n + 1) % (b + 1 + 1) :: (b + 1 + 1).digits ((n + 1) / (b + 1 + 1))

tactic: rw [digits_zero_succ' w, Nat.mod_zero, Nat.div_zero, Nat.digits_zero_zero]
state_before: case zero
n✝ n : ℕ
w : n ≠ 0
h : 1 < 0
⊢ digits 0 n = n % 0 :: digits 0 (n / 0)
state_after: no goals

tactic: norm_num at h
state_before: case succ.zero
n✝ n : ℕ
w : n ≠ 0
h : 1 < 0 + 1
⊢ (0 + 1).digits n = n % (0 + 1) :: (0 + 1).digits (n / (0 + 1))
state_after: no goals

tactic: norm_num at w
state_before: case succ.succ.zero
n b : ℕ
h : 1 < b + 1 + 1
w : 0 ≠ 0
⊢ (b + 1 + 1).digits 0 = 0 % (b + 1 + 1) :: (b + 1 + 1).digits (0 / (b + 1 + 1))
state_after: no goals

tactic: simp only [digits_add_two_add_one, ne_eq]
state_before: case succ.succ.succ
n✝ b : ℕ
h : 1 < b + 1 + 1
n : ℕ
w : n + 1 ≠ 0
⊢ (b + 1 + 1).digits (n + 1) = (n + 1) % (b + 1 + 1) :: (b + 1 + 1).digits ((n + 1) / (b + 1 + 1))
state_after: no goals
Theorem: DFinsupp.erase_def
File: Mathlib/Data/DFinsupp/Basic.lean

tactic: ext j
state_before: ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Zero (β i)
inst✝ : (i : ι) → (x : β i) → Decidable (x ≠ 0)
i : ι
f : Π₀ (i : ι), β i
⊢ erase i f = mk (f.support.erase i) fun j => f ↑j
state_after: case h
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Zero (β i)
inst✝ : (i : ι) → (x : β i) → Decidable (x ≠ 0)
i : ι
f : Π₀ (i : ι), β i
j : ι
⊢ (erase i f) j = (mk (f.support.erase i) fun j => f ↑j) j

tactic: by_cases h1 : j = i <;> by_cases h2 : f j ≠ 0 <;> simp at h2 <;> simp [h1, h2]
state_before: case h
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Zero (β i)
inst✝ : (i : ι) → (x : β i) → Decidable (x ≠ 0)
i : ι
f : Π₀ (i : ι), β i
j : ι
⊢ (erase i f) j = (mk (f.support.erase i) fun j => f ↑j) j
state_after: no goals
Theorem: SimpleGraph.Reachable.exists_path_of_dist
File: Mathlib/Combinatorics/SimpleGraph/Metric.lean

tactic: obtain ⟨p, h⟩ := hr.exists_walk_of_dist
state_before: V : Type u_1
G : SimpleGraph V
u v : V
hr : G.Reachable u v
⊢ ∃ p, p.IsPath ∧ p.length = G.dist u v
state_after: case intro
V : Type u_1
G : SimpleGraph V
u v : V
hr : G.Reachable u v
p : G.Walk u v
h : p.length = G.dist u v
⊢ ∃ p, p.IsPath ∧ p.length = G.dist u v

tactic: exact ⟨p, p.isPath_of_length_eq_dist h, h⟩
state_before: case intro
V : Type u_1
G : SimpleGraph V
u v : V
hr : G.Reachable u v
p : G.Walk u v
h : p.length = G.dist u v
⊢ ∃ p, p.IsPath ∧ p.length = G.dist u v
state_after: no goals
Theorem: birkhoffSum_add
File: Mathlib/Dynamics/BirkhoffSum/Basic.lean

tactic: simp_rw [birkhoffSum, sum_range_add, add_comm m, iterate_add_apply]
state_before: α : Type u_1
M : Type u_2
inst✝ : AddCommMonoid M
f : α → α
g : α → M
m n : ℕ
x : α
⊢ birkhoffSum f g (m + n) x = birkhoffSum f g m x + birkhoffSum f g n (f^[m] x)
state_after: no goals
Theorem: ZMod.trace_pow_card
File: Mathlib/LinearAlgebra/Matrix/Charpoly/FiniteField.lean

tactic: have h := FiniteField.trace_pow_card M
state_before: n : Type u_1
inst✝² : DecidableEq n
inst✝¹ : Fintype n
p : ℕ
inst✝ : Fact (Nat.Prime p)
M : Matrix n n (ZMod p)
⊢ (M ^ p).trace = M.trace ^ p
state_after: n : Type u_1
inst✝² : DecidableEq n
inst✝¹ : Fintype n
p : ℕ
inst✝ : Fact (Nat.Prime p)
M : Matrix n n (ZMod p)
h : (M ^ Fintype.card (ZMod p)).trace = M.trace ^ Fintype.card (ZMod p)
⊢ (M ^ p).trace = M.trace ^ p

tactic: rwa [ZMod.card] at h
state_before: n : Type u_1
inst✝² : DecidableEq n
inst✝¹ : Fintype n
p : ℕ
inst✝ : Fact (Nat.Prime p)
M : Matrix n n (ZMod p)
h : (M ^ Fintype.card (ZMod p)).trace = M.trace ^ Fintype.card (ZMod p)
⊢ (M ^ p).trace = M.trace ^ p
state_after: no goals
Theorem: Cardinal.two_le_iff
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: rw [← Nat.cast_two, nat_succ, succ_le_iff, Nat.cast_one, one_lt_iff_nontrivial, nontrivial_iff]
state_before: α β : Type u
c : Cardinal.{?u.234675}
⊢ 2 ≤ #α ↔ ∃ x y, x ≠ y
state_after: no goals
Theorem: MeasureTheory.Content.is_mul_left_invariant_innerContent
File: Mathlib/MeasureTheory/Measure/Content.lean

tactic: convert μ.innerContent_comap (Homeomorph.mulLeft g) (fun K => h g) U
state_before: G : Type w
inst✝² : TopologicalSpace G
μ : Content G
inst✝¹ : Group G
inst✝ : TopologicalGroup G
h : ∀ (g : G) {K : Compacts G}, (fun s => ↑(μ.toFun s)) (Compacts.map (fun b => g * b) ⋯ K) = (fun s => ↑(μ.toFun s)) K
g : G
U : Opens G
⊢ μ.innerContent ((Opens.comap (Homeomorph.mulLeft g).toContinuousMap) U) = μ.innerContent U
state_after: no goals
Theorem: Real.arsinh_nonneg_iff
File: Mathlib/Analysis/SpecialFunctions/Arsinh.lean

tactic: rw [← sinh_le_sinh, sinh_zero, sinh_arsinh]
state_before: x y : ℝ
⊢ 0 ≤ arsinh x ↔ 0 ≤ x
state_after: no goals
Theorem: MvPolynomial.esymm_eq_multiset_esymm
File: Mathlib/RingTheory/MvPolynomial/Symmetric.lean

tactic: exact funext fun n => (esymm_map_val X _ n).symm
state_before: σ : Type u_1
R : Type u_2
τ : Type u_3
S : Type u_4
inst✝³ : CommSemiring R
inst✝² : CommSemiring S
inst✝¹ : Fintype σ
inst✝ : Fintype τ
⊢ esymm σ R = (Multiset.map X univ.val).esymm
state_after: no goals
Theorem: Function.Surjective.pathConnectedSpace
File: Mathlib/Topology/Connected/PathConnected.lean

tactic: rw [pathConnectedSpace_iff_univ, ← hf.range_eq]
state_before: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
f : X → Y
hf : Surjective f
hf' : Continuous f
⊢ PathConnectedSpace Y
state_after: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
f : X → Y
hf : Surjective f
hf' : Continuous f
⊢ IsPathConnected (range f)

tactic: exact isPathConnected_range hf'
state_before: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
f : X → Y
hf : Surjective f
hf' : Continuous f
⊢ IsPathConnected (range f)
state_after: no goals
Theorem: Finsupp.cons_zero_zero
File: Mathlib/Data/Finsupp/Fin.lean

tactic: ext a
state_before: n : ℕ
i : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
⊢ cons 0 0 = 0
state_after: case h
n : ℕ
i : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
a : Fin (n + 1)
⊢ (cons 0 0) a = 0 a

tactic: by_cases c : a = 0
state_before: case h
n : ℕ
i : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
a : Fin (n + 1)
⊢ (cons 0 0) a = 0 a
state_after: case pos
n : ℕ
i : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
a : Fin (n + 1)
c : a = 0
⊢ (cons 0 0) a = 0 a

case neg
n : ℕ
i : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
a : Fin (n + 1)
c : ¬a = 0
⊢ (cons 0 0) a = 0 a

tactic: simp [c]
state_before: case pos
n : ℕ
i : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
a : Fin (n + 1)
c : a = 0
⊢ (cons 0 0) a = 0 a
state_after: no goals

tactic: rw [← Fin.succ_pred a c, cons_succ]
state_before: case neg
n : ℕ
i : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
a : Fin (n + 1)
c : ¬a = 0
⊢ (cons 0 0) a = 0 a
state_after: case neg
n : ℕ
i : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
a : Fin (n + 1)
c : ¬a = 0
⊢ 0 (a.pred c) = 0 (a.pred c).succ

tactic: simp
state_before: case neg
n : ℕ
i : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
a : Fin (n + 1)
c : ¬a = 0
⊢ 0 (a.pred c) = 0 (a.pred c).succ
state_after: no goals
Theorem: padicValRat.zero
File: Mathlib/NumberTheory/Padics/PadicVal.lean

tactic: simp [padicValRat]
state_before: p : ℕ
⊢ padicValRat p 0 = 0
state_after: no goals
Theorem: InnerProductGeometry.angle_eq_zero_iff
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/Basic.lean

tactic: rw [angle, ← real_inner_div_norm_mul_norm_eq_one_iff, Real.arccos_eq_zero, LE.le.le_iff_eq,
  eq_comm]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x✝ y✝ x y : V
⊢ angle x y = 0 ↔ x ≠ 0 ∧ ∃ r, 0 < r ∧ y = r • x
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x✝ y✝ x y : V
⊢ ⟪x, y⟫_ℝ / (‖x‖ * ‖y‖) ≤ 1

tactic: exact (abs_le.mp (abs_real_inner_div_norm_mul_norm_le_one x y)).2
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x✝ y✝ x y : V
⊢ ⟪x, y⟫_ℝ / (‖x‖ * ‖y‖) ≤ 1
state_after: no goals
Theorem: Submodule.mem_smul_iff_inv_mul_mem
File: Mathlib/Algebra/Algebra/Operations.lean

tactic: constructor
state_before: ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
S : Type u_1
inst✝¹ : Field S
inst✝ : Algebra R S
x : S
p : Submodule R S
y : S
hx : x ≠ 0
⊢ y ∈ x • p ↔ x⁻¹ * y ∈ p
state_after: case mp
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
S : Type u_1
inst✝¹ : Field S
inst✝ : Algebra R S
x : S
p : Submodule R S
y : S
hx : x ≠ 0
⊢ y ∈ x • p → x⁻¹ * y ∈ p

case mpr
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
S : Type u_1
inst✝¹ : Field S
inst✝ : Algebra R S
x : S
p : Submodule R S
y : S
hx : x ≠ 0
⊢ x⁻¹ * y ∈ p → y ∈ x • p

tactic: rintro ⟨a, ha : a ∈ p, rfl⟩
state_before: case mp
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
S : Type u_1
inst✝¹ : Field S
inst✝ : Algebra R S
x : S
p : Submodule R S
y : S
hx : x ≠ 0
⊢ y ∈ x • p → x⁻¹ * y ∈ p
state_after: case mp.intro.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
S : Type u_1
inst✝¹ : Field S
inst✝ : Algebra R S
x : S
p : Submodule R S
hx : x ≠ 0
a : S
ha : a ∈ p
⊢ x⁻¹ * (DistribMulAction.toLinearMap R S x) a ∈ p

tactic: simpa [inv_mul_cancel_left₀ hx]
state_before: case mp.intro.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
S : Type u_1
inst✝¹ : Field S
inst✝ : Algebra R S
x : S
p : Submodule R S
hx : x ≠ 0
a : S
ha : a ∈ p
⊢ x⁻¹ * (DistribMulAction.toLinearMap R S x) a ∈ p
state_after: no goals

tactic: exact fun h ↦ ⟨_, h, by simp [mul_inv_cancel_left₀ hx]⟩
state_before: case mpr
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
S : Type u_1
inst✝¹ : Field S
inst✝ : Algebra R S
x : S
p : Submodule R S
y : S
hx : x ≠ 0
⊢ x⁻¹ * y ∈ p → y ∈ x • p
state_after: no goals

tactic: simp [mul_inv_cancel_left₀ hx]
state_before: ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : Semiring A
inst✝² : Algebra R A
S✝ T : Set A
M N P Q : Submodule R A
m n : A
S : Type u_1
inst✝¹ : Field S
inst✝ : Algebra R S
x : S
p : Submodule R S
y : S
hx : x ≠ 0
h : x⁻¹ * y ∈ p
⊢ (DistribMulAction.toLinearMap R S x) (x⁻¹ * y) = y
state_after: no goals
Theorem: IsTorsion.of_surjective
File: Mathlib/GroupTheory/Torsion.lean

tactic: obtain ⟨g, hg⟩ := hf h
state_before: G : Type u_1
H : Type u_2
inst✝¹ : Group G
N : Subgroup G
inst✝ : Group H
f : G →* H
hf : Function.Surjective ⇑f
tG : IsTorsion G
h : H
⊢ IsOfFinOrder h
state_after: case intro
G : Type u_1
H : Type u_2
inst✝¹ : Group G
N : Subgroup G
inst✝ : Group H
f : G →* H
hf : Function.Surjective ⇑f
tG : IsTorsion G
h : H
g : G
hg : f g = h
⊢ IsOfFinOrder h

tactic: rw [← hg]
state_before: case intro
G : Type u_1
H : Type u_2
inst✝¹ : Group G
N : Subgroup G
inst✝ : Group H
f : G →* H
hf : Function.Surjective ⇑f
tG : IsTorsion G
h : H
g : G
hg : f g = h
⊢ IsOfFinOrder h
state_after: case intro
G : Type u_1
H : Type u_2
inst✝¹ : Group G
N : Subgroup G
inst✝ : Group H
f : G →* H
hf : Function.Surjective ⇑f
tG : IsTorsion G
h : H
g : G
hg : f g = h
⊢ IsOfFinOrder (f g)

tactic: exact f.isOfFinOrder (tG g)
state_before: case intro
G : Type u_1
H : Type u_2
inst✝¹ : Group G
N : Subgroup G
inst✝ : Group H
f : G →* H
hf : Function.Surjective ⇑f
tG : IsTorsion G
h : H
g : G
hg : f g = h
⊢ IsOfFinOrder (f g)
state_after: no goals
Theorem: Set.prod_inter
File: Mathlib/Data/Set/Prod.lean

tactic: ext ⟨x, y⟩
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 ×ˢ (t₁ ∩ t₂) = s ×ˢ t₁ ∩ s ×ˢ t₂
state_after: case h.mk
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
s s₁ s₂ : Set α
t t₁ t₂ : Set β
a : α
b : β
x : α
y : β
⊢ (x, y) ∈ s ×ˢ (t₁ ∩ t₂) ↔ (x, y) ∈ s ×ˢ t₁ ∩ s ×ˢ t₂

tactic: simp only [← and_and_left, mem_inter_iff, mem_prod]
state_before: case h.mk
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
s s₁ s₂ : Set α
t t₁ t₂ : Set β
a : α
b : β
x : α
y : β
⊢ (x, y) ∈ s ×ˢ (t₁ ∩ t₂) ↔ (x, y) ∈ s ×ˢ t₁ ∩ s ×ˢ t₂
state_after: no goals
Theorem: factorial_mul_ascPochhammer
File: Mathlib/RingTheory/Polynomial/Pochhammer.lean

tactic: rw_mod_cast [ascPochhammer_nat_eq_ascFactorial, Nat.factorial_mul_ascFactorial]
state_before: S✝ : Type u_1
inst✝¹ : Semiring S✝
r✝ n✝ : ℕ
S : Type u_2
inst✝ : Semiring S
r n : ℕ
⊢ ↑r ! * eval (↑r + 1) (ascPochhammer S n) = ↑(r + n)!
state_after: no goals
Theorem: SimpleGraph.compl_neighborFinset_sdiff_inter_eq
File: Mathlib/Combinatorics/SimpleGraph/StronglyRegular.lean

tactic: ext
state_before: V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
v w : V
⊢ (G.neighborFinset v)ᶜ \ {v} ∩ ((G.neighborFinset w)ᶜ \ {w}) =
    ((G.neighborFinset v)ᶜ ∩ (G.neighborFinset w)ᶜ) \ ({w} ∪ {v})
state_after: case a
V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
v w a✝ : V
⊢ a✝ ∈ (G.neighborFinset v)ᶜ \ {v} ∩ ((G.neighborFinset w)ᶜ \ {w}) ↔
    a✝ ∈ ((G.neighborFinset v)ᶜ ∩ (G.neighborFinset w)ᶜ) \ ({w} ∪ {v})

tactic: rw [← not_iff_not]
state_before: case a
V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
v w a✝ : V
⊢ a✝ ∈ (G.neighborFinset v)ᶜ \ {v} ∩ ((G.neighborFinset w)ᶜ \ {w}) ↔
    a✝ ∈ ((G.neighborFinset v)ᶜ ∩ (G.neighborFinset w)ᶜ) \ ({w} ∪ {v})
state_after: case a
V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
v w a✝ : V
⊢ a✝ ∉ (G.neighborFinset v)ᶜ \ {v} ∩ ((G.neighborFinset w)ᶜ \ {w}) ↔
    a✝ ∉ ((G.neighborFinset v)ᶜ ∩ (G.neighborFinset w)ᶜ) \ ({w} ∪ {v})

tactic: simp [imp_iff_not_or, or_assoc, or_comm, or_left_comm]
state_before: case a
V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
v w a✝ : V
⊢ a✝ ∉ (G.neighborFinset v)ᶜ \ {v} ∩ ((G.neighborFinset w)ᶜ \ {w}) ↔
    a✝ ∉ ((G.neighborFinset v)ᶜ ∩ (G.neighborFinset w)ᶜ) \ ({w} ∪ {v})
state_after: no goals
Theorem: CategoryTheory.Limits.pullbackZeroZeroIso_inv_snd
File: Mathlib/CategoryTheory/Limits/Constructions/ZeroObjects.lean

tactic: dsimp [pullbackZeroZeroIso]
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroObject C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : HasBinaryProduct X Y
⊢ (pullbackZeroZeroIso X Y).inv ≫ pullback.snd = prod.snd
state_after: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroObject C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : HasBinaryProduct X Y
⊢ (limit.isoLimitCone
          { cone := PullbackCone.mk prod.fst prod.snd ⋯,
            isLimit :=
              isPullbackOfIsTerminalIsProduct 0 0 prod.fst prod.snd HasZeroObject.zeroIsTerminal
                (prodIsProd X Y) }).inv ≫
      pullback.snd =
    prod.snd

tactic: simp
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : HasZeroObject C
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : HasBinaryProduct X Y
⊢ (limit.isoLimitCone
          { cone := PullbackCone.mk prod.fst prod.snd ⋯,
            isLimit :=
              isPullbackOfIsTerminalIsProduct 0 0 prod.fst prod.snd HasZeroObject.zeroIsTerminal
                (prodIsProd X Y) }).inv ≫
      pullback.snd =
    prod.snd
state_after: no goals
Theorem: Ideal.IsHomogeneous.iff_exists
File: Mathlib/RingTheory/GradedAlgebra/HomogeneousIdeal.lean

tactic: rw [Ideal.IsHomogeneous.iff_eq, eq_comm]
state_before: ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I : Ideal A
⊢ IsHomogeneous 𝒜 I ↔ ∃ S, I = span (Subtype.val '' S)
state_after: ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I : Ideal A
⊢ I = (homogeneousCore 𝒜 I).toIdeal ↔ ∃ S, I = span (Subtype.val '' S)

tactic: exact ((Set.image_preimage.compose (Submodule.gi _ _).gc).exists_eq_l _).symm
state_before: ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : SetLike σ A
inst✝³ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝² : DecidableEq ι
inst✝¹ : AddMonoid ι
inst✝ : GradedRing 𝒜
I : Ideal A
⊢ I = (homogeneousCore 𝒜 I).toIdeal ↔ ∃ S, I = span (Subtype.val '' S)
state_after: no goals
Theorem: Finsupp.support_floorDiv_subset
File: Mathlib/Algebra/Order/Floor/Div.lean

tactic: simp (config := { contextual := true}) [Finset.subset_iff, not_imp_not]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : OrderedAddCommMonoid α
inst✝² : OrderedAddCommMonoid β
inst✝¹ : SMulZeroClass α β
inst✝ : FloorDiv α β
f : ι →₀ β
a : α
⊢ (f ⌊/⌋ a).support ⊆ f.support
state_after: no goals
Theorem: Matrix.dotProduct_star
File: Mathlib/Data/Matrix/Basic.lean

tactic: simp [dotProduct]
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
m' : o → Type u_5
n' : o → Type u_6
R : Type u_7
S : Type u_8
α : Type v
β : Type w
γ : Type u_9
inst✝³ : Fintype m
inst✝² : Fintype n
inst✝¹ : NonUnitalSemiring α
inst✝ : StarRing α
v w : m → α
⊢ v ⬝ᵥ star w = star (w ⬝ᵥ star v)
state_after: no goals
Theorem: Finset.singleton_product
File: Mathlib/Data/Finset/Prod.lean

tactic: ext ⟨x, y⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s s' : Finset α
t t' : Finset β
a✝ : α
b : β
a : α
⊢ {a} ×ˢ t = map { toFun := Prod.mk a, inj' := ⋯ } t
state_after: case a.mk
α : Type u_1
β : Type u_2
γ : Type u_3
s s' : Finset α
t t' : Finset β
a✝ : α
b : β
a x : α
y : β
⊢ (x, y) ∈ {a} ×ˢ t ↔ (x, y) ∈ map { toFun := Prod.mk a, inj' := ⋯ } t

tactic: simp [and_left_comm, eq_comm]
state_before: case a.mk
α : Type u_1
β : Type u_2
γ : Type u_3
s s' : Finset α
t t' : Finset β
a✝ : α
b : β
a x : α
y : β
⊢ (x, y) ∈ {a} ×ˢ t ↔ (x, y) ∈ map { toFun := Prod.mk a, inj' := ⋯ } t
state_after: no goals
Theorem: Real.rpow_sub
File: Mathlib/Analysis/SpecialFunctions/Pow/Real.lean

tactic: simp only [sub_eq_add_neg, rpow_add hx, rpow_neg (le_of_lt hx), div_eq_mul_inv]
state_before: x✝¹ y✝¹ z✝¹ w x✝ y✝ z✝ x : ℝ
hx : 0 < x
y z : ℝ
⊢ x ^ (y - z) = x ^ y / x ^ z
state_after: no goals
Theorem: Mathlib.Tactic.Ring.pow_one_cast
File: Mathlib/Tactic/Ring/Basic.lean

tactic: simp
state_before: u : Lean.Level
R : Type u_1
α : Q(Type u)
sα : Q(CommSemiring «$α»)
inst✝ : CommSemiring R
a : R
⊢ a ^ Nat.rawCast 1 = a
state_after: no goals