ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: CategoryTheory.ShortComplex.abLeftHomologyData_i
File: Mathlib/Algebra/Homology/ShortComplex/Ab.lean

Proof steps:
state_before: S : ShortComplex Ab
⊢ (AddMonoidHom.ker S.g).subtype ≫ S.g = 0
state_after: case w.mk
S : ShortComplex Ab
val✝ : ↑S.X₂
hx : val✝ ∈ AddMonoidHom.ker S.g
⊢ ((AddMonoidHom.ker S.g).subtype ≫ S.g) ⟨val✝, hx⟩ = 0 ⟨val✝, hx⟩
tactic: ext ⟨_, hx⟩
state_before: case w.mk
S : ShortComplex Ab
val✝ : ↑S.X₂
hx : val✝ ∈ AddMonoidHom.ker S.g
⊢ ((AddMonoidHom.ker S.g).subtype ≫ S.g) ⟨val✝, hx⟩ = 0 ⟨val✝, hx⟩
state_after: no goals
tactic: exact hx
state_before: S : ShortComplex Ab
⊢ (AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯) ≫ QuotientAddGroup.mk' S.abToCycles.range = 0
state_after: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯) ≫ QuotientAddGroup.mk' S.abToCycles.range) x = 0 x
tactic: ext (x : S.X₁)
state_before: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯) ≫ QuotientAddGroup.mk' S.abToCycles.range) x = 0 x
state_after: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x ∈ S.abToCycles.range
tactic: erw [QuotientAddGroup.eq_zero_iff]
state_before: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x ∈ S.abToCycles.range
state_after: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ∃ x_1, S.abToCycles x_1 = ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x
tactic: rw [AddMonoidHom.mem_range]
state_before: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ∃ x_1, S.abToCycles x_1 = ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x
state_after: no goals
tactic: apply exists_apply_eq_apply
Theorem: Set.image_sub_const_Ici
File: Mathlib/Data/Set/Pointwise/Interval.lean

Proof steps:
state_before: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
⊢ (fun x => x - a) '' Ici b = Ici (b - a)
state_after: no goals
tactic: simp [sub_eq_neg_add]
Theorem: padicNorm.sum_le'
File: Mathlib/NumberTheory/Padics/PadicNorm.lean

Proof steps:
state_before: p : ℕ
hp : Fact (Nat.Prime p)
α : Type u_1
F : α → ℚ
t : ℚ
s : Finset α
hF : ∀ i ∈ s, padicNorm p (F i) ≤ t
ht : 0 ≤ t
⊢ padicNorm p (∑ i ∈ s, F i) ≤ t
state_after: case inl
p : ℕ
hp : Fact (Nat.Prime p)
α : Type u_1
F : α → ℚ
t : ℚ
ht : 0 ≤ t
hF : ∀ i ∈ ∅, padicNorm p (F i) ≤ t
⊢ padicNorm p (∑ i ∈ ∅, F i) ≤ t

case inr
p : ℕ
hp : Fact (Nat.Prime p)
α : Type u_1
F : α → ℚ
t : ℚ
s : Finset α
hF : ∀ i ∈ s, padicNorm p (F i) ≤ t
ht : 0 ≤ t
hs : s.Nonempty
⊢ padicNorm p (∑ i ∈ s, F i) ≤ t
tactic: obtain rfl | hs := Finset.eq_empty_or_nonempty s
Theorem: AffineSubspace.wOppSide_iff_exists_right
File: Mathlib/Analysis/Convex/Side.lean

