1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: HomotopyCategory.Pretriangulated.isomorphic_distinguished
File: Mathlib/Algebra/Homology/HomotopyCategory/Pretriangulated.lean

tactic: obtain ⟨X, Y, f, ⟨e'⟩⟩ := hT₁
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
T₁ : Triangle (HomotopyCategory C (ComplexShape.up ℤ))
hT₁ : T₁ ∈ distinguishedTriangles C
T₂ : Triangle (HomotopyCategory C (ComplexShape.up ℤ))
e : T₂ ≅ T₁
⊢ T₂ ∈ distinguishedTriangles C
state_after: case intro.intro.intro.intro
C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
T₁ T₂ : Triangle (HomotopyCategory C (ComplexShape.up ℤ))
e : T₂ ≅ T₁
X Y : CochainComplex C ℤ
f : X ⟶ Y
e' : T₁ ≅ CochainComplex.mappingCone.triangleh f
⊢ T₂ ∈ distinguishedTriangles C

tactic: exact ⟨X, Y, f, ⟨e ≪≫ e'⟩⟩
state_before: case intro.intro.intro.intro
C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
T₁ T₂ : Triangle (HomotopyCategory C (ComplexShape.up ℤ))
e : T₂ ≅ T₁
X Y : CochainComplex C ℤ
f : X ⟶ Y
e' : T₁ ≅ CochainComplex.mappingCone.triangleh f
⊢ T₂ ∈ distinguishedTriangles C
state_after: no goals
Theorem: Function.Injective.isRightCancelMulZero
File: Mathlib/Algebra/GroupWithZero/InjSurj.lean

tactic: have := congr_arg f He
state_before: M₀ : Type u_1
G₀ : Type u_2
M₀' : Type u_3
G₀' : Type u_4
inst✝⁴ : Mul M₀
inst✝³ : Zero M₀
inst✝² : Mul M₀'
inst✝¹ : Zero M₀'
f : M₀ → M₀'
hf : Injective f
zero : f 0 = 0
mul : ∀ (x y : M₀), f (x * y) = f x * f y
inst✝ : IsRightCancelMulZero M₀'
a✝ b✝ c✝ : M₀
Hne : b✝ ≠ 0
He : a✝ * b✝ = c✝ * b✝
⊢ a✝ = c✝
state_after: M₀ : Type u_1
G₀ : Type u_2
M₀' : Type u_3
G₀' : Type u_4
inst✝⁴ : Mul M₀
inst✝³ : Zero M₀
inst✝² : Mul M₀'
inst✝¹ : Zero M₀'
f : M₀ → M₀'
hf : Injective f
zero : f 0 = 0
mul : ∀ (x y : M₀), f (x * y) = f x * f y
inst✝ : IsRightCancelMulZero M₀'
a✝ b✝ c✝ : M₀
Hne : b✝ ≠ 0
He : a✝ * b✝ = c✝ * b✝
this : f (a✝ * b✝) = f (c✝ * b✝)
⊢ a✝ = c✝

tactic: rw [mul, mul] at this
state_before: M₀ : Type u_1
G₀ : Type u_2
M₀' : Type u_3
G₀' : Type u_4
inst✝⁴ : Mul M₀
inst✝³ : Zero M₀
inst✝² : Mul M₀'
inst✝¹ : Zero M₀'
f : M₀ → M₀'
hf : Injective f
zero : f 0 = 0
mul : ∀ (x y : M₀), f (x * y) = f x * f y
inst✝ : IsRightCancelMulZero M₀'
a✝ b✝ c✝ : M₀
Hne : b✝ ≠ 0
He : a✝ * b✝ = c✝ * b✝
this : f (a✝ * b✝) = f (c✝ * b✝)
⊢ a✝ = c✝
state_after: M₀ : Type u_1
G₀ : Type u_2
M₀' : Type u_3
G₀' : Type u_4
inst✝⁴ : Mul M₀
inst✝³ : Zero M₀
inst✝² : Mul M₀'
inst✝¹ : Zero M₀'
f : M₀ → M₀'
hf : Injective f
zero : f 0 = 0
mul : ∀ (x y : M₀), f (x * y) = f x * f y
inst✝ : IsRightCancelMulZero M₀'
a✝ b✝ c✝ : M₀
Hne : b✝ ≠ 0
He : a✝ * b✝ = c✝ * b✝
this : f a✝ * f b✝ = f c✝ * f b✝
⊢ a✝ = c✝

