ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Mathlib/CategoryTheory/Subterminal.lean
C : Type u₁
inst✝² : Category.{v₁, u₁} C
A : C
inst✝¹ : HasTerminal C
inst✝ : Mono (terminal.from A)
Z : C
f g : Z ⟶ A

⊢ f = g
-- Mathlib/CategoryTheory/Subterminal.lean
C : Type u₁
inst✝² : Category.{v₁, u₁} C
A : C
inst✝¹ : HasTerminal C
inst✝ : Mono (terminal.from A)
Z : C
f g : Z ⟶ A

⊢ f ≫ terminal.from A = g ≫ terminal.from A
-- Mathlib/Data/ENNReal/Inv.lean
a b c d : ℝ≥0∞
r p q : ℝ≥0

⊢ ↑(p / r) ≤ ↑p / ↑r
-- Mathlib/MeasureTheory/Measure/VectorMeasure.lean
α : Type u_1
β : Type u_2
m : MeasurableSpace α
s : SignedMeasure α
i✝ j : Set α
hs : VectorMeasure.restrict s univ ≤ VectorMeasure.restrict 0 univ
i : Set α
hi : MeasurableSet i

⊢ ↑(s.toMeasureOfLEZero univ ⋯ hs).toSignedMeasure i = ↑(-s) i
-- Mathlib/RingTheory/IsAdjoinRoot.lean
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
f : R[X]
inst✝ : Algebra R S
h : IsAdjoinRootMonic S f
z : S
i : ℕ
hi : f.natDegree ≤ i

⊢ h.coeff z i = 0
-- Mathlib/RingTheory/IsAdjoinRoot.lean
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
f : R[X]
inst✝ : Algebra R S
h : IsAdjoinRootMonic S f
z : S
i : ℕ
hi : f.natDegree ≤ i

⊢ { toFun := Polynomial.coeff, map_add' := ⋯ } (h.modByMonicHom z) i = 0
-- Mathlib/RingTheory/IsAdjoinRoot.lean
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
f : R[X]
inst✝ : Algebra R S
h : IsAdjoinRootMonic S f
z : S
i : ℕ
hi : f.natDegree ≤ i
a✝ : Nontrivial R

⊢ { toFun := Polynomial.coeff, map_add' := ⋯ } (h.modByMonicHom z) i = 0
-- Mathlib/Data/List/Basic.lean
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
n : ℕ
a : α
h : replicate n a ≠ []

⊢ (replicate n a).head h = a
-- Mathlib/Order/Bounds/Basic.lean
α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝² : Preorder α
inst✝¹ : Preorder β
s✝ t : Set α
a b : α
inst✝ : SemilatticeSup γ
s : Set γ
x₀ : γ

⊢ BddAbove s ↔ ∃ x, x₀ ≤ x ∧ ∀ y ∈ s, y ≤ x
-- Mathlib/Order/Bounds/Basic.lean
α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝² : Preorder α
inst✝¹ : Preorder β
s✝ t : Set α
a b : α
inst✝ : SemilatticeSup γ
s : Set γ
x₀ : γ

⊢ Monotone fun x => ∀ y ∈ s, y ≤ x
-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
R S T U : Mon_ C
P : Bimod R S
Q : Bimod S T
L : Bimod T U

⊢ coequalizer.desc ((PreservesCoequalizer.iso (tensorLeft P.X) (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).inv ≫ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft) ▷ L.X ≫ coequalizer.π (TensorBimod.actRight P Q ▷ L.X) ((α_ (TensorBimod.X P Q) T.X L.X).hom ≫ TensorBimod.X P Q ◁ L.actLeft)) ⋯) ⋯ ≫ coequalizer.desc ((PreservesCoequalizer.iso (tensorRight L.X) (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).hom ≫ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ TensorBimod.X Q L) ((α_ P.X S.X (TensorBimod.X Q L)).hom ≫ P.X ◁ TensorBimod.actLeft Q L)) ⋯) ⋯ = 𝟙 (TensorBimod.X P (Q.tensorBimod L))
-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
R S T U : Mon_ C
P : Bimod R S
Q : Bimod S T
L : Bimod T U

⊢ coequalizer.π (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft) ≫ coequalizer.desc ((PreservesCoequalizer.iso (tensorLeft P.X) (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).inv ≫ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft) ▷ L.X ≫ coequalizer.π (TensorBimod.actRight P Q ▷ L.X) ((α_ (TensorBimod.X P Q) T.X L.X).hom ≫ TensorBimod.X P Q ◁ L.actLeft)) ⋯) ⋯ ≫ coequalizer.desc ((PreservesCoequalizer.iso (tensorRight L.X) (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).hom ≫ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ TensorBimod.X Q L) ((α_ P.X S.X (TensorBimod.X Q L)).hom ≫ P.X ◁ TensorBimod.actLeft Q L)) ⋯) ⋯ = coequalizer.π (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft) ≫ 𝟙 (TensorBimod.X P (Q.tensorBimod L))
-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
R S T U : Mon_ C
P : Bimod R S
Q : Bimod S T
L : Bimod T U

