1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: map_inv₀
File: Mathlib/Algebra/GroupWithZero/Units/Lemmas.lean

tactic: by_cases h : a = 0
state_before: α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝⁴ : MonoidWithZero M₀
inst✝³ : GroupWithZero G₀
inst✝² : GroupWithZero G₀'
inst✝¹ : FunLike F G₀ G₀'
inst✝ : MonoidWithZeroHomClass F G₀ G₀'
f : F
a b : G₀
⊢ f a⁻¹ = (f a)⁻¹
state_after: case pos
α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝⁴ : MonoidWithZero M₀
inst✝³ : GroupWithZero G₀
inst✝² : GroupWithZero G₀'
inst✝¹ : FunLike F G₀ G₀'
inst✝ : MonoidWithZeroHomClass F G₀ G₀'
f : F
a b : G₀
h : a = 0
⊢ f a⁻¹ = (f a)⁻¹

case neg
α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝⁴ : MonoidWithZero M₀
inst✝³ : GroupWithZero G₀
inst✝² : GroupWithZero G₀'
inst✝¹ : FunLike F G₀ G₀'
inst✝ : MonoidWithZeroHomClass F G₀ G₀'
f : F
a b : G₀
h : ¬a = 0
⊢ f a⁻¹ = (f a)⁻¹

tactic: simp [h, map_zero f]
state_before: case pos
α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝⁴ : MonoidWithZero M₀
inst✝³ : GroupWithZero G₀
inst✝² : GroupWithZero G₀'
inst✝¹ : FunLike F G₀ G₀'
inst✝ : MonoidWithZeroHomClass F G₀ G₀'
f : F
a b : G₀
h : a = 0
⊢ f a⁻¹ = (f a)⁻¹
state_after: no goals

tactic: apply eq_inv_of_mul_eq_one_left
state_before: case neg
α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝⁴ : MonoidWithZero M₀
inst✝³ : GroupWithZero G₀
inst✝² : GroupWithZero G₀'
inst✝¹ : FunLike F G₀ G₀'
inst✝ : MonoidWithZeroHomClass F G₀ G₀'
f : F
a b : G₀
h : ¬a = 0
⊢ f a⁻¹ = (f a)⁻¹
state_after: case neg.h
α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝⁴ : MonoidWithZero M₀
inst✝³ : GroupWithZero G₀
inst✝² : GroupWithZero G₀'
inst✝¹ : FunLike F G₀ G₀'
inst✝ : MonoidWithZeroHomClass F G₀ G₀'
f : F
a b : G₀
h : ¬a = 0
⊢ f a⁻¹ * f a = 1

tactic: rw [← map_mul, inv_mul_cancel h, map_one]
state_before: case neg.h
α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝⁴ : MonoidWithZero M₀
inst✝³ : GroupWithZero G₀
inst✝² : GroupWithZero G₀'
inst✝¹ : FunLike F G₀ G₀'
inst✝ : MonoidWithZeroHomClass F G₀ G₀'
f : F
a b : G₀
h : ¬a = 0
⊢ f a⁻¹ * f a = 1
state_after: no goals
Theorem: Order.pred_le_pred_iff_of_not_isMin
File: Mathlib/Order/SuccPred/Basic.lean

tactic: rw [le_pred_iff_of_not_isMin hb, pred_lt_iff_of_not_isMin ha]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : PredOrder α
a b : α
ha : ¬IsMin a
hb : ¬IsMin b
⊢ pred a ≤ pred b ↔ a ≤ b
state_after: no goals
Theorem: Finset.subset_inter
File: Mathlib/Data/Finset/Basic.lean

tactic: simp (config := { contextual := true }) [subset_iff, mem_inter]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s s₁✝ s₂✝ t t₁ t₂ u✝ v : Finset α
a b : α
s₁ s₂ u : Finset α
⊢ s₁ ⊆ s₂ → s₁ ⊆ u → s₁ ⊆ s₂ ∩ u
state_after: no goals
Theorem: zpow_mul_comm
File: Mathlib/Algebra/Group/Basic.lean

tactic: rw [← zpow_add, Int.add_comm, zpow_add]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : Group G
a✝ b c d : G
n✝ : ℤ
a : G
m n : ℤ
⊢ a ^ m * a ^ n = a ^ n * a ^ m
state_after: no goals
Theorem: map_bind
File: Mathlib/Control/Basic.lean