tactic: exact hf (mul_right_cancel₀ (fun Hfa => Hne <| hf <| by rw [Hfa, zero]) this)
state_before: M₀ : Type u_1
G₀ : Type u_2
M₀' : Type u_3
G₀' : Type u_4
inst✝⁴ : Mul M₀
inst✝³ : Zero M₀
inst✝² : Mul M₀'
inst✝¹ : Zero M₀'
f : M₀ → M₀'
hf : Injective f
zero : f 0 = 0
mul : ∀ (x y : M₀), f (x * y) = f x * f y
inst✝ : IsRightCancelMulZero M₀'
a✝ b✝ c✝ : M₀
Hne : b✝ ≠ 0
He : a✝ * b✝ = c✝ * b✝
this : f a✝ * f b✝ = f c✝ * f b✝
⊢ a✝ = c✝
state_after: no goals

tactic: rw [Hfa, zero]
state_before: M₀ : Type u_1
G₀ : Type u_2
M₀' : Type u_3
G₀' : Type u_4
inst✝⁴ : Mul M₀
inst✝³ : Zero M₀
inst✝² : Mul M₀'
inst✝¹ : Zero M₀'
f : M₀ → M₀'
hf : Injective f
zero : f 0 = 0
mul : ∀ (x y : M₀), f (x * y) = f x * f y
inst✝ : IsRightCancelMulZero M₀'
a✝ b✝ c✝ : M₀
Hne : b✝ ≠ 0
He : a✝ * b✝ = c✝ * b✝
this : f a✝ * f b✝ = f c✝ * f b✝
Hfa : f b✝ = 0
⊢ f b✝ = f 0
state_after: no goals
Theorem: PartENat.withTopEquiv_symm_lt
File: Mathlib/Data/Nat/PartENat.lean

tactic: simp
state_before: x y : ℕ∞
⊢ withTopEquiv.symm x < withTopEquiv.symm y ↔ x < y
state_after: no goals
Theorem: inv_mul_eq_div
File: Mathlib/Algebra/Group/Basic.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionCommMonoid α
a b c d : α
⊢ a⁻¹ * b = b / a
state_after: no goals
Theorem: String.split_of_valid
File: .lake/packages/batteries/Batteries/Data/String/Lemmas.lean

tactic: simpa [split] using splitAux_of_valid p [] [] s.1 []
state_before: s : String
p : Char → Bool
⊢ s.split p = List.map mk (List.splitOnP p s.data)
state_after: no goals
Theorem: Fin.repeat_one
File: Mathlib/Data/Fin/Tuple/Basic.lean

tactic: generalize_proofs h
state_before: m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
⊢ repeat 1 a = a ∘ cast ⋯
state_after: m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
h : 1 * n = n
⊢ repeat 1 a = a ∘ cast h

tactic: apply funext
state_before: m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
h : 1 * n = n
⊢ repeat 1 a = a ∘ cast h
state_after: case h
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
h : 1 * n = n
⊢ ∀ (x : Fin (1 * n)), repeat 1 a x = (a ∘ cast h) x

tactic: rw [(Fin.rightInverse_cast h.symm).surjective.forall]
state_before: case h
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
h : 1 * n = n
⊢ ∀ (x : Fin (1 * n)), repeat 1 a x = (a ∘ cast h) x
state_after: case h
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
h : 1 * n = n
⊢ ∀ (x : Fin n), repeat 1 a (cast ⋯ x) = (a ∘ cast h) (cast ⋯ x)

