1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: LocalRing.finrank_CotangentSpace_eq_one_iff
File: Mathlib/RingTheory/DiscreteValuationRing/TFAE.lean

tactic: by_cases hR : IsField R
state_before: R : Type u_1
inst✝⁶ : CommRing R
K : Type u_2
inst✝⁵ : Field K
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
⊢ finrank (ResidueField R) (CotangentSpace R) = 1 ↔ DiscreteValuationRing R
state_after: case pos
R : Type u_1
inst✝⁶ : CommRing R
K : Type u_2
inst✝⁵ : Field K
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
hR : IsField R
⊢ finrank (ResidueField R) (CotangentSpace R) = 1 ↔ DiscreteValuationRing R

case neg
R : Type u_1
inst✝⁶ : CommRing R
K : Type u_2
inst✝⁵ : Field K
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
hR : ¬IsField R
⊢ finrank (ResidueField R) (CotangentSpace R) = 1 ↔ DiscreteValuationRing R

tactic: letI := hR.toField
state_before: case pos
R : Type u_1
inst✝⁶ : CommRing R
K : Type u_2
inst✝⁵ : Field K
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
hR : IsField R
⊢ finrank (ResidueField R) (CotangentSpace R) = 1 ↔ DiscreteValuationRing R
state_after: case pos
R : Type u_1
inst✝⁶ : CommRing R
K : Type u_2
inst✝⁵ : Field K
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
hR : IsField R
this : Field R := hR.toField
⊢ finrank (ResidueField R) (CotangentSpace R) = 1 ↔ DiscreteValuationRing R

tactic: simp only [finrank_cotangentSpace_eq_zero, zero_ne_one, false_iff]
state_before: case pos
R : Type u_1
inst✝⁶ : CommRing R
K : Type u_2
inst✝⁵ : Field K
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
hR : IsField R
this : Field R := hR.toField
⊢ finrank (ResidueField R) (CotangentSpace R) = 1 ↔ DiscreteValuationRing R
state_after: case pos
R : Type u_1
inst✝⁶ : CommRing R
K : Type u_2
inst✝⁵ : Field K
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
hR : IsField R
this : Field R := hR.toField
⊢ ¬DiscreteValuationRing R

tactic: exact fun h ↦ h.3 maximalIdeal_eq_bot
state_before: case pos
R : Type u_1
inst✝⁶ : CommRing R
K : Type u_2
inst✝⁵ : Field K
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
hR : IsField R
this : Field R := hR.toField
⊢ ¬DiscreteValuationRing R
state_after: no goals

tactic: exact (DiscreteValuationRing.TFAE R hR).out 5 0
state_before: case neg
R : Type u_1
inst✝⁶ : CommRing R
K : Type u_2
inst✝⁵ : Field K
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : IsDomain R
hR : ¬IsField R
⊢ finrank (ResidueField R) (CotangentSpace R) = 1 ↔ DiscreteValuationRing R
state_after: no goals
Theorem: MeasureTheory.setLIntegral_withDensity_eq_setLIntegral_mul_non_measurable₀
File: Mathlib/MeasureTheory/Measure/WithDensity.lean

