1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: ZMod.minOrder
File: Mathlib/GroupTheory/Order/Min.lean

tactic: have : Fact (1 < n) := ⟨one_lt_iff_ne_zero_and_ne_one.mpr ⟨hn, hn₁⟩⟩
state_before: α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
⊢ minOrder (ZMod n) = ↑n.minFac
state_after: α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this : Fact (1 < n)
⊢ minOrder (ZMod n) = ↑n.minFac

tactic: have : (↑(n / n.minFac) : ZMod n) ≠ 0 := by
  rw [Ne, ringChar.spec, ringChar.eq (ZMod n) n]
  exact
    not_dvd_of_pos_of_lt (Nat.div_pos (minFac_le hn.bot_lt) n.minFac_pos)
      (div_lt_self hn.bot_lt (minFac_prime hn₁).one_lt)
state_before: α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this : Fact (1 < n)
⊢ minOrder (ZMod n) = ↑n.minFac
state_after: α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this✝ : Fact (1 < n)
this : ↑(n / n.minFac) ≠ 0
⊢ minOrder (ZMod n) = ↑n.minFac

tactic: refine ((minOrder_le_natCard (zmultiples_eq_bot.not.2 this) <| toFinite _).trans ?_).antisymm <|
  le_minOrder_iff_forall_addSubgroup.2 fun s hs _ ↦ ?_
state_before: α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this✝ : Fact (1 < n)
this : ↑(n / n.minFac) ≠ 0
⊢ minOrder (ZMod n) = ↑n.minFac
state_after: case refine_1
α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this✝ : Fact (1 < n)
this : ↑(n / n.minFac) ≠ 0
⊢ ↑(Nat.card ↥(zmultiples ↑(n / n.minFac))) ≤ ↑n.minFac

case refine_2
α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this✝ : Fact (1 < n)
this : ↑(n / n.minFac) ≠ 0
s : AddSubgroup (ZMod n)
hs : s ≠ ⊥
x✝ : (↑s).Finite
⊢ ↑n.minFac ≤ ↑(Nat.card ↥s)

tactic: rw [Ne, ringChar.spec, ringChar.eq (ZMod n) n]
state_before: α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this : Fact (1 < n)
⊢ ↑(n / n.minFac) ≠ 0
state_after: α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this : Fact (1 < n)
⊢ ¬n ∣ n / n.minFac

tactic: exact
  not_dvd_of_pos_of_lt (Nat.div_pos (minFac_le hn.bot_lt) n.minFac_pos)
    (div_lt_self hn.bot_lt (minFac_prime hn₁).one_lt)
state_before: α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this : Fact (1 < n)
⊢ ¬n ∣ n / n.minFac
state_after: no goals

tactic: rw [Nat.card_zmultiples, ZMod.addOrderOf_coe _ hn,
  gcd_eq_right (div_dvd_of_dvd n.minFac_dvd), Nat.div_div_self n.minFac_dvd hn]
state_before: case refine_1
α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this✝ : Fact (1 < n)
this : ↑(n / n.minFac) ≠ 0
⊢ ↑(Nat.card ↥(zmultiples ↑(n / n.minFac))) ≤ ↑n.minFac
state_after: no goals

tactic: haveI : Nontrivial s := s.bot_or_nontrivial.resolve_left hs
state_before: case refine_2
α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this✝ : Fact (1 < n)
this : ↑(n / n.minFac) ≠ 0
s : AddSubgroup (ZMod n)
hs : s ≠ ⊥
x✝ : (↑s).Finite
⊢ ↑n.minFac ≤ ↑(Nat.card ↥s)
state_after: case refine_2
α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this✝¹ : Fact (1 < n)
this✝ : ↑(n / n.minFac) ≠ 0
s : AddSubgroup (ZMod n)
hs : s ≠ ⊥
x✝ : (↑s).Finite
this : Nontrivial ↥s
⊢ ↑n.minFac ≤ ↑(Nat.card ↥s)

tactic: exact WithTop.coe_le_coe.2 <| minFac_le_of_dvd Finite.one_lt_card <|
  (card_addSubgroup_dvd_card _).trans n.card_zmod.dvd
