ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: CategoryTheory.Limits.BinaryBicone.toBiconeFunctor_obj_pt
File: Mathlib/CategoryTheory/Limits/Shapes/Biproducts.lean

Proof steps:
state_before: J : Type w
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
D : Type uD
inst✝¹ : Category.{uD', uD} D
inst✝ : HasZeroMorphisms D
P Q X Y : C
b : BinaryBicone X Y
j j' : WalkingPair
⊢ (fun j => WalkingPair.casesOn j b.inl b.inr) j ≫ (fun j => WalkingPair.casesOn j b.fst b.snd) j' =
    if h : j = j' then eqToHom ⋯ else 0
state_after: no goals
tactic: rcases j with ⟨⟩ <;> rcases j' with ⟨⟩ <;> simp
Theorem: Rat.cast_neg
File: Mathlib/Data/Rat/Cast/Defs.lean

Proof steps:
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionRing α
p q✝ q : ℚ
⊢ ↑(-q) = -↑q
state_after: no goals
tactic: simp [cast_def, neg_div]
Theorem: Polynomial.coeff_scaleRoots_natDegree
File: Mathlib/RingTheory/Polynomial/ScaleRoots.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
⊢ (p.scaleRoots s).coeff p.natDegree = p.leadingCoeff
state_after: no goals
tactic: rw [leadingCoeff, coeff_scaleRoots, tsub_self, pow_zero, mul_one]
Theorem: Stream'.Seq.coinduction2
File: Mathlib/Data/Seq/Seq.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
s : Seq α
f g : Seq α → Seq β
H : ∀ (s : Seq α), BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) (f s).destruct (g s).destruct
⊢ f s = g s
state_after: α : Type u
β : Type v
γ : Type w
s : Seq α
f g : Seq α → Seq β
H : ∀ (s : Seq α), BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) (f s).destruct (g s).destruct
⊢ IsBisimulation fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s
tactic: refine eq_of_bisim (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) ?_ ⟨s, rfl, rfl⟩
state_before: α : Type u
β : Type v
γ : Type w
s : Seq α
f g : Seq α → Seq β
H : ∀ (s : Seq α), BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) (f s).destruct (g s).destruct
⊢ IsBisimulation fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s
state_after: α : Type u
β : Type v
γ : Type w
s : Seq α
f g : Seq α → Seq β
H : ∀ (s : Seq α), BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) (f s).destruct (g s).destruct
s1 s2 : Seq β
h : ∃ s, s1 = f s ∧ s2 = g s
⊢ BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) s1.destruct s2.destruct
tactic: intro s1 s2 h
state_before: α : Type u
β : Type v
γ : Type w
s : Seq α
f g : Seq α → Seq β
H : ∀ (s : Seq α), BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) (f s).destruct (g s).destruct
s1 s2 : Seq β
h : ∃ s, s1 = f s ∧ s2 = g s
⊢ BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) s1.destruct s2.destruct
state_after: case intro.intro
α : Type u
β : Type v
γ : Type w
s✝ : Seq α
f g : Seq α → Seq β
H : ∀ (s : Seq α), BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) (f s).destruct (g s).destruct
s1 s2 : Seq β
s : Seq α
h1 : s1 = f s
h2 : s2 = g s
⊢ BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) s1.destruct s2.destruct
tactic: rcases h with ⟨s, h1, h2⟩
state_before: case intro.intro
α : Type u
β : Type v
γ : Type w
s✝ : Seq α
f g : Seq α → Seq β
H : ∀ (s : Seq α), BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) (f s).destruct (g s).destruct
s1 s2 : Seq β
s : Seq α
h1 : s1 = f s
h2 : s2 = g s
⊢ BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) s1.destruct s2.destruct
state_after: case intro.intro
α : Type u
β : Type v
γ : Type w
s✝ : Seq α
f g : Seq α → Seq β
H : ∀ (s : Seq α), BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) (f s).destruct (g s).destruct
s1 s2 : Seq β
s : Seq α
h1 : s1 = f s
h2 : s2 = g s
⊢ BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) (f s).destruct (g s).destruct
tactic: rw [h1, h2]
state_before: case intro.intro
α : Type u
β : Type v
γ : Type w
s✝ : Seq α
f g : Seq α → Seq β
H : ∀ (s : Seq α), BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) (f s).destruct (g s).destruct
s1 s2 : Seq β
s : Seq α
h1 : s1 = f s
h2 : s2 = g s
⊢ BisimO (fun s1 s2 => ∃ s, s1 = f s ∧ s2 = g s) (f s).destruct (g s).destruct
state_after: no goals
tactic: apply H
Theorem: Set.ncard_eq_two
File: Mathlib/Data/Set/Card.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
⊢ s.ncard = 2 ↔ ∃ x y, x ≠ y ∧ s = {x, y}
state_after: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
⊢ ↑s.encard.toNat = 2 ↔ s.encard = 2
tactic: rw [← encard_eq_two, ncard_def, ← Nat.cast_inj (R := ℕ∞), Nat.cast_ofNat]
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
⊢ ↑s.encard.toNat = 2 ↔ s.encard = 2
state_after: case refine_1
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
h : ↑s.encard.toNat = 2
⊢ s.encard = 2