tactic: rw [← bind_pure_comp, bind_assoc]
state_before: α β γ : Type u
m : Type u → Type v
inst✝¹ : Monad m
inst✝ : LawfulMonad m
x : m α
g : α → m β
f : β → γ
⊢ f <$> (x >>= g) = do
    let a ← x
    f <$> g a
state_after: α β γ : Type u
m : Type u → Type v
inst✝¹ : Monad m
inst✝ : LawfulMonad m
x : m α
g : α → m β
f : β → γ
⊢ (do
      let x ← x
      let a ← g x
      pure (f a)) =
    do
    let a ← x
    f <$> g a

tactic: simp [bind_pure_comp]
state_before: α β γ : Type u
m : Type u → Type v
inst✝¹ : Monad m
inst✝ : LawfulMonad m
x : m α
g : α → m β
f : β → γ
⊢ (do
      let x ← x
      let a ← g x
      pure (f a)) =
    do
    let a ← x
    f <$> g a
state_after: no goals
Theorem: Real.Angle.two_zsmul_toReal_eq_two_mul
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: rw [two_zsmul, ← two_nsmul, two_nsmul_toReal_eq_two_mul]
state_before: θ : Angle
⊢ (2 • θ).toReal = 2 * θ.toReal ↔ θ.toReal ∈ Set.Ioc (-π / 2) (π / 2)
state_after: no goals
Theorem: Sym2.fromRel_top
File: Mathlib/Data/Sym/Sym2.lean

tactic: apply Set.eq_univ_of_forall fun e => _
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
r : α → α → Prop
⊢ fromRel ⋯ = Set.univ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
r : α → α → Prop
⊢ ∀ (e : Sym2 α), e ∈ fromRel ⋯

tactic: apply Sym2.ind
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
r : α → α → Prop
⊢ ∀ (e : Sym2 α), e ∈ fromRel ⋯
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
r : α → α → Prop
⊢ ∀ (x y : α), s(x, y) ∈ fromRel ⋯

tactic: simp [-Set.top_eq_univ, Prop.top_eq_true]
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
r : α → α → Prop
⊢ ∀ (x y : α), s(x, y) ∈ fromRel ⋯
state_after: no goals
Theorem: Ordinal.lift_down
File: Mathlib/SetTheory/Ordinal/Basic.lean

tactic: rw [lift_card]
state_before: α : Type u
β : Type u_1
γ : Type u_2
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a : Ordinal.{u}
b : Ordinal.{max u v}
h : b ≤ lift.{v, u} a
⊢ b.card ≤ Cardinal.lift.{v, u} a.card
state_after: α : Type u
β : Type u_1
γ : Type u_2
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a : Ordinal.{u}
b : Ordinal.{max u v}
h : b ≤ lift.{v, u} a
⊢ b.card ≤ (lift.{v, u} a).card

tactic: exact card_le_card h
state_before: α : Type u
β : Type u_1
γ : Type u_2
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a : Ordinal.{u}
b : Ordinal.{max u v}
h : b ≤ lift.{v, u} a
⊢ b.card ≤ (lift.{v, u} a).card
state_after: no goals
Theorem: Mathlib.Meta.NormNum.isRat_ratCast
File: Mathlib/Tactic/NormNum/Inv.lean

tactic: norm_cast
state_before: R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
num✝ : ℤ
denom✝ : ℕ
qi : ℚ
invOf_mul_self✝ : qi * ↑denom✝ = 1
mul_invOf_self✝ : ↑denom✝ * qi = 1
⊢ ↑qi * ↑denom✝ = 1
state_after: no goals

tactic: norm_cast
state_before: R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
num✝ : ℤ
denom✝ : ℕ
qi : ℚ
invOf_mul_self✝ : qi * ↑denom✝ = 1
mul_invOf_self✝ : ↑denom✝ * qi = 1
⊢ ↑denom✝ * ↑qi = 1
state_after: no goals

tactic: simp only []
state_before: R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
num✝ : ℤ
denom✝ : ℕ
qi : ℚ
invOf_mul_self✝ : qi * ↑denom✝ = 1
mul_invOf_self✝ : ↑denom✝ * qi = 1
⊢ ↑(↑num✝ * ⅟↑denom✝) = ↑num✝ * ⅟↑denom✝
state_after: R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
num✝ : ℤ
denom✝ : ℕ
qi : ℚ
invOf_mul_self✝ : qi * ↑denom✝ = 1
mul_invOf_self✝ : ↑denom✝ * qi = 1
⊢ ↑(↑num✝ * qi) = ↑num✝ * ↑qi