state_before: case refine_2
α : Type u_1
n : ℕ
hn : n ≠ 0
hn₁ : n ≠ 1
this✝¹ : Fact (1 < n)
this✝ : ↑(n / n.minFac) ≠ 0
s : AddSubgroup (ZMod n)
hs : s ≠ ⊥
x✝ : (↑s).Finite
this : Nontrivial ↥s
⊢ ↑n.minFac ≤ ↑(Nat.card ↥s)
state_after: no goals
Theorem: Polynomial.le_trailingDegree_C_mul_X_pow
File: Mathlib/Algebra/Polynomial/Degree/TrailingDegree.lean

tactic: rw [C_mul_X_pow_eq_monomial]
state_before: R : Type u
S : Type v
a✝ b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
n : ℕ
a : R
⊢ ↑n ≤ (C a * X ^ n).trailingDegree
state_after: R : Type u
S : Type v
a✝ b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
n : ℕ
a : R
⊢ ↑n ≤ ((monomial n) a).trailingDegree

tactic: exact le_trailingDegree_monomial
state_before: R : Type u
S : Type v
a✝ b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
n : ℕ
a : R
⊢ ↑n ≤ ((monomial n) a).trailingDegree
state_after: no goals
Theorem: EuclideanGeometry.angle_rev_eq_pi_div_two_of_oangle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Affine.lean

tactic: rw [angle_comm]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
⊢ ∠ p₃ p₂ p₁ = π / 2
state_after: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
⊢ ∠ p₁ p₂ p₃ = π / 2

tactic: exact angle_eq_pi_div_two_of_oangle_eq_pi_div_two h
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
⊢ ∠ p₁ p₂ p₃ = π / 2
state_after: no goals
Theorem: ProbabilityTheory.kernel.sum_const
File: Mathlib/Probability/Kernel/Basic.lean

tactic: ext x s hs
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : ↥(kernel α β)
inst✝ : Countable ι
μ : ι → Measure β
⊢ (kernel.sum fun n => const α (μ n)) = const α (Measure.sum μ)
state_after: case h.h
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : ↥(kernel α β)
inst✝ : Countable ι
μ : ι → Measure β
x : α
s : Set β
hs : MeasurableSet s
⊢ ((kernel.sum fun n => const α (μ n)) x) s = ((const α (Measure.sum μ)) x) s

