1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: contDiffWithinAtProp_self_source
File: Mathlib/Geometry/Manifold/ContMDiff/Defs.lean

tactic: simp_rw [ContDiffWithinAtProp, modelWithCornersSelf_coe, range_id, inter_univ,
  modelWithCornersSelf_coe_symm, CompTriple.comp_eq, preimage_id_eq, id_eq]
state_before: 𝕜 : Type u_1
inst✝³⁷ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝³⁶ : NormedAddCommGroup E
inst✝³⁵ : NormedSpace 𝕜 E
H : Type u_3
inst✝³⁴ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝³³ : TopologicalSpace M
inst✝³² : ChartedSpace H M
inst✝³¹ : SmoothManifoldWithCorners I M
E' : Type u_5
inst✝³⁰ : NormedAddCommGroup E'
inst✝²⁹ : NormedSpace 𝕜 E'
H' : Type u_6
inst✝²⁸ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M' : Type u_7
inst✝²⁷ : TopologicalSpace M'
inst✝²⁶ : ChartedSpace H' M'
inst✝²⁵ : SmoothManifoldWithCorners I' M'
E'' : Type u_8
inst✝²⁴ : NormedAddCommGroup E''
inst✝²³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝²² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝²¹ : TopologicalSpace M''
inst✝²⁰ : ChartedSpace H'' M''
F : Type u_11
inst✝¹⁹ : NormedAddCommGroup F
inst✝¹⁸ : NormedSpace 𝕜 F
G : Type u_12
inst✝¹⁷ : TopologicalSpace G
J : ModelWithCorners 𝕜 F G
N : Type u_13
inst✝¹⁶ : TopologicalSpace N
inst✝¹⁵ : ChartedSpace G N
inst✝¹⁴ : SmoothManifoldWithCorners J N
F' : Type u_14
inst✝¹³ : NormedAddCommGroup F'
inst✝¹² : NormedSpace 𝕜 F'
G' : Type u_15
inst✝¹¹ : TopologicalSpace G'
J' : ModelWithCorners 𝕜 F' G'
N' : Type u_16
inst✝¹⁰ : TopologicalSpace N'
inst✝⁹ : ChartedSpace G' N'
inst✝⁸ : SmoothManifoldWithCorners J' N'
F₁ : Type u_17
inst✝⁷ : NormedAddCommGroup F₁
inst✝⁶ : NormedSpace 𝕜 F₁
F₂ : Type u_18
inst✝⁵ : NormedAddCommGroup F₂
inst✝⁴ : NormedSpace 𝕜 F₂
F₃ : Type u_19
inst✝³ : NormedAddCommGroup F₃
inst✝² : NormedSpace 𝕜 F₃
F₄ : Type u_20
inst✝¹ : NormedAddCommGroup F₄
inst✝ : NormedSpace 𝕜 F₄
e : PartialHomeomorph M H
e' : PartialHomeomorph M' H'
f✝ f₁ : M → M'
s✝ s₁ t : Set M
x✝ : M
m n : ℕ∞
f : E → H'
s : Set E
x : E
⊢ ContDiffWithinAtProp 𝓘(𝕜, E) I' n f s x ↔ ContDiffWithinAt 𝕜 n (↑I' ∘ f) s x
state_after: no goals
Theorem: Left.one_le_inv_iff
File: Mathlib/Algebra/Order/Group/Defs.lean

tactic: rw [← mul_le_mul_iff_left a]
state_before: α : Type u
inst✝² : Group α
inst✝¹ : LE α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b c d : α
⊢ 1 ≤ a⁻¹ ↔ a ≤ 1
state_after: α : Type u
inst✝² : Group α
inst✝¹ : LE α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b c d : α
⊢ a * 1 ≤ a * a⁻¹ ↔ a ≤ 1

tactic: simp
state_before: α : Type u
inst✝² : Group α
inst✝¹ : LE α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b c d : α
⊢ a * 1 ≤ a * a⁻¹ ↔ a ≤ 1
state_after: no goals
Theorem: Orientation.oangle_add_swap
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Basic.lean

tactic: rw [add_comm, o.oangle_add hx hy hz]
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 z : V
hx : x ≠ 0
hy : y ≠ 0
hz : z ≠ 0
⊢ o.oangle y z + o.oangle x y = o.oangle x z
state_after: no goals
Theorem: UniformFun.inf_eq
File: Mathlib/Topology/UniformSpace/UniformConvergenceTopology.lean