Proof steps:
state_before: R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁶ : LinearOrderedField R
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module R V
inst✝³ : AddTorsor V P
inst✝² : AddCommGroup V'
inst✝¹ : Module R V'
inst✝ : AddTorsor V' P'
s : AffineSubspace R P
x y p₂ : P
h : p₂ ∈ s
⊢ s.WOppSide x y ↔ y ∈ s ∨ ∃ p₁ ∈ s, SameRay R (x -ᵥ p₁) (p₂ -ᵥ y)
state_after: R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁶ : LinearOrderedField R
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module R V
inst✝³ : AddTorsor V P
inst✝² : AddCommGroup V'
inst✝¹ : Module R V'
inst✝ : AddTorsor V' P'
s : AffineSubspace R P
x y p₂ : P
h : p₂ ∈ s
⊢ (y ∈ s ∨ ∃ p₂_1 ∈ s, SameRay R (y -ᵥ p₂) (p₂_1 -ᵥ x)) ↔ y ∈ s ∨ ∃ p₁ ∈ s, SameRay R (x -ᵥ p₁) (p₂ -ᵥ y)
tactic: rw [wOppSide_comm, wOppSide_iff_exists_left h]
state_before: R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁶ : LinearOrderedField R
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module R V
inst✝³ : AddTorsor V P
inst✝² : AddCommGroup V'
inst✝¹ : Module R V'
inst✝ : AddTorsor V' P'
s : AffineSubspace R P
x y p₂ : P
h : p₂ ∈ s
⊢ (y ∈ s ∨ ∃ p₂_1 ∈ s, SameRay R (y -ᵥ p₂) (p₂_1 -ᵥ x)) ↔ y ∈ s ∨ ∃ p₁ ∈ s, SameRay R (x -ᵥ p₁) (p₂ -ᵥ y)
state_after: case mp
R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁶ : LinearOrderedField R
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module R V
inst✝³ : AddTorsor V P
inst✝² : AddCommGroup V'
inst✝¹ : Module R V'
inst✝ : AddTorsor V' P'
s : AffineSubspace R P
x y p₂ : P
h : p₂ ∈ s
⊢ (y ∈ s ∨ ∃ p₂_1 ∈ s, SameRay R (y -ᵥ p₂) (p₂_1 -ᵥ x)) → y ∈ s ∨ ∃ p₁ ∈ s, SameRay R (x -ᵥ p₁) (p₂ -ᵥ y)