⊢ ((PreservesCoequalizer.iso (tensorLeft P.X) (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).inv ≫ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft) ▷ L.X ≫ coequalizer.π (TensorBimod.actRight P Q ▷ L.X) ((α_ (TensorBimod.X P Q) T.X L.X).hom ≫ TensorBimod.X P Q ◁ L.actLeft)) ⋯) ≫ coequalizer.desc ((PreservesCoequalizer.iso (tensorRight L.X) (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).hom ≫ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ TensorBimod.X Q L) ((α_ P.X S.X (TensorBimod.X Q L)).hom ≫ P.X ◁ TensorBimod.actLeft Q L)) ⋯) ⋯ = coequalizer.π (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft) ≫ 𝟙 (TensorBimod.X P (Q.tensorBimod L))
-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
R S T U : Mon_ C
P : Bimod R S
Q : Bimod S T
L : Bimod T U

⊢ (tensorLeft P.X).map (coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft)) ≫ ((PreservesCoequalizer.iso (tensorLeft P.X) (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).inv ≫ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft) ▷ L.X ≫ coequalizer.π (TensorBimod.actRight P Q ▷ L.X) ((α_ (TensorBimod.X P Q) T.X L.X).hom ≫ TensorBimod.X P Q ◁ L.actLeft)) ⋯) ≫ coequalizer.desc ((PreservesCoequalizer.iso (tensorRight L.X) (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).hom ≫ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ TensorBimod.X Q L) ((α_ P.X S.X (TensorBimod.X Q L)).hom ≫ P.X ◁ TensorBimod.actLeft Q L)) ⋯) ⋯ = (tensorLeft P.X).map (coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft)) ≫ coequalizer.π (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft) ≫ 𝟙 (TensorBimod.X P (Q.tensorBimod L))
-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
R S T U : Mon_ C
P : Bimod R S
Q : Bimod S T
L : Bimod T U

⊢ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ ((PreservesCoequalizer.iso (tensorLeft P.X) (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).inv ≫ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft) ▷ L.X ≫ coequalizer.π (TensorBimod.actRight P Q ▷ L.X) ((α_ (TensorBimod.X P Q) T.X L.X).hom ≫ TensorBimod.X P Q ◁ L.actLeft)) ⋯) ≫ coequalizer.desc ((PreservesCoequalizer.iso (tensorRight L.X) (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).hom ≫ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ TensorBimod.X Q L) ((α_ P.X S.X (TensorBimod.X Q L)).hom ≫ P.X ◁ TensorBimod.actLeft Q L)) ⋯) ⋯ = P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft) ≫ 𝟙 (TensorBimod.X P (Q.tensorBimod L))
-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
R S T U : Mon_ C
P : Bimod R S
Q : Bimod S T
L : Bimod T U

⊢ ((α_ P.X Q.X L.X).inv ≫ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft) ▷ L.X ≫ coequalizer.π (TensorBimod.actRight P Q ▷ L.X) ((α_ (TensorBimod.X P Q) T.X L.X).hom ≫ TensorBimod.X P Q ◁ L.actLeft)) ≫ coequalizer.desc ((PreservesCoequalizer.iso (tensorRight L.X) (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).hom ≫ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ TensorBimod.X Q L) ((α_ P.X S.X (TensorBimod.X Q L)).hom ≫ P.X ◁ TensorBimod.actLeft Q L)) ⋯) ⋯ = P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft) ≫ 𝟙 (TensorBimod.X P (Q.tensorBimod L))
-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
R S T U : Mon_ C
P : Bimod R S
Q : Bimod S T
L : Bimod T U

⊢ (α_ P.X Q.X L.X).inv ≫ coequalizer.π (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft) ▷ L.X ≫ (PreservesCoequalizer.iso (tensorRight L.X) (P.actRight ▷ Q.X) ((α_ P.X S.X Q.X).hom ≫ P.X ◁ Q.actLeft)).inv ≫ coequalizer.desc ((α_ P.X Q.X L.X).hom ≫ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ TensorBimod.X Q L) ((α_ P.X S.X (TensorBimod.X Q L)).hom ≫ P.X ◁ TensorBimod.actLeft Q L)) ⋯ = P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft) ≫ 𝟙 (TensorBimod.X P (Q.tensorBimod L))
-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
R S T U : Mon_ C
P : Bimod R S
Q : Bimod S T
L : Bimod T U