tactic: intro i
state_before: case h
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i : Fin n
y : α✝ i.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
h : 1 * n = n
⊢ ∀ (x : Fin n), repeat 1 a (cast ⋯ x) = (a ∘ cast h) (cast ⋯ x)
state_after: case h
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
h : 1 * n = n
i : Fin n
⊢ repeat 1 a (cast ⋯ i) = (a ∘ cast h) (cast ⋯ i)

tactic: simp [modNat, Nat.mod_eq_of_lt i.is_lt]
state_before: case h
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ 0
q : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.succ
i✝ : Fin n
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
a : Fin n → α
h : 1 * n = n
i : Fin n
⊢ repeat 1 a (cast ⋯ i) = (a ∘ cast h) (cast ⋯ i)
state_after: no goals
Theorem: Cardinal.mk_multiset_of_isEmpty
File: Mathlib/SetTheory/Cardinal/Ordinal.lean

tactic: simp
state_before: α : Type u
inst✝ : IsEmpty α
⊢ #(α →₀ ℕ) = 1
state_after: no goals
Theorem: contDiff_zero
File: Mathlib/Analysis/Calculus/ContDiff/Defs.lean

tactic: rw [← contDiffOn_univ, continuous_iff_continuousOn_univ]
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
⊢ ContDiff 𝕜 0 f ↔ Continuous f
state_after: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
⊢ ContDiffOn 𝕜 0 f univ ↔ ContinuousOn f univ

tactic: exact contDiffOn_zero
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
⊢ ContDiffOn 𝕜 0 f univ ↔ ContinuousOn f univ
state_after: no goals
Theorem: Real.Angle.toReal_injective
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: intro θ ψ h
state_before: ⊢ Function.Injective toReal
state_after: θ ψ : Angle
h : θ.toReal = ψ.toReal
⊢ θ = ψ

tactic: induction θ using Real.Angle.induction_on
state_before: θ ψ : Angle
h : θ.toReal = ψ.toReal
⊢ θ = ψ
state_after: case h
ψ : Angle
x✝ : ℝ
h : (↑x✝).toReal = ψ.toReal
⊢ ↑x✝ = ψ

tactic: induction ψ using Real.Angle.induction_on
state_before: case h
ψ : Angle
x✝ : ℝ
h : (↑x✝).toReal = ψ.toReal
⊢ ↑x✝ = ψ
state_after: case h.h
x✝¹ x✝ : ℝ
h : (↑x✝¹).toReal = (↑x✝).toReal
⊢ ↑x✝¹ = ↑x✝

tactic: simpa [toReal_coe, toIocMod_eq_toIocMod, zsmul_eq_mul, mul_comm _ (2 * π), ←
  angle_eq_iff_two_pi_dvd_sub, eq_comm] using h
state_before: case h.h
x✝¹ x✝ : ℝ
h : (↑x✝¹).toReal = (↑x✝).toReal
⊢ ↑x✝¹ = ↑x✝
state_after: no goals
Theorem: mem_closedBall_one_iff
File: Mathlib/Analysis/Normed/Group/Basic.lean

tactic: rw [mem_closedBall, dist_one_right]
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
⊢ a ∈ closedBall 1 r ↔ ‖a‖ ≤ r
state_after: no goals
Theorem: CategoryTheory.biproduct_ι_comp_leftDistributor_inv
File: Mathlib/CategoryTheory/Monoidal/Preadditive.lean

tactic: simp [leftDistributor_inv, Preadditive.comp_sum, ← id_tensor_comp, biproduct.ι_π_assoc, dite_comp]
state_before: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X : C
f : J → C
j : J
⊢ biproduct.ι (fun j => X ⊗ f j) j ≫ (leftDistributor X f).inv = X ◁ biproduct.ι f j
state_after: no goals
Theorem: ProbabilityTheory.kernel.compProd_add_left
File: Mathlib/Probability/Kernel/Composition.lean