case mpr
R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁶ : LinearOrderedField R
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module R V
inst✝³ : AddTorsor V P
inst✝² : AddCommGroup V'
inst✝¹ : Module R V'
inst✝ : AddTorsor V' P'
s : AffineSubspace R P
x y p₂ : P
h : p₂ ∈ s
⊢ (y ∈ s ∨ ∃ p₁ ∈ s, SameRay R (x -ᵥ p₁) (p₂ -ᵥ y)) → y ∈ s ∨ ∃ p₂_1 ∈ s, SameRay R (y -ᵥ p₂) (p₂_1 -ᵥ x)
tactic: constructor
Theorem: Finset.monotone_iff_forall_le_insert
File: Mathlib/Data/Finset/Interval.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Preorder β
s t : Finset α
f : Finset α → β
inst✝ : DecidableEq α
⊢ Monotone f ↔ ∀ (s : Finset α) ⦃a : α⦄, a ∉ s → f s ≤ f (insert a s)
state_after: no goals
tactic: simp [monotone_iff_forall_le_cons]
Theorem: CategoryTheory.ShortComplex.homologyMapIso_inv
File: Mathlib/Algebra/Homology/ShortComplex/Homology.lean

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ S₄ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : S₁.HomologyData
h₂ : S₂.HomologyData
e : S₁ ≅ S₂
inst✝¹ : S₁.HasHomology
inst✝ : S₂.HasHomology
⊢ homologyMap e.hom ≫ homologyMap e.inv = 𝟙 S₁.homology
state_after: no goals
tactic: rw [← homologyMap_comp, e.hom_inv_id, homologyMap_id]
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ S₄ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : S₁.HomologyData
h₂ : S₂.HomologyData
e : S₁ ≅ S₂
inst✝¹ : S₁.HasHomology
inst✝ : S₂.HasHomology
⊢ homologyMap e.inv ≫ homologyMap e.hom = 𝟙 S₂.homology
state_after: no goals
tactic: rw [← homologyMap_comp, e.inv_hom_id, homologyMap_id]
Theorem: Filter.tendsto_atTop_mono'
File: Mathlib/Order/Filter/AtTopBot.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : Preorder β
l : Filter α
f₁ f₂ : α → β
h : f₁ ≤ᶠ[l] f₂
h₁ : Tendsto f₁ l atTop
b : β
⊢ ∀ᶠ (a : α) in l, b ≤ f₂ a
state_after: no goals
tactic: filter_upwards [tendsto_atTop.1 h₁ b, h] with x using le_trans
Theorem: CategoryTheory.left_unitality_app
File: Mathlib/CategoryTheory/Monoidal/End.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
n : M
X : C
⊢ (F.obj n).map (F.ε.app X) ≫ (F.μ (𝟙_ M) n).app X ≫ (F.map (λ_ n).hom).app X = 𝟙 ((F.obj n).obj ((𝟙_ (C ⥤ C)).obj X))
state_after: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
n : M
X : C
this : (λ_ (F.obj n)).hom.app X = (F.ε ▷ F.obj n ≫ F.μ (𝟙_ M) n ≫ F.map (λ_ n).hom).app X
⊢ (F.obj n).map (F.ε.app X) ≫ (F.μ (𝟙_ M) n).app X ≫ (F.map (λ_ n).hom).app X = 𝟙 ((F.obj n).obj ((𝟙_ (C ⥤ C)).obj X))
tactic: have := congr_app (F.toLaxMonoidalFunctor.left_unitality n) X
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
n : M
X : C
this : (λ_ (F.obj n)).hom.app X = (F.ε ▷ F.obj n ≫ F.μ (𝟙_ M) n ≫ F.map (λ_ n).hom).app X
⊢ (F.obj n).map (F.ε.app X) ≫ (F.μ (𝟙_ M) n).app X ≫ (F.map (λ_ n).hom).app X = 𝟙 ((F.obj n).obj ((𝟙_ (C ⥤ C)).obj X))
state_after: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
n : M
X : C
this : 𝟙 ((F.obj n).obj X) = (F.obj n).map (F.ε.app X) ≫ (F.μ (𝟙_ M) n).app X ≫ (F.map (λ_ n).hom).app X
⊢ (F.obj n).map (F.ε.app X) ≫ (F.μ (𝟙_ M) n).app X ≫ (F.map (λ_ n).hom).app X = 𝟙 ((F.obj n).obj ((𝟙_ (C ⥤ C)).obj X))
tactic: dsimp at this
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
n : M
X : C
this : 𝟙 ((F.obj n).obj X) = (F.obj n).map (F.ε.app X) ≫ (F.μ (𝟙_ M) n).app X ≫ (F.map (λ_ n).hom).app X
⊢ (F.obj n).map (F.ε.app X) ≫ (F.μ (𝟙_ M) n).app X ≫ (F.map (λ_ n).hom).app X = 𝟙 ((F.obj n).obj ((𝟙_ (C ⥤ C)).obj X))
state_after: no goals
tactic: simpa using this.symm
Theorem: Fin.image_castSucc
File: Mathlib/Data/Fintype/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
n : ℕ
⊢ image castSucc univ = {last n}ᶜ
state_after: no goals
tactic: rw [← Fin.succAbove_last, Fin.image_succAbove_univ]
Theorem: CategoryTheory.Presieve.isSheafFor_singleton_iso
File: Mathlib/CategoryTheory/Sites/IsSheafFor.lean

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
P✝ Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P : Cᵒᵖ ⥤ Type w
⊢ IsSheafFor P (singleton (𝟙 X))
state_after: C : Type u₁
inst✝ : Category.{v₁, u₁} C
P✝ Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P : Cᵒᵖ ⥤ Type w
x : FamilyOfElements P (singleton (𝟙 X))
a✝ : x.Compatible
⊢ ∃! t, x.IsAmalgamation t
tactic: intro x _
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
P✝ Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P : Cᵒᵖ ⥤ Type w
x : FamilyOfElements P (singleton (𝟙 X))
a✝ : x.Compatible
⊢ ∃! t, x.IsAmalgamation t
state_after: case refine_1
C : Type u₁
inst✝ : Category.{v₁, u₁} C
P✝ Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P : Cᵒᵖ ⥤ Type w
x : FamilyOfElements P (singleton (𝟙 X))
a✝ : x.Compatible
⊢ (fun t => x.IsAmalgamation t) (x (𝟙 X) ⋯)

