1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Disjoint.ne
File: Mathlib/Order/Disjoint.lean

tactic: rwa [← h] at hab
state_before: α : Type u_1
inst✝¹ : PartialOrder α
inst✝ : OrderBot α
a b c d : α
ha : a ≠ ⊥
hab : Disjoint a b
h : a = b
⊢ Disjoint a a
state_after: no goals
Theorem: LocalRing.of_surjective'
File: Mathlib/RingTheory/Ideal/LocalRing.lean

tactic: intro b
state_before: R : Type u
S : Type v
T : Type w
K : Type u'
inst✝³ : CommRing R
inst✝² : LocalRing R
inst✝¹ : CommRing S
inst✝ : Nontrivial S
f : R →+* S
hf : Function.Surjective ⇑f
⊢ ∀ (a : S), IsUnit a ∨ IsUnit (1 - a)
state_after: R : Type u
S : Type v
T : Type w
K : Type u'
inst✝³ : CommRing R
inst✝² : LocalRing R
inst✝¹ : CommRing S
inst✝ : Nontrivial S
f : R →+* S
hf : Function.Surjective ⇑f
b : S
⊢ IsUnit b ∨ IsUnit (1 - b)

tactic: obtain ⟨a, rfl⟩ := hf b
state_before: R : Type u
S : Type v
T : Type w
K : Type u'
inst✝³ : CommRing R
inst✝² : LocalRing R
inst✝¹ : CommRing S
inst✝ : Nontrivial S
f : R →+* S
hf : Function.Surjective ⇑f
b : S
⊢ IsUnit b ∨ IsUnit (1 - b)
state_after: case intro
R : Type u
S : Type v
T : Type w
K : Type u'
inst✝³ : CommRing R
inst✝² : LocalRing R
inst✝¹ : CommRing S
inst✝ : Nontrivial S
f : R →+* S
hf : Function.Surjective ⇑f
a : R
⊢ IsUnit (f a) ∨ IsUnit (1 - f a)

tactic: apply (isUnit_or_isUnit_one_sub_self a).imp <| RingHom.isUnit_map _
state_before: case intro
R : Type u
S : Type v
T : Type w
K : Type u'
inst✝³ : CommRing R
inst✝² : LocalRing R
inst✝¹ : CommRing S
inst✝ : Nontrivial S
f : R →+* S
hf : Function.Surjective ⇑f
a : R
⊢ IsUnit (f a) ∨ IsUnit (1 - f a)
state_after: case intro
R : Type u
S : Type v
T : Type w
K : Type u'
inst✝³ : CommRing R
inst✝² : LocalRing R
inst✝¹ : CommRing S
inst✝ : Nontrivial S
f : R →+* S
hf : Function.Surjective ⇑f
a : R
⊢ IsUnit (1 - a) → IsUnit (1 - f a)

tactic: rw [← f.map_one, ← f.map_sub]
state_before: case intro
R : Type u
S : Type v
T : Type w
K : Type u'
inst✝³ : CommRing R
inst✝² : LocalRing R
inst✝¹ : CommRing S
inst✝ : Nontrivial S
f : R →+* S
hf : Function.Surjective ⇑f
a : R
⊢ IsUnit (1 - a) → IsUnit (1 - f a)
state_after: case intro
R : Type u
S : Type v
T : Type w
K : Type u'
inst✝³ : CommRing R
inst✝² : LocalRing R
inst✝¹ : CommRing S
inst✝ : Nontrivial S
f : R →+* S
hf : Function.Surjective ⇑f
a : R
⊢ IsUnit (1 - a) → IsUnit (f (1 - a))

tactic: apply f.isUnit_map
state_before: case intro
R : Type u
S : Type v
T : Type w
K : Type u'
inst✝³ : CommRing R
inst✝² : LocalRing R
inst✝¹ : CommRing S
inst✝ : Nontrivial S
f : R →+* S
hf : Function.Surjective ⇑f
a : R
⊢ IsUnit (1 - a) → IsUnit (f (1 - a))
state_after: no goals
Theorem: Cycle.formPerm_eq_self_of_not_mem
File: Mathlib/GroupTheory/Perm/Cycle/Concrete.lean