tactic: norm_cast
state_before: R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
num✝ : ℤ
denom✝ : ℕ
qi : ℚ
invOf_mul_self✝ : qi * ↑denom✝ = 1
mul_invOf_self✝ : ↑denom✝ * qi = 1
⊢ ↑(↑num✝ * qi) = ↑num✝ * ↑qi
state_after: no goals
Theorem: WeierstrassCurve.φ_four
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Basic.lean

tactic: erw [φ, ψ_four, show (4 + 1 : ℤ) = 2 * 2 + 1 by rfl, ψ_odd, ψ_four, ψ_two, ψ_one, ψ_three]
state_before: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
⊢ W.φ 4 = C X * C W.preΨ₄ ^ 2 * W.ψ₂ ^ 2 - C W.preΨ₄ * W.ψ₂ ^ 4 * C W.Ψ₃ + C W.Ψ₃ ^ 4
state_after: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
⊢ C X * (C W.preΨ₄ * W.ψ₂) ^ 2 - (C W.preΨ₄ * W.ψ₂ * W.ψ₂ ^ 3 - 1 * C W.Ψ₃ ^ 3) * C W.Ψ₃ =
    C X * C W.preΨ₄ ^ 2 * W.ψ₂ ^ 2 - C W.preΨ₄ * W.ψ₂ ^ 4 * C W.Ψ₃ + C W.Ψ₃ ^ 4

tactic: ring1
state_before: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
⊢ C X * (C W.preΨ₄ * W.ψ₂) ^ 2 - (C W.preΨ₄ * W.ψ₂ * W.ψ₂ ^ 3 - 1 * C W.Ψ₃ ^ 3) * C W.Ψ₃ =
    C X * C W.preΨ₄ ^ 2 * W.ψ₂ ^ 2 - C W.preΨ₄ * W.ψ₂ ^ 4 * C W.Ψ₃ + C W.Ψ₃ ^ 4
state_after: no goals

tactic: rfl
state_before: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
⊢ 4 + 1 = 2 * 2 + 1
state_after: no goals
Theorem: SimplexCategory.skeletal
File: Mathlib/AlgebraicTopology/SimplexCategory.lean

tactic: suffices Fintype.card (Fin (X.len + 1)) = Fintype.card (Fin (Y.len + 1)) by
  ext
  simpa
state_before: X Y : SimplexCategory
x✝ : IsIsomorphic X Y
I : X ≅ Y
⊢ X = Y
state_after: X Y : SimplexCategory
x✝ : IsIsomorphic X Y
I : X ≅ Y
⊢ Fintype.card (Fin (X.len + 1)) = Fintype.card (Fin (Y.len + 1))

tactic: apply Fintype.card_congr
state_before: X Y : SimplexCategory
x✝ : IsIsomorphic X Y
I : X ≅ Y
⊢ Fintype.card (Fin (X.len + 1)) = Fintype.card (Fin (Y.len + 1))
state_after: case f
X Y : SimplexCategory
x✝ : IsIsomorphic X Y
I : X ≅ Y
⊢ Fin (X.len + 1) ≃ Fin (Y.len + 1)

tactic: exact ((skeletalFunctor ⋙ forget NonemptyFinLinOrd).mapIso I).toEquiv
state_before: case f
X Y : SimplexCategory
x✝ : IsIsomorphic X Y
I : X ≅ Y
⊢ Fin (X.len + 1) ≃ Fin (Y.len + 1)
state_after: no goals

tactic: ext
state_before: X Y : SimplexCategory
x✝ : IsIsomorphic X Y
I : X ≅ Y
this : Fintype.card (Fin (X.len + 1)) = Fintype.card (Fin (Y.len + 1))
⊢ X = Y
state_after: case a
X Y : SimplexCategory
x✝ : IsIsomorphic X Y
I : X ≅ Y
this : Fintype.card (Fin (X.len + 1)) = Fintype.card (Fin (Y.len + 1))
⊢ X.len = Y.len

tactic: simpa
state_before: case a
X Y : SimplexCategory
x✝ : IsIsomorphic X Y
I : X ≅ Y
this : Fintype.card (Fin (X.len + 1)) = Fintype.card (Fin (Y.len + 1))
⊢ X.len = Y.len
state_after: no goals
Theorem: continuous_norm'
File: Mathlib/Analysis/Normed/Group/Basic.lean