case refine_2
C : Type u₁
inst✝ : Category.{v₁, u₁} C
P✝ Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P : Cᵒᵖ ⥤ Type w
x : FamilyOfElements P (singleton (𝟙 X))
a✝ : x.Compatible
⊢ ∀ (y : P.obj (op X)), (fun t => x.IsAmalgamation t) y → y = x (𝟙 X) ⋯
tactic: refine ⟨x _ (Presieve.singleton_self _), ?_, ?_⟩
Theorem: Padic.rat_dense'
File: Mathlib/NumberTheory/Padics/PadicNumbers.lean

Proof steps:
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ⇑padicNormE
q : ℚ_[p]
ε : ℚ
hε : 0 < ε
q' : CauSeq ℚ (padicNorm p)
this : ∃ N, ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
N : ℕ
hN : ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
⊢ padicNormE (⟦q'⟧ - ↑(↑q' N)) < ε
state_after: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ⇑padicNormE
q : ℚ_[p]
ε : ℚ
hε : 0 < ε
q' : CauSeq ℚ (padicNorm p)
this : ∃ N, ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
N : ℕ
hN : ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
⊢ Quotient.lift PadicSeq.norm ⋯ (Completion.mk q' - ↑(↑q' N)) < ε
tactic: dsimp [padicNormE]
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ⇑padicNormE
q : ℚ_[p]
ε : ℚ
hε : 0 < ε
q' : CauSeq ℚ (padicNorm p)
this : ∃ N, ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
N : ℕ
hN : ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
⊢ Quotient.lift PadicSeq.norm ⋯ (Completion.mk q' - ↑(↑q' N)) < ε
state_after: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ⇑padicNormE
q : ℚ_[p]
ε : ℚ
hε : 0 < ε
q' : CauSeq ℚ (padicNorm p)
this : ∃ N, ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
N : ℕ
hN : ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
⊢ (q' - const (padicNorm p) (↑q' N)).norm < ε
tactic: convert_to PadicSeq.norm (q' - const _ (q' N) : PadicSeq p) < ε
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ⇑padicNormE
q : ℚ_[p]
ε : ℚ
hε : 0 < ε
q' : CauSeq ℚ (padicNorm p)
this : ∃ N, ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
N : ℕ
hN : ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
⊢ (q' - const (padicNorm p) (↑q' N)).norm < ε
state_after: case inl
p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ⇑padicNormE
q : ℚ_[p]
ε : ℚ
hε : 0 < ε
q' : CauSeq ℚ (padicNorm p)
this : ∃ N, ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
N : ℕ
hN : ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
heq : q' - const (padicNorm p) (↑q' N) ≈ 0
⊢ (q' - const (padicNorm p) (↑q' N)).norm < ε