tactic: induction s using Quot.inductionOn
state_before: α : Type u_1
inst✝ : DecidableEq α
s✝ s' s : Cycle α
h : s.Nodup
x : α
hx : x ∉ s
⊢ (s.formPerm h) x = x
state_after: case h
α : Type u_1
inst✝ : DecidableEq α
s s' : Cycle α
x : α
a✝ : List α
h : Nodup (Quot.mk Setoid.r a✝)
hx : x ∉ Quot.mk Setoid.r a✝
⊢ (formPerm (Quot.mk Setoid.r a✝) h) x = x

tactic: simpa using List.formPerm_eq_self_of_not_mem _ _ hx
state_before: case h
α : Type u_1
inst✝ : DecidableEq α
s s' : Cycle α
x : α
a✝ : List α
h : Nodup (Quot.mk Setoid.r a✝)
hx : x ∉ Quot.mk Setoid.r a✝
⊢ (formPerm (Quot.mk Setoid.r a✝) h) x = x
state_after: no goals
Theorem: MeasurableSpace.generateFrom_natGeneratingSequence
File: Mathlib/MeasureTheory/MeasurableSpace/CountablyGenerated.lean

tactic: rw [natGeneratingSequence, range_enumerateCountable_of_mem _ empty_mem_countableGeneratingSet,
  generateFrom_countableGeneratingSet]
state_before: α✝ : Type u_1
β : Type u_2
α : Type u_3
m : MeasurableSpace α
inst✝ : CountablyGenerated α
⊢ generateFrom (range (natGeneratingSequence α)) = m
state_after: no goals
Theorem: eq_mul_of_div_eq'
File: Mathlib/Algebra/Group/Basic.lean

tactic: simp [h.symm]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : CommGroup G
a b c d : G
h : a / b = c
⊢ a = b * c
state_after: no goals
Theorem: IsCompact.uniformContinuousOn_of_continuous
File: Mathlib/Topology/UniformSpace/Compact.lean

tactic: rw [uniformContinuousOn_iff_restrict]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set α
f : α → β
hs : IsCompact s
hf : ContinuousOn f s
⊢ UniformContinuousOn f s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set α
f : α → β
hs : IsCompact s
hf : ContinuousOn f s
⊢ UniformContinuous (s.restrict f)

tactic: rw [isCompact_iff_compactSpace] at hs
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set α
f : α → β
hs : IsCompact s
hf : ContinuousOn f s
⊢ UniformContinuous (s.restrict f)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set α
f : α → β
hs : CompactSpace ↑s
hf : ContinuousOn f s
⊢ UniformContinuous (s.restrict f)

tactic: rw [continuousOn_iff_continuous_restrict] at hf
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set α
f : α → β
hs : CompactSpace ↑s
hf : ContinuousOn f s
⊢ UniformContinuous (s.restrict f)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set α
f : α → β
hs : CompactSpace ↑s
hf : Continuous (s.restrict f)
⊢ UniformContinuous (s.restrict f)

tactic: exact CompactSpace.uniformContinuous_of_continuous hf
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set α
f : α → β
hs : CompactSpace ↑s
hf : Continuous (s.restrict f)
⊢ UniformContinuous (s.restrict f)
state_after: no goals
Theorem: LinearMap.ker_id_sub_eq_of_proj
File: Mathlib/LinearAlgebra/Projection.lean

tactic: ext x
state_before: R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
p q : Submodule R E
S : Type u_5
inst✝² : Semiring S
M : Type u_6
inst✝¹ : AddCommMonoid M
inst✝ : Module S M
m : Submodule S M
f : E →ₗ[R] ↥p
hf : ∀ (x : ↥p), f ↑x = x
⊢ ker (id - p.subtype ∘ₗ f) = p
state_after: case h
R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
p q : Submodule R E
S : Type u_5
inst✝² : Semiring S
M : Type u_6
inst✝¹ : AddCommMonoid M
inst✝ : Module S M
m : Submodule S M
f : E →ₗ[R] ↥p
hf : ∀ (x : ↥p), f ↑x = x
x : E
⊢ x ∈ ker (id - p.subtype ∘ₗ f) ↔ x ∈ p