tactic: ext _ _ hs
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
γ : Type u_4
mγ : MeasurableSpace γ
s : Set (β × γ)
μ κ : ↥(kernel α β)
η : ↥(kernel (α × β) γ)
inst✝² : IsSFiniteKernel μ
inst✝¹ : IsSFiniteKernel κ
inst✝ : IsSFiniteKernel η
⊢ (μ + κ) ⊗ₖ η = μ ⊗ₖ η + κ ⊗ₖ η
state_after: case h.h
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
γ : Type u_4
mγ : MeasurableSpace γ
s : Set (β × γ)
μ κ : ↥(kernel α β)
η : ↥(kernel (α × β) γ)
inst✝² : IsSFiniteKernel μ
inst✝¹ : IsSFiniteKernel κ
inst✝ : IsSFiniteKernel η
a✝ : α
s✝ : Set (β × γ)
hs : MeasurableSet s✝
⊢ (((μ + κ) ⊗ₖ η) a✝) s✝ = ((μ ⊗ₖ η + κ ⊗ₖ η) a✝) s✝

tactic: simp [compProd_apply _ _ _ hs]
state_before: case h.h
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
γ : Type u_4
mγ : MeasurableSpace γ
s : Set (β × γ)
μ κ : ↥(kernel α β)
η : ↥(kernel (α × β) γ)
inst✝² : IsSFiniteKernel μ
inst✝¹ : IsSFiniteKernel κ
inst✝ : IsSFiniteKernel η
a✝ : α
s✝ : Set (β × γ)
hs : MeasurableSet s✝
⊢ (((μ + κ) ⊗ₖ η) a✝) s✝ = ((μ ⊗ₖ η + κ ⊗ₖ η) a✝) s✝
state_after: no goals
Theorem: List.destutter'_singleton
File: Mathlib/Data/List/Destutter.lean

tactic: split_ifs with h <;> simp! [h]
state_before: α : Type u_1
l : List α
R : α → α → Prop
inst✝ : DecidableRel R
a b : α
⊢ destutter' R a [b] = if R a b then [a, b] else [a]
state_after: no goals
Theorem: JordanHolderLattice.isMaximal_of_eq_inf
File: Mathlib/Order/JordanHolder.lean

tactic: have hb : x ⊔ y = b := sup_eq_of_isMaximal hxb hyb hxy
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
x b a y : X
ha : x ⊓ y = a
hxy : x ≠ y
hxb : IsMaximal x b
hyb : IsMaximal y b
⊢ IsMaximal a y
state_after: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
x b a y : X
ha : x ⊓ y = a
hxy : x ≠ y
hxb : IsMaximal x b
hyb : IsMaximal y b
hb : x ⊔ y = b
⊢ IsMaximal a y

tactic: substs a b
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
x b a y : X
ha : x ⊓ y = a
hxy : x ≠ y
hxb : IsMaximal x b
hyb : IsMaximal y b
hb : x ⊔ y = b
⊢ IsMaximal a y
state_after: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
x y : X
hxy : x ≠ y
hxb : IsMaximal x (x ⊔ y)
hyb : IsMaximal y (x ⊔ y)
⊢ IsMaximal (x ⊓ y) y

tactic: exact isMaximal_inf_right_of_isMaximal_sup hxb hyb
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
x y : X
hxy : x ≠ y
hxb : IsMaximal x (x ⊔ y)
hyb : IsMaximal y (x ⊔ y)
⊢ IsMaximal (x ⊓ y) y
state_after: no goals
Theorem: Polynomial.isCoprime_X_sub_C_of_isUnit_sub
File: Mathlib/Algebra/Polynomial/RingDivision.lean

