ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: CategoryTheory.MonoidalCategory.whiskerRight_tensor
File: Mathlib/CategoryTheory/Monoidal/Category.lean

Proof steps:
state_before: C : Type u
𝒞 : Category.{v, u} C
inst✝ : MonoidalCategory C
X X' : C
f : X ⟶ X'
Y Z : C
⊢ f ▷ (Y ⊗ Z) = (α_ X Y Z).inv ≫ f ▷ Y ▷ Z ≫ (α_ X' Y Z).hom
state_after: C : Type u
𝒞 : Category.{v, u} C
inst✝ : MonoidalCategory C
X X' : C
f : X ⟶ X'
Y Z : C
⊢ f ⊗ 𝟙 (Y ⊗ Z) = (α_ X Y Z).inv ≫ ((f ⊗ 𝟙 Y) ⊗ 𝟙 Z) ≫ (α_ X' Y Z).hom
tactic: simp only [← id_tensorHom, ← tensorHom_id]
state_before: C : Type u
𝒞 : Category.{v, u} C
inst✝ : MonoidalCategory C
X X' : C
f : X ⟶ X'
Y Z : C
⊢ f ⊗ 𝟙 (Y ⊗ Z) = (α_ X Y Z).inv ≫ ((f ⊗ 𝟙 Y) ⊗ 𝟙 Z) ≫ (α_ X' Y Z).hom
state_after: C : Type u
𝒞 : Category.{v, u} C
inst✝ : MonoidalCategory C
X X' : C
f : X ⟶ X'
Y Z : C
⊢ f ⊗ 𝟙 (Y ⊗ Z) = (α_ X Y Z).inv ≫ (α_ X Y Z).hom ≫ (f ⊗ 𝟙 Y ⊗ 𝟙 Z)
tactic: rw [associator_naturality]
state_before: C : Type u
𝒞 : Category.{v, u} C
inst✝ : MonoidalCategory C
X X' : C
f : X ⟶ X'
Y Z : C
⊢ f ⊗ 𝟙 (Y ⊗ Z) = (α_ X Y Z).inv ≫ (α_ X Y Z).hom ≫ (f ⊗ 𝟙 Y ⊗ 𝟙 Z)
state_after: no goals
tactic: simp [tensor_id]
Theorem: Finset.noncommProd_eq_pow_card
File: Mathlib/Data/Finset/NoncommProd.lean

Proof steps:
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
f✝ : α → β → β
op : α → α → α
inst✝² : Monoid β
inst✝¹ : Monoid γ
inst✝ : FunLike F β γ
s : Finset α
f : α → β
comm : (↑s).Pairwise fun a b => Commute (f a) (f b)
m : β
h : ∀ x ∈ s, f x = m
⊢ s.noncommProd f comm = m ^ s.card
state_after: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
f✝ : α → β → β
op : α → α → α
inst✝² : Monoid β
inst✝¹ : Monoid γ
inst✝ : FunLike F β γ
s : Finset α
f : α → β
comm : (↑s).Pairwise fun a b => Commute (f a) (f b)
m : β
h : ∀ x ∈ s, f x = m
⊢ m ^ Multiset.card (Multiset.map f s.val) = m ^ s.card

F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
f✝ : α → β → β
op : α → α → α
inst✝² : Monoid β
inst✝¹ : Monoid γ
inst✝ : FunLike F β γ
s : Finset α
f : α → β
comm : (↑s).Pairwise fun a b => Commute (f a) (f b)
m : β
h : ∀ x ∈ s, f x = m
⊢ ∀ x ∈ Multiset.map f s.val, x = m
tactic: rw [noncommProd, Multiset.noncommProd_eq_pow_card _ _ m]
Theorem: disjoint_iSup_iff
File: Mathlib/Order/CompleteBooleanAlgebra.lean

Proof steps:
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
inst✝ : Frame α
s t : Set α
a b : α
f : ι → α
⊢ Disjoint a (⨆ i, f i) ↔ ∀ (i : ι), Disjoint a (f i)
state_after: no goals
tactic: simpa only [disjoint_comm] using @iSup_disjoint_iff
Theorem: Set.range_unique
File: Mathlib/Data/Set/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : ι → α
s t : Set α
h : Unique ι
⊢ range f = {f default}
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : ι → α
s t : Set α
h : Unique ι
x : α
⊢ x ∈ range f ↔ x ∈ {f default}
tactic: ext x
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : ι → α
s t : Set α
h : Unique ι
x : α
⊢ x ∈ range f ↔ x ∈ {f default}
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : ι → α
s t : Set α
h : Unique ι
x : α
⊢ (∃ y, f y = x) ↔ x ∈ {f default}
tactic: rw [mem_range]
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : ι → α
s t : Set α
h : Unique ι
x : α
⊢ (∃ y, f y = x) ↔ x ∈ {f default}
state_after: case h.mp
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : ι → α
s t : Set α
h : Unique ι
x : α
⊢ (∃ y, f y = x) → x ∈ {f default}

case h.mpr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : ι → α
s t : Set α
h : Unique ι
x : α
⊢ x ∈ {f default} → ∃ y, f y = x
tactic: constructor
Theorem: Filter.inf_neBot_iff_frequently_left
File: Mathlib/Order/Filter/Bases.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f g : Filter α
⊢ (f ⊓ g).NeBot ↔ ∀ {p : α → Prop}, (∀ᶠ (x : α) in f, p x) → ∃ᶠ (x : α) in g, p x
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f g : Filter α
⊢ (∀ ⦃s : Set α⦄, s ∈ f → ∀ ⦃s' : Set α⦄, s' ∈ g → (s ∩ s').Nonempty) ↔
    ∀ {p : α → Prop}, (∀ᶠ (x : α) in f, p x) → ∀ {U : Set α}, U ∈ g → ∃ x, p x ∧ x ∈ U
tactic: simp only [inf_neBot_iff, frequently_iff, and_comm]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f g : Filter α
⊢ (∀ ⦃s : Set α⦄, s ∈ f → ∀ ⦃s' : Set α⦄, s' ∈ g → (s ∩ s').Nonempty) ↔
    ∀ {p : α → Prop}, (∀ᶠ (x : α) in f, p x) → ∀ {U : Set α}, U ∈ g → ∃ x, p x ∧ x ∈ U
state_after: no goals
tactic: rfl
Theorem: ContinuousMap.spectrum_eq_range
File: Mathlib/Topology/ContinuousFunction/Units.lean

Proof steps:
state_before: X : Type u_1
M : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : NormedField 𝕜
inst✝³ : NormedDivisionRing R
inst✝² : Algebra 𝕜 R
inst✝¹ : CompleteSpace R
inst✝ : CompleteSpace 𝕜
f : C(X, 𝕜)
⊢ spectrum 𝕜 f = Set.range ⇑f
state_after: X : Type u_1
M : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : NormedField 𝕜
inst✝³ : NormedDivisionRing R
inst✝² : Algebra 𝕜 R
inst✝¹ : CompleteSpace R
inst✝ : CompleteSpace 𝕜
f : C(X, 𝕜)
⊢ ⇑(RingHom.id 𝕜) ⁻¹' Set.range ⇑f = Set.range ⇑f
tactic: rw [spectrum_eq_preimage_range, Algebra.id.map_eq_id]
state_before: X : Type u_1
M : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : NormedField 𝕜
inst✝³ : NormedDivisionRing R
inst✝² : Algebra 𝕜 R
inst✝¹ : CompleteSpace R
inst✝ : CompleteSpace 𝕜
f : C(X, 𝕜)
⊢ ⇑(RingHom.id 𝕜) ⁻¹' Set.range ⇑f = Set.range ⇑f
state_after: no goals
tactic: exact Set.preimage_id
Theorem: Submodule.colon_bot
File: Mathlib/RingTheory/Ideal/Colon.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
M' : Type u_3
F : Type u_4
G : Type u_5
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
N N₁ N₂ P P₁ P₂ : Submodule R M
⊢ ⊥.colon N = N.annihilator
state_after: no goals
tactic: simp_rw [SetLike.ext_iff, mem_colon, mem_annihilator, mem_bot, forall_const]
Theorem: AddOreLocalization.vadd_zero_oreSub_zero_vadd
File: Mathlib/RingTheory/OreLocalization/Basic.lean

Proof steps:
state_before: R : Type u_1
R' : Type u_2
M : Type u_3
X : Type u_4
inst✝¹² : Monoid M
S : Submonoid M
inst✝¹¹ : OreSet S
inst✝¹⁰ : MulAction M X
inst✝⁹ : SMul R X
inst✝⁸ : SMul R M
inst✝⁷ : IsScalarTower R M M
inst✝⁶ : IsScalarTower R M X
inst✝⁵ : SMul R' X
inst✝⁴ : SMul R' M
inst✝³ : IsScalarTower R' M M
inst✝² : IsScalarTower R' M X
inst✝¹ : SMul R R'
inst✝ : IsScalarTower R R' M
r : R
x : OreLocalization S X
⊢ (r • 1 /ₒ 1) • x = r • x
state_after: no goals
tactic: rw [oreDiv_one_smul, smul_one_smul]
Theorem: SimplexCategory.image_eq
File: Mathlib/AlgebraicTopology/SimplexCategory.lean

Proof steps:
state_before: Δ Δ' Δ'' : SimplexCategory
φ : Δ ⟶ Δ''
e : Δ ⟶ Δ'
inst✝¹ : Epi e
i : Δ' ⟶ Δ''
inst✝ : Mono i
fac : e ≫ i = φ
⊢ image φ = Δ'
state_after: Δ Δ' Δ'' : SimplexCategory
φ : Δ ⟶ Δ''
e : Δ ⟶ Δ'
inst✝¹ : Epi e
i : Δ' ⟶ Δ''
inst✝ : Mono i
fac : e ≫ i = φ
this : StrongEpi e
⊢ image φ = Δ'
tactic: haveI := strongEpi_of_epi e
state_before: Δ Δ' Δ'' : SimplexCategory
φ : Δ ⟶ Δ''
e : Δ ⟶ Δ'
inst✝¹ : Epi e
i : Δ' ⟶ Δ''
inst✝ : Mono i
fac : e ≫ i = φ
this : StrongEpi e
⊢ image φ = Δ'
state_after: Δ Δ' Δ'' : SimplexCategory
φ : Δ ⟶ Δ''
e✝ : Δ ⟶ Δ'
inst✝¹ : Epi e✝
i : Δ' ⟶ Δ''
inst✝ : Mono i
fac : e✝ ≫ i = φ
this : StrongEpi e✝
e : Δ' ≅ image φ := image.isoStrongEpiMono e✝ i fac
⊢ image φ = Δ'
tactic: let e := image.isoStrongEpiMono e i fac
state_before: Δ Δ' Δ'' : SimplexCategory
φ : Δ ⟶ Δ''
e✝ : Δ ⟶ Δ'
inst✝¹ : Epi e✝
i : Δ' ⟶ Δ''
inst✝ : Mono i
fac : e✝ ≫ i = φ
this : StrongEpi e✝
e : Δ' ≅ image φ := image.isoStrongEpiMono e✝ i fac
⊢ image φ = Δ'
state_after: case a
Δ Δ' Δ'' : SimplexCategory
φ : Δ ⟶ Δ''
e✝ : Δ ⟶ Δ'
inst✝¹ : Epi e✝
i : Δ' ⟶ Δ''
inst✝ : Mono i
fac : e✝ ≫ i = φ
this : StrongEpi e✝
e : Δ' ≅ image φ := image.isoStrongEpiMono e✝ i fac
⊢ (image φ).len = Δ'.len
tactic: ext
state_before: case a
Δ Δ' Δ'' : SimplexCategory
φ : Δ ⟶ Δ''
e✝ : Δ ⟶ Δ'
inst✝¹ : Epi e✝
i : Δ' ⟶ Δ''
inst✝ : Mono i
fac : e✝ ≫ i = φ
this : StrongEpi e✝
e : Δ' ≅ image φ := image.isoStrongEpiMono e✝ i fac
⊢ (image φ).len = Δ'.len
state_after: no goals
tactic: exact
    le_antisymm (len_le_of_epi (inferInstance : Epi e.hom))
      (len_le_of_mono (inferInstance : Mono e.hom))
Theorem: Nat.gcd_self_sub_left
File: Mathlib/Data/Nat/GCD/Basic.lean

Proof steps:
state_before: m n : ℕ
h : m ≤ n
⊢ (n - m).gcd n = m.gcd n
state_after: m n : ℕ
h : m ≤ n
this : n - m + m = n
⊢ (n - m).gcd n = m.gcd n
tactic: have := Nat.sub_add_cancel h
state_before: m n : ℕ
h : m ≤ n
this : n - m + m = n
⊢ (n - m).gcd n = m.gcd n
state_after: m n : ℕ
h : m ≤ n
this : n - m + m = n
⊢ (n - m + m - m).gcd (n - m + m) = (n - m).gcd m
tactic: rw [gcd_comm m n, ← this, gcd_add_self_left (n - m) m]
state_before: m n : ℕ
h : m ≤ n
this : n - m + m = n
⊢ (n - m + m - m).gcd (n - m + m) = (n - m).gcd m
state_after: m n : ℕ
h : m ≤ n
this✝ : n - m + m = n
this : (n - m).gcd n = (n - m).gcd m
⊢ (n - m + m - m).gcd (n - m + m) = (n - m).gcd m
tactic: have : gcd (n - m) n = gcd (n - m) m := by
    nth_rw 2 [← Nat.add_sub_cancel' h]
    rw [gcd_add_self_right, gcd_comm]
state_before: m n : ℕ
h : m ≤ n
this✝ : n - m + m = n
this : (n - m).gcd n = (n - m).gcd m
⊢ (n - m + m - m).gcd (n - m + m) = (n - m).gcd m
state_after: no goals
tactic: convert this
Theorem: Polynomial.degree_natCast_le
File: Mathlib/Algebra/Polynomial/Degree/Definitions.lean

Proof steps:
state_before: R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
n : ℕ
⊢ (↑n).natDegree ≤ Zero.zero
state_after: no goals
tactic: simp
Theorem: Equiv.existsUnique_congr
File: Mathlib/Logic/Equiv/Defs.lean

Proof steps:
state_before: α : Sort u
β : Sort v
γ : Sort w
p : α → Prop
q : β → Prop
e : α ≃ β
h : ∀ (a : α), p a ↔ q (e a)
⊢ (∃! b, p (e.symm b)) ↔ ∃! b, q b
state_after: no goals
tactic: simp [h]
Theorem: Finsupp.add_eq_zero_iff
File: Mathlib/Data/Finsupp/Order.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : CanonicallyOrderedAddCommMonoid α
f✝ g✝ f g : ι →₀ α
⊢ f + g = 0 ↔ f = 0 ∧ g = 0
state_after: no goals
tactic: simp [DFunLike.ext_iff, forall_and]
Theorem: Polynomial.degree_normalize
File: Mathlib/Algebra/Polynomial/FieldDivision.lean

Proof steps:
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝¹ : Field R
p q : R[X]
inst✝ : DecidableEq R
⊢ (normalize p).degree = p.degree
state_after: no goals
tactic: simp
Theorem: CategoryTheory.NatTrans.ofSequence_app
File: Mathlib/CategoryTheory/Functor/OfSequence.lean

Proof steps:
state_before: C : Type u_1
inst✝ : Category.{?u.17202, u_1} C
F G : ℕ ⥤ C
app : (n : ℕ) → F.obj n ⟶ G.obj n
naturality : ∀ (n : ℕ), F.map (homOfLE ⋯) ≫ app (n + 1) = app n ≫ G.map (homOfLE ⋯)
⊢ ∀ ⦃X Y : ℕ⦄ (f : X ⟶ Y), F.map f ≫ app Y = app X ≫ G.map f
state_after: C : Type u_1
inst✝ : Category.{?u.17202, u_1} C
F G : ℕ ⥤ C
app : (n : ℕ) → F.obj n ⟶ G.obj n
naturality : ∀ (n : ℕ), F.map (homOfLE ⋯) ≫ app (n + 1) = app n ≫ G.map (homOfLE ⋯)
i j : ℕ
φ : i ⟶ j
⊢ F.map φ ≫ app j = app i ≫ G.map φ
tactic: intro i j φ
state_before: C : Type u_1
inst✝ : Category.{?u.17202, u_1} C
F G : ℕ ⥤ C
app : (n : ℕ) → F.obj n ⟶ G.obj n
naturality : ∀ (n : ℕ), F.map (homOfLE ⋯) ≫ app (n + 1) = app n ≫ G.map (homOfLE ⋯)
i j : ℕ
φ : i ⟶ j
⊢ F.map φ ≫ app j = app i ≫ G.map φ
state_after: case intro
C : Type u_1
inst✝ : Category.{?u.17202, u_1} C
F G : ℕ ⥤ C
app : (n : ℕ) → F.obj n ⟶ G.obj n
naturality : ∀ (n : ℕ), F.map (homOfLE ⋯) ≫ app (n + 1) = app n ≫ G.map (homOfLE ⋯)
i j : ℕ
φ : i ⟶ j
k : ℕ
hk : j = i + k
⊢ F.map φ ≫ app j = app i ≫ G.map φ
tactic: obtain ⟨k, hk⟩ := Nat.exists_eq_add_of_le (leOfHom φ)
state_before: case intro
C : Type u_1
inst✝ : Category.{?u.17202, u_1} C
F G : ℕ ⥤ C
app : (n : ℕ) → F.obj n ⟶ G.obj n
naturality : ∀ (n : ℕ), F.map (homOfLE ⋯) ≫ app (n + 1) = app n ≫ G.map (homOfLE ⋯)
i j : ℕ
φ : i ⟶ j
k : ℕ
hk : j = i + k
⊢ F.map φ ≫ app j = app i ≫ G.map φ
state_after: case intro
C : Type u_1
inst✝ : Category.{?u.17202, u_1} C
F G : ℕ ⥤ C
app : (n : ℕ) → F.obj n ⟶ G.obj n
naturality : ∀ (n : ℕ), F.map (homOfLE ⋯) ≫ app (n + 1) = app n ≫ G.map (homOfLE ⋯)
i j k : ℕ
hk : j = i + k
⊢ F.map (homOfLE ⋯) ≫ app j = app i ≫ G.map (homOfLE ⋯)
tactic: obtain rfl := Subsingleton.elim φ (homOfLE (by omega))
state_before: case intro
C : Type u_1
inst✝ : Category.{?u.17202, u_1} C
F G : ℕ ⥤ C
app : (n : ℕ) → F.obj n ⟶ G.obj n
naturality : ∀ (n : ℕ), F.map (homOfLE ⋯) ≫ app (n + 1) = app n ≫ G.map (homOfLE ⋯)
i j k : ℕ
hk : j = i + k
⊢ F.map (homOfLE ⋯) ≫ app j = app i ≫ G.map (homOfLE ⋯)
state_after: case intro
C : Type u_1
inst✝ : Category.{?u.17202, u_1} C
F G : ℕ ⥤ C
app : (n : ℕ) → F.obj n ⟶ G.obj n
naturality : ∀ (n : ℕ), F.map (homOfLE ⋯) ≫ app (n + 1) = app n ≫ G.map (homOfLE ⋯)
k : ℕ
⊢ ∀ ⦃i j : ℕ⦄ (hk : j = i + k), F.map (homOfLE ⋯) ≫ app j = app i ≫ G.map (homOfLE ⋯)
tactic: revert i j
state_before: case intro
C : Type u_1
inst✝ : Category.{?u.17202, u_1} C
F G : ℕ ⥤ C
app : (n : ℕ) → F.obj n ⟶ G.obj n
naturality : ∀ (n : ℕ), F.map (homOfLE ⋯) ≫ app (n + 1) = app n ≫ G.map (homOfLE ⋯)
k : ℕ
⊢ ∀ ⦃i j : ℕ⦄ (hk : j = i + k), F.map (homOfLE ⋯) ≫ app j = app i ≫ G.map (homOfLE ⋯)
state_after: no goals
tactic: induction k with
    | zero =>
        intro i j hk
        obtain rfl : j = i := by omega
        simp
    | succ k hk =>
        intro i j hk'
        obtain rfl : j = i + k + 1 := by omega
        simp only [← homOfLE_comp (show i ≤ i + k by omega) (show i + k ≤ i + k + 1 by omega),
          Functor.map_comp, assoc, naturality, reassoc_of% (hk rfl)]
Theorem: CategoryTheory.Subobject.factorThru_add
File: Mathlib/CategoryTheory/Subobject/FactorThru.lean

Proof steps:
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
X✝ Y✝ Z : C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : Preadditive C
X Y : C
P : Subobject Y
f g : X ⟶ Y
w : P.Factors (f + g)
wf : P.Factors f
wg : P.Factors g
⊢ P.factorThru (f + g) w = P.factorThru f wf + P.factorThru g wg
state_after: case h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
X✝ Y✝ Z : C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : Preadditive C
X Y : C
P : Subobject Y
f g : X ⟶ Y
w : P.Factors (f + g)
wf : P.Factors f
wg : P.Factors g
⊢ P.factorThru (f + g) w ≫ P.arrow = (P.factorThru f wf + P.factorThru g wg) ≫ P.arrow
tactic: ext
state_before: case h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
X✝ Y✝ Z : C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : Preadditive C
X Y : C
P : Subobject Y
f g : X ⟶ Y
w : P.Factors (f + g)
wf : P.Factors f
wg : P.Factors g
⊢ P.factorThru (f + g) w ≫ P.arrow = (P.factorThru f wf + P.factorThru g wg) ≫ P.arrow
state_after: no goals
tactic: simp
Theorem: Multiset.all_one_of_le_one_le_of_prod_eq_one
File: Mathlib/Algebra/Order/BigOperators/Group/Multiset.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : OrderedCommMonoid α
s t : Multiset α
a : α
⊢ ∀ (a : List α), (∀ x ∈ ⟦a⟧, 1 ≤ x) → prod ⟦a⟧ = 1 → ∀ x ∈ ⟦a⟧, x = 1
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : OrderedCommMonoid α
s t : Multiset α
a : α
⊢ ∀ (a : List α), (∀ x ∈ a, 1 ≤ x) → a.prod = 1 → ∀ x ∈ a, x = 1
tactic: simp only [quot_mk_to_coe, prod_coe, mem_coe]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : OrderedCommMonoid α
s t : Multiset α
a : α
⊢ ∀ (a : List α), (∀ x ∈ a, 1 ≤ x) → a.prod = 1 → ∀ x ∈ a, x = 1
state_after: no goals
tactic: exact fun l => List.all_one_of_le_one_le_of_prod_eq_one
Theorem: CauchyFilter.cauchyFilter_eq
File: Mathlib/Topology/UniformSpace/Completion.lean

Proof steps:
state_before: α : Type u_1
inst✝² : UniformSpace α
inst✝¹ : CompleteSpace α
inst✝ : T0Space α
f g : CauchyFilter α
⊢ lim ↑f = lim ↑g ↔ Inseparable f g
state_after: no goals
tactic: rw [← inseparable_iff_eq, inseparable_lim_iff]
Theorem: Matrix.IsHermitian.ext
File: Mathlib/LinearAlgebra/Matrix/Hermitian.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
A✝ : Matrix n n α
inst✝¹ : Star α
inst✝ : Star β
A : Matrix n n α
⊢ (∀ (i j : n), star (A j i) = A i j) → A.IsHermitian
state_after: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
A✝ : Matrix n n α
inst✝¹ : Star α
inst✝ : Star β
A : Matrix n n α
h : ∀ (i j : n), star (A j i) = A i j
⊢ A.IsHermitian
tactic: intro h
state_before: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
A✝ : Matrix n n α
inst✝¹ : Star α
inst✝ : Star β
A : Matrix n n α
h : ∀ (i j : n), star (A j i) = A i j
⊢ A.IsHermitian
state_after: case a
α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
A✝ : Matrix n n α
inst✝¹ : Star α
inst✝ : Star β
A : Matrix n n α
h : ∀ (i j : n), star (A j i) = A i j
i j : n
⊢ Aᴴ i j = A i j
tactic: ext i j
state_before: case a
α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
A✝ : Matrix n n α
inst✝¹ : Star α
inst✝ : Star β
A : Matrix n n α
h : ∀ (i j : n), star (A j i) = A i j
i j : n
⊢ Aᴴ i j = A i j
state_after: no goals
tactic: exact h i j
Theorem: CategoryTheory.Limits.isoZeroOfEpiZero_inv
File: Mathlib/CategoryTheory/Limits/Shapes/ZeroMorphisms.lean

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
X Y : C
h : Epi 0
⊢ 0 ≫ 0 ≫ 0 = 0 ≫ 𝟙 Y
state_after: no goals
tactic: simp
Theorem: IsLeftRegular.pow
File: Mathlib/Algebra/Regular/Pow.lean

Proof steps:
state_before: R : Type u_1
a b : R
inst✝ : Monoid R
n : ℕ
rla : IsLeftRegular a
⊢ IsLeftRegular (a ^ n)
state_after: no goals
tactic: simp only [IsLeftRegular, ← mul_left_iterate, rla.iterate n]
Theorem: geom_le
File: Mathlib/Analysis/SpecificLimits/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
u : ℕ → ℝ
c : ℝ
hc : 0 ≤ c
n : ℕ
h : ∀ k < n, c * u k ≤ u (k + 1)
⊢ c ^ n * u 0 ≤ u n
state_after: no goals
tactic: apply (monotone_mul_left_of_nonneg hc).seq_le_seq n _ _ h <;>
    simp [_root_.pow_succ', mul_assoc, le_refl]
Theorem: Orientation.inner_eq_zero_iff_eq_zero_or_eq_smul_rotation_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Rotation.lean

Proof steps:
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ ⟪x, y⟫_ℝ = 0 ↔ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y
state_after: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ x = 0 ∨ y = 0 ∨ o.oangle x y = ↑(π / 2) ∨ o.oangle x y = ↑(-π / 2) ↔ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y
tactic: rw [← o.eq_zero_or_oangle_eq_iff_inner_eq_zero]
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ x = 0 ∨ y = 0 ∨ o.oangle x y = ↑(π / 2) ∨ o.oangle x y = ↑(-π / 2) ↔ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y
state_after: case refine_1
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : x = 0 ∨ y = 0 ∨ o.oangle x y = ↑(π / 2) ∨ o.oangle x y = ↑(-π / 2)
⊢ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y

case refine_2
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y
⊢ x = 0 ∨ y = 0 ∨ o.oangle x y = ↑(π / 2) ∨ o.oangle x y = ↑(-π / 2)
tactic: refine ⟨fun h => ?_, fun h => ?_⟩
Theorem: LiouvilleWith.mul_rat_iff
File: Mathlib/NumberTheory/Liouville/LiouvilleWith.lean

Proof steps:
state_before: p q x y : ℝ
r : ℚ
m : ℤ
n : ℕ
hr : r ≠ 0
h : LiouvilleWith p (x * ↑r)
⊢ LiouvilleWith p x
state_after: no goals
tactic: simpa only [mul_assoc, ← Rat.cast_mul, mul_inv_cancel hr, Rat.cast_one, mul_one] using
      h.mul_rat (inv_ne_zero hr)
Theorem: CategoryTheory.Functor.isMittagLeffler_of_surjective
File: Mathlib/CategoryTheory/CofilteredSystem.lean

Proof steps:
state_before: J : Type u
inst✝ : Category.{u_1, u} J
F : J ⥤ Type v
i j✝ k✝ : J
s : Set (F.obj i)
h : ∀ ⦃i j : J⦄ (f : i ⟶ j), Function.Surjective (F.map f)
j k : J
g : k ⟶ j
⊢ range (F.map (𝟙 j)) ⊆ range (F.map g)
state_after: no goals
tactic: rw [map_id, types_id, range_id, (h g).range_eq]
Theorem: Polynomial.degree_add_div
File: Mathlib/Algebra/Polynomial/FieldDivision.lean

Proof steps:
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p q : R[X]
hq0 : q ≠ 0
hpq : q.degree ≤ p.degree
⊢ q.degree + (p / q).degree = p.degree
state_after: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p q : R[X]
hq0 : q ≠ 0
hpq : q.degree ≤ p.degree
this : (p % q).degree < (q * (p / q)).degree
⊢ q.degree + (p / q).degree = p.degree
tactic: have : degree (p % q) < degree (q * (p / q)) :=
    calc
      degree (p % q) < degree q := EuclideanDomain.mod_lt _ hq0
      _ ≤ _ := degree_le_mul_left _ (mt (div_eq_zero_iff hq0).1 (not_lt_of_ge hpq))
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p q : R[X]
hq0 : q ≠ 0
hpq : q.degree ≤ p.degree
this : (p % q).degree < (q * (p / q)).degree
⊢ q.degree + (p / q).degree = p.degree
state_after: no goals
tactic: conv_rhs =>
    rw [← EuclideanDomain.div_add_mod p q, degree_add_eq_left_of_degree_lt this, degree_mul]
Theorem: Sum.swap_swap
File: .lake/packages/batteries/Batteries/Data/Sum/Lemmas.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
x : α ⊕ β
⊢ x.swap.swap = x
state_after: no goals
tactic: cases x <;> rfl
Theorem: SetTheory.PGame.turnBound_ne_zero_of_left_move
File: Mathlib/SetTheory/Game/State.lean

Proof steps:
state_before: S : Type u
inst✝ : State S
s t : S
m : t ∈ l s
⊢ turnBound s ≠ 0
state_after: S : Type u
inst✝ : State S
s t : S
m : t ∈ l s
h : turnBound s = 0
⊢ False
tactic: intro h
state_before: S : Type u
inst✝ : State S
s t : S
m : t ∈ l s
h : turnBound s = 0
⊢ False
state_after: S : Type u
inst✝ : State S
s t✝ : S
m : t✝ ∈ l s
h : turnBound s = 0
t : turnBound t✝ < turnBound s
⊢ False
tactic: have t := left_bound m
state_before: S : Type u
inst✝ : State S
s t✝ : S
m : t✝ ∈ l s
h : turnBound s = 0
t : turnBound t✝ < turnBound s
⊢ False
state_after: S : Type u
inst✝ : State S
s t✝ : S
m : t✝ ∈ l s
h : turnBound s = 0
t : turnBound t✝ < 0
⊢ False
tactic: rw [h] at t
state_before: S : Type u
inst✝ : State S
s t✝ : S
m : t✝ ∈ l s
h : turnBound s = 0
t : turnBound t✝ < 0
⊢ False
state_after: no goals
tactic: exact Nat.not_succ_le_zero _ t