case inr
p : ℕ
inst✝ : Fact (Nat.Prime p)
f : CauSeq ℚ_[p] ⇑padicNormE
q : ℚ_[p]
ε : ℚ
hε : 0 < ε
q' : CauSeq ℚ (padicNorm p)
this : ∃ N, ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
N : ℕ
hN : ∀ m ≥ N, ∀ n ≥ N, padicNorm p (↑q' m - ↑q' n) < ε
hne' : ¬q' - const (padicNorm p) (↑q' N) ≈ 0
⊢ (q' - const (padicNorm p) (↑q' N)).norm < ε
tactic: cases' Decidable.em (q' - const (padicNorm p) (q' N) ≈ 0) with heq hne'
Theorem: Fin.preimage_insertNth_Icc_of_not_mem
File: Mathlib/Order/Fin/Tuple.lean

Proof steps:
state_before: m n : ℕ
α : Fin (n + 1) → Type u_1
x✝ : α 0
q : (i : Fin (n + 1)) → α i
p✝ : (i : Fin n) → α i.succ
i✝ : Fin n
y : α i✝.succ
z : α 0
inst✝ : (i : Fin (n + 1)) → Preorder (α i)
i : Fin (n + 1)
x : α i
q₁ q₂ : (j : Fin (n + 1)) → α j
hx : x ∉ Icc (q₁ i) (q₂ i)
p : (j : Fin n) → α (i.succAbove j)
⊢ p ∈ i.insertNth x ⁻¹' Icc q₁ q₂ ↔ p ∈ ∅
state_after: no goals
tactic: simp only [mem_preimage, insertNth_mem_Icc, hx, false_and_iff, mem_empty_iff_false]
Theorem: Fintype.card_piFinset
File: Mathlib/Data/Fintype/BigOperators.lean

Proof steps:
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
κ : Type u_5
α : ι → Type u_6
inst✝³ : DecidableEq ι
inst✝² : DecidableEq κ
inst✝¹ : Fintype ι
inst✝ : (i : ι) → DecidableEq (α i)
s : (i : ι) → Finset (α i)
⊢ (piFinset s).card = ∏ i : ι, (s i).card
state_after: no goals
tactic: simp [piFinset, card_map]
Theorem: ULift.down_injective
File: Mathlib/Logic/Function/ULift.lean

Proof steps:
state_before: α : Type u_1
a b : α
x✝ : { down := a }.down = { down := b }.down
⊢ { down := a } = { down := b }
state_after: no goals
tactic: congr
Theorem: Equiv.Perm.Disjoint.cycleType
File: Mathlib/GroupTheory/Perm/Cycle/Type.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
h : σ.Disjoint τ
⊢ (σ * τ).cycleType = σ.cycleType + τ.cycleType
state_after: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
h : σ.Disjoint τ
⊢ σ.cycleFactorsFinset.val.Disjoint τ.cycleFactorsFinset.val
tactic: rw [cycleType_def, cycleType_def, cycleType_def, h.cycleFactorsFinset_mul_eq_union, ←
    Multiset.map_add, Finset.union_val, Multiset.add_eq_union_iff_disjoint.mpr _]
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ τ : Perm α
h : σ.Disjoint τ
⊢ σ.cycleFactorsFinset.val.Disjoint τ.cycleFactorsFinset.val
state_after: no goals
tactic: exact Finset.disjoint_val.2 h.disjoint_cycleFactorsFinset
Theorem: rothNumberNat_add_le
File: Mathlib/Combinatorics/Additive/AP/Three/Defs.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k n M N : ℕ
⊢ rothNumberNat (M + N) ≤ rothNumberNat M + rothNumberNat N
state_after: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k n M N : ℕ
⊢ addRothNumber (range (M + N)) ≤ addRothNumber (range M) + addRothNumber (range N)
tactic: simp_rw [rothNumberNat_def]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k n M N : ℕ
⊢ addRothNumber (range (M + N)) ≤ addRothNumber (range M) + addRothNumber (range N)
state_after: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k n M N : ℕ
⊢ addRothNumber (range M ∪ map (addLeftEmbedding M) (range N)) ≤
    addRothNumber (range M) + addRothNumber (map (addLeftEmbedding M) (range N))
tactic: rw [range_add_eq_union, ← addRothNumber_map_add_left (range N) M]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k n M N : ℕ
⊢ addRothNumber (range M ∪ map (addLeftEmbedding M) (range N)) ≤
    addRothNumber (range M) + addRothNumber (map (addLeftEmbedding M) (range N))
state_after: no goals
tactic: exact addRothNumber_union_le _ _
Theorem: Equiv.Perm.cycleType_of_card_le_mem_cycleType_add_two
File: Mathlib/GroupTheory/Perm/Cycle/Type.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
n : ℕ
g : Perm α
hn2 : Fintype.card α < n + 2
hng : n ∈ g.cycleType
⊢ g.cycleType = {n}
state_after: case intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
c g' : Perm α
hd : c.Disjoint g'
hc : c.IsCycle
hn2 : Fintype.card α < c.support.card + 2
hng : c.support.card ∈ (c * g').cycleType
⊢ (c * g').cycleType = {c.support.card}
tactic: obtain ⟨c, g', rfl, hd, hc, rfl⟩ := mem_cycleType_iff.1 hng
state_before: case intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
c g' : Perm α
hd : c.Disjoint g'
hc : c.IsCycle
hn2 : Fintype.card α < c.support.card + 2
hng : c.support.card ∈ (c * g').cycleType
⊢ (c * g').cycleType = {c.support.card}
state_after: case intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
c g' : Perm α
hd : c.Disjoint g'
hc : c.IsCycle
hn2 : Fintype.card α < c.support.card + 2
hng : c.support.card ∈ (c * g').cycleType
⊢ g' = 1
tactic: suffices g'1 : g' = 1 by
    rw [hd.cycleType, hc.cycleType, coe_singleton, g'1, cycleType_one, add_zero]
state_before: case intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
c g' : Perm α
hd : c.Disjoint g'
hc : c.IsCycle
hn2 : Fintype.card α < c.support.card + 2
hng : c.support.card ∈ (c * g').cycleType
⊢ g' = 1
state_after: case intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
c g' : Perm α
hd : c.Disjoint g'
hc : c.IsCycle
hng : c.support.card ∈ (c * g').cycleType
g'1 : g' ≠ 1
⊢ c.support.card + 2 ≤ Fintype.card α
tactic: contrapose! hn2 with g'1
state_before: case intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
c g' : Perm α
hd : c.Disjoint g'
hc : c.IsCycle
hng : c.support.card ∈ (c * g').cycleType
g'1 : g' ≠ 1
⊢ c.support.card + 2 ≤ Fintype.card α
state_after: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
c g' : Perm α
hd : c.Disjoint g'
hc : c.IsCycle
hng : c.support.card ∈ (c * g').cycleType
g'1 : g' ≠ 1
⊢ c.support.card + 2 ≤ (c * g').support.card
tactic: apply le_trans _ (c * g').support.card_le_univ
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
c g' : Perm α
hd : c.Disjoint g'
hc : c.IsCycle
hng : c.support.card ∈ (c * g').cycleType
g'1 : g' ≠ 1
⊢ c.support.card + 2 ≤ (c * g').support.card
state_after: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
c g' : Perm α
hd : c.Disjoint g'
hc : c.IsCycle
hng : c.support.card ∈ (c * g').cycleType
g'1 : g' ≠ 1
⊢ c.support.card + 2 ≤ c.support.card + g'.support.card
tactic: rw [hd.card_support_mul]
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
c g' : Perm α
hd : c.Disjoint g'
hc : c.IsCycle
hng : c.support.card ∈ (c * g').cycleType
g'1 : g' ≠ 1
⊢ c.support.card + 2 ≤ c.support.card + g'.support.card
state_after: no goals
tactic: exact add_le_add_left (two_le_card_support_of_ne_one g'1) _
Theorem: CategoryTheory.isSheaf_yoneda'
File: Mathlib/CategoryTheory/Sites/Types.lean

Proof steps:
state_before: α β : Type u
S : Sieve β
hs : S ∈ typesGrothendieckTopology.sieves β
x : FamilyOfElements (yoneda.obj α) S.arrows
hx : x.Compatible
γ : Type u
f : γ ⟶ β
h : S.arrows f
z : Opposite.unop (Opposite.op γ)
⊢ (yoneda.obj α).map f.op (fun y => x (fun x => y) ⋯ PUnit.unit) z = x f h z
state_after: no goals
tactic: convert congr_fun (hx (𝟙 _) (fun _ => z) (hs <| f z) h rfl) PUnit.unit using 1
state_before: α β : Type u
S : Sieve β
hs : S ∈ typesGrothendieckTopology.sieves β
x : FamilyOfElements (yoneda.obj α) S.arrows
hx : x.Compatible
f : (yoneda.obj α).obj (Opposite.op β)
hf : (fun t => x.IsAmalgamation t) f
y : Opposite.unop (Opposite.op β)
⊢ f y = x (fun x => y) ⋯ PUnit.unit
state_after: no goals
tactic: convert congr_fun (hf _ (hs y)) PUnit.unit
Theorem: Polynomial.rootMultiplicity_mul
File: Mathlib/Algebra/Polynomial/RingDivision.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p✝ q✝ p q : R[X]
x : R
hpq : p * q ≠ 0
⊢ rootMultiplicity x (p * q) = rootMultiplicity x p + rootMultiplicity x q
state_after: no goals
tactic: classical
  have hp : p ≠ 0 := left_ne_zero_of_mul hpq
  have hq : q ≠ 0 := right_ne_zero_of_mul hpq
  rw [rootMultiplicity_eq_multiplicity (p * q), dif_neg hpq, rootMultiplicity_eq_multiplicity p,
    dif_neg hp, rootMultiplicity_eq_multiplicity q, dif_neg hq,
    multiplicity.mul' (prime_X_sub_C x)]
Theorem: OrderEmbedding.supIrredLowerSet_surjective
File: Mathlib/Order/Birkhoff.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : PartialOrder α
inst✝ : Finite α
⊢ Surjective ⇑supIrredLowerSet
state_after: no goals
tactic: aesop (add simp Surjective)
Theorem: rank_finsupp'
File: Mathlib/LinearAlgebra/Dimension/Constructions.lean

Proof steps:
state_before: R S : Type u
M : Type v
M' : Type v'
M₁ : Type v
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝¹⁰ : Ring R
inst✝⁹ : CommRing S
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Module.Free R M
inst✝ : Module.Free R M'
ι : Type v
⊢ Module.rank R (ι →₀ M) = #ι * Module.rank R M
state_after: no goals
tactic: simp [rank_finsupp]
Theorem: Complex.div_ofReal_re
File: Mathlib/Data/Complex/Basic.lean

Proof steps:
state_before: z : ℂ
x : ℝ
⊢ (z / ↑x).re = z.re / x
state_after: no goals
tactic: rw [div_ofReal]
Theorem: Polynomial.mem_support_derivative
File: Mathlib/Algebra/Polynomial/Derivative.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroSMulDivisors ℕ R
p : R[X]
n : ℕ
⊢ n ∈ (derivative p).support ↔ n + 1 ∈ p.support
state_after: R : Type u
S : Type v
T : Type w
ι : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroSMulDivisors ℕ R
p : R[X]
n : ℕ
⊢ ¬p.coeff (n + 1) * ↑(n + 1) = 0 ↔ p.coeff (n + 1) ≠ 0
tactic: suffices ¬p.coeff (n + 1) * (n + 1 : ℕ) = 0 ↔ coeff p (n + 1) ≠ 0 by
    simpa only [mem_support_iff, coeff_derivative, Ne, Nat.cast_succ]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroSMulDivisors ℕ R
p : R[X]
n : ℕ
⊢ ¬p.coeff (n + 1) * ↑(n + 1) = 0 ↔ p.coeff (n + 1) ≠ 0
state_after: R : Type u
S : Type v
T : Type w
ι : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroSMulDivisors ℕ R
p : R[X]
n : ℕ
⊢ ¬(n + 1 = 0 ∨ p.coeff (n + 1) = 0) ↔ p.coeff (n + 1) ≠ 0
tactic: rw [← nsmul_eq_mul', smul_eq_zero]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroSMulDivisors ℕ R
p : R[X]
n : ℕ
⊢ ¬(n + 1 = 0 ∨ p.coeff (n + 1) = 0) ↔ p.coeff (n + 1) ≠ 0
state_after: no goals
tactic: simp only [Nat.succ_ne_zero, false_or_iff]
Theorem: CategoryTheory.e_assoc'
File: Mathlib/CategoryTheory/Enriched/Basic.lean

Proof steps:
state_before: V : Type v
inst✝² : Category.{w, v} V
inst✝¹ : MonoidalCategory V
C : Type u₁
inst✝ : EnrichedCategory V C
W X Y Z : C
⊢ (α_ (EnrichedCategory.Hom W X) (EnrichedCategory.Hom X Y) (EnrichedCategory.Hom Y Z)).hom ≫
      EnrichedCategory.Hom W X ◁ eComp V X Y Z ≫ eComp V W X Z =
    eComp V W X Y ▷ EnrichedCategory.Hom Y Z ≫ eComp V W Y Z
state_after: no goals
tactic: rw [← e_assoc V W X Y Z, Iso.hom_inv_id_assoc]