tactic: rw [neg_mul_comm, ← left_distrib, neg_add_eq_sub, sub_sub_sub_cancel_left, ← C_sub, ← C_mul]
state_before: R✝ : Type u
S : Type v
T : Type w
a✝ b✝ : R✝
n : ℕ
inst✝² : CommRing R✝
inst✝¹ : IsDomain R✝
p q : R✝[X]
R : Type u_1
inst✝ : CommRing R
a b : R
h : IsUnit (a - b)
⊢ -C ↑h.unit⁻¹ * (X - C a) + C ↑h.unit⁻¹ * (X - C b) = 1
state_after: R✝ : Type u
S : Type v
T : Type w
a✝ b✝ : R✝
n : ℕ
inst✝² : CommRing R✝
inst✝¹ : IsDomain R✝
p q : R✝[X]
R : Type u_1
inst✝ : CommRing R
a b : R
h : IsUnit (a - b)
⊢ C (↑h.unit⁻¹ * (a - b)) = 1

tactic: rw [← C_1]
state_before: R✝ : Type u
S : Type v
T : Type w
a✝ b✝ : R✝
n : ℕ
inst✝² : CommRing R✝
inst✝¹ : IsDomain R✝
p q : R✝[X]
R : Type u_1
inst✝ : CommRing R
a b : R
h : IsUnit (a - b)
⊢ C (↑h.unit⁻¹ * (a - b)) = 1
state_after: R✝ : Type u
S : Type v
T : Type w
a✝ b✝ : R✝
n : ℕ
inst✝² : CommRing R✝
inst✝¹ : IsDomain R✝
p q : R✝[X]
R : Type u_1
inst✝ : CommRing R
a b : R
h : IsUnit (a - b)
⊢ C (↑h.unit⁻¹ * (a - b)) = C 1

tactic: congr
state_before: R✝ : Type u
S : Type v
T : Type w
a✝ b✝ : R✝
n : ℕ
inst✝² : CommRing R✝
inst✝¹ : IsDomain R✝
p q : R✝[X]
R : Type u_1
inst✝ : CommRing R
a b : R
h : IsUnit (a - b)
⊢ C (↑h.unit⁻¹ * (a - b)) = C 1
state_after: case h.e_6.h
R✝ : Type u
S : Type v
T : Type w
a✝ b✝ : R✝
n : ℕ
inst✝² : CommRing R✝
inst✝¹ : IsDomain R✝
p q : R✝[X]
R : Type u_1
inst✝ : CommRing R
a b : R
h : IsUnit (a - b)
⊢ ↑h.unit⁻¹ * (a - b) = 1

tactic: exact h.val_inv_mul
state_before: case h.e_6.h
R✝ : Type u
S : Type v
T : Type w
a✝ b✝ : R✝
n : ℕ
inst✝² : CommRing R✝
inst✝¹ : IsDomain R✝
p q : R✝[X]
R : Type u_1
inst✝ : CommRing R
a b : R
h : IsUnit (a - b)
⊢ ↑h.unit⁻¹ * (a - b) = 1
state_after: no goals
Theorem: DirichletCharacter.changeLevel_eq_cast_of_dvd
File: Mathlib/NumberTheory/DirichletCharacter/Basic.lean

tactic: set_option tactic.skipAssignedInstances false in
simpa [changeLevel_def, Function.comp_apply, MonoidHom.coe_comp] using
    toUnitHom_eq_char' _ <| ZMod.IsUnit_cast_of_dvd hm a
state_before: R : Type u_1
inst✝ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
hm : n ∣ m
a : (ZMod m)ˣ
⊢ ((changeLevel hm) χ) ↑a = χ (↑a).cast
state_after: no goals

tactic: simpa [changeLevel_def, Function.comp_apply, MonoidHom.coe_comp] using
    toUnitHom_eq_char' _ <| ZMod.IsUnit_cast_of_dvd hm a
state_before: R : Type u_1
inst✝ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
hm : n ∣ m
a : (ZMod m)ˣ
⊢ ((changeLevel hm) χ) ↑a = χ (↑a).cast
state_after: no goals
Theorem: Nat.closedEmbedding_coe_rat
File: Mathlib/Topology/Instances/Rat.lean