⊢ (α_ P.X Q.X L.X).inv ≫ (α_ P.X Q.X L.X).hom ≫ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ TensorBimod.X Q L) ((α_ P.X S.X (TensorBimod.X Q L)).hom ≫ P.X ◁ TensorBimod.actLeft Q L) = P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft) ≫ 𝟙 (TensorBimod.X P (Q.tensorBimod L))
-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
R S T U : Mon_ C
P : Bimod R S
Q : Bimod S T
L : Bimod T U

⊢ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ TensorBimod.X Q L) ((α_ P.X S.X (TensorBimod.X Q L)).hom ≫ P.X ◁ TensorBimod.actLeft Q L) = P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft) ≫ 𝟙 (TensorBimod.X P (Q.tensorBimod L))
-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
R S T U : Mon_ C
P : Bimod R S
Q : Bimod S T
L : Bimod T U

⊢ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ coequalizer (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft)) ((α_ P.X S.X (coequalizer (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft))).hom ≫ P.X ◁ TensorBimod.actLeft Q L) = P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft) ≫ 𝟙 (coequalizer (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft))
-- Mathlib/CategoryTheory/Monoidal/Bimod.lean
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
inst✝² : HasCoequalizers C
inst✝¹ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorLeft X)
inst✝ : (X : C) → PreservesColimitsOfSize.{0, 0, v₁, v₁, u₁, u₁} (tensorRight X)
R S T U : Mon_ C
P : Bimod R S
Q : Bimod S T
L : Bimod T U

⊢ P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ coequalizer (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft)) ((α_ P.X S.X (coequalizer (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft))).hom ≫ P.X ◁ TensorBimod.actLeft Q L) = P.X ◁ coequalizer.π (Q.actRight ▷ L.X) ((α_ Q.X T.X L.X).hom ≫ Q.X ◁ L.actLeft) ≫ coequalizer.π (P.actRight ▷ (Q.tensorBimod L).X) ((α_ P.X S.X (Q.tensorBimod L).X).hom ≫ P.X ◁ (Q.tensorBimod L).actLeft)
-- Mathlib/Algebra/Order/BigOperators/Group/Multiset.lean
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CommMonoid α
inst✝ : OrderedCommMonoid β
f : α → β
p : α → Prop
h_one : f 1 = 1
hp_one : p 1
h_mul : ∀ (a b : α), p a → p b → f (a * b) ≤ f a * f b
hp_mul : ∀ (a b : α), p a → p b → p (a * b)

⊢ ∀ (s : Multiset α), (∀ a ∈ s, p a) → f s.prod ≤ (map f s).prod
-- Mathlib/Algebra/Order/BigOperators/Group/Multiset.lean
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CommMonoid α
inst✝ : OrderedCommMonoid β
f : α → β
p : α → Prop
h_one : f 1 = 1
hp_one : p 1
h_mul : ∀ (a b : α), p a → p b → f (a * b) ≤ f a * f b
hp_mul : ∀ (a b : α), p a → p b → p (a * b)

⊢ (∀ a ∈ 0, p a) → f (prod 0) ≤ (map f 0).prod
-- Mathlib/Algebra/Order/BigOperators/Group/Multiset.lean
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CommMonoid α
inst✝ : OrderedCommMonoid β
f : α → β
p : α → Prop
h_one : f 1 = 1
hp_one : p 1
h_mul : ∀ (a b : α), p a → p b → f (a * b) ≤ f a * f b
hp_mul : ∀ (a b : α), p a → p b → p (a * b)

⊢ ∀ (a : α) (s : Multiset α), ((∀ a ∈ s, p a) → f s.prod ≤ (map f s).prod) → (∀ a_2 ∈ a ::ₘ s, p a_2) → f (a ::ₘ s).prod ≤ (map f (a ::ₘ s)).prod
-- Mathlib/Algebra/Order/BigOperators/Group/Multiset.lean
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CommMonoid α
inst✝ : OrderedCommMonoid β
f : α → β
p : α → Prop
h_one : f 1 = 1
hp_one : p 1
h_mul : ∀ (a b : α), p a → p b → f (a * b) ≤ f a * f b
hp_mul : ∀ (a b : α), p a → p b → p (a * b)
a : α
s : Multiset α
hs : (∀ a ∈ s, p a) → f s.prod ≤ (map f s).prod
hpsa : ∀ a_1 ∈ a ::ₘ s, p a_1