tactic: rw [const_apply, Measure.sum_apply _ hs, kernel.sum_apply' _ _ hs]
state_before: case h.h
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : ↥(kernel α β)
inst✝ : Countable ι
μ : ι → Measure β
x : α
s : Set β
hs : MeasurableSet s
⊢ ((kernel.sum fun n => const α (μ n)) x) s = ((const α (Measure.sum μ)) x) s
state_after: case h.h
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : ↥(kernel α β)
inst✝ : Countable ι
μ : ι → Measure β
x : α
s : Set β
hs : MeasurableSet s
⊢ ∑' (n : ι), ((const α (μ n)) x) s = ∑' (i : ι), (μ i) s

tactic: simp only [const_apply]
state_before: case h.h
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : ↥(kernel α β)
inst✝ : Countable ι
μ : ι → Measure β
x : α
s : Set β
hs : MeasurableSet s
⊢ ∑' (n : ι), ((const α (μ n)) x) s = ∑' (i : ι), (μ i) s
state_after: no goals
Theorem: CategoryTheory.Mat_.id_apply_of_ne
File: Mathlib/CategoryTheory/Preadditive/Mat.lean

tactic: simp [id_apply, h]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : Preadditive C
M : Mat_ C
i j : M.ι
h : i ≠ j
⊢ 𝟙 M i j = 0
state_after: no goals
Theorem: toIcoMod_add_zsmul'
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: simp only [toIcoMod, toIcoDiv_add_zsmul', sub_smul, sub_add]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
m : ℤ
⊢ toIcoMod hp (a + m • p) b = toIcoMod hp a b + m • p
state_after: no goals
Theorem: CategoryTheory.Subgroupoid.id_mem_of_nonempty_isotropy
File: Mathlib/CategoryTheory/Groupoid/Subgroupoid.lean

tactic: rintro ⟨γ, hγ⟩
state_before: C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c : C
⊢ c ∈ S.objs → 𝟙 c ∈ S.arrows c c
state_after: case intro
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c : C
γ : c ⟶ c
hγ : γ ∈ S.arrows c c
⊢ 𝟙 c ∈ S.arrows c c

tactic: convert S.mul hγ (S.inv hγ)
state_before: case intro
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c : C
γ : c ⟶ c
hγ : γ ∈ S.arrows c c
⊢ 𝟙 c ∈ S.arrows c c
state_after: case h.e'_4
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c : C
γ : c ⟶ c
hγ : γ ∈ S.arrows c c
⊢ 𝟙 c = γ ≫ Groupoid.inv γ

tactic: simp only [inv_eq_inv, IsIso.hom_inv_id]
state_before: case h.e'_4
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
c : C
γ : c ⟶ c
hγ : γ ∈ S.arrows c c
⊢ 𝟙 c = γ ≫ Groupoid.inv γ
state_after: no goals
Theorem: Asymptotics.isLittleO_top
File: Mathlib/Analysis/Asymptotics/Asymptotics.lean

tactic: simp only [← principal_univ, isLittleO_principal, mem_univ, forall_true_left]
state_before: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
G : Type u_5
E' : Type u_6
F' : Type u_7
G' : Type u_8
E'' : Type u_9
F'' : Type u_10
G'' : Type u_11
E''' : Type u_12
R : Type u_13
R' : Type u_14
𝕜 : Type u_15
𝕜' : Type u_16
inst✝¹³ : Norm E
inst✝¹² : Norm F
inst✝¹¹ : Norm G
inst✝¹⁰ : SeminormedAddCommGroup E'
inst✝⁹ : SeminormedAddCommGroup F'
inst✝⁸ : SeminormedAddCommGroup G'
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedAddCommGroup F''
inst✝⁵ : NormedAddCommGroup G''
inst✝⁴ : SeminormedRing R
inst✝³ : SeminormedAddGroup E'''
inst✝² : SeminormedRing R'
inst✝¹ : NormedDivisionRing 𝕜
inst✝ : NormedDivisionRing 𝕜'
c c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
⊢ f'' =o[⊤] g' ↔ ∀ (x : α), f'' x = 0
state_after: no goals
Theorem: Nat.cast_div_div_div_cancel_right
File: Mathlib/Data/Nat/Cast/Field.lean

tactic: rcases eq_or_ne d 0 with (rfl | hd)
state_before: α : Type u_1
inst✝¹ : DivisionSemiring α
inst✝ : CharZero α
m n d : ℕ
hn : d ∣ n
hm : d ∣ m
⊢ ↑(m / d) / ↑(n / d) = ↑m / ↑n
state_after: case inl
α : Type u_1
inst✝¹ : DivisionSemiring α
inst✝ : CharZero α
m n : ℕ
hn : 0 ∣ n
hm : 0 ∣ m
⊢ ↑(m / 0) / ↑(n / 0) = ↑m / ↑n

case inr
α : Type u_1
inst✝¹ : DivisionSemiring α
inst✝ : CharZero α
m n d : ℕ
hn : d ∣ n
hm : d ∣ m
hd : d ≠ 0
⊢ ↑(m / d) / ↑(n / d) = ↑m / ↑n

tactic: replace hd : (d : α) ≠ 0 := by norm_cast
state_before: case inr
α : Type u_1
inst✝¹ : DivisionSemiring α
inst✝ : CharZero α
m n d : ℕ
hn : d ∣ n
hm : d ∣ m
hd : d ≠ 0
⊢ ↑(m / d) / ↑(n / d) = ↑m / ↑n
state_after: case inr
α : Type u_1
inst✝¹ : DivisionSemiring α
inst✝ : CharZero α
m n d : ℕ
hn : d ∣ n
hm : d ∣ m
hd : ↑d ≠ 0
⊢ ↑(m / d) / ↑(n / d) = ↑m / ↑n

tactic: rw [cast_div hm, cast_div hn, div_div_div_cancel_right _ hd] <;> exact hd
state_before: case inr
α : Type u_1
inst✝¹ : DivisionSemiring α
inst✝ : CharZero α
m n d : ℕ
hn : d ∣ n
hm : d ∣ m
hd : ↑d ≠ 0
⊢ ↑(m / d) / ↑(n / d) = ↑m / ↑n
state_after: no goals

tactic: simp [Nat.zero_dvd.1 hm]
state_before: case inl
α : Type u_1
inst✝¹ : DivisionSemiring α
inst✝ : CharZero α
m n : ℕ
hn : 0 ∣ n
hm : 0 ∣ m
⊢ ↑(m / 0) / ↑(n / 0) = ↑m / ↑n
state_after: no goals

tactic: norm_cast
state_before: α : Type u_1
inst✝¹ : DivisionSemiring α
inst✝ : CharZero α
m n d : ℕ
hn : d ∣ n
hm : d ∣ m
hd : d ≠ 0
⊢ ↑d ≠ 0
state_after: no goals
Theorem: CategoryTheory.Limits.hasCoproduct_of_equiv_of_iso
File: Mathlib/CategoryTheory/Limits/Shapes/Products.lean

tactic: have : HasColimit ((Discrete.equivalence e).functor ⋙ Discrete.functor f) :=
  hasColimit_equivalence_comp _
state_before: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α → C
g : β → C
inst✝ : HasCoproduct f
e : β ≃ α
iso : (j : β) → g j ≅ f (e j)
⊢ HasCoproduct g
state_after: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α → C
g : β → C
inst✝ : HasCoproduct f
e : β ≃ α
iso : (j : β) → g j ≅ f (e j)
this : HasColimit ((Discrete.equivalence e).functor ⋙ Discrete.functor f)
⊢ HasCoproduct g

tactic: have α : Discrete.functor g ≅ (Discrete.equivalence e).functor ⋙ Discrete.functor f :=
  Discrete.natIso (fun ⟨j⟩ => iso j)
state_before: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α → C
g : β → C
inst✝ : HasCoproduct f
e : β ≃ α
iso : (j : β) → g j ≅ f (e j)
this : HasColimit ((Discrete.equivalence e).functor ⋙ Discrete.functor f)
⊢ HasCoproduct g
state_after: β : Type w
α✝ : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α✝ → C
g : β → C
inst✝ : HasCoproduct f
e : β ≃ α✝
iso : (j : β) → g j ≅ f (e j)
this : HasColimit ((Discrete.equivalence e).functor ⋙ Discrete.functor f)
α : Discrete.functor g ≅ (Discrete.equivalence e).functor ⋙ Discrete.functor f
⊢ HasCoproduct g

tactic: exact hasColimitOfIso α
state_before: β : Type w
α✝ : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α✝ → C
g : β → C
inst✝ : HasCoproduct f
e : β ≃ α✝
iso : (j : β) → g j ≅ f (e j)
this : HasColimit ((Discrete.equivalence e).functor ⋙ Discrete.functor f)
α : Discrete.functor g ≅ (Discrete.equivalence e).functor ⋙ Discrete.functor f
⊢ HasCoproduct g
state_after: no goals
Theorem: HurwitzZeta.hasSum_nat_hurwitzZetaOdd
File: Mathlib/NumberTheory/LSeries/HurwitzZetaOdd.lean

tactic: refine (hasSum_int_hurwitzZetaOdd a hs).nat_add_neg_add_one.congr_fun fun n ↦ ?_
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
⊢ HasSum (fun n => (↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s - ↑(SignType.sign (↑n + 1 - a)) / ↑|↑n + 1 - a| ^ s) / 2)
    (hurwitzZetaOdd (↑a) s)
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
n : ℕ
⊢ (↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s - ↑(SignType.sign (↑n + 1 - a)) / ↑|↑n + 1 - a| ^ s) / 2 =
    ↑(SignType.sign (↑↑n + a)) / ↑|↑↑n + a| ^ s / 2 + ↑(SignType.sign (↑(-(↑n + 1)) + a)) / ↑|↑(-(↑n + 1)) + a| ^ s / 2

tactic: rw [Int.cast_neg, Int.cast_add, Int.cast_one, sub_div, sub_eq_add_neg, Int.cast_natCast]
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
n : ℕ
⊢ (↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s - ↑(SignType.sign (↑n + 1 - a)) / ↑|↑n + 1 - a| ^ s) / 2 =
    ↑(SignType.sign (↑↑n + a)) / ↑|↑↑n + a| ^ s / 2 + ↑(SignType.sign (↑(-(↑n + 1)) + a)) / ↑|↑(-(↑n + 1)) + a| ^ s / 2
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
n : ℕ
⊢ ↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s / 2 + -(↑(SignType.sign (↑n + 1 - a)) / ↑|↑n + 1 - a| ^ s / 2) =
    ↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s / 2 + ↑(SignType.sign (-(↑n + 1) + a)) / ↑|-(↑n + 1) + a| ^ s / 2

tactic: have : -(n + 1) + a = -(n + 1 - a) := by ring_nf
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
n : ℕ
⊢ ↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s / 2 + -(↑(SignType.sign (↑n + 1 - a)) / ↑|↑n + 1 - a| ^ s / 2) =
    ↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s / 2 + ↑(SignType.sign (-(↑n + 1) + a)) / ↑|-(↑n + 1) + a| ^ s / 2
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
n : ℕ
this : -(↑n + 1) + a = -(↑n + 1 - a)
⊢ ↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s / 2 + -(↑(SignType.sign (↑n + 1 - a)) / ↑|↑n + 1 - a| ^ s / 2) =
    ↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s / 2 + ↑(SignType.sign (-(↑n + 1) + a)) / ↑|-(↑n + 1) + a| ^ s / 2

tactic: rw [this, Left.sign_neg, abs_neg, SignType.coe_neg, neg_div, neg_div]
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
n : ℕ
this : -(↑n + 1) + a = -(↑n + 1 - a)
⊢ ↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s / 2 + -(↑(SignType.sign (↑n + 1 - a)) / ↑|↑n + 1 - a| ^ s / 2) =
    ↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s / 2 + ↑(SignType.sign (-(↑n + 1) + a)) / ↑|-(↑n + 1) + a| ^ s / 2
state_after: no goals

tactic: ring_nf
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
n : ℕ
⊢ -(↑n + 1) + a = -(↑n + 1 - a)
state_after: no goals
Theorem: Finset.inter_sdiff_assoc
File: Mathlib/Data/Finset/Basic.lean

tactic: ext x
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t✝ u✝ v : Finset α
a b : α
s t u : Finset α
⊢ (s ∩ t) \ u = s ∩ (t \ u)
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t✝ u✝ v : Finset α
a b : α
s t u : Finset α
x : α
⊢ x ∈ (s ∩ t) \ u ↔ x ∈ s ∩ (t \ u)

tactic: simp [and_assoc]
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t✝ u✝ v : Finset α
a b : α
s t u : Finset α
x : α
⊢ x ∈ (s ∩ t) \ u ↔ x ∈ s ∩ (t \ u)
state_after: no goals
Theorem: MeasureTheory.FinMeasAdditive.smul
File: Mathlib/MeasureTheory/Integral/SetToL1.lean

tactic: simp [hT s t hs ht hμs hμt hst]
state_before: α : Type u_1
E : Type u_2
F : Type u_3
F' : Type u_4
G : Type u_5
𝕜 : Type u_6
p : ℝ≥0∞
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace ℝ E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace ℝ F
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : NormedSpace ℝ F'
inst✝³ : NormedAddCommGroup G
m : MeasurableSpace α
μ : Measure α
β : Type u_7
inst✝² : AddCommMonoid β
T T' : Set α → β
inst✝¹ : Monoid 𝕜
inst✝ : DistribMulAction 𝕜 β
hT : FinMeasAdditive μ T
c : 𝕜
s t : Set α
hs : MeasurableSet s
ht : MeasurableSet t
hμs : μ s ≠ ⊤
hμt : μ t ≠ ⊤
hst : s ∩ t = ∅
⊢ (fun s => c • T s) (s ∪ t) = (fun s => c • T s) s + (fun s => c • T s) t
state_after: no goals
Theorem: ConcaveOn.le_slope_of_hasDerivWithinAt_Iio
File: Mathlib/Analysis/Convex/Deriv.lean

tactic: simpa only [neg_neg, Pi.neg_def, slope_neg] using
  neg_le_neg (hfc.neg.slope_le_of_hasDerivWithinAt_Iio hx hy hxy hf'.neg)
state_before: S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : ConcaveOn ℝ S f
hx : x ∈ S
hy : y ∈ S
hxy : x < y
hf' : HasDerivWithinAt f f' (Iio y) y
⊢ f' ≤ slope f x y
state_after: no goals
Theorem: Hyperreal.IsSt.unique
File: Mathlib/Data/Real/Hyperreal.lean

tactic: rcases ofSeq_surjective x with ⟨f, rfl⟩
state_before: x : ℝ*
r s : ℝ
hr : x.IsSt r
hs : x.IsSt s
⊢ r = s
state_after: case intro
r s : ℝ
f : ℕ → ℝ
hr : (ofSeq f).IsSt r
hs : (ofSeq f).IsSt s
⊢ r = s

tactic: rw [isSt_ofSeq_iff_tendsto] at hr hs
state_before: case intro
r s : ℝ
f : ℕ → ℝ
hr : (ofSeq f).IsSt r
hs : (ofSeq f).IsSt s
⊢ r = s
state_after: case intro
r s : ℝ
f : ℕ → ℝ
hr : Tendsto f (↑(hyperfilter ℕ)) (𝓝 r)
hs : Tendsto f (↑(hyperfilter ℕ)) (𝓝 s)
⊢ r = s

tactic: exact tendsto_nhds_unique hr hs
state_before: case intro
r s : ℝ
f : ℕ → ℝ
hr : Tendsto f (↑(hyperfilter ℕ)) (𝓝 r)
hs : Tendsto f (↑(hyperfilter ℕ)) (𝓝 s)
⊢ r = s
state_after: no goals
Theorem: List.drop_sum_join
File: Mathlib/Algebra/BigOperators/Group/List.lean

tactic: simpa using drop_sum_join' _ _
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
L : List (List α)
i : ℕ
⊢ drop (take i (map length L)).sum L.join = (drop i L).join
state_after: no goals
Theorem: Mathlib.Tactic.Ring.pow_prod_atom
File: Mathlib/Tactic/Ring/Basic.lean

tactic: simp
state_before: u : Lean.Level
R : Type u_1
α : Q(Type u)
sα : Q(CommSemiring «$α»)
inst✝ : CommSemiring R
a : R
b : ℕ
⊢ a ^ b = (a + 0) ^ b * Nat.rawCast 1
state_after: no goals
Theorem: IsLocalizedModule.mk'_eq_iff
File: Mathlib/Algebra/Module/LocalizedModule.lean

tactic: rw [← smul_inj f s, Submonoid.smul_def, ← mk'_smul, ← Submonoid.smul_def, mk'_cancel]
state_before: R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M'
inst✝⁹ : AddCommMonoid M''
A : Type u_5
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
inst✝⁶ : Module A M'
inst✝⁵ : IsLocalization S A
inst✝⁴ : Module R M
inst✝³ : Module R M'
inst✝² : Module R M''
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
g : M →ₗ[R] M''
inst✝ : IsLocalizedModule S f
m : M
s : ↥S
m' : M'
⊢ mk' f m s = m' ↔ f m = s • m'
state_after: no goals
Theorem: toIocDiv_add_zsmul'
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: refine toIocDiv_eq_of_sub_zsmul_mem_Ioc _ ?_
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
m : ℤ
⊢ toIocDiv hp (a + m • p) b = toIocDiv hp a b - m
state_after: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
m : ℤ
⊢ b - (toIocDiv hp a b - m) • p ∈ Set.Ioc (a + m • p) (a + m • p + p)

tactic: rw [sub_smul, ← sub_add, add_right_comm]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
m : ℤ
⊢ b - (toIocDiv hp a b - m) • p ∈ Set.Ioc (a + m • p) (a + m • p + p)
state_after: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
m : ℤ
⊢ b - toIocDiv hp a b • p + m • p ∈ Set.Ioc (a + m • p) (a + p + m • p)

tactic: simpa using sub_toIocDiv_zsmul_mem_Ioc hp a b
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
m : ℤ
⊢ b - toIocDiv hp a b • p + m • p ∈ Set.Ioc (a + m • p) (a + p + m • p)
state_after: no goals
Theorem: MonoidHom.ker_eq_bot_of_cancel
File: Mathlib/Algebra/Category/Grp/EpiMono.lean

tactic: simpa using _root_.congr_arg range (h f.ker.subtype 1 (by aesop_cat))
state_before: A : Type u
B : Type v
inst✝¹ : Group A
inst✝ : Group B
f : A →* B
h : ∀ (u v : ↥f.ker →* A), f.comp u = f.comp v → u = v
⊢ f.ker = ⊥
state_after: no goals

tactic: aesop_cat
state_before: A : Type u
B : Type v
inst✝¹ : Group A
inst✝ : Group B
f : A →* B
h : ∀ (u v : ↥f.ker →* A), f.comp u = f.comp v → u = v
⊢ f.comp f.ker.subtype = f.comp 1
state_after: no goals
Theorem: QuotientGroup.kerLift_injective
File: Mathlib/GroupTheory/QuotientGroup.lean

tactic: rw [leftRel_apply, mem_ker, φ.map_mul, ← h, φ.map_inv, inv_mul_self]
state_before: G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
φ : G →* H
a✝ b✝ : G ⧸ φ.ker
a b : G
h : φ a = φ b
⊢ Setoid.r a b
state_after: no goals
Theorem: MeasureTheory.integral_piecewise
File: Mathlib/MeasureTheory/Integral/SetIntegral.lean

tactic: rw [← Set.indicator_add_compl_eq_piecewise,
  integral_add' (hf.integrable_indicator hs) (hg.integrable_indicator hs.compl),
  integral_indicator hs, integral_indicator hs.compl]
state_before: X : Type u_1
Y : Type u_2
E : Type u_3
F : Type u_4
inst✝³ : MeasurableSpace X
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
f g : X → E
s t : Set X
μ ν : Measure X
l l' : Filter X
inst✝ : DecidablePred fun x => x ∈ s
hs : MeasurableSet s
hf : IntegrableOn f s μ
hg : IntegrableOn g sᶜ μ
⊢ ∫ (x : X), s.piecewise f g x ∂μ = ∫ (x : X) in s, f x ∂μ + ∫ (x : X) in sᶜ, g x ∂μ
state_after: no goals
Theorem: RootPairing.injOn_dualMap_subtype_span_root_coroot
File: Mathlib/LinearAlgebra/RootSystem/Basic.lean

tactic: have := injOn_dualMap_subtype_span_range_range (finite_range P.root)
  (c := P.toLin.flip ∘ P.coroot) P.root_coroot_two P.mapsTo_reflection_root
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : _root_.Finite ι
P : RootPairing ι R M N
i j : ι
inst✝ : NoZeroSMulDivisors ℤ M
⊢ InjOn (⇑((span R (range ⇑P.root)).subtype.dualMap ∘ₗ P.toLin.flip)) (range ⇑P.coroot)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : _root_.Finite ι
P : RootPairing ι R M N
i j : ι
inst✝ : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑P.root)).subtype.dualMap) (range (⇑P.toLin.flip ∘ ⇑P.coroot))
⊢ InjOn (⇑((span R (range ⇑P.root)).subtype.dualMap ∘ₗ P.toLin.flip)) (range ⇑P.coroot)