tactic: simpa using Nat.pairwise_one_le_dist
state_before: ⊢ Pairwise fun x y => 1 ≤ dist ↑x ↑y
state_after: no goals
Theorem: CategoryTheory.kernel.ι_op
File: Mathlib/CategoryTheory/Abelian/Opposite.lean

tactic: simp [kernelOpUnop]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Abelian C
X Y : C
f : X ⟶ Y
A B : Cᵒᵖ
g : A ⟶ B
⊢ (kernel.ι f.op).unop = eqToHom ⋯ ≫ cokernel.π f ≫ (kernelOpUnop f).inv
state_after: no goals
Theorem: vsub_sub_vsub_cancel_left
File: Mathlib/Algebra/AddTorsor.lean

tactic: rw [sub_eq_add_neg, neg_vsub_eq_vsub_rev, add_comm, vsub_add_vsub_cancel]
state_before: G : Type u_1
P : Type u_2
inst✝¹ : AddCommGroup G
inst✝ : AddTorsor G P
p₁ p₂ p₃ : P
⊢ p₃ -ᵥ p₂ - (p₃ -ᵥ p₁) = p₁ -ᵥ p₂
state_after: no goals
Theorem: IsKleinFour.eq_mul_of_ne_all
File: Mathlib/GroupTheory/SpecificGroups/KleinFour.lean

tactic: classical
let _ := Fintype.ofFinite G
apply eq_of_not_mem_of_mem_insert <| (eq_finset_univ hx hy hxy).symm ▸ mem_univ _
simpa only [mem_singleton, mem_insert, not_or] using ⟨hzx, hzy, hz⟩
state_before: G : Type u_1
inst✝¹ : Group G
inst✝ : IsKleinFour G
x y z : G
hx : x ≠ 1
hy : y ≠ 1
hxy : x ≠ y
hz : z ≠ 1
hzx : z ≠ x
hzy : z ≠ y
⊢ z = x * y
state_after: no goals

tactic: let _ := Fintype.ofFinite G
state_before: G : Type u_1
inst✝¹ : Group G
inst✝ : IsKleinFour G
x y z : G
hx : x ≠ 1
hy : y ≠ 1
hxy : x ≠ y
hz : z ≠ 1
hzx : z ≠ x
hzy : z ≠ y
⊢ z = x * y
state_after: G : Type u_1
inst✝¹ : Group G
inst✝ : IsKleinFour G
x y z : G
hx : x ≠ 1
hy : y ≠ 1
hxy : x ≠ y
hz : z ≠ 1
hzx : z ≠ x
hzy : z ≠ y
x✝ : Fintype G := Fintype.ofFinite G
⊢ z = x * y

tactic: apply eq_of_not_mem_of_mem_insert <| (eq_finset_univ hx hy hxy).symm ▸ mem_univ _
state_before: G : Type u_1
inst✝¹ : Group G
inst✝ : IsKleinFour G
x y z : G
hx : x ≠ 1
hy : y ≠ 1
hxy : x ≠ y
hz : z ≠ 1
hzx : z ≠ x
hzy : z ≠ y
x✝ : Fintype G := Fintype.ofFinite G
⊢ z = x * y
state_after: G : Type u_1
inst✝¹ : Group G
inst✝ : IsKleinFour G
x y z : G
hx : x ≠ 1
hy : y ≠ 1
hxy : x ≠ y
hz : z ≠ 1
hzx : z ≠ x
hzy : z ≠ y
x✝ : Fintype G := Fintype.ofFinite G
⊢ z ∉ {x, y, 1}