case refine_2
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
h : s.encard = 2
⊢ ↑s.encard.toNat = 2
tactic: refine ⟨fun h ↦ ?_, fun h ↦ ?_⟩
state_before: case refine_2
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
h : s.encard = 2
⊢ ↑s.encard.toNat = 2
state_after: case refine_2
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
h : s.encard = 2
⊢ ↑(ENat.toNat 2) = 2
tactic: rw [h]
state_before: case refine_2
α : Type u_1
β : Type u_2
s t : Set α
f : α → β
h : s.encard = 2
⊢ ↑(ENat.toNat 2) = 2
state_after: no goals
tactic: rfl
Theorem: SimpleGraph.edgeFinset_inf
File: Mathlib/Combinatorics/SimpleGraph/Finite.lean

Proof steps:
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
G₁ G₂ : SimpleGraph V
inst✝³ : Fintype ↑G.edgeSet
inst✝² : Fintype ↑G₁.edgeSet
inst✝¹ : Fintype ↑G₂.edgeSet
inst✝ : DecidableEq V
⊢ (G₁ ⊓ G₂).edgeFinset = G₁.edgeFinset ∩ G₂.edgeFinset
state_after: no goals
tactic: simp [edgeFinset]
Theorem: Set.Countable.measurableSet
File: Mathlib/MeasureTheory/MeasurableSpace/Defs.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
δ' : Type u_5
ι : Sort u_6
s✝ t u : Set α
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSingletonClass α
s : Set α
hs : s.Countable
⊢ MeasurableSet s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
δ' : Type u_5
ι : Sort u_6
s✝ t u : Set α
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSingletonClass α
s : Set α
hs : s.Countable
⊢ MeasurableSet (⋃ x ∈ s, {x})
tactic: rw [← biUnion_of_singleton s]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
δ' : Type u_5
ι : Sort u_6
s✝ t u : Set α
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSingletonClass α
s : Set α
hs : s.Countable
⊢ MeasurableSet (⋃ x ∈ s, {x})
state_after: no goals
tactic: exact .biUnion hs fun b _ => .singleton b
Theorem: Multiset.nodup_powerset
File: Mathlib/Data/Multiset/Powerset.lean