⊢ f (a ::ₘ s).prod ≤ (map f (a ::ₘ s)).prod
-- Mathlib/Algebra/Order/BigOperators/Group/Multiset.lean
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CommMonoid α
inst✝ : OrderedCommMonoid β
f : α → β
p : α → Prop
h_one : f 1 = 1
hp_one : p 1
h_mul : ∀ (a b : α), p a → p b → f (a * b) ≤ f a * f b
hp_mul : ∀ (a b : α), p a → p b → p (a * b)
a : α
s : Multiset α
hs : (∀ a ∈ s, p a) → f s.prod ≤ (map f s).prod
hpsa : ∀ a_1 ∈ a ::ₘ s, p a_1
hps : ∀ x ∈ s, p x

⊢ f (a ::ₘ s).prod ≤ (map f (a ::ₘ s)).prod
-- Mathlib/Algebra/Order/BigOperators/Group/Multiset.lean
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CommMonoid α
inst✝ : OrderedCommMonoid β
f : α → β
p : α → Prop
h_one : f 1 = 1
hp_one : p 1
h_mul : ∀ (a b : α), p a → p b → f (a * b) ≤ f a * f b
hp_mul : ∀ (a b : α), p a → p b → p (a * b)
a : α
s : Multiset α
hs : (∀ a ∈ s, p a) → f s.prod ≤ (map f s).prod
hpsa : ∀ a_1 ∈ a ::ₘ s, p a_1
hps : ∀ x ∈ s, p x
hp_prod : p s.prod

⊢ f (a ::ₘ s).prod ≤ (map f (a ::ₘ s)).prod
-- Mathlib/Algebra/Order/BigOperators/Group/Multiset.lean
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CommMonoid α
inst✝ : OrderedCommMonoid β
f : α → β
p : α → Prop
h_one : f 1 = 1
hp_one : p 1
h_mul : ∀ (a b : α), p a → p b → f (a * b) ≤ f a * f b
hp_mul : ∀ (a b : α), p a → p b → p (a * b)
a : α
s : Multiset α
hs : (∀ a ∈ s, p a) → f s.prod ≤ (map f s).prod
hpsa : ∀ a_1 ∈ a ::ₘ s, p a_1
hps : ∀ x ∈ s, p x
hp_prod : p s.prod

⊢ f (a * s.prod) ≤ f a * (map f s).prod
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b : β
f : α → β → m (ForInStep β)
x✝¹ : 0 ≤ as.size
x✝ : β

⊢ forIn.loop as f 0 x✝¹ x✝ = forIn (List.drop as.data.length as.data) x✝ f
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b : β
f : α → β → m (ForInStep β)
x✝¹ : 0 ≤ as.size
x✝ : β

⊢ forIn.loop as f 0 x✝¹ x✝ = forIn [] x✝ f
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b : β
f : α → β → m (ForInStep β)
i : Nat
x✝¹ : i + 1 ≤ as.size
x✝ : β
j : Nat
ij : j + (i + 1) = as.size

⊢ (do let __do_lift ← f as[as.size - 1 - i] x✝ match __do_lift with | ForInStep.done b => pure b | ForInStep.yield b => forIn.loop as f i ⋯ b) = forIn (List.drop j as.data) x✝ f
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b : β
f : α → β → m (ForInStep β)
i : Nat
x✝¹ : i + 1 ≤ as.size
x✝ : β
j : Nat
ij : j + (i + 1) = as.size
j_eq : j = as.size - 1 - i

⊢ (do let __do_lift ← f as[as.size - 1 - i] x✝ match __do_lift with | ForInStep.done b => pure b | ForInStep.yield b => forIn.loop as f i ⋯ b) = forIn (List.drop j as.data) x✝ f
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b : β
f : α → β → m (ForInStep β)
i : Nat
x✝¹ : i + 1 ≤ as.size
x✝ : β
j : Nat
ij : j + (i + 1) = as.size
j_eq : j = as.size - 1 - i
this : as.size - 1 - i < as.size

⊢ (do let __do_lift ← f as[as.size - 1 - i] x✝ match __do_lift with | ForInStep.done b => pure b | ForInStep.yield b => forIn.loop as f i ⋯ b) = forIn (List.drop j as.data) x✝ f
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b : β
f : α → β → m (ForInStep β)
i : Nat
x✝¹ : i + 1 ≤ as.size
x✝ : β
j : Nat
ij : j + (i + 1) = as.size
j_eq : j = as.size - 1 - i
this✝ : as.size - 1 - i < as.size
this : as[as.size - 1 - i] :: List.drop (j + 1) as.data = List.drop j as.data