tactic: simp only [comp_apply, mem_ker, subtype_apply, sub_apply, id_apply, sub_eq_zero]
state_before: case h
R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
p q : Submodule R E
S : Type u_5
inst✝² : Semiring S
M : Type u_6
inst✝¹ : AddCommMonoid M
inst✝ : Module S M
m : Submodule S M
f : E →ₗ[R] ↥p
hf : ∀ (x : ↥p), f ↑x = x
x : E
⊢ x ∈ ker (id - p.subtype ∘ₗ f) ↔ x ∈ p
state_after: case h
R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
p q : Submodule R E
S : Type u_5
inst✝² : Semiring S
M : Type u_6
inst✝¹ : AddCommMonoid M
inst✝ : Module S M
m : Submodule S M
f : E →ₗ[R] ↥p
hf : ∀ (x : ↥p), f ↑x = x
x : E
⊢ x = ↑(f x) ↔ x ∈ p

tactic: exact ⟨fun h => h.symm ▸ Submodule.coe_mem _, fun hx => by erw [hf ⟨x, hx⟩, Subtype.coe_mk]⟩
state_before: case h
R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
p q : Submodule R E
S : Type u_5
inst✝² : Semiring S
M : Type u_6
inst✝¹ : AddCommMonoid M
inst✝ : Module S M
m : Submodule S M
f : E →ₗ[R] ↥p
hf : ∀ (x : ↥p), f ↑x = x
x : E
⊢ x = ↑(f x) ↔ x ∈ p
state_after: no goals

tactic: erw [hf ⟨x, hx⟩, Subtype.coe_mk]
state_before: R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
p q : Submodule R E
S : Type u_5
inst✝² : Semiring S
M : Type u_6
inst✝¹ : AddCommMonoid M
inst✝ : Module S M
m : Submodule S M
f : E →ₗ[R] ↥p
hf : ∀ (x : ↥p), f ↑x = x
x : E
hx : x ∈ p
⊢ x = ↑(f x)
state_after: no goals
Theorem: dot_cross_self
File: Mathlib/LinearAlgebra/CrossProduct.lean

tactic: rw [← cross_anticomm, Matrix.dotProduct_neg, dot_self_cross, neg_zero]
state_before: R : Type u_1
inst✝ : CommRing R
v w : Fin 3 → R
⊢ w ⬝ᵥ (crossProduct v) w = 0
state_after: no goals
Theorem: ite_zero_mul_ite_zero
File: Mathlib/Algebra/Ring/Defs.lean

tactic: simp only [← ite_and, ite_mul, mul_ite, mul_zero, zero_mul, and_comm]
state_before: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝² : MulZeroClass α
P Q : Prop
inst✝¹ : Decidable P
inst✝ : Decidable Q
a b : α
⊢ ((if P then a else 0) * if Q then b else 0) = if P ∧ Q then a * b else 0
state_after: no goals
Theorem: HomogeneousLocalization.mk_eq_zero_of_num
File: Mathlib/RingTheory/GradedAlgebra/HomogeneousLocalization.lean

tactic: apply val_injective
state_before: ι : Type u_1
R : Type u_2
A : Type u_3
inst✝⁵ : AddCommMonoid ι
inst✝⁴ : DecidableEq ι
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ι → Submodule R A
inst✝ : GradedAlgebra 𝒜
x : Submonoid A
f : NumDenSameDeg 𝒜 x
h : f.num = 0
⊢ mk f = 0
state_after: case a
ι : Type u_1
R : Type u_2
A : Type u_3
inst✝⁵ : AddCommMonoid ι
inst✝⁴ : DecidableEq ι
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ι → Submodule R A
inst✝ : GradedAlgebra 𝒜
x : Submonoid A
f : NumDenSameDeg 𝒜 x
h : f.num = 0
⊢ (mk f).val = val 0

tactic: simp only [val_mk, val_zero, h, ZeroMemClass.coe_zero, Localization.mk_zero]
state_before: case a
ι : Type u_1
R : Type u_2
A : Type u_3
inst✝⁵ : AddCommMonoid ι
inst✝⁴ : DecidableEq ι
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ι → Submodule R A
inst✝ : GradedAlgebra 𝒜
x : Submonoid A
f : NumDenSameDeg 𝒜 x
h : f.num = 0
⊢ (mk f).val = val 0
state_after: no goals
Theorem: WeierstrassCurve.Affine.CoordinateRing.C_addPolynomial
File: Mathlib/AlgebraicGeometry/EllipticCurve/Group.lean

tactic: rw [W.C_addPolynomial, add_sub_cancel_left, mul_one]
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
W : Affine R
f : R →+* S
x y L : R
⊢ C (W.addPolynomial x y L) - (Y - C (linePolynomial x y L)) * (W.negPolynomial - C (linePolynomial x y L)) =
    W.polynomial * 1