tactic: simpa using continuous_id.dist (continuous_const : Continuous fun _a => (1 : E))
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝³ : SeminormedGroup E
inst✝² : SeminormedGroup F
inst✝¹ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
inst✝ : FunLike 𝓕 E F
⊢ Continuous fun a => ‖a‖
state_after: no goals
Theorem: IsUnit.eq_div_iff
File: Mathlib/Algebra/Group/Units.lean

tactic: rw [div_eq_mul_inv, h.eq_mul_inv_iff_mul_eq]
state_before: α : Type u
M : Type u_1
N : Type u_2
inst✝ : DivisionMonoid α
a b c : α
h : IsUnit c
⊢ a = b / c ↔ a * c = b
state_after: no goals
Theorem: hasFDerivWithinAt_of_mem_nhds
File: Mathlib/Analysis/Calculus/FDeriv/Basic.lean

tactic: rw [HasFDerivAt, HasFDerivWithinAt, nhdsWithin_eq_nhds.mpr h]
state_before: 𝕜 : Type u_1
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type u_4
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type u_5
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
f f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x : E
s t : Set E
L L₁ L₂ : Filter E
h : s ∈ 𝓝 x
⊢ HasFDerivWithinAt f f' s x ↔ HasFDerivAt f f' x
state_after: no goals
Theorem: IsCyclotomicExtension.Rat.Three.eta_sq
File: Mathlib/NumberTheory/Cyclotomic/Three.lean