⊢ (do let __do_lift ← f as[as.size - 1 - i] x✝ match __do_lift with | ForInStep.done b => pure b | ForInStep.yield b => forIn.loop as f i ⋯ b) = forIn (List.drop j as.data) x✝ f
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b : β
f : α → β → m (ForInStep β)
i : Nat
x✝¹ : i + 1 ≤ as.size
x✝ : β
j : Nat
ij : j + (i + 1) = as.size
j_eq : j = as.size - 1 - i
this✝ : as.size - 1 - i < as.size
this : as[as.size - 1 - i] :: List.drop (j + 1) as.data = List.drop j as.data

⊢ (do let __do_lift ← f as[as.size - 1 - i] x✝ match __do_lift with | ForInStep.done b => pure b | ForInStep.yield b => forIn.loop as f i ⋯ b) = do let x ← f as[as.size - 1 - i] x✝ match x with | ForInStep.done b => pure b | ForInStep.yield b => forIn (List.drop (j + 1) as.data) b f
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b : β
f : α → β → m (ForInStep β)
i : Nat
x✝¹ : i + 1 ≤ as.size
x✝ : β
j : Nat
ij : j + (i + 1) = as.size
j_eq : j = as.size - 1 - i
this✝ : as.size - 1 - i < as.size
this : as[as.size - 1 - i] :: List.drop (j + 1) as.data = List.drop j as.data

⊢ (fun __do_lift => match __do_lift with | ForInStep.done b => pure b | ForInStep.yield b => forIn.loop as f i ⋯ b) = fun x => match x with | ForInStep.done b => pure b | ForInStep.yield b => forIn (List.drop (j + 1) as.data) b f
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b : β
f : α → β → m (ForInStep β)
i : Nat
x✝¹ : i + 1 ≤ as.size
x✝ : β
j : Nat
ij : j + (i + 1) = as.size
j_eq : j = as.size - 1 - i
this✝ : as.size - 1 - i < as.size
this : as[as.size - 1 - i] :: List.drop (j + 1) as.data = List.drop j as.data
x : ForInStep β

⊢ (match x with | ForInStep.done b => pure b | ForInStep.yield b => forIn.loop as f i ⋯ b) = match x with | ForInStep.done b => pure b | ForInStep.yield b => forIn (List.drop (j + 1) as.data) b f
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b : β
f : α → β → m (ForInStep β)
i : Nat
x✝¹ : i + 1 ≤ as.size
x✝ : β
j : Nat
ij : j + (i + 1) = as.size
j_eq : j = as.size - 1 - i
this✝ : as.size - 1 - i < as.size
this : as[as.size - 1 - i] :: List.drop (j + 1) as.data = List.drop j as.data
x : ForInStep β

⊢ (fun b => forIn.loop as f i ⋯ b) = fun b => forIn (List.drop (j + 1) as.data) b f
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b✝ : β
f : α → β → m (ForInStep β)
i : Nat
x✝¹ : i + 1 ≤ as.size
x✝ : β
j : Nat
ij : j + (i + 1) = as.size
j_eq : j = as.size - 1 - i
this✝ : as.size - 1 - i < as.size
this : as[as.size - 1 - i] :: List.drop (j + 1) as.data = List.drop j as.data
x : ForInStep β
b : β

⊢ forIn.loop as f i ⋯ b = forIn (List.drop (j + 1) as.data) b f
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b✝ : β
f : α → β → m (ForInStep β)
i : Nat
x✝¹ : i + 1 ≤ as.size
x✝ : β
j : Nat
ij : j + (i + 1) = as.size
j_eq : j = as.size - 1 - i
this✝ : as.size - 1 - i < as.size
this : as[as.size - 1 - i] :: List.drop (j + 1) as.data = List.drop j as.data
x : ForInStep β
b : β

⊢ j + 1 + i = as.size
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b✝ : β
f : α → β → m (ForInStep β)
i : Nat
x✝¹ : i + 1 ≤ as.size
x✝ : β
j : Nat
ij : j + (i + 1) = as.size
j_eq : j = as.size - 1 - i
this✝ : as.size - 1 - i < as.size
this : as[as.size - 1 - i] :: List.drop (j + 1) as.data = List.drop j as.data
x : ForInStep β
b : β

⊢ (j + i).succ = j + (i + 1)
-- .lake/packages/batteries/Batteries/Data/Array/Lemmas.lean
m : Type u_1 → Type u_2
α : Type u_3
β : Type u_1
inst✝ : Monad m
as : Array α
b : β
f : α → β → m (ForInStep β)

⊢ forIn.loop as f as.size ⋯ b = forIn as.data b f