state_after: no goals
Theorem: mul_rotate'
File: Mathlib/Algebra/Group/Basic.lean

tactic: simp only [mul_left_comm, mul_comm]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : CommSemigroup G
a b c : G
⊢ a * (b * c) = b * (c * a)
state_after: no goals
Theorem: Nat.factors_zero
File: Mathlib/Data/Nat/Factors.lean

tactic: rw [factors]
state_before: ⊢ factors 0 = []
state_after: no goals
Theorem: LatticeHom.withTopWithBot_id
File: Mathlib/Order/Hom/Lattice.lean

tactic: refine (congr_arg Option.map ?_).trans Option.map_id
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
δ : Type u_6
inst✝³ : FunLike F α β
inst✝² : Lattice α
inst✝¹ : Lattice β
inst✝ : Lattice γ
⊢ (fun f => ⇑f) (LatticeHom.id α).withTopWithBot = (fun f => ⇑f) (BoundedLatticeHom.id (WithTop (WithBot α)))
state_after: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
δ : Type u_6
inst✝³ : FunLike F α β
inst✝² : Lattice α
inst✝¹ : Lattice β
inst✝ : Lattice γ
⊢ ⇑(LatticeHom.id α).withBot.toSupHom = id

tactic: rw [withBot_id]
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
δ : Type u_6
inst✝³ : FunLike F α β
inst✝² : Lattice α
inst✝¹ : Lattice β
inst✝ : Lattice γ
⊢ ⇑(LatticeHom.id α).withBot.toSupHom = id
state_after: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
δ : Type u_6
inst✝³ : FunLike F α β
inst✝² : Lattice α
inst✝¹ : Lattice β
inst✝ : Lattice γ
⊢ ⇑(LatticeHom.id (WithBot α)).toSupHom = id

tactic: rfl
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
δ : Type u_6
inst✝³ : FunLike F α β
inst✝² : Lattice α
inst✝¹ : Lattice β
inst✝ : Lattice γ
⊢ ⇑(LatticeHom.id (WithBot α)).toSupHom = id
state_after: no goals
Theorem: CochainComplex.mappingCone.inl_v_descCochain_v
File: Mathlib/Algebra/Homology/HomotopyCategory/MappingCone.lean

tactic: rw [← h₂₃, ← h₁₂, ← h, add_comm m, add_assoc, neg_add_cancel_left]
state_before: C : Type u_1
inst✝² : Category.{?u.115469, u_1} C
inst✝¹ : Preadditive C
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝ : HasHomotopyCofiber φ
K : CochainComplex C ℤ
n m : ℤ
α : Cochain F K m
β : Cochain G K n
h : m + 1 = n
p₁ p₂ p₃ : ℤ
h₁₂ : p₁ + -1 = p₂
h₂₃ : p₂ + n = p₃
⊢ p₁ + m = p₃
state_after: no goals

tactic: simpa only [Cochain.comp_v _ _ (show -1 + n = m by omega) p₁ p₂ p₃
  (by omega) (by omega)] using
    Cochain.congr_v (inl_descCochain φ α β h) p₁ p₃ (by omega)
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝ : HasHomotopyCofiber φ
K : CochainComplex C ℤ
n m : ℤ
α : Cochain F K m
β : Cochain G K n
h : m + 1 = n
p₁ p₂ p₃ : ℤ
h₁₂ : p₁ + -1 = p₂
h₂₃ : p₂ + n = p₃
⊢ (inl φ).v p₁ p₂ h₁₂ ≫ (descCochain φ α β h).v p₂ p₃ h₂₃ = α.v p₁ p₃ ⋯
state_after: no goals

tactic: omega
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝ : HasHomotopyCofiber φ
K : CochainComplex C ℤ
n m : ℤ
α : Cochain F K m
β : Cochain G K n
h : m + 1 = n
p₁ p₂ p₃ : ℤ
h₁₂ : p₁ + -1 = p₂
h₂₃ : p₂ + n = p₃
⊢ -1 + n = m
state_after: no goals

tactic: omega
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝ : HasHomotopyCofiber φ
K : CochainComplex C ℤ
n m : ℤ
α : Cochain F K m
β : Cochain G K n
h : m + 1 = n
p₁ p₂ p₃ : ℤ
h₁₂ : p₁ + -1 = p₂
h₂₃ : p₂ + n = p₃
⊢ p₁ + -1 = p₂
state_after: no goals