tactic: rintro - ⟨i, rfl⟩ - ⟨j, rfl⟩ hij
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : _root_.Finite ι
P : RootPairing ι R M N
i j : ι
inst✝ : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑P.root)).subtype.dualMap) (range (⇑P.toLin.flip ∘ ⇑P.coroot))
⊢ InjOn (⇑((span R (range ⇑P.root)).subtype.dualMap ∘ₗ P.toLin.flip)) (range ⇑P.coroot)
state_after: case intro.intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝ : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑P.root)).subtype.dualMap) (range (⇑P.toLin.flip ∘ ⇑P.coroot))
i j : ι
hij :
  ((span R (range ⇑P.root)).subtype.dualMap ∘ₗ P.toLin.flip) (P.coroot i) =
    ((span R (range ⇑P.root)).subtype.dualMap ∘ₗ P.toLin.flip) (P.coroot j)
⊢ P.coroot i = P.coroot j

tactic: exact P.bijectiveRight.injective <| this (mem_range_self i) (mem_range_self j) hij
state_before: case intro.intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝ : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑P.root)).subtype.dualMap) (range (⇑P.toLin.flip ∘ ⇑P.coroot))
i j : ι
hij :
  ((span R (range ⇑P.root)).subtype.dualMap ∘ₗ P.toLin.flip) (P.coroot i) =
    ((span R (range ⇑P.root)).subtype.dualMap ∘ₗ P.toLin.flip) (P.coroot j)
⊢ P.coroot i = P.coroot j
state_after: no goals