tactic: rw [inf_eq_iInf, inf_eq_iInf, UniformFun.iInf_eq]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝ : UniformSpace β
u₁ u₂ : UniformSpace γ
⊢ uniformSpace α γ = uniformSpace α γ ⊓ uniformSpace α γ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝ : UniformSpace β
u₁ u₂ : UniformSpace γ
⊢ ⨅ i, uniformSpace α γ = ⨅ b, bif b then uniformSpace α γ else uniformSpace α γ

tactic: refine iInf_congr fun i => ?_
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝ : UniformSpace β
u₁ u₂ : UniformSpace γ
⊢ ⨅ i, uniformSpace α γ = ⨅ b, bif b then uniformSpace α γ else uniformSpace α γ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝ : UniformSpace β
u₁ u₂ : UniformSpace γ
i : Bool
⊢ uniformSpace α γ = bif i then uniformSpace α γ else uniformSpace α γ

tactic: cases i <;> rfl
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝ : UniformSpace β
u₁ u₂ : UniformSpace γ
i : Bool
⊢ uniformSpace α γ = bif i then uniformSpace α γ else uniformSpace α γ
state_after: no goals
Theorem: CategoryTheory.Quotient.comp_natTransLift
File: Mathlib/CategoryTheory/Quotient.lean

tactic: aesop_cat
state_before: C : Type u_3
inst✝¹ : Category.{u_1, u_3} C
r : HomRel C
D : Type u_4
inst✝ : Category.{u_2, u_4} D
F✝ : C ⥤ D
H✝ : ∀ (x y : C) (f₁ f₂ : x ⟶ y), r f₁ f₂ → F✝.map f₁ = F✝.map f₂
F G H : Quotient r ⥤ D
τ : functor r ⋙ F ⟶ functor r ⋙ G
τ' : functor r ⋙ G ⟶ functor r ⋙ H
⊢ natTransLift r τ ≫ natTransLift r τ' = natTransLift r (τ ≫ τ')
state_after: no goals
Theorem: MeasureTheory.indicatorConstLp_sub
File: Mathlib/MeasureTheory/Function/LpSpace.lean