tactic: simpa only [mem_singleton, mem_insert, not_or] using ⟨hzx, hzy, hz⟩
state_before: G : Type u_1
inst✝¹ : Group G
inst✝ : IsKleinFour G
x y z : G
hx : x ≠ 1
hy : y ≠ 1
hxy : x ≠ y
hz : z ≠ 1
hzx : z ≠ x
hzy : z ≠ y
x✝ : Fintype G := Fintype.ofFinite G
⊢ z ∉ {x, y, 1}
state_after: no goals
Theorem: Fin.range_succ
File: Mathlib/Data/Fin/Basic.lean

tactic: rw [← succAbove_zero]
state_before: n✝ m : ℕ
p : Fin (n✝ + 1)
i j : Fin n✝
n : ℕ
⊢ Set.range succ = {0}ᶜ
state_after: n✝ m : ℕ
p : Fin (n✝ + 1)
i j : Fin n✝
n : ℕ
⊢ Set.range (succAbove 0) = {0}ᶜ

tactic: exact range_succAbove (0 : Fin (n + 1))
state_before: n✝ m : ℕ
p : Fin (n✝ + 1)
i j : Fin n✝
n : ℕ
⊢ Set.range (succAbove 0) = {0}ᶜ
state_after: no goals
Theorem: MeasureTheory.SignedMeasure.singularPart_totalVariation
File: Mathlib/MeasureTheory/Decomposition/SignedLebesgue.lean

tactic: have :
  (s.singularPart μ).toJordanDecomposition =
    ⟨s.toJordanDecomposition.posPart.singularPart μ,
      s.toJordanDecomposition.negPart.singularPart μ, singularPart_mutuallySingular s μ⟩ := by
  refine JordanDecomposition.toSignedMeasure_injective ?_
  rw [toSignedMeasure_toJordanDecomposition, singularPart, JordanDecomposition.toSignedMeasure]
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s : SignedMeasure α
μ : Measure α
⊢ (s.singularPart μ).totalVariation =
    s.toJordanDecomposition.posPart.singularPart μ + s.toJordanDecomposition.negPart.singularPart μ
state_after: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s : SignedMeasure α
μ : Measure α
this :
  (s.singularPart μ).toJordanDecomposition =
    JordanDecomposition.mk (s.toJordanDecomposition.posPart.singularPart μ)
      (s.toJordanDecomposition.negPart.singularPart μ) ⋯
⊢ (s.singularPart μ).totalVariation =
    s.toJordanDecomposition.posPart.singularPart μ + s.toJordanDecomposition.negPart.singularPart μ

tactic: rw [totalVariation, this]
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s : SignedMeasure α
μ : Measure α
this :
  (s.singularPart μ).toJordanDecomposition =
    JordanDecomposition.mk (s.toJordanDecomposition.posPart.singularPart μ)
      (s.toJordanDecomposition.negPart.singularPart μ) ⋯
⊢ (s.singularPart μ).totalVariation =
    s.toJordanDecomposition.posPart.singularPart μ + s.toJordanDecomposition.negPart.singularPart μ
state_after: no goals

tactic: refine JordanDecomposition.toSignedMeasure_injective ?_
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s : SignedMeasure α
μ : Measure α
⊢ (s.singularPart μ).toJordanDecomposition =
    JordanDecomposition.mk (s.toJordanDecomposition.posPart.singularPart μ)
      (s.toJordanDecomposition.negPart.singularPart μ) ⋯
state_after: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s : SignedMeasure α
μ : Measure α
⊢ (s.singularPart μ).toJordanDecomposition.toSignedMeasure =
    (JordanDecomposition.mk (s.toJordanDecomposition.posPart.singularPart μ)
        (s.toJordanDecomposition.negPart.singularPart μ) ⋯).toSignedMeasure

tactic: rw [toSignedMeasure_toJordanDecomposition, singularPart, JordanDecomposition.toSignedMeasure]
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s : SignedMeasure α
μ : Measure α
⊢ (s.singularPart μ).toJordanDecomposition.toSignedMeasure =
    (JordanDecomposition.mk (s.toJordanDecomposition.posPart.singularPart μ)
        (s.toJordanDecomposition.negPart.singularPart μ) ⋯).toSignedMeasure