tactic: omega
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝ : HasHomotopyCofiber φ
K : CochainComplex C ℤ
n m : ℤ
α : Cochain F K m
β : Cochain G K n
h : m + 1 = n
p₁ p₂ p₃ : ℤ
h₁₂ : p₁ + -1 = p₂
h₂₃ : p₂ + n = p₃
⊢ p₂ + n = p₃
state_after: no goals

tactic: omega
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝ : HasHomotopyCofiber φ
K : CochainComplex C ℤ
n m : ℤ
α : Cochain F K m
β : Cochain G K n
h : m + 1 = n
p₁ p₂ p₃ : ℤ
h₁₂ : p₁ + -1 = p₂
h₂₃ : p₂ + n = p₃
⊢ p₁ + m = p₃
state_after: no goals
Theorem: CoxeterSystem.IsReflection.pow_two
File: Mathlib/GroupTheory/Coxeter/Inversion.lean

tactic: rcases ht with ⟨w, i, rfl⟩
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
t : W
ht : cs.IsReflection t
⊢ t ^ 2 = 1
state_after: case intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
i : B
⊢ (w * cs.simple i * w⁻¹) ^ 2 = 1

tactic: simp
state_before: case intro.intro
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
i : B
⊢ (w * cs.simple i * w⁻¹) ^ 2 = 1
state_after: no goals
Theorem: CategoryTheory.ShortComplex.SnakeInput.exact_C₂_up
File: Mathlib/Algebra/Homology/ShortComplex/SnakeLemma.lean

tactic: rw [← comp_τ₂, S.w₀₂, zero_τ₂]
state_before: C : Type u_1
inst✝¹ : Category.{?u.27102, u_1} C
inst✝ : Abelian C
S : SnakeInput C
⊢ S.v₀₁.τ₂ ≫ S.v₁₂.τ₂ = 0
state_after: no goals
Theorem: Equiv.Perm.IsThreeCycle.inv
File: Mathlib/GroupTheory/Perm/Cycle/Type.lean

tactic: rwa [IsThreeCycle, cycleType_inv]
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ f : Perm α
h : f.IsThreeCycle
⊢ f⁻¹.IsThreeCycle
state_after: no goals
Theorem: clusterPt_iff_forall_mem_closure
File: Mathlib/Topology/Basic.lean