tactic: simp_rw [indicatorConstLp, ← Memℒp.toLp_sub, indicator_sub]
state_before: α : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
s : Set α
hs : MeasurableSet s
hμs : μ s ≠ ⊤
c c' : E
⊢ indicatorConstLp p hs hμs c - indicatorConstLp p hs hμs c' = indicatorConstLp p hs hμs (c - c')
state_after: α : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
s : Set α
hs : MeasurableSet s
hμs : μ s ≠ ⊤
c c' : E
⊢ Memℒp.toLp ((s.indicator fun x => c) - s.indicator fun x => c') ⋯ =
    Memℒp.toLp (fun a => s.indicator (fun x => c) a - s.indicator (fun x => c') a) ⋯

tactic: rfl
state_before: α : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
s : Set α
hs : MeasurableSet s
hμs : μ s ≠ ⊤
c c' : E
⊢ Memℒp.toLp ((s.indicator fun x => c) - s.indicator fun x => c') ⋯ =
    Memℒp.toLp (fun a => s.indicator (fun x => c) a - s.indicator (fun x => c') a) ⋯
state_after: no goals
Theorem: Polynomial.irreducible_of_monic
File: Mathlib/Algebra/Polynomial/RingDivision.lean

tactic: refine
  ⟨fun h f g hf hg hp => (h.2 f g hp.symm).imp hf.eq_one_of_isUnit hg.eq_one_of_isUnit, fun h =>
    ⟨hp1 ∘ hp.eq_one_of_isUnit, fun f g hfg =>
      (h (g * C f.leadingCoeff) (f * C g.leadingCoeff) ?_ ?_ ?_).symm.imp
        (isUnit_of_mul_eq_one f _)
        (isUnit_of_mul_eq_one g _)⟩⟩
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
p q : R[X]
hp : p.Monic
hp1 : p ≠ 1
⊢ Irreducible p ↔ ∀ (f g : R[X]), f.Monic → g.Monic → f * g = p → f = 1 ∨ g = 1
state_after: case refine_1
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
p q : R[X]
hp : p.Monic
hp1 : p ≠ 1
h : ∀ (f g : R[X]), f.Monic → g.Monic → f * g = p → f = 1 ∨ g = 1
f g : R[X]
hfg : p = f * g
⊢ (g * C f.leadingCoeff).Monic

case refine_2
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
p q : R[X]
hp : p.Monic
hp1 : p ≠ 1
h : ∀ (f g : R[X]), f.Monic → g.Monic → f * g = p → f = 1 ∨ g = 1
f g : R[X]
hfg : p = f * g
⊢ (f * C g.leadingCoeff).Monic

case refine_3
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
p q : R[X]
hp : p.Monic
hp1 : p ≠ 1
h : ∀ (f g : R[X]), f.Monic → g.Monic → f * g = p → f = 1 ∨ g = 1
f g : R[X]
hfg : p = f * g
⊢ g * C f.leadingCoeff * (f * C g.leadingCoeff) = p

tactic: rwa [Monic, leadingCoeff_mul, leadingCoeff_C, ← leadingCoeff_mul, mul_comm, ← hfg, ← Monic]
state_before: case refine_1
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
p q : R[X]
hp : p.Monic
hp1 : p ≠ 1
h : ∀ (f g : R[X]), f.Monic → g.Monic → f * g = p → f = 1 ∨ g = 1
f g : R[X]
hfg : p = f * g
⊢ (g * C f.leadingCoeff).Monic
state_after: no goals

tactic: rwa [Monic, leadingCoeff_mul, leadingCoeff_C, ← leadingCoeff_mul, ← hfg, ← Monic]
state_before: case refine_2
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
p q : R[X]
hp : p.Monic
hp1 : p ≠ 1
h : ∀ (f g : R[X]), f.Monic → g.Monic → f * g = p → f = 1 ∨ g = 1
f g : R[X]
hfg : p = f * g
⊢ (f * C g.leadingCoeff).Monic
state_after: no goals

tactic: rw [mul_mul_mul_comm, ← C_mul, ← leadingCoeff_mul, ← hfg, hp.leadingCoeff, C_1, mul_one,
  mul_comm, ← hfg]
state_before: case refine_3
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
p q : R[X]
hp : p.Monic
hp1 : p ≠ 1
h : ∀ (f g : R[X]), f.Monic → g.Monic → f * g = p → f = 1 ∨ g = 1
f g : R[X]
hfg : p = f * g
⊢ g * C f.leadingCoeff * (f * C g.leadingCoeff) = p
state_after: no goals
Theorem: Filter.atTop_eq_pure_of_isTop
File: Mathlib/Order/Filter/Ultrafilter.lean

tactic: have : Nonempty α := ⟨x⟩
state_before: α : Type u
β : Type v
γ : Type u_1
f : Filter α
s : Set α
a : α
inst✝ : LinearOrder α
x : α
hx : IsTop x
⊢ atTop = pure x
state_after: α : Type u
β : Type v
γ : Type u_1
f : Filter α
s : Set α
a : α
inst✝ : LinearOrder α
x : α
hx : IsTop x
this : Nonempty α
⊢ atTop = pure x

tactic: apply atTop_neBot.eq_pure_iff.2
state_before: α : Type u
β : Type v
γ : Type u_1
f : Filter α
s : Set α
a : α
inst✝ : LinearOrder α
x : α
hx : IsTop x
this : Nonempty α
⊢ atTop = pure x
state_after: α : Type u
β : Type v
γ : Type u_1
f : Filter α
s : Set α
a : α
inst✝ : LinearOrder α
x : α
hx : IsTop x
this : Nonempty α
⊢ {x} ∈ atTop

tactic: convert Ici_mem_atTop x using 1
state_before: α : Type u
β : Type v
γ : Type u_1
f : Filter α
s : Set α
a : α
inst✝ : LinearOrder α
x : α
hx : IsTop x
this : Nonempty α
⊢ {x} ∈ atTop
state_after: case h.e'_4
α : Type u
β : Type v
γ : Type u_1
f : Filter α
s : Set α
a : α
inst✝ : LinearOrder α
x : α
hx : IsTop x
this : Nonempty α
⊢ {x} = Ici x

tactic: exact (Ici_eq_singleton_iff_isTop.2 hx).symm
state_before: case h.e'_4
α : Type u
β : Type v
γ : Type u_1
f : Filter α
s : Set α
a : α
inst✝ : LinearOrder α
x : α
hx : IsTop x
this : Nonempty α
⊢ {x} = Ici x
state_after: no goals
Theorem: Matrix.conjTranspose_fromRows_eq_fromColumns_conjTranspose
File: Mathlib/Data/Matrix/ColumnRowPartitioned.lean

tactic: ext _ (_ | _) <;> simp
state_before: R : Type u_1
m : Type u_2
m₁ : Type u_3
m₂ : Type u_4
n : Type u_5
n₁ : Type u_6
n₂ : Type u_7
inst✝¹² : Fintype m
inst✝¹¹ : Fintype m₁
inst✝¹⁰ : Fintype m₂
inst✝⁹ : Fintype n
inst✝⁸ : Fintype n₁
inst✝⁷ : Fintype n₂
inst✝⁶ : DecidableEq m
inst✝⁵ : DecidableEq m₁
inst✝⁴ : DecidableEq m₂
inst✝³ : DecidableEq n
inst✝² : DecidableEq n₁
inst✝¹ : DecidableEq n₂
inst✝ : Star R
A₁ : Matrix m₁ n R
A₂ : Matrix m₂ n R
⊢ (A₁.fromRows A₂)ᴴ = A₁ᴴ.fromColumns A₂ᴴ
state_after: no goals
Theorem: tendstoLocallyUniformlyOn_iff_tendstoLocallyUniformly_comp_coe
File: Mathlib/Topology/UniformSpace/UniformConvergence.lean

tactic: simp only [tendstoLocallyUniformly_iff_forall_tendsto, Subtype.forall', tendsto_map'_iff,
  tendstoLocallyUniformlyOn_iff_forall_tendsto, ← map_nhds_subtype_val, prod_map_right]
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
inst✝ : TopologicalSpace α
⊢ TendstoLocallyUniformlyOn F f p s ↔ TendstoLocallyUniformly (fun i x => F i ↑x) (f ∘ Subtype.val) p
state_after: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
inst✝ : TopologicalSpace α
⊢ (∀ (x : { a // a ∈ s }), Tendsto ((fun y => (f y.2, F y.1 y.2)) ∘ Prod.map id Subtype.val) (p ×ˢ 𝓝 x) (𝓤 β)) ↔
    ∀ (x : ↑s), Tendsto (fun y => ((f ∘ Subtype.val) y.2, F y.1 ↑y.2)) (p ×ˢ 𝓝 x) (𝓤 β)

tactic: rfl
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
inst✝ : TopologicalSpace α
⊢ (∀ (x : { a // a ∈ s }), Tendsto ((fun y => (f y.2, F y.1 y.2)) ∘ Prod.map id Subtype.val) (p ×ˢ 𝓝 x) (𝓤 β)) ↔
    ∀ (x : ↑s), Tendsto (fun y => ((f ∘ Subtype.val) y.2, F y.1 ↑y.2)) (p ×ˢ 𝓝 x) (𝓤 β)
state_after: no goals
Theorem: reflection_bot
File: Mathlib/Analysis/InnerProductSpace/Projection.lean

tactic: ext
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
⊢ reflection ⊥ = LinearIsometryEquiv.neg 𝕜
state_after: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x✝ : E
⊢ (reflection ⊥) x✝ = (LinearIsometryEquiv.neg 𝕜) x✝

tactic: simp [reflection_apply]
state_before: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
x✝ : E
⊢ (reflection ⊥) x✝ = (LinearIsometryEquiv.neg 𝕜) x✝
state_after: no goals
Theorem: WeierstrassCurve.ΨSq_zero
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Basic.lean

tactic: erw [ΨSq_ofNat, preΨ'_zero, zero_pow two_ne_zero, zero_mul]
state_before: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
⊢ W.ΨSq 0 = 0
state_after: no goals
Theorem: le_iff_exists_mul'
File: Mathlib/Algebra/Order/Monoid/Canonical/Defs.lean

tactic: simp only [mul_comm _ a, le_iff_exists_mul]
state_before: α : Type u
inst✝ : CanonicallyOrderedCommMonoid α
a b c d : α
⊢ a ≤ b ↔ ∃ c, b = c * a
state_after: no goals
Theorem: CochainComplex.quasiIsoAt₀_iff
File: Mathlib/Algebra/Homology/QuasiIso.lean

tactic: simp
state_before: ι✝ : Type u_1
ι : Type u_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
c : ComplexShape ι
K✝ L✝ M K' L' : HomologicalComplex C c
K L : CochainComplex C ℕ
f : K ⟶ L
inst✝³ : HasHomology K 0
inst✝² : HasHomology L 0
inst✝¹ : (sc' K 0 0 1).HasHomology
inst✝ : (sc' L 0 0 1).HasHomology
⊢ (ComplexShape.up ℕ).prev 0 = 0
state_after: no goals

tactic: simp
state_before: ι✝ : Type u_1
ι : Type u_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
c : ComplexShape ι
K✝ L✝ M K' L' : HomologicalComplex C c
K L : CochainComplex C ℕ
f : K ⟶ L
inst✝³ : HasHomology K 0
inst✝² : HasHomology L 0
inst✝¹ : (sc' K 0 0 1).HasHomology
inst✝ : (sc' L 0 0 1).HasHomology
⊢ (ComplexShape.up ℕ).next 0 = 1
state_after: no goals
Theorem: CategoryTheory.Limits.BinaryCofan.isColimit_iff_isIso_inr
File: Mathlib/CategoryTheory/Limits/Shapes/BinaryProducts.lean

tactic: refine Iff.trans ?_ (BinaryCofan.isColimit_iff_isIso_inl h (BinaryCofan.mk c.inr c.inl))
state_before: C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ X Y : C
h : IsInitial X
c : BinaryCofan X Y
⊢ Nonempty (IsColimit c) ↔ IsIso c.inr
state_after: C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ X Y : C
h : IsInitial X
c : BinaryCofan X Y
⊢ Nonempty (IsColimit c) ↔ Nonempty (IsColimit (mk c.inr c.inl))

tactic: exact
  ⟨fun h => ⟨BinaryCofan.isColimitFlip h.some⟩, fun h =>
    ⟨(BinaryCofan.isColimitFlip h.some).ofIsoColimit (isoBinaryCofanMk c).symm⟩⟩
state_before: C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ X Y : C
h : IsInitial X
c : BinaryCofan X Y
⊢ Nonempty (IsColimit c) ↔ Nonempty (IsColimit (mk c.inr c.inl))
state_after: no goals
Theorem: LowerSet.disjoint_prod
File: Mathlib/Order/UpperLower/Basic.lean

tactic: simp_rw [disjoint_iff, prod_inf_prod, prod_eq_bot]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s s₁ s₂ : LowerSet α
t t₁ t₂ : LowerSet β
x : α × β
⊢ Disjoint (s₁ ×ˢ t₁) (s₂ ×ˢ t₂) ↔ Disjoint s₁ s₂ ∨ Disjoint t₁ t₂
state_after: no goals
Theorem: RelSeries.last_tail
File: Mathlib/Order/RelSeries.lean

tactic: show p _ = p _
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ (p.tail len_pos).last = p.last
state_after: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ p.toFun (Fin.cast ⋯ (Fin.last (p.tail len_pos).length)).succ = p.toFun (Fin.last p.length)

tactic: congr
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ p.toFun (Fin.cast ⋯ (Fin.last (p.tail len_pos).length)).succ = p.toFun (Fin.last p.length)
state_after: case e_a
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ (Fin.cast ⋯ (Fin.last (p.tail len_pos).length)).succ = Fin.last p.length

tactic: ext
state_before: case e_a
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ (Fin.cast ⋯ (Fin.last (p.tail len_pos).length)).succ = Fin.last p.length
state_after: case e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ ↑(Fin.cast ⋯ (Fin.last (p.tail len_pos).length)).succ = ↑(Fin.last p.length)

tactic: simp only [tail_length, Fin.val_succ, Fin.coe_cast, Fin.val_last]
state_before: case e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ ↑(Fin.cast ⋯ (Fin.last (p.tail len_pos).length)).succ = ↑(Fin.last p.length)
state_after: case e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ p.length - 1 + 1 = p.length

tactic: exact Nat.succ_pred_eq_of_pos (by simpa [Nat.pos_iff_ne_zero] using len_pos)
state_before: case e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ p.length - 1 + 1 = p.length
state_after: no goals

tactic: simpa [Nat.pos_iff_ne_zero] using len_pos
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ 0 < p.length.sub 0
state_after: no goals
Theorem: CategoryTheory.Limits.initial.to_comp
File: Mathlib/CategoryTheory/Limits/Shapes/Terminal.lean

tactic: simp [eq_iff_true_of_subsingleton]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : HasInitial C
P Q : C
f : P ⟶ Q
⊢ to P ≫ f = to Q
state_after: no goals
Theorem: Fintype.prod_dite
File: Mathlib/Data/Fintype/BigOperators.lean

tactic: simp only [prod_dite, attach_eq_univ]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Fintype α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : CommMonoid β
f : (a : α) → p a → β
g : (a : α) → ¬p a → β
⊢ ∏ a : α, dite (p a) (f a) (g a) = (∏ a : { a // p a }, f ↑a ⋯) * ∏ a : { a // ¬p a }, g ↑a ⋯
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Fintype α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : CommMonoid β
f : (a : α) → p a → β
g : (a : α) → ¬p a → β
⊢ (∏ x : { x // x ∈ filter p univ }, f ↑x ⋯) * ∏ x : { x // x ∈ filter (fun x => ¬p x) univ }, g ↑x ⋯ =
    (∏ a : { a // p a }, f ↑a ⋯) * ∏ a : { a // ¬p a }, g ↑a ⋯

tactic: congr 1
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Fintype α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : CommMonoid β
f : (a : α) → p a → β
g : (a : α) → ¬p a → β
⊢ (∏ x : { x // x ∈ filter p univ }, f ↑x ⋯) * ∏ x : { x // x ∈ filter (fun x => ¬p x) univ }, g ↑x ⋯ =
    (∏ a : { a // p a }, f ↑a ⋯) * ∏ a : { a // ¬p a }, g ↑a ⋯
state_after: case e_a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Fintype α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : CommMonoid β
f : (a : α) → p a → β
g : (a : α) → ¬p a → β
⊢ ∏ x : { x // x ∈ filter p univ }, f ↑x ⋯ = ∏ a : { a // p a }, f ↑a ⋯

case e_a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Fintype α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : CommMonoid β
f : (a : α) → p a → β
g : (a : α) → ¬p a → β
⊢ ∏ x : { x // x ∈ filter (fun x => ¬p x) univ }, g ↑x ⋯ = ∏ a : { a // ¬p a }, g ↑a ⋯

tactic: exact (Equiv.subtypeEquivRight <| by simp).prod_comp fun x : { x // p x } => f x x.2
state_before: case e_a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Fintype α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : CommMonoid β
f : (a : α) → p a → β
g : (a : α) → ¬p a → β
⊢ ∏ x : { x // x ∈ filter p univ }, f ↑x ⋯ = ∏ a : { a // p a }, f ↑a ⋯
state_after: no goals

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Fintype α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : CommMonoid β
f : (a : α) → p a → β
g : (a : α) → ¬p a → β
⊢ ∀ (x : α), x ∈ filter p univ ↔ p x
state_after: no goals

tactic: exact (Equiv.subtypeEquivRight <| by simp).prod_comp fun x : { x // ¬p x } => g x x.2
state_before: case e_a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Fintype α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : CommMonoid β
f : (a : α) → p a → β
g : (a : α) → ¬p a → β
⊢ ∏ x : { x // x ∈ filter (fun x => ¬p x) univ }, g ↑x ⋯ = ∏ a : { a // ¬p a }, g ↑a ⋯
state_after: no goals

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : Fintype α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : CommMonoid β
f : (a : α) → p a → β
g : (a : α) → ¬p a → β
⊢ ∀ (x : α), x ∈ filter (fun x => ¬p x) univ ↔ ¬p x
state_after: no goals
Theorem: Nat.Prime.divisors
File: Mathlib/NumberTheory/Divisors.lean

tactic: ext
state_before: n p : ℕ
pp : Prime p
⊢ p.divisors = {1, p}
state_after: case a
n p : ℕ
pp : Prime p
a✝ : ℕ
⊢ a✝ ∈ p.divisors ↔ a✝ ∈ {1, p}

tactic: rw [mem_divisors, dvd_prime pp, and_iff_left pp.ne_zero, Finset.mem_insert, Finset.mem_singleton]
state_before: case a
n p : ℕ
pp : Prime p
a✝ : ℕ
⊢ a✝ ∈ p.divisors ↔ a✝ ∈ {1, p}
state_after: no goals