tactic: rw [← neg_add', ← add_eq_zero_iff_eq_neg, ← add_assoc]
state_before: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
⊢ ↑η ^ 2 = -↑η - 1
state_after: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
⊢ ↑η ^ 2 + ↑η + 1 = 0

tactic: ext
state_before: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
⊢ ↑η ^ 2 + ↑η + 1 = 0
state_after: case h
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
⊢ ↑(↑η ^ 2 + ↑η + 1) = ↑0

tactic: simpa using hζ.isRoot_cyclotomic (by decide)
state_before: case h
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
⊢ ↑(↑η ^ 2 + ↑η + 1) = ↑0
state_after: no goals

tactic: decide
state_before: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
⊢ 0 < ↑3
state_after: no goals
Theorem: continuousAt_cpow
File: Mathlib/Analysis/SpecialFunctions/Pow/Continuity.lean

tactic: rw [continuousAt_congr (cpow_eq_nhds' <| slitPlane_ne_zero hp_fst)]
state_before: α : Type u_1
p : ℂ × ℂ
hp_fst : p.1 ∈ slitPlane
⊢ ContinuousAt (fun x => x.1 ^ x.2) p
state_after: α : Type u_1
p : ℂ × ℂ
hp_fst : p.1 ∈ slitPlane
⊢ ContinuousAt (fun x => cexp (Complex.log x.1 * x.2)) p

tactic: refine continuous_exp.continuousAt.comp ?_
state_before: α : Type u_1
p : ℂ × ℂ
hp_fst : p.1 ∈ slitPlane
⊢ ContinuousAt (fun x => cexp (Complex.log x.1 * x.2)) p
state_after: α : Type u_1
p : ℂ × ℂ
hp_fst : p.1 ∈ slitPlane
⊢ ContinuousAt (fun x => Complex.log x.1 * x.2) p

tactic: exact
  ContinuousAt.mul
    (ContinuousAt.comp (continuousAt_clog hp_fst) continuous_fst.continuousAt)
    continuous_snd.continuousAt
state_before: α : Type u_1
p : ℂ × ℂ
hp_fst : p.1 ∈ slitPlane
⊢ ContinuousAt (fun x => Complex.log x.1 * x.2) p
state_after: no goals
Theorem: Cardinal.lift_two_power
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: simp [← one_add_one_eq_two]
state_before: α β : Type u
a : Cardinal.{u_1}
⊢ lift.{v, u_1} (2 ^ a) = 2 ^ lift.{v, u_1} a
state_after: no goals
Theorem: sdiff_symmDiff_left
File: Mathlib/Order/SymmDiff.lean

tactic: simp [sdiff_symmDiff]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : GeneralizedBooleanAlgebra α
a b c d : α
⊢ a \ a ∆ b = a ⊓ b
state_after: no goals
Theorem: Polynomial.coeff_mul_of_natDegree_le
File: Mathlib/Algebra/Polynomial/Degree/Lemmas.lean

tactic: simp_rw [← Polynomial.toFinsupp_apply, toFinsupp_mul]
state_before: R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
pm : p.natDegree ≤ m
qn : q.natDegree ≤ n
⊢ (p * q).coeff (m + n) = p.coeff m * q.coeff n
state_after: R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
pm : p.natDegree ≤ m
qn : q.natDegree ≤ n
⊢ (p.toFinsupp * q.toFinsupp) (m + n) = p.toFinsupp m * q.toFinsupp n

tactic: refine AddMonoidAlgebra.apply_add_of_supDegree_le ?_ Function.injective_id ?_ ?_
state_before: R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
pm : p.natDegree ≤ m
qn : q.natDegree ≤ n
⊢ (p.toFinsupp * q.toFinsupp) (m + n) = p.toFinsupp m * q.toFinsupp n
state_after: case refine_1
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
pm : p.natDegree ≤ m
qn : q.natDegree ≤ n
⊢ ∀ (a1 a2 : ℕ), id (a1 + a2) = id a1 + id a2

case refine_2
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
pm : p.natDegree ≤ m
qn : q.natDegree ≤ n
⊢ AddMonoidAlgebra.supDegree id p.toFinsupp ≤ id m

case refine_3
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
pm : p.natDegree ≤ m
qn : q.natDegree ≤ n
⊢ AddMonoidAlgebra.supDegree id q.toFinsupp ≤ id n

tactic: simp
state_before: case refine_1
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
pm : p.natDegree ≤ m
qn : q.natDegree ≤ n
⊢ ∀ (a1 a2 : ℕ), id (a1 + a2) = id a1 + id a2
state_after: no goals

tactic: rwa [supDegree_eq_natDegree, id_eq]
state_before: case refine_2
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
pm : p.natDegree ≤ m
qn : q.natDegree ≤ n
⊢ AddMonoidAlgebra.supDegree id p.toFinsupp ≤ id m
state_after: no goals

tactic: rwa [supDegree_eq_natDegree, id_eq]
state_before: case refine_3
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
pm : p.natDegree ≤ m
qn : q.natDegree ≤ n
⊢ AddMonoidAlgebra.supDegree id q.toFinsupp ≤ id n
state_after: no goals
Theorem: CategoryTheory.frobeniusMorphism_iso_of_expComparison_iso
File: Mathlib/CategoryTheory/Closed/Functor.lean

tactic: rw [← frobeniusMorphism_mate F h] at i
state_before: C : Type u
inst✝⁶ : Category.{v, u} C
D : Type u'
inst✝⁵ : Category.{v, u'} D
inst✝⁴ : HasFiniteProducts C
inst✝³ : HasFiniteProducts D
F : C ⥤ D
L : D ⥤ C
inst✝² : CartesianClosed C
inst✝¹ : CartesianClosed D
inst✝ : PreservesLimitsOfShape (Discrete WalkingPair) F
h : L ⊣ F
A : C
i : IsIso (expComparison F A)
⊢ IsIso (frobeniusMorphism F h A)
state_after: C : Type u
inst✝⁶ : Category.{v, u} C
D : Type u'
inst✝⁵ : Category.{v, u'} D
inst✝⁴ : HasFiniteProducts C
inst✝³ : HasFiniteProducts D
F : C ⥤ D
L : D ⥤ C
inst✝² : CartesianClosed C
inst✝¹ : CartesianClosed D
inst✝ : PreservesLimitsOfShape (Discrete WalkingPair) F
h : L ⊣ F
A : C
i :
  IsIso
    ((transferNatTransSelf (h.comp (exp.adjunction A)) ((exp.adjunction (F.obj A)).comp h)) (frobeniusMorphism F h A))
⊢ IsIso (frobeniusMorphism F h A)

tactic: exact @transferNatTransSelf_of_iso _ _ _ _ _ _ _ _ _ _ _ i
state_before: C : Type u
inst✝⁶ : Category.{v, u} C
D : Type u'
inst✝⁵ : Category.{v, u'} D
inst✝⁴ : HasFiniteProducts C
inst✝³ : HasFiniteProducts D
F : C ⥤ D
L : D ⥤ C
inst✝² : CartesianClosed C
inst✝¹ : CartesianClosed D
inst✝ : PreservesLimitsOfShape (Discrete WalkingPair) F
h : L ⊣ F
A : C
i :
  IsIso
    ((transferNatTransSelf (h.comp (exp.adjunction A)) ((exp.adjunction (F.obj A)).comp h)) (frobeniusMorphism F h A))
⊢ IsIso (frobeniusMorphism F h A)
state_after: no goals
Theorem: MeasureTheory.prob_compl_eq_one_iff₀
File: Mathlib/MeasureTheory/Measure/Typeclasses.lean

tactic: rw [← prob_compl_eq_zero_iff₀ hs.compl, compl_compl]
state_before: α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
inst✝ : IsProbabilityMeasure μ
p : α → Prop
f : β → α
hs : NullMeasurableSet s μ
⊢ μ sᶜ = 1 ↔ μ s = 0
state_after: no goals
Theorem: MonoidHom.FixedPointFree.orderOf_ne_two_of_involutive
File: Mathlib/GroupTheory/FixedPointFree.lean

tactic: intro hg
state_before: G : Type u_1
inst✝¹ : Group G
φ : G →* G
hφ : FixedPointFree ⇑φ
inst✝ : Finite G
h2 : Function.Involutive ⇑φ
g : G
⊢ orderOf g ≠ 2
state_after: G : Type u_1
inst✝¹ : Group G
φ : G →* G
hφ : FixedPointFree ⇑φ
inst✝ : Finite G
h2 : Function.Involutive ⇑φ
g : G
hg : orderOf g = 2
⊢ False

tactic: have key : φ g = g := by
  rw [hφ.coe_eq_inv_of_involutive h2, inv_eq_iff_mul_eq_one, ← sq, ← hg, pow_orderOf_eq_one]
state_before: G : Type u_1
inst✝¹ : Group G
φ : G →* G
hφ : FixedPointFree ⇑φ
inst✝ : Finite G
h2 : Function.Involutive ⇑φ
g : G
hg : orderOf g = 2
⊢ False
state_after: G : Type u_1
inst✝¹ : Group G
φ : G →* G
hφ : FixedPointFree ⇑φ
inst✝ : Finite G
h2 : Function.Involutive ⇑φ
g : G
hg : orderOf g = 2
key : φ g = g
⊢ False

tactic: rw [hφ g key, orderOf_one] at hg
state_before: G : Type u_1
inst✝¹ : Group G
φ : G →* G
hφ : FixedPointFree ⇑φ
inst✝ : Finite G
h2 : Function.Involutive ⇑φ
g : G
hg : orderOf g = 2
key : φ g = g
⊢ False
state_after: G : Type u_1
inst✝¹ : Group G
φ : G →* G
hφ : FixedPointFree ⇑φ
inst✝ : Finite G
h2 : Function.Involutive ⇑φ
g : G
hg : 1 = 2
key : φ g = g
⊢ False

tactic: contradiction
state_before: G : Type u_1
inst✝¹ : Group G
φ : G →* G
hφ : FixedPointFree ⇑φ
inst✝ : Finite G
h2 : Function.Involutive ⇑φ
g : G
hg : 1 = 2
key : φ g = g
⊢ False
state_after: no goals

tactic: rw [hφ.coe_eq_inv_of_involutive h2, inv_eq_iff_mul_eq_one, ← sq, ← hg, pow_orderOf_eq_one]
state_before: G : Type u_1
inst✝¹ : Group G
φ : G →* G
hφ : FixedPointFree ⇑φ
inst✝ : Finite G
h2 : Function.Involutive ⇑φ
g : G
hg : orderOf g = 2
⊢ φ g = g
state_after: no goals
Theorem: DiscreteQuotient.ofLE_refl_apply
File: Mathlib/Topology/DiscreteQuotient.lean

tactic: simp
state_before: α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
S A B C : DiscreteQuotient X
a : Quotient A.toSetoid
⊢ ofLE ⋯ a = a
state_after: no goals
Theorem: mem_closure_ne_iff_frequently_within
File: Mathlib/Topology/ContinuousOn.lean

tactic: simp [mem_closure_iff_frequently, frequently_nhdsWithin_iff]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : TopologicalSpace α
z : α
s : Set α
⊢ z ∈ closure (s \ {z}) ↔ ∃ᶠ (x : α) in 𝓝[≠] z, x ∈ s
state_after: no goals
Theorem: Nat.card_pos_iff
File: Mathlib/SetTheory/Cardinal/Finite.lean

tactic: simp [Nat.card, mk_eq_zero_iff, mk_lt_aleph0_iff]
state_before: α : Type u_1
β : Type u_2
⊢ 0 < Nat.card α ↔ Nonempty α ∧ Finite α
state_after: no goals
Theorem: Set.image_univ
File: Mathlib/Data/Set/Image.lean

tactic: ext
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : ι → α
s t : Set α
f : α → β
⊢ f '' univ = range f
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : ι → α
s t : Set α
f : α → β
x✝ : β
⊢ x✝ ∈ f '' univ ↔ x✝ ∈ range f

tactic: simp [image, range]
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : ι → α
s t : Set α
f : α → β
x✝ : β
⊢ x✝ ∈ f '' univ ↔ x✝ ∈ range f
state_after: no goals
Theorem: List.mem_iterate
File: Mathlib/Data/List/Iterate.lean

tactic: simp [List.mem_iff_get, Fin.exists_iff, eq_comm (b := b)]
state_before: α : Type u_1
f : α → α
a : α
n : ℕ
b : α
⊢ b ∈ iterate f a n ↔ ∃ m < n, b = f^[m] a
state_after: no goals
Theorem: PNat.find_eq_iff
File: Mathlib/Data/PNat/Find.lean

tactic: constructor
state_before: p q : ℕ+ → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∃ n, p n
n m : ℕ+
⊢ PNat.find h = m ↔ p m ∧ ∀ n < m, ¬p n
state_after: case mp
p q : ℕ+ → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∃ n, p n
n m : ℕ+
⊢ PNat.find h = m → p m ∧ ∀ n < m, ¬p n

case mpr
p q : ℕ+ → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∃ n, p n
n m : ℕ+
⊢ (p m ∧ ∀ n < m, ¬p n) → PNat.find h = m

tactic: rintro rfl
state_before: case mp
p q : ℕ+ → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∃ n, p n
n m : ℕ+
⊢ PNat.find h = m → p m ∧ ∀ n < m, ¬p n
state_after: case mp
p q : ℕ+ → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∃ n, p n
n : ℕ+
⊢ p (PNat.find h) ∧ ∀ n < PNat.find h, ¬p n

tactic: exact ⟨PNat.find_spec h, fun _ => PNat.find_min h⟩
state_before: case mp
p q : ℕ+ → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∃ n, p n
n : ℕ+
⊢ p (PNat.find h) ∧ ∀ n < PNat.find h, ¬p n
state_after: no goals

tactic: rintro ⟨hm, hlt⟩
state_before: case mpr
p q : ℕ+ → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∃ n, p n
n m : ℕ+
⊢ (p m ∧ ∀ n < m, ¬p n) → PNat.find h = m
state_after: case mpr.intro
p q : ℕ+ → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∃ n, p n
n m : ℕ+
hm : p m
hlt : ∀ n < m, ¬p n
⊢ PNat.find h = m

tactic: exact le_antisymm (PNat.find_min' h hm) (not_lt.1 <| imp_not_comm.1 (hlt _) <| PNat.find_spec h)
state_before: case mpr.intro
p q : ℕ+ → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∃ n, p n
n m : ℕ+
hm : p m
hlt : ∀ n < m, ¬p n
⊢ PNat.find h = m
state_after: no goals
Theorem: Pi.mulSupport_mulSingle
File: Mathlib/Algebra/Group/Support.lean

tactic: split_ifs with h <;> simp [h]
state_before: A : Type u_1
B : Type u_2
inst✝² : DecidableEq A
inst✝¹ : One B
a : A
b : B
inst✝ : DecidableEq B
⊢ mulSupport (mulSingle a b) = if b = 1 then ∅ else {a}
state_after: no goals
Theorem: schnirelmannDensity_finite
File: Mathlib/Combinatorics/Schnirelmann.lean

tactic: simpa using schnirelmannDensity_finset hA.toFinset
state_before: A : Set ℕ
inst✝ : DecidablePred fun x => x ∈ A
hA : A.Finite
⊢ schnirelmannDensity A = 0
state_after: no goals
Theorem: Submonoid.isSubmonoid
File: Mathlib/Deprecated/Submonoid.lean

tactic: exact ⟨S.2, S.1.2⟩
state_before: M : Type u_1
inst✝¹ : Monoid M
s : Set M
A : Type u_2
inst✝ : AddMonoid A
t : Set A
S : Submonoid M
⊢ IsSubmonoid ↑S
state_after: no goals