tactic: rw [restrict_withDensity hs, lintegral_withDensity_eq_lintegral_mul_non_measurable₀ _ hf h'f]
state_before: α : Type u_1
m0 : MeasurableSpace α
μ✝ μ : Measure α
f : α → ℝ≥0∞
s : Set α
hf : AEMeasurable f (μ.restrict s)
g : α → ℝ≥0∞
hs : MeasurableSet s
h'f : ∀ᵐ (x : α) ∂μ.restrict s, f x < ⊤
⊢ ∫⁻ (a : α) in s, g a ∂μ.withDensity f = ∫⁻ (a : α) in s, (f * g) a ∂μ
state_after: no goals
Theorem: WeierstrassCurve.Projective.fin3_def
File: Mathlib/AlgebraicGeometry/EllipticCurve/Projective.lean

tactic: ext n
state_before: R✝ : Type u
inst✝ : CommRing R✝
W : Projective R✝
R : Type u
P : Fin 3 → R
⊢ P = ![P 0, P 1, P 2]
state_after: case h
R✝ : Type u
inst✝ : CommRing R✝
W : Projective R✝
R : Type u
P : Fin 3 → R
n : Fin 3
⊢ P n = ![P 0, P 1, P 2] n

tactic: fin_cases n <;> rfl
state_before: case h
R✝ : Type u
inst✝ : CommRing R✝
W : Projective R✝
R : Type u
P : Fin 3 → R
n : Fin 3
⊢ P n = ![P 0, P 1, P 2] n
state_after: no goals
Theorem: topologicalGroup_inf
File: Mathlib/Topology/Algebra/Group/Basic.lean

tactic: refine topologicalGroup_iInf fun b => ?_
state_before: G : Type w
H : Type x
α : Type u
β : Type v
ι : Sort u_1
inst✝ : Group G
t₁ t₂ : TopologicalSpace G
h₁ : TopologicalGroup G
h₂ : TopologicalGroup G
⊢ TopologicalGroup G
state_after: G : Type w
H : Type x
α : Type u
β : Type v
ι : Sort u_1
inst✝ : Group G
t₁ t₂ : TopologicalSpace G
h₁ : TopologicalGroup G
h₂ : TopologicalGroup G
b : Bool
⊢ TopologicalGroup G

tactic: cases b <;> assumption
state_before: G : Type w
H : Type x
α : Type u
β : Type v
ι : Sort u_1
inst✝ : Group G
t₁ t₂ : TopologicalSpace G
h₁ : TopologicalGroup G
h₂ : TopologicalGroup G
b : Bool
⊢ TopologicalGroup G
state_after: no goals
Theorem: IsUnramifiedAtInfinitePlaces.bot
File: Mathlib/NumberTheory/NumberField/Embeddings.lean

tactic: obtain ⟨w, rfl⟩ := InfinitePlace.comap_surjective (K := F) w
state_before: k : Type u_1
inst✝⁷ : Field k
K : Type u_2
inst✝⁶ : Field K
F : Type u_3
inst✝⁵ : Field F
inst✝⁴ : Algebra k K
inst✝³ : Algebra k F
inst✝² : Algebra K F
inst✝¹ : IsScalarTower k K F
h₁ : IsUnramifiedAtInfinitePlaces k F
inst✝ : Algebra.IsAlgebraic K F
w : InfinitePlace K
⊢ InfinitePlace.IsUnramified k w
state_after: case intro
k : Type u_1
inst✝⁷ : Field k
K : Type u_2
inst✝⁶ : Field K
F : Type u_3
inst✝⁵ : Field F
inst✝⁴ : Algebra k K
inst✝³ : Algebra k F
inst✝² : Algebra K F
inst✝¹ : IsScalarTower k K F
h₁ : IsUnramifiedAtInfinitePlaces k F
inst✝ : Algebra.IsAlgebraic K F
w : InfinitePlace F
⊢ InfinitePlace.IsUnramified k ((fun x => x.comap (algebraMap K F)) w)

tactic: exact (h₁.1 w).comap K
state_before: case intro
k : Type u_1
inst✝⁷ : Field k
K : Type u_2
inst✝⁶ : Field K
F : Type u_3
inst✝⁵ : Field F
inst✝⁴ : Algebra k K
inst✝³ : Algebra k F
inst✝² : Algebra K F
inst✝¹ : IsScalarTower k K F
h₁ : IsUnramifiedAtInfinitePlaces k F
inst✝ : Algebra.IsAlgebraic K F
w : InfinitePlace F
⊢ InfinitePlace.IsUnramified k ((fun x => x.comap (algebraMap K F)) w)
state_after: no goals
Theorem: CategoryTheory.ShortComplex.π_homologyMap_ι
File: Mathlib/Algebra/Homology/ShortComplex/Homology.lean

tactic: simp only [homologyι_naturality, homology_π_ι_assoc, p_opcyclesMap]
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
S S₁ S₂ S₃ S₄ : ShortComplex C
φ✝ : S₁ ⟶ S₂
h₁ : S₁.HomologyData
h₂ : S₂.HomologyData
A : C
inst✝² : S.HasHomology
inst✝¹ : S₁.HasHomology
inst✝ : S₂.HasHomology
φ : S₁ ⟶ S₂
⊢ S₁.homologyπ ≫ homologyMap φ ≫ S₂.homologyι = S₁.iCycles ≫ φ.τ₂ ≫ S₂.pOpcycles
state_after: no goals
Theorem: IsGδ.sInter
File: Mathlib/Topology/GDelta.lean

tactic: simpa only [sInter_eq_biInter] using IsGδ.biInter hS h
state_before: X : Type u_1
Y : Type u_2
ι : Type u_3
ι' : Sort u_4
inst✝ : TopologicalSpace X
S : Set (Set X)
h : ∀ s ∈ S, IsGδ s
hS : S.Countable
⊢ IsGδ (⋂₀ S)
state_after: no goals
Theorem: DFinsupp.erase_single_ne
File: Mathlib/Data/DFinsupp/Basic.lean

tactic: rw [erase_single, if_neg h]
state_before: ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s : Finset ι
x✝ : (i : ↑↑s) → β ↑i
i✝ i j : ι
x : β i
h : i ≠ j
⊢ erase j (single i x) = single i x
state_after: no goals
Theorem: SimpleGraph.end_hom_mk_of_mk
File: Mathlib/Combinatorics/SimpleGraph/Ends/Defs.lean

tactic: rw [← sec h, hs]
state_before: V : Type u
G : SimpleGraph V
K✝ L✝ L' M : Set V
s : (j : (Finset V)ᵒᵖ) → G.componentComplFunctor.obj j
sec : s ∈ G.end
K L : (Finset V)ᵒᵖ
h : L ⟶ K
v : V
vnL : v ∉ L.unop
hs : s L = G.componentComplMk vnL
⊢ s K = G.componentComplMk ⋯
state_after: V : Type u
G : SimpleGraph V
K✝ L✝ L' M : Set V
s : (j : (Finset V)ᵒᵖ) → G.componentComplFunctor.obj j
sec : s ∈ G.end
K L : (Finset V)ᵒᵖ
h : L ⟶ K
v : V
vnL : v ∉ L.unop
hs : s L = G.componentComplMk vnL
⊢ G.componentComplFunctor.map h (G.componentComplMk vnL) = G.componentComplMk ⋯

tactic: apply ComponentCompl.hom_mk _ (le_of_op_hom h : _ ⊆ _)
state_before: V : Type u
G : SimpleGraph V
K✝ L✝ L' M : Set V
s : (j : (Finset V)ᵒᵖ) → G.componentComplFunctor.obj j
sec : s ∈ G.end
K L : (Finset V)ᵒᵖ
h : L ⟶ K
v : V
vnL : v ∉ L.unop
hs : s L = G.componentComplMk vnL
⊢ G.componentComplFunctor.map h (G.componentComplMk vnL) = G.componentComplMk ⋯
state_after: no goals
Theorem: Complex.equivRealProd_apply_le
File: Mathlib/Analysis/Complex/Basic.lean

tactic: simp [Prod.norm_def, abs_re_le_abs, abs_im_le_abs]
state_before: z✝ : ℂ
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z : ℂ
⊢ ‖equivRealProd z‖ ≤ abs z
state_after: no goals
Theorem: hnot_le_iff_codisjoint_right
File: Mathlib/Order/Heyting/Basic.lean

tactic: rw [← top_sdiff', sdiff_le_iff, codisjoint_iff_le_sup]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : CoheytingAlgebra α
a b c : α
⊢ ￢a ≤ b ↔ Codisjoint a b
state_after: no goals
Theorem: toIxxMod_iff
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: rw [toIcoMod_eq_sub, toIocMod_eq_sub _ x₁, add_le_add_iff_right, ← neg_sub x₁ x₃, toIocMod_neg,
  neg_zero, le_sub_iff_add_le]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b c : α
n : ℤ
x₁ x₂ x₃ : α
⊢ toIcoMod hp x₁ x₂ ≤ toIocMod hp x₁ x₃ ↔ toIcoMod hp 0 (x₂ - x₁) + toIcoMod hp 0 (x₁ - x₃) ≤ p
state_after: no goals
Theorem: ConcaveOn.average_mem_hypograph
File: Mathlib/Analysis/Convex/Integral.lean

tactic: simpa only [mem_setOf_eq, Pi.neg_apply, average_neg, neg_le_neg_iff] using
  hg.neg.average_mem_epigraph hgc.neg hsc hfs hfi hgi.neg
state_before: α : Type u_1
E : Type u_2
F : Type u_3
m0 : MeasurableSpace α
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : CompleteSpace E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
inst✝² : CompleteSpace F
μ : Measure α
s : Set E
t : Set α
f : α → E
g : E → ℝ
C : ℝ
inst✝¹ : IsFiniteMeasure μ
inst✝ : NeZero μ
hg : ConcaveOn ℝ s g
hgc : ContinuousOn g s
hsc : IsClosed s
hfs : ∀ᵐ (x : α) ∂μ, f x ∈ s
hfi : Integrable f μ
hgi : Integrable (g ∘ f) μ
⊢ (⨍ (x : α), f x ∂μ, ⨍ (x : α), g (f x) ∂μ) ∈ {p | p.1 ∈ s ∧ p.2 ≤ g p.1}
state_after: no goals
Theorem: CategoryTheory.Limits.CompleteLattice.coprod_eq_sup
File: Mathlib/CategoryTheory/Limits/Lattice.lean

tactic: rw [finite_colimit_eq_finset_univ_sup (pair x y)]
state_before: α : Type u
J : Type w
inst✝³ : SmallCategory J
inst✝² : FinCategory J
inst✝¹ : SemilatticeSup α
inst✝ : OrderBot α
x y : α
⊢ colimit (pair x y) = Finset.univ.sup (pair x y).obj
state_after: no goals

tactic: rw [sup_bot_eq]
state_before: α : Type u
J : Type w
inst✝³ : SmallCategory J
inst✝² : FinCategory J
inst✝¹ : SemilatticeSup α
inst✝ : OrderBot α
x y : α
⊢ x ⊔ (y ⊔ ⊥) = x ⊔ y
state_after: no goals
Theorem: Subgroup.mem_normalizer_iff'
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

tactic: rw [h, mul_assoc, mul_inv_cancel_right]
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
H K : Subgroup G
g : G
h : g ∈ H.normalizer
n : G
⊢ n * g ∈ H ↔ g * n ∈ H
state_after: no goals

tactic: rw [mul_assoc, ← h, inv_mul_cancel_right]
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
H K : Subgroup G
g : G
h : ∀ (n : G), n * g ∈ H ↔ g * n ∈ H
n : G
⊢ n ∈ H ↔ g * n * g⁻¹ ∈ H
state_after: no goals
Theorem: ENNReal.monotone_truncateToReal
File: Mathlib/Topology/Instances/ENNReal.lean

tactic: intro x y x_le_y
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
⊢ Monotone t.truncateToReal
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
x y : ℝ≥0∞
x_le_y : x ≤ y
⊢ t.truncateToReal x ≤ t.truncateToReal y

tactic: have obs_x : min t x ≠ ∞ := by
  simp_all only [ne_eq, ge_iff_le, min_eq_top, false_and, not_false_eq_true]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
x y : ℝ≥0∞
x_le_y : x ≤ y
⊢ t.truncateToReal x ≤ t.truncateToReal y
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
x y : ℝ≥0∞
x_le_y : x ≤ y
obs_x : min t x ≠ ⊤
⊢ t.truncateToReal x ≤ t.truncateToReal y

tactic: have obs_y : min t y ≠ ∞ := by
  simp_all only [ne_eq, ge_iff_le, min_eq_top, false_and, not_false_eq_true]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
x y : ℝ≥0∞
x_le_y : x ≤ y
obs_x : min t x ≠ ⊤
⊢ t.truncateToReal x ≤ t.truncateToReal y
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
x y : ℝ≥0∞
x_le_y : x ≤ y
obs_x : min t x ≠ ⊤
obs_y : min t y ≠ ⊤
⊢ t.truncateToReal x ≤ t.truncateToReal y

tactic: exact (ENNReal.toReal_le_toReal obs_x obs_y).mpr (min_le_min_left t x_le_y)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
x y : ℝ≥0∞
x_le_y : x ≤ y
obs_x : min t x ≠ ⊤
obs_y : min t y ≠ ⊤
⊢ t.truncateToReal x ≤ t.truncateToReal y
state_after: no goals

tactic: simp_all only [ne_eq, ge_iff_le, min_eq_top, false_and, not_false_eq_true]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
x y : ℝ≥0∞
x_le_y : x ≤ y
⊢ min t x ≠ ⊤
state_after: no goals

tactic: simp_all only [ne_eq, ge_iff_le, min_eq_top, false_and, not_false_eq_true]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
x y : ℝ≥0∞
x_le_y : x ≤ y
obs_x : min t x ≠ ⊤
⊢ min t y ≠ ⊤
state_after: no goals
Theorem: Real.cos_half
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: have : 0 ≤ cos (x / 2) := cos_nonneg_of_mem_Icc <| by constructor <;> linarith
state_before: x : ℝ
hl : -π ≤ x
hr : x ≤ π
⊢ cos (x / 2) = √((1 + cos x) / 2)
state_after: x : ℝ
hl : -π ≤ x
hr : x ≤ π
this : 0 ≤ cos (x / 2)
⊢ cos (x / 2) = √((1 + cos x) / 2)

tactic: rw [← sqrt_sq this, cos_sq, add_div, two_mul, add_halves]
state_before: x : ℝ
hl : -π ≤ x
hr : x ≤ π
this : 0 ≤ cos (x / 2)
⊢ cos (x / 2) = √((1 + cos x) / 2)
state_after: no goals

tactic: constructor <;> linarith
state_before: x : ℝ
hl : -π ≤ x
hr : x ≤ π
⊢ x / 2 ∈ Icc (-(π / 2)) (π / 2)
state_after: no goals
Theorem: CategoryTheory.Bicategory.right_triangle_of_left_triangle
File: Mathlib/CategoryTheory/Bicategory/Adjunction.lean

tactic: rw [← cancel_epi (rightZigzag η.hom ε.hom ≫ (λ_ g).hom ≫ (ρ_ g).inv)]
state_before: B : Type u
inst✝ : Bicategory B
a b c : B
f : a ⟶ b
g : b ⟶ a
η : 𝟙 a ≅ f ≫ g
ε : g ≫ f ≅ 𝟙 b
h : leftZigzag η.hom ε.hom = (λ_ f).hom ≫ (ρ_ f).inv
⊢ rightZigzag η.hom ε.hom = (ρ_ g).hom ≫ (λ_ g).inv
state_after: B : Type u
inst✝ : Bicategory B
a b c : B
f : a ⟶ b
g : b ⟶ a
η : 𝟙 a ≅ f ≫ g
ε : g ≫ f ≅ 𝟙 b
h : leftZigzag η.hom ε.hom = (λ_ f).hom ≫ (ρ_ f).inv
⊢ (rightZigzag η.hom ε.hom ≫ (λ_ g).hom ≫ (ρ_ g).inv) ≫ rightZigzag η.hom ε.hom =
    (rightZigzag η.hom ε.hom ≫ (λ_ g).hom ≫ (ρ_ g).inv) ≫ (ρ_ g).hom ≫ (λ_ g).inv

tactic: calc
  _ = rightZigzag η.hom ε.hom ⊗≫ rightZigzag η.hom ε.hom := by coherence
  _ = rightZigzag η.hom ε.hom := rightZigzag_idempotent_of_left_triangle _ _ h
  _ = _ := by simp
state_before: B : Type u
inst✝ : Bicategory B
a b c : B
f : a ⟶ b
g : b ⟶ a
η : 𝟙 a ≅ f ≫ g
ε : g ≫ f ≅ 𝟙 b
h : leftZigzag η.hom ε.hom = (λ_ f).hom ≫ (ρ_ f).inv
⊢ (rightZigzag η.hom ε.hom ≫ (λ_ g).hom ≫ (ρ_ g).inv) ≫ rightZigzag η.hom ε.hom =
    (rightZigzag η.hom ε.hom ≫ (λ_ g).hom ≫ (ρ_ g).inv) ≫ (ρ_ g).hom ≫ (λ_ g).inv
state_after: no goals

tactic: coherence
state_before: B : Type u
inst✝ : Bicategory B
a b c : B
f : a ⟶ b
g : b ⟶ a
η : 𝟙 a ≅ f ≫ g
ε : g ≫ f ≅ 𝟙 b
h : leftZigzag η.hom ε.hom = (λ_ f).hom ≫ (ρ_ f).inv
⊢ (rightZigzag η.hom ε.hom ≫ (λ_ g).hom ≫ (ρ_ g).inv) ≫ rightZigzag η.hom ε.hom =
    rightZigzag η.hom ε.hom ⊗≫ rightZigzag η.hom ε.hom
state_after: no goals

tactic: simp
state_before: B : Type u
inst✝ : Bicategory B
a b c : B
f : a ⟶ b
g : b ⟶ a
η : 𝟙 a ≅ f ≫ g
ε : g ≫ f ≅ 𝟙 b
h : leftZigzag η.hom ε.hom = (λ_ f).hom ≫ (ρ_ f).inv
⊢ rightZigzag η.hom ε.hom = (rightZigzag η.hom ε.hom ≫ (λ_ g).hom ≫ (ρ_ g).inv) ≫ (ρ_ g).hom ≫ (λ_ g).inv
state_after: no goals
Theorem: Commute.isNilpotent_mul_right
File: Mathlib/RingTheory/Nilpotent/Defs.lean

tactic: rw [h_comm.eq]
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝ : Semiring R
h_comm : Commute x y
h : IsNilpotent y
⊢ IsNilpotent (x * y)
state_after: R : Type u_1
S : Type u_2
x y : R
inst✝ : Semiring R
h_comm : Commute x y
h : IsNilpotent y
⊢ IsNilpotent (y * x)

tactic: exact h_comm.symm.isNilpotent_mul_left h
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝ : Semiring R
h_comm : Commute x y
h : IsNilpotent y
⊢ IsNilpotent (y * x)
state_after: no goals
Theorem: torusIntegral_smul
File: Mathlib/MeasureTheory/Integral/TorusIntegral.lean

tactic: simp only [torusIntegral, integral_smul, ← smul_comm a (_ : ℂ) (_ : E)]
state_before: n : ℕ
E : Type u_1
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℂ E
inst✝³ : CompleteSpace E
f✝ g : (Fin n → ℂ) → E
c✝ : Fin n → ℂ
R✝ : Fin n → ℝ
𝕜 : Type u_2
inst✝² : RCLike 𝕜
inst✝¹ : NormedSpace 𝕜 E
inst✝ : SMulCommClass 𝕜 ℂ E
a : 𝕜
f : (Fin n → ℂ) → E
c : Fin n → ℂ
R : Fin n → ℝ
⊢ (∯ (x : Fin n → ℂ) in T(c, R), a • f x) = a • ∯ (x : Fin n → ℂ) in T(c, R), f x
state_after: no goals
Theorem: Sum.getRight?_eq_none_iff
File: .lake/packages/batteries/Batteries/Data/Sum/Lemmas.lean

tactic: cases x <;> simp only [getRight?, isLeft, eq_self_iff_true]
state_before: α : Type u_1
β : Type u_2
x : α ⊕ β
⊢ x.getRight? = none ↔ x.isLeft = true
state_after: no goals
Theorem: Ordinal.one_le_iff_ne_zero
File: Mathlib/SetTheory/Ordinal/Basic.lean

tactic: rw [one_le_iff_pos, Ordinal.pos_iff_ne_zero]
state_before: α : Type u
β : Type u_1
γ : Type u_2
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
o : Ordinal.{u_3}
⊢ 1 ≤ o ↔ o ≠ 0
state_after: no goals
Theorem: ZMod.exists_sq_eq_neg_two_iff
File: Mathlib/NumberTheory/LegendreSymbol/QuadraticReciprocity.lean

tactic: rw [FiniteField.isSquare_neg_two_iff, card p]
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
⊢ IsSquare (-2) ↔ p % 8 = 1 ∨ p % 8 = 3
state_after: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
⊢ p % 8 ≠ 5 ∧ p % 8 ≠ 7 ↔ p % 8 = 1 ∨ p % 8 = 3

tactic: have h₁ := Prime.mod_two_eq_one_iff_ne_two.mpr hp
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
⊢ p % 8 ≠ 5 ∧ p % 8 ≠ 7 ↔ p % 8 = 1 ∨ p % 8 = 3
state_after: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
h₁ : p % 2 = 1
⊢ p % 8 ≠ 5 ∧ p % 8 ≠ 7 ↔ p % 8 = 1 ∨ p % 8 = 3

tactic: rw [← mod_mod_of_dvd p (by decide : 2 ∣ 8)] at h₁
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
h₁ : p % 2 = 1
⊢ p % 8 ≠ 5 ∧ p % 8 ≠ 7 ↔ p % 8 = 1 ∨ p % 8 = 3
state_after: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
h₁ : p % 8 % 2 = 1
⊢ p % 8 ≠ 5 ∧ p % 8 ≠ 7 ↔ p % 8 = 1 ∨ p % 8 = 3

tactic: have h₂ := mod_lt p (by norm_num : 0 < 8)
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
h₁ : p % 8 % 2 = 1
⊢ p % 8 ≠ 5 ∧ p % 8 ≠ 7 ↔ p % 8 = 1 ∨ p % 8 = 3
state_after: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
h₁ : p % 8 % 2 = 1
h₂ : p % 8 < 8
⊢ p % 8 ≠ 5 ∧ p % 8 ≠ 7 ↔ p % 8 = 1 ∨ p % 8 = 3

tactic: revert h₂ h₁
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
h₁ : p % 8 % 2 = 1
h₂ : p % 8 < 8
⊢ p % 8 ≠ 5 ∧ p % 8 ≠ 7 ↔ p % 8 = 1 ∨ p % 8 = 3
state_after: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
⊢ p % 8 % 2 = 1 → p % 8 < 8 → (p % 8 ≠ 5 ∧ p % 8 ≠ 7 ↔ p % 8 = 1 ∨ p % 8 = 3)

tactic: generalize p % 8 = m
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
⊢ p % 8 % 2 = 1 → p % 8 < 8 → (p % 8 ≠ 5 ∧ p % 8 ≠ 7 ↔ p % 8 = 1 ∨ p % 8 = 3)
state_after: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
m : ℕ
⊢ m % 2 = 1 → m < 8 → (m ≠ 5 ∧ m ≠ 7 ↔ m = 1 ∨ m = 3)

tactic: clear! p
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
m : ℕ
⊢ m % 2 = 1 → m < 8 → (m ≠ 5 ∧ m ≠ 7 ↔ m = 1 ∨ m = 3)
state_after: m : ℕ
⊢ m % 2 = 1 → m < 8 → (m ≠ 5 ∧ m ≠ 7 ↔ m = 1 ∨ m = 3)

tactic: intros
state_before: m : ℕ
⊢ m % 2 = 1 → m < 8 → (m ≠ 5 ∧ m ≠ 7 ↔ m = 1 ∨ m = 3)
state_after: m : ℕ
h₁✝ : m % 2 = 1
h₂✝ : m < 8
⊢ m ≠ 5 ∧ m ≠ 7 ↔ m = 1 ∨ m = 3

tactic: interval_cases m <;> simp_all
state_before: m : ℕ
h₁✝ : m % 2 = 1
h₂✝ : m < 8
⊢ m ≠ 5 ∧ m ≠ 7 ↔ m = 1 ∨ m = 3
state_after: no goals

tactic: decide
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
h₁ : p % 2 = 1
⊢ 2 ∣ 8
state_after: no goals

tactic: norm_num
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
h₁ : p % 8 % 2 = 1
⊢ 0 < 8
state_after: no goals
Theorem: Filter.HasAntitoneBasis.mem_iff
File: Mathlib/Order/Filter/Bases.lean

tactic: simp only [exists_prop, true_and]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Sort u_5
inst✝ : Preorder ι
l : Filter α
s : ι → Set α
hs : l.HasAntitoneBasis s
t : Set α
⊢ (∃ i, True ∧ s i ⊆ t) ↔ ∃ i, s i ⊆ t
state_after: no goals
Theorem: memPartitionSet_zero
File: Mathlib/Data/Set/MemPartition.lean

tactic: simp [memPartitionSet]
state_before: α : Type u_1
f : ℕ → Set α
a : α
⊢ memPartitionSet f 0 a = univ
state_after: no goals
Theorem: ProjectiveSpectrum.zeroLocus_span
File: Mathlib/AlgebraicGeometry/ProjectiveSpectrum/Topology.lean

tactic: ext x
state_before: R : Type u_1
A : Type u_2
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
s : Set A
⊢ zeroLocus 𝒜 ↑(Ideal.span s) = zeroLocus 𝒜 s
state_after: case h
R : Type u_1
A : Type u_2
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
s : Set A
x : ProjectiveSpectrum 𝒜
⊢ x ∈ zeroLocus 𝒜 ↑(Ideal.span s) ↔ x ∈ zeroLocus 𝒜 s

tactic: exact (Submodule.gi _ _).gc s x.asHomogeneousIdeal.toIdeal
state_before: case h
R : Type u_1
A : Type u_2
inst✝³ : CommSemiring R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ℕ → Submodule R A
inst✝ : GradedAlgebra 𝒜
s : Set A
x : ProjectiveSpectrum 𝒜
⊢ x ∈ zeroLocus 𝒜 ↑(Ideal.span s) ↔ x ∈ zeroLocus 𝒜 s
state_after: no goals
Theorem: MeasureTheory.FiniteMeasure.restrict_apply
File: Mathlib/MeasureTheory/Measure/FiniteMeasure.lean

tactic: apply congr_arg ENNReal.toNNReal
state_before: Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
μ : FiniteMeasure Ω
A s : Set Ω
s_mble : MeasurableSet s
⊢ (μ.restrict A) s = μ (s ∩ A)
state_after: Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
μ : FiniteMeasure Ω
A s : Set Ω
s_mble : MeasurableSet s
⊢ ↑(μ.restrict A) s = ↑μ (s ∩ A)

tactic: exact Measure.restrict_apply s_mble
state_before: Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
μ : FiniteMeasure Ω
A s : Set Ω
s_mble : MeasurableSet s
⊢ ↑(μ.restrict A) s = ↑μ (s ∩ A)
state_after: no goals
Theorem: MeasureTheory.Measure.WeaklyRegular.smul
File: Mathlib/MeasureTheory/Measure/Regular.lean

tactic: haveI := OuterRegular.smul μ hx
state_before: α : Type u_1
β : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : TopologicalSpace α
μ : Measure α
inst✝ : μ.WeaklyRegular
x : ℝ≥0∞
hx : x ≠ ⊤
⊢ (x • μ).WeaklyRegular
state_after: α : Type u_1
β : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : TopologicalSpace α
μ : Measure α
inst✝ : μ.WeaklyRegular
x : ℝ≥0∞
hx : x ≠ ⊤
this : (x • μ).OuterRegular
⊢ (x • μ).WeaklyRegular

tactic: exact ⟨WeaklyRegular.innerRegular.smul x⟩
state_before: α : Type u_1
β : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : TopologicalSpace α
μ : Measure α
inst✝ : μ.WeaklyRegular
x : ℝ≥0∞
hx : x ≠ ⊤
this : (x • μ).OuterRegular
⊢ (x • μ).WeaklyRegular
state_after: no goals
Theorem: Subtype.nontrivial_iff_exists_ne
File: Mathlib/Logic/Nontrivial/Basic.lean

tactic: simp only [_root_.nontrivial_iff_exists_ne x, Subtype.exists, Ne, Subtype.ext_iff]
state_before: α : Type u_1
β : Type u_2
p : α → Prop
x : Subtype p
⊢ Nontrivial (Subtype p) ↔ ∃ y x_1, y ≠ ↑x
state_after: no goals