state_after: no goals
Theorem: SimpleGraph.TripartiteFromTriangles.cliqueSet_eq_image
File: Mathlib/Combinatorics/SimpleGraph/Triangle/Tripartite.lean

tactic: ext
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
x : α × β × γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : NoAccidental t
⊢ (graph t).cliqueSet 3 = ⇑toTriangle '' ↑t
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
x : α × β × γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : NoAccidental t
x✝ : Finset (α ⊕ β ⊕ γ)
⊢ x✝ ∈ (graph t).cliqueSet 3 ↔ x✝ ∈ ⇑toTriangle '' ↑t

tactic: exact is3Clique_iff
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝⁴ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
x : α × β × γ
ε : 𝕜
inst✝³ : DecidableEq α
inst✝² : DecidableEq β
inst✝¹ : DecidableEq γ
inst✝ : NoAccidental t
x✝ : Finset (α ⊕ β ⊕ γ)
⊢ x✝ ∈ (graph t).cliqueSet 3 ↔ x✝ ∈ ⇑toTriangle '' ↑t
state_after: no goals
Theorem: suffixLevenshtein_minimum_le_levenshtein_append
File: Mathlib/Data/List/EditDistance/Bounds.lean

tactic: cases ys₁ with
| nil => exact List.minimum_le_of_mem' (List.get_mem _ _ _)
| cons y ys₁ =>
    exact (le_suffixLevenshtein_append_minimum _ _ _).trans
      (suffixLevenshtein_minimum_le_levenshtein_cons _ _ _)
state_before: α : Type u_1
β : Type u_2
δ : Type u_3
C : Levenshtein.Cost α β δ
inst✝ : CanonicallyLinearOrderedAddCommMonoid δ
xs : List α
ys₁ ys₂ : List β
⊢ (↑(suffixLevenshtein C xs ys₂)).minimum ≤ ↑(levenshtein C xs (ys₁ ++ ys₂))
state_after: no goals

tactic: exact List.minimum_le_of_mem' (List.get_mem _ _ _)
state_before: case nil
α : Type u_1
β : Type u_2
δ : Type u_3
C : Levenshtein.Cost α β δ
inst✝ : CanonicallyLinearOrderedAddCommMonoid δ
xs : List α
ys₂ : List β
⊢ (↑(suffixLevenshtein C xs ys₂)).minimum ≤ ↑(levenshtein C xs ([] ++ ys₂))
state_after: no goals

tactic: exact (le_suffixLevenshtein_append_minimum _ _ _).trans
  (suffixLevenshtein_minimum_le_levenshtein_cons _ _ _)
state_before: case cons
α : Type u_1
β : Type u_2
δ : Type u_3
C : Levenshtein.Cost α β δ
inst✝ : CanonicallyLinearOrderedAddCommMonoid δ
xs : List α
ys₂ : List β
y : β
ys₁ : List β
⊢ (↑(suffixLevenshtein C xs ys₂)).minimum ≤ ↑(levenshtein C xs (y :: ys₁ ++ ys₂))
state_after: no goals
Theorem: SimpleGraph.degree_pos_iff_exists_adj
File: Mathlib/Combinatorics/SimpleGraph/Finite.lean

tactic: simp only [degree, card_pos, Finset.Nonempty, mem_neighborFinset]
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
v : V
inst✝ : Fintype ↑(G.neighborSet v)
⊢ 0 < G.degree v ↔ ∃ w, G.Adj v w
state_after: no goals
Theorem: Nat.coprime_add_mul_left_left
File: Mathlib/Data/Nat/GCD/Basic.lean

tactic: rw [Coprime, Coprime, gcd_add_mul_left_left]
state_before: m n k : ℕ
⊢ (m + n * k).Coprime n ↔ m.Coprime n
state_after: no goals