tactic: simp_rw [ClusterPt, inf_neBot_iff, mem_closure_iff_nhds]
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
F : Filter X
⊢ ClusterPt x F ↔ ∀ s ∈ F, x ∈ closure s
state_after: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
F : Filter X
⊢ (∀ ⦃s : Set X⦄, s ∈ 𝓝 x → ∀ ⦃s' : Set X⦄, s' ∈ F → (s ∩ s').Nonempty) ↔ ∀ s ∈ F, ∀ t ∈ 𝓝 x, (t ∩ s).Nonempty

tactic: rw [forall₂_swap]
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
F : Filter X
⊢ (∀ ⦃s : Set X⦄, s ∈ 𝓝 x → ∀ ⦃s' : Set X⦄, s' ∈ F → (s ∩ s').Nonempty) ↔ ∀ s ∈ F, ∀ t ∈ 𝓝 x, (t ∩ s).Nonempty
state_after: no goals
Theorem: ArithmeticFunction.cardDistinctFactors_zero
File: Mathlib/NumberTheory/ArithmeticFunction.lean

tactic: simp
state_before: R : Type u_1
⊢ ω 0 = 0
state_after: no goals
Theorem: EReal.mul_div_mul_cancel
File: Mathlib/Data/Real/EReal.lean

tactic: change (a * c) * (b * c)⁻¹ = a * b⁻¹
state_before: a b c : EReal
h₁ : c ≠ ⊥
h₂ : c ≠ ⊤
h₃ : c ≠ 0
⊢ a * c / (b * c) = a / b
state_after: a b c : EReal
h₁ : c ≠ ⊥
h₂ : c ≠ ⊤
h₃ : c ≠ 0
⊢ a * c * (b * c)⁻¹ = a * b⁻¹

tactic: rw [mul_assoc, mul_inv b c]
state_before: a b c : EReal
h₁ : c ≠ ⊥
h₂ : c ≠ ⊤
h₃ : c ≠ 0
⊢ a * c * (b * c)⁻¹ = a * b⁻¹
state_after: a b c : EReal
h₁ : c ≠ ⊥
h₂ : c ≠ ⊤
h₃ : c ≠ 0
⊢ a * (c * (b⁻¹ * c⁻¹)) = a * b⁻¹

tactic: congr
state_before: a b c : EReal
h₁ : c ≠ ⊥
h₂ : c ≠ ⊤
h₃ : c ≠ 0
⊢ a * (c * (b⁻¹ * c⁻¹)) = a * b⁻¹
state_after: case e_a
a b c : EReal
h₁ : c ≠ ⊥
h₂ : c ≠ ⊤
h₃ : c ≠ 0
⊢ c * (b⁻¹ * c⁻¹) = b⁻¹

tactic: exact mul_div_cancel h₁ h₂ h₃
state_before: case e_a
a b c : EReal
h₁ : c ≠ ⊥
h₂ : c ≠ ⊤
h₃ : c ≠ 0
⊢ c * (b⁻¹ * c⁻¹) = b⁻¹
state_after: no goals
Theorem: Submonoid.subsingleton_iff
File: Mathlib/Algebra/Group/Submonoid/Basic.lean

tactic: simp [Submonoid.one_mem]
state_before: M : Type u_1
N : Type u_2
A : Type u_3
inst✝¹ : MulOneClass M
s : Set M
inst✝ : AddZeroClass A
t : Set A
S : Submonoid M
h : Subsingleton M
x y : Submonoid M
i : M
⊢ 1 ∈ x ↔ 1 ∈ y
state_after: no goals
Theorem: CategoryTheory.eqToHom_naturality
File: Mathlib/CategoryTheory/EqToHom.lean

tactic: simp [w]
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
β : Sort u_1
f g : β → C
z : (b : β) → f b ⟶ g b
j j' : β
w : j = j'
⊢ g j = g j'
state_after: no goals

tactic: simp [w]
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
β : Sort u_1
f g : β → C
z : (b : β) → f b ⟶ g b
j j' : β
w : j = j'
⊢ f j = f j'
state_after: no goals

tactic: cases w
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
β : Sort u_1
f g : β → C
z : (b : β) → f b ⟶ g b
j j' : β
w : j = j'
⊢ z j ≫ eqToHom ⋯ = eqToHom ⋯ ≫ z j'
state_after: case refl
C : Type u₁
inst✝ : Category.{v₁, u₁} C
β : Sort u_1
f g : β → C
z : (b : β) → f b ⟶ g b
j : β
⊢ z j ≫ eqToHom ⋯ = eqToHom ⋯ ≫ z j

tactic: simp
state_before: case refl
C : Type u₁
inst✝ : Category.{v₁, u₁} C
β : Sort u_1
f g : β → C
z : (b : β) → f b ⟶ g b
j : β
⊢ z j ≫ eqToHom ⋯ = eqToHom ⋯ ≫ z j
state_after: no goals
Theorem: ite_le_one
File: Mathlib/Order/Basic.lean

tactic: split <;> assumption
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝² : One α
p : Prop
inst✝¹ : Decidable p
a b : α
inst✝ : LE α
ha : a ≤ 1
hb : b ≤ 1
⊢ (if p then a else b) ≤ 1
state_after: no goals
Theorem: Polynomial.support_X_empty
File: Mathlib/Algebra/Polynomial/Basic.lean

tactic: rw [X, H, monomial_zero_right, support_zero]
state_before: R : Type u
a b : R
m n : ℕ
inst✝ : Semiring R
p q : R[X]
H : 1 = 0
⊢ X.support = ∅
state_after: no goals
Theorem: nhdsWithin_prod_eq
File: Mathlib/Topology/Constructions.lean

tactic: simp only [nhdsWithin, nhds_prod_eq, ← prod_inf_prod, prod_principal_principal]
state_before: X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : TopologicalSpace Z
inst✝² : TopologicalSpace W
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
x : X
y : Y
s : Set X
t : Set Y
⊢ 𝓝[s ×ˢ t] (x, y) = 𝓝[s] x ×ˢ 𝓝[t] y
state_after: no goals
Theorem: Finset.prod_eq_mul_prod_diff_singleton
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

tactic: convert (s.prod_inter_mul_prod_diff {i} f).symm
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 β
inst✝ : DecidableEq α
s : Finset α
i : α
h : i ∈ s
f : α → β
⊢ ∏ x ∈ s, f x = f i * ∏ x ∈ s \ {i}, f x
state_after: case h.e'_3.h.e'_5
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝¹ : CommMonoid β
inst✝ : DecidableEq α
s : Finset α
i : α
h : i ∈ s
f : α → β
⊢ f i = ∏ x ∈ s ∩ {i}, f x

tactic: simp [h]
state_before: case h.e'_3.h.e'_5
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝¹ : CommMonoid β
inst✝ : DecidableEq α
s : Finset α
i : α
h : i ∈ s
f : α → β
⊢ f i = ∏ x ∈ s ∩ {i}, f x
state_after: no goals
Theorem: CategoryTheory.MonoidalCategory.prodMonoidal_leftUnitor_inv_snd
File: Mathlib/CategoryTheory/Monoidal/Category.lean

tactic: cases X
state_before: C : Type u
𝒞 : Category.{v, u} C
inst✝⁴ : MonoidalCategory C
C₁ : Type u₁
inst✝³ : Category.{v₁, u₁} C₁
inst✝² : MonoidalCategory C₁
C₂ : Type u₂
inst✝¹ : Category.{v₂, u₂} C₂
inst✝ : MonoidalCategory C₂
X : C₁ × C₂
⊢ (λ_ X).inv.2 = (λ_ X.2).inv
state_after: case mk
C : Type u
𝒞 : Category.{v, u} C
inst✝⁴ : MonoidalCategory C
C₁ : Type u₁
inst✝³ : Category.{v₁, u₁} C₁
inst✝² : MonoidalCategory C₁
C₂ : Type u₂
inst✝¹ : Category.{v₂, u₂} C₂
inst✝ : MonoidalCategory C₂
fst✝ : C₁
snd✝ : C₂
⊢ (λ_ (fst✝, snd✝)).inv.2 = (λ_ (fst✝, snd✝).2).inv

tactic: rfl
state_before: case mk
C : Type u
𝒞 : Category.{v, u} C
inst✝⁴ : MonoidalCategory C
C₁ : Type u₁
inst✝³ : Category.{v₁, u₁} C₁
inst✝² : MonoidalCategory C₁
C₂ : Type u₂
inst✝¹ : Category.{v₂, u₂} C₂
inst✝ : MonoidalCategory C₂
fst✝ : C₁
snd✝ : C₂
⊢ (λ_ (fst✝, snd✝)).inv.2 = (λ_ (fst✝, snd✝).2).inv
state_after: no goals
Theorem: Finset.subtype_eq_univ
File: Mathlib/Data/Fintype/Basic.lean

tactic: simp [ext_iff]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Fintype α
s t : Finset α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : Fintype { a // p a }
⊢ Finset.subtype p s = univ ↔ ∀ ⦃a : α⦄, p a → a ∈ s
state_after: no goals
Theorem: List.getLast_reverse
File: Mathlib/Data/List/Basic.lean

tactic: contrapose! hl
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
hl : l.reverse ≠ []
⊢ 0 < l.length
state_after: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
hl : l.length ≤ 0
⊢ l.reverse = []

tactic: simpa [length_eq_zero] using hl
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
hl : l.length ≤ 0
⊢ l.reverse = []
state_after: no goals

tactic: rw [getLast_eq_get, get_reverse']
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
hl : l.reverse ≠ []
hl' : optParam (0 < l.length) ⋯
⊢ l.reverse.getLast hl = l.get ⟨0, hl'⟩
state_after: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
hl : l.reverse ≠ []
hl' : optParam (0 < l.length) ⋯
⊢ l.get ⟨l.length - 1 - ↑⟨l.reverse.length - 1, ⋯⟩, ?hn'⟩ = l.get ⟨0, hl'⟩

case hn'
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
hl : l.reverse ≠ []
hl' : optParam (0 < l.length) ⋯
⊢ l.length - 1 - ↑⟨l.reverse.length - 1, ⋯⟩ < l.length

tactic: simp
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
hl : l.reverse ≠ []
hl' : optParam (0 < l.length) ⋯
⊢ l.get ⟨l.length - 1 - ↑⟨l.reverse.length - 1, ⋯⟩, ?hn'⟩ = l.get ⟨0, hl'⟩
state_after: no goals

tactic: simpa using hl'
state_before: case hn'
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
hl : l.reverse ≠ []
hl' : optParam (0 < l.length) ⋯
⊢ l.length - 1 - ↑⟨l.reverse.length - 1, ⋯⟩ < l.length
state_after: no goals