Proof steps:
state_before: α : Type u_1
s : Multiset α
l : List α
h : Nodup ⟦l⟧
⊢ (powerset ⟦l⟧).Nodup
state_after: α : Type u_1
s : Multiset α
l : List α
h : Nodup ⟦l⟧
⊢ (List.map ofList l.sublists').Nodup
tactic: simp only [quot_mk_to_coe, powerset_coe', coe_nodup]
state_before: α : Type u_1
s : Multiset α
l : List α
h : Nodup ⟦l⟧
⊢ (List.map ofList l.sublists').Nodup
state_after: α : Type u_1
s : Multiset α
l : List α
h : Nodup ⟦l⟧
⊢ ∀ x ∈ l.sublists', ∀ y ∈ l.sublists', ↑x = ↑y → x = y
tactic: refine (nodup_sublists'.2 h).map_on ?_
state_before: α : Type u_1
s : Multiset α
l : List α
h : Nodup ⟦l⟧
⊢ ∀ x ∈ l.sublists', ∀ y ∈ l.sublists', ↑x = ↑y → x = y
state_after: no goals
tactic: exact fun x sx y sy e =>
        (h.perm_iff_eq_of_sublist (mem_sublists'.1 sx) (mem_sublists'.1 sy)).1 (Quotient.exact e)
Theorem: DomMulAct.mem_stabilizer_iff
File: Mathlib/GroupTheory/Perm/DomMulAct.lean

Proof steps:
state_before: α : Type u_1
ι : Type u_2
f : α → ι
g : (Perm α)ᵈᵐᵃ
⊢ g ∈ stabilizer (Perm α)ᵈᵐᵃ f ↔ f ∘ ⇑(mk.symm g) = f
state_after: α : Type u_1
ι : Type u_2
f : α → ι
g : (Perm α)ᵈᵐᵃ
⊢ g • f = f ↔ f ∘ ⇑(mk.symm g) = f
tactic: simp only [MulAction.mem_stabilizer_iff]
state_before: α : Type u_1
ι : Type u_2
f : α → ι
g : (Perm α)ᵈᵐᵃ
⊢ g • f = f ↔ f ∘ ⇑(mk.symm g) = f
state_after: no goals
tactic: rfl
Theorem: map_mul_right_nhds_one
File: Mathlib/Topology/Algebra/Group/Basic.lean

Proof steps:
state_before: G : Type w
H : Type x
α : Type u
β : Type v
inst✝³ : TopologicalSpace G
inst✝² : Group G
inst✝¹ : TopologicalGroup G
inst✝ : TopologicalSpace α
f : α → G
s : Set α
x✝ : α
x : G
⊢ map (fun x_1 => x_1 * x) (𝓝 1) = 𝓝 x
state_after: no goals
tactic: simp
Theorem: Matroid.basis_iff'
File: Mathlib/Data/Matroid/Basic.lean

Proof steps:
state_before: α : Type u_1
M : Matroid α
B I J X Y : Set α
e : α
⊢ M.Basis I X ↔ (M.Indep I ∧ I ⊆ X ∧ ∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X → I = J) ∧ X ⊆ M.E
state_after: no goals
tactic: simp [Basis, mem_maximals_setOf_iff, and_assoc, and_congr_left_iff, and_imp,
    and_congr_left_iff, and_congr_right_iff, @Imp.swap (_ ⊆ X)]
Theorem: Nat.dvd_iff_dvd_digits_sum
File: Mathlib/Data/Nat/Digits.lean

Proof steps:
state_before: n✝ b b' : ℕ
h : b' % b = 1
n : ℕ
⊢ b ∣ n ↔ b ∣ (b'.digits n).sum
state_after: n✝ b b' : ℕ
h : b' % b = 1
n : ℕ
⊢ b ∣ n ↔ b ∣ ofDigits 1 (b'.digits n)
tactic: rw [← ofDigits_one]
state_before: n✝ b b' : ℕ
h : b' % b = 1
n : ℕ
⊢ b ∣ n ↔ b ∣ ofDigits 1 (b'.digits n)
state_after: n✝ b b' : ℕ
h : b' % b = 1
n : ℕ
⊢ b ∣ ofDigits b' (b'.digits n) ↔ b ∣ ofDigits 1 (b'.digits n)
tactic: conv_lhs => rw [← ofDigits_digits b' n]
state_before: n✝ b b' : ℕ
h : b' % b = 1
n : ℕ
⊢ b ∣ ofDigits b' (b'.digits n) ↔ b ∣ ofDigits 1 (b'.digits n)
state_after: no goals
tactic: rw [Nat.dvd_iff_mod_eq_zero, Nat.dvd_iff_mod_eq_zero, ofDigits_mod, h]
Theorem: Nat.and_two_pow
File: Mathlib/Data/Nat/Bitwise.lean

Proof steps:
state_before: n i : ℕ
⊢ n &&& 2 ^ i = (n.testBit i).toNat * 2 ^ i
state_after: n i j : ℕ
⊢ (n &&& 2 ^ i).testBit j = ((n.testBit i).toNat * 2 ^ i).testBit j
tactic: refine eq_of_testBit_eq fun j => ?_
state_before: n i j : ℕ
⊢ (n &&& 2 ^ i).testBit j = ((n.testBit i).toNat * 2 ^ i).testBit j
state_after: case inl.false
n i : ℕ
h : n.testBit i = false
⊢ (n &&& 2 ^ i).testBit i = (false.toNat * 2 ^ i).testBit i

case inl.true
n i : ℕ
h : n.testBit i = true
⊢ (n &&& 2 ^ i).testBit i = (true.toNat * 2 ^ i).testBit i

case inr.false
n i j : ℕ
hij : i ≠ j
h : n.testBit i = false
⊢ (n &&& 2 ^ i).testBit j = (false.toNat * 2 ^ i).testBit j

case inr.true
n i j : ℕ
hij : i ≠ j
h : n.testBit i = true
⊢ (n &&& 2 ^ i).testBit j = (true.toNat * 2 ^ i).testBit j
tactic: obtain rfl | hij := Decidable.eq_or_ne i j <;> cases' h : n.testBit i
Theorem: CategoryTheory.RanIsSheafOfIsCocontinuous.fac'
File: Mathlib/CategoryTheory/Sites/CoverLifting.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{u_4, u_2} D
G : C ⥤ D
A : Type w
inst✝² : Category.{w', w} A
J : GrothendieckTopology C
K : GrothendieckTopology D
inst✝¹ : G.IsCocontinuous J K
inst✝ : ∀ (F : Cᵒᵖ ⥤ A), G.op.HasPointwiseRightKanExtension F
F : Cᵒᵖ ⥤ A
hF : Presheaf.IsSheaf J F
R : Dᵒᵖ ⥤ A
α : G.op ⋙ R ⟶ F
hR : (Functor.RightExtension.mk R α).IsPointwiseRightKanExtension
X : D
S : K.Cover X
s : Multifork (S.index R)
j : StructuredArrow (op X) G.op
⊢ lift hF hR s ≫ R.map j.hom ≫ α.app j.right = liftAux hF α s j.hom.unop
state_after: no goals
tactic: apply IsLimit.fac
Theorem: Monoid.PushoutI.lift_base
File: Mathlib/GroupTheory/PushoutI.lean

Proof steps:
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Monoid (G i)
inst✝ : Monoid H
φ : (i : ι) → H →* G i
f : (i : ι) → G i →* K
k : H →* K
hf : ∀ (i : ι), (f i).comp (φ i) = k
g : H
⊢ (lift f k hf) ((base φ) g) = k g
state_after: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Monoid (G i)
inst✝ : Monoid H
φ : (i : ι) → H →* G i
f : (i : ι) → G i →* K
k : H →* K
hf : ∀ (i : ι), (f i).comp (φ i) = k
g : H
⊢ ((con φ).lift (Coprod.lift (CoprodI.lift f) k) ⋯) (((con φ).mk'.comp inr) g) = k g
tactic: delta PushoutI lift base
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Monoid (G i)
inst✝ : Monoid H
φ : (i : ι) → H →* G i
f : (i : ι) → G i →* K
k : H →* K
hf : ∀ (i : ι), (f i).comp (φ i) = k
g : H
⊢ ((con φ).lift (Coprod.lift (CoprodI.lift f) k) ⋯) (((con φ).mk'.comp inr) g) = k g
state_after: no goals
tactic: simp only [MonoidHom.coe_comp, Con.coe_mk', comp_apply, Con.lift_coe, lift_apply_inr]
Theorem: Subgroup.map_le_map_iff'
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

Proof steps:
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
f✝ f : G →* N
H K : Subgroup G
⊢ map f H ≤ map f K ↔ H ⊔ f.ker ≤ K ⊔ f.ker
state_after: no goals
tactic: simp only [map_le_map_iff, sup_le_iff, le_sup_right, and_true_iff]
Theorem: posMulReflectLT_iff_contravariant_pos
File: Mathlib/Algebra/Order/GroupWithZero/Unbundled.lean

Proof steps:
state_before: α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : ContravariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x < x_1
a : { x // 0 ≤ x }
b c : α
h : ↑a * b < ↑a * c
⊢ b < c
state_after: case inl
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : ContravariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x < x_1
a : { x // 0 ≤ x }
b c : α
h : ↑a * b < ↑a * c
ha : 0 = ↑a
⊢ b < c

case inr
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : ContravariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x < x_1
a : { x // 0 ≤ x }
b c : α
h : ↑a * b < ↑a * c
ha : 0 < ↑a
⊢ b < c
tactic: obtain ha | ha := a.prop.eq_or_lt
Theorem: HomologicalComplex₂.total.map_comp
File: Mathlib/Algebra/Homology/TotalComplex.lean

Proof steps:
state_before: C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
inst✝⁵ : Preadditive C
I₁ : Type u_2
I₂ : Type u_3
I₁₂ : Type u_4
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
K L M : HomologicalComplex₂ C c₁ c₂
φ : K ⟶ L
e : K ≅ L
ψ : L ⟶ M
c₁₂ : ComplexShape I₁₂
inst✝⁴ : DecidableEq I₁₂
inst✝³ : TotalComplexShape c₁ c₂ c₁₂
inst✝² : K.HasTotal c₁₂
inst✝¹ : L.HasTotal c₁₂
inst✝ : M.HasTotal c₁₂
⊢ map (φ ≫ ψ) c₁₂ = map φ c₁₂ ≫ map ψ c₁₂
state_after: case a
C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
inst✝⁵ : Preadditive C
I₁ : Type u_2
I₂ : Type u_3
I₁₂ : Type u_4
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
K L M : HomologicalComplex₂ C c₁ c₂
φ : K ⟶ L
e : K ≅ L
ψ : L ⟶ M
c₁₂ : ComplexShape I₁₂
inst✝⁴ : DecidableEq I₁₂
inst✝³ : TotalComplexShape c₁ c₂ c₁₂
inst✝² : K.HasTotal c₁₂
inst✝¹ : L.HasTotal c₁₂
inst✝ : M.HasTotal c₁₂
⊢ (HomologicalComplex.forget C c₁₂).map (map (φ ≫ ψ) c₁₂) =
    (HomologicalComplex.forget C c₁₂).map (map φ c₁₂ ≫ map ψ c₁₂)
tactic: apply (HomologicalComplex.forget _ _).map_injective
state_before: case a
C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
inst✝⁵ : Preadditive C
I₁ : Type u_2
I₂ : Type u_3
I₁₂ : Type u_4
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
K L M : HomologicalComplex₂ C c₁ c₂
φ : K ⟶ L
e : K ≅ L
ψ : L ⟶ M
c₁₂ : ComplexShape I₁₂
inst✝⁴ : DecidableEq I₁₂
inst✝³ : TotalComplexShape c₁ c₂ c₁₂
inst✝² : K.HasTotal c₁₂
inst✝¹ : L.HasTotal c₁₂
inst✝ : M.HasTotal c₁₂
⊢ (HomologicalComplex.forget C c₁₂).map (map (φ ≫ ψ) c₁₂) =
    (HomologicalComplex.forget C c₁₂).map (map φ c₁₂ ≫ map ψ c₁₂)
state_after: no goals
tactic: exact GradedObject.mapMap_comp (toGradedObjectMap φ) (toGradedObjectMap ψ) _
Theorem: AddMonoidHom.cancel_left
File: Mathlib/Algebra/Group/Hom/Defs.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
H : Type u_8
F : Type u_9
inst✝² : MulOneClass M
inst✝¹ : MulOneClass N
inst✝ : MulOneClass P
g : N →* P
f₁ f₂ : M →* N
hg : Function.Injective ⇑g
h : g.comp f₁ = g.comp f₂
x : M
⊢ g (f₁ x) = g (f₂ x)
state_after: no goals
tactic: rw [← MonoidHom.comp_apply, h, MonoidHom.comp_apply]
Theorem: LinearMap.polyCharpoly_coeff_nilRankAux_ne_zero
File: Mathlib/Algebra/Module/LinearMap/Polynomial.lean

Proof steps:
state_before: R : Type u_1
L : Type u_2
M : Type u_3
n : Type u_4
ι : Type u_5
ι' : Type u_6
ιM : Type u_7
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup L
inst✝¹⁰ : Module R L
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
φ : L →ₗ[R] Module.End R M
inst✝⁷ : Fintype ι
inst✝⁶ : Fintype ι'
inst✝⁵ : Fintype ιM
inst✝⁴ : DecidableEq ι
inst✝³ : DecidableEq ι'
inst✝² : Module.Free R M
inst✝¹ : Module.Finite R M
b : Basis ι R L
inst✝ : Nontrivial R
⊢ (φ.polyCharpoly b).coeff (φ.nilRankAux b) ≠ 0
state_after: R : Type u_1
L : Type u_2
M : Type u_3
n : Type u_4
ι : Type u_5
ι' : Type u_6
ιM : Type u_7
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup L
inst✝¹⁰ : Module R L
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
φ : L →ₗ[R] Module.End R M
inst✝⁷ : Fintype ι
inst✝⁶ : Fintype ι'
inst✝⁵ : Fintype ιM
inst✝⁴ : DecidableEq ι
inst✝³ : DecidableEq ι'
inst✝² : Module.Free R M
inst✝¹ : Module.Finite R M
b : Basis ι R L
inst✝ : Nontrivial R
⊢ φ.polyCharpoly b ≠ 0
tactic: apply Polynomial.trailingCoeff_nonzero_iff_nonzero.mpr
state_before: R : Type u_1
L : Type u_2
M : Type u_3
n : Type u_4
ι : Type u_5
ι' : Type u_6
ιM : Type u_7
inst✝¹² : CommRing R
inst✝¹¹ : AddCommGroup L
inst✝¹⁰ : Module R L
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
φ : L →ₗ[R] Module.End R M
inst✝⁷ : Fintype ι
inst✝⁶ : Fintype ι'
inst✝⁵ : Fintype ιM
inst✝⁴ : DecidableEq ι
inst✝³ : DecidableEq ι'
inst✝² : Module.Free R M
inst✝¹ : Module.Finite R M
b : Basis ι R L
inst✝ : Nontrivial R
⊢ φ.polyCharpoly b ≠ 0
state_after: no goals
tactic: apply polyCharpoly_ne_zero
Theorem: Set.ite_eq_of_subset_left
File: Mathlib/Data/Set/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁✝ s₂✝ t✝ t₁ t₂ u t s₁ s₂ : Set α
h : s₁ ⊆ s₂
⊢ t.ite s₁ s₂ = s₁ ∪ s₂ \ t
state_after: case h
α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁✝ s₂✝ t✝ t₁ t₂ u t s₁ s₂ : Set α
h : s₁ ⊆ s₂
x : α
⊢ x ∈ t.ite s₁ s₂ ↔ x ∈ s₁ ∪ s₂ \ t
tactic: ext x
state_before: case h
α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁✝ s₂✝ t✝ t₁ t₂ u t s₁ s₂ : Set α
h : s₁ ⊆ s₂
x : α
⊢ x ∈ t.ite s₁ s₂ ↔ x ∈ s₁ ∪ s₂ \ t
state_after: no goals
tactic: by_cases hx : x ∈ t <;> simp [*, Set.ite, or_iff_right_of_imp (@h x)]
Theorem: EisensteinSeries.pairwise_disjoint_gammaSet
File: Mathlib/NumberTheory/ModularForms/EisensteinSeries/Defs.lean

Proof steps:
state_before: N : ℕ
a : Fin 2 → ZMod N
⊢ Pairwise (Disjoint on gammaSet N)
state_after: N : ℕ
a u v : Fin 2 → ZMod N
huv : u ≠ v
⊢ (Disjoint on gammaSet N) u v
tactic: refine fun u v huv ↦ ?_
state_before: N : ℕ
a u v : Fin 2 → ZMod N
huv : u ≠ v
⊢ (Disjoint on gammaSet N) u v
state_after: N : ℕ
a u v : Fin 2 → ZMod N
huv : ¬(Disjoint on gammaSet N) u v
⊢ u = v
tactic: contrapose! huv
state_before: N : ℕ
a u v : Fin 2 → ZMod N
huv : ¬(Disjoint on gammaSet N) u v
⊢ u = v
state_after: case intro
N : ℕ
a u v : Fin 2 → ZMod N
huv : ¬(Disjoint on gammaSet N) u v
f : Fin 2 → ℤ
hf : f ∈ gammaSet N u ∧ f ∈ gammaSet N v
⊢ u = v
tactic: obtain ⟨f, hf⟩ := Set.not_disjoint_iff.mp huv
state_before: case intro
N : ℕ
a u v : Fin 2 → ZMod N
huv : ¬(Disjoint on gammaSet N) u v
f : Fin 2 → ℤ
hf : f ∈ gammaSet N u ∧ f ∈ gammaSet N v
⊢ u = v
state_after: no goals
tactic: exact hf.1.1.symm.trans hf.2.1
Theorem: MeasureTheory.locallyIntegrableOn_iff_locallyIntegrable_restrict
File: Mathlib/MeasureTheory/Function/LocallyIntegrable.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
E : Type u_3
F : Type u_4
R : Type u_5
inst✝⁶ : MeasurableSpace X
inst✝⁵ : TopologicalSpace X
inst✝⁴ : MeasurableSpace Y
inst✝³ : TopologicalSpace Y
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
f g : X → E
μ : Measure X
s : Set X
inst✝ : OpensMeasurableSpace X
hs : IsClosed s
⊢ LocallyIntegrableOn f s μ ↔ LocallyIntegrable f (μ.restrict s)
state_after: X : Type u_1
Y : Type u_2
E : Type u_3
F : Type u_4
R : Type u_5
inst✝⁶ : MeasurableSpace X
inst✝⁵ : TopologicalSpace X
inst✝⁴ : MeasurableSpace Y
inst✝³ : TopologicalSpace Y
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
f g : X → E
μ : Measure X
s : Set X
inst✝ : OpensMeasurableSpace X
hs : IsClosed s
hf : LocallyIntegrableOn f s μ
x : X
⊢ IntegrableAtFilter f (𝓝 x) (μ.restrict s)
tactic: refine ⟨fun hf x => ?_, locallyIntegrableOn_of_locallyIntegrable_restrict⟩
state_before: X : Type u_1
Y : Type u_2
E : Type u_3
F : Type u_4
R : Type u_5
inst✝⁶ : MeasurableSpace X
inst✝⁵ : TopologicalSpace X
inst✝⁴ : MeasurableSpace Y
inst✝³ : TopologicalSpace Y
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
f g : X → E
μ : Measure X
s : Set X
inst✝ : OpensMeasurableSpace X
hs : IsClosed s
hf : LocallyIntegrableOn f s μ
x : X
⊢ IntegrableAtFilter f (𝓝 x) (μ.restrict s)
state_after: case pos
X : Type u_1
Y : Type u_2
E : Type u_3
F : Type u_4
R : Type u_5
inst✝⁶ : MeasurableSpace X
inst✝⁵ : TopologicalSpace X
inst✝⁴ : MeasurableSpace Y
inst✝³ : TopologicalSpace Y
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
f g : X → E
μ : Measure X
s : Set X
inst✝ : OpensMeasurableSpace X
hs : IsClosed s
hf : LocallyIntegrableOn f s μ
x : X
h : x ∈ s
⊢ IntegrableAtFilter f (𝓝 x) (μ.restrict s)

case neg
X : Type u_1
Y : Type u_2
E : Type u_3
F : Type u_4
R : Type u_5
inst✝⁶ : MeasurableSpace X
inst✝⁵ : TopologicalSpace X
inst✝⁴ : MeasurableSpace Y
inst✝³ : TopologicalSpace Y
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
f g : X → E
μ : Measure X
s : Set X
inst✝ : OpensMeasurableSpace X
hs : IsClosed s
hf : LocallyIntegrableOn f s μ
x : X
h : x ∉ s
⊢ IntegrableAtFilter f (𝓝 x) (μ.restrict s)
tactic: by_cases h : x ∈ s
Theorem: AlgebraicGeometry.StructureSheaf.toStalk_stalkSpecializes
File: Mathlib/AlgebraicGeometry/StructureSheaf.lean

Proof steps:
state_before: R✝ : Type u
inst✝¹ : CommRing R✝
R : Type u_1
inst✝ : CommRing R
x y : PrimeSpectrum R
h : x ⤳ y
⊢ toStalk R y ≫ (structureSheaf R).presheaf.stalkSpecializes h = toStalk R x
state_after: R✝ : Type u
inst✝¹ : CommRing R✝
R : Type u_1
inst✝ : CommRing R
x y : PrimeSpectrum R
h : x ⤳ y
⊢ (toOpen R ⊤ ≫ (structureSheaf R).presheaf.germ ⟨y, True.intro⟩) ≫ (structureSheaf R).presheaf.stalkSpecializes h =
    toOpen R ⊤ ≫ (structureSheaf R).presheaf.germ ⟨x, True.intro⟩
tactic: dsimp [toStalk]
state_before: R✝ : Type u
inst✝¹ : CommRing R✝
R : Type u_1
inst✝ : CommRing R
x y : PrimeSpectrum R
h : x ⤳ y
⊢ (toOpen R ⊤ ≫ (structureSheaf R).presheaf.germ ⟨y, True.intro⟩) ≫ (structureSheaf R).presheaf.stalkSpecializes h =
    toOpen R ⊤ ≫ (structureSheaf R).presheaf.germ ⟨x, True.intro⟩
state_after: no goals
tactic: simp [-toOpen_germ]
Theorem: Set.ite_inter
File: Mathlib/Data/Set/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s✝ s₁✝ s₂✝ t✝ t₁ t₂ u t s₁ s₂ s : Set α
⊢ t.ite (s₁ ∩ s) (s₂ ∩ s) = t.ite s₁ s₂ ∩ s
state_after: no goals
tactic: rw [ite_inter_inter, ite_same]
Theorem: Monotone.tendsto_leftLim_within
File: Mathlib/Topology/Order/LeftRightLim.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝⁵ : LinearOrder α
inst✝⁴ : ConditionallyCompleteLinearOrder β
inst✝³ : TopologicalSpace β
inst✝² : OrderTopology β
f : α → β
hf : Monotone f
x✝ y : α
inst✝¹ : TopologicalSpace α
inst✝ : OrderTopology α
x : α
⊢ Tendsto f (𝓝[<] x) (𝓝[≤] leftLim f x)
state_after: α : Type u_1
β : Type u_2
inst✝⁵ : LinearOrder α
inst✝⁴ : ConditionallyCompleteLinearOrder β
inst✝³ : TopologicalSpace β
inst✝² : OrderTopology β
f : α → β
hf : Monotone f
x✝ y : α
inst✝¹ : TopologicalSpace α
inst✝ : OrderTopology α
x : α
⊢ ∀ᶠ (x_1 : α) in 𝓝[<] x, f x_1 ∈ Iic (leftLim f x)
tactic: apply tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within f (hf.tendsto_leftLim x)
state_before: α : Type u_1
β : Type u_2
inst✝⁵ : LinearOrder α
inst✝⁴ : ConditionallyCompleteLinearOrder β
inst✝³ : TopologicalSpace β
inst✝² : OrderTopology β
f : α → β
hf : Monotone f
x✝ y : α
inst✝¹ : TopologicalSpace α
inst✝ : OrderTopology α
x : α
⊢ ∀ᶠ (x_1 : α) in 𝓝[<] x, f x_1 ∈ Iic (leftLim f x)
state_after: no goals
tactic: filter_upwards [@self_mem_nhdsWithin _ _ x (Iio x)] with y hy using hf.le_leftLim hy