1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Nat.ofDigits_neg_one
File: Mathlib/Data/Nat/Digits.lean

tactic: simp [ofDigits, List.alternatingSum]
state_before: n✝ n : ℕ
⊢ ofDigits (-1) [n] = (List.map (fun n => ↑n) [n]).alternatingSum
state_after: no goals

tactic: simp only [ofDigits, List.alternatingSum, List.map_cons, ofDigits_neg_one t]
state_before: n a b : ℕ
t : List ℕ
⊢ ofDigits (-1) (a :: b :: t) = (List.map (fun n => ↑n) (a :: b :: t)).alternatingSum
state_after: n a b : ℕ
t : List ℕ
⊢ ↑a + -1 * (↑b + -1 * (List.map (fun n => ↑n) t).alternatingSum) = ↑a + -↑b + (List.map (fun n => ↑n) t).alternatingSum

tactic: ring
state_before: n a b : ℕ
t : List ℕ
⊢ ↑a + -1 * (↑b + -1 * (List.map (fun n => ↑n) t).alternatingSum) = ↑a + -↑b + (List.map (fun n => ↑n) t).alternatingSum
state_after: no goals
Theorem: Finset.prod_insert_of_eq_one_if_not_mem
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

tactic: by_cases hm : a ∈ s
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f g : α → β
inst✝¹ : CommMonoid β
inst✝ : DecidableEq α
h : a ∉ s → f a = 1
⊢ ∏ x ∈ insert a s, f x = ∏ x ∈ s, f x
state_after: case pos
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f g : α → β
inst✝¹ : CommMonoid β
inst✝ : DecidableEq α
h : a ∉ s → f a = 1
hm : a ∈ s
⊢ ∏ x ∈ insert a s, f x = ∏ x ∈ s, f x

case neg
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f g : α → β
inst✝¹ : CommMonoid β
inst✝ : DecidableEq α
h : a ∉ s → f a = 1
hm : a ∉ s
⊢ ∏ x ∈ insert a s, f x = ∏ x ∈ s, f x

tactic: simp_rw [insert_eq_of_mem hm]
state_before: case pos
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f g : α → β
inst✝¹ : CommMonoid β
inst✝ : DecidableEq α
h : a ∉ s → f a = 1
hm : a ∈ s
⊢ ∏ x ∈ insert a s, f x = ∏ x ∈ s, f x
state_after: no goals

tactic: rw [prod_insert hm, h hm, one_mul]
state_before: case neg
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f g : α → β
inst✝¹ : CommMonoid β
inst✝ : DecidableEq α
h : a ∉ s → f a = 1
hm : a ∉ s
⊢ ∏ x ∈ insert a s, f x = ∏ x ∈ s, f x
state_after: no goals
Theorem: iInf_false
File: Mathlib/Order/CompleteLattice.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : CompleteLattice α
f g s✝ t : ι → α
a b : α
s : False → α
⊢ iInf s = ⊤
state_after: no goals
Theorem: MeasureTheory.Measure.count_apply_infinite
File: Mathlib/MeasureTheory/Measure/Count.lean

tactic: refine top_unique (le_of_tendsto' ENNReal.tendsto_nat_nhds_top fun n => ?_)
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
s : Set α
hs : s.Infinite
⊢ count s = ⊤
state_after: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
s : Set α
hs : s.Infinite
n : ℕ
⊢ ↑n ≤ count s

tactic: rcases hs.exists_subset_card_eq n with ⟨t, ht, rfl⟩
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
s : Set α
hs : s.Infinite
n : ℕ
⊢ ↑n ≤ count s
state_after: case intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
s : Set α
hs : s.Infinite
t : Finset α
ht : ↑t ⊆ s
⊢ ↑t.card ≤ count s

tactic: calc
  (t.card : ℝ≥0∞) = ∑ i ∈ t, 1 := by simp
  _ = ∑' i : (t : Set α), 1 := (t.tsum_subtype 1).symm
  _ ≤ count (t : Set α) := le_count_apply
  _ ≤ count s := measure_mono ht
state_before: case intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
s : Set α
hs : s.Infinite
t : Finset α
ht : ↑t ⊆ s
⊢ ↑t.card ≤ count s
state_after: no goals

tactic: simp
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
s : Set α
hs : s.Infinite
t : Finset α
ht : ↑t ⊆ s
⊢ ↑t.card = ∑ i ∈ t, 1
state_after: no goals
Theorem: Nat.one_div_lt_one_div
File: Mathlib/Data/Nat/Cast/Field.lean

tactic: refine one_div_lt_one_div_of_lt ?_ ?_
state_before: α : Type u_1
inst✝ : LinearOrderedSemifield α
n m : ℕ
h : n < m
⊢ 1 / (↑m + 1) < 1 / (↑n + 1)
state_after: case refine_1
α : Type u_1
inst✝ : LinearOrderedSemifield α
n m : ℕ
h : n < m
⊢ 0 < ↑n + 1

case refine_2
α : Type u_1
inst✝ : LinearOrderedSemifield α
n m : ℕ
h : n < m
⊢ ↑n + 1 < ↑m + 1

tactic: exact Nat.cast_add_one_pos _
state_before: case refine_1
α : Type u_1
inst✝ : LinearOrderedSemifield α
n m : ℕ
h : n < m
⊢ 0 < ↑n + 1
state_after: no goals

tactic: simpa
state_before: case refine_2
α : Type u_1
inst✝ : LinearOrderedSemifield α
n m : ℕ
h : n < m
⊢ ↑n + 1 < ↑m + 1
state_after: no goals
Theorem: forall_liouvilleWith_iff
File: Mathlib/NumberTheory/Liouville/LiouvilleWith.lean

tactic: refine ⟨fun H n => ?_, Liouville.liouvilleWith⟩
state_before: x : ℝ
⊢ (∀ (p : ℝ), LiouvilleWith p x) ↔ Liouville x
state_after: x : ℝ
H : ∀ (p : ℝ), LiouvilleWith p x
n : ℕ
⊢ ∃ a b, 1 < b ∧ x ≠ ↑a / ↑b ∧ |x - ↑a / ↑b| < 1 / ↑b ^ n

tactic: rcases ((eventually_gt_atTop 1).and_frequently
  ((H (n + 1)).frequently_lt_rpow_neg (lt_add_one (n : ℝ)))).exists
  with ⟨b, hb, a, hne, hlt⟩
state_before: x : ℝ
H : ∀ (p : ℝ), LiouvilleWith p x
n : ℕ
⊢ ∃ a b, 1 < b ∧ x ≠ ↑a / ↑b ∧ |x - ↑a / ↑b| < 1 / ↑b ^ n
state_after: case intro.intro.intro.intro
x : ℝ
H : ∀ (p : ℝ), LiouvilleWith p x
n b : ℕ
hb : 1 < b
a : ℤ
hne : x ≠ ↑a / ↑b
hlt : |x - ↑a / ↑b| < ↑b ^ (-↑n)
⊢ ∃ a b, 1 < b ∧ x ≠ ↑a / ↑b ∧ |x - ↑a / ↑b| < 1 / ↑b ^ n

tactic: exact ⟨a, b, mod_cast hb, hne, by simpa [rpow_neg] using hlt⟩
state_before: case intro.intro.intro.intro
x : ℝ
H : ∀ (p : ℝ), LiouvilleWith p x
n b : ℕ
hb : 1 < b
a : ℤ
hne : x ≠ ↑a / ↑b
hlt : |x - ↑a / ↑b| < ↑b ^ (-↑n)
⊢ ∃ a b, 1 < b ∧ x ≠ ↑a / ↑b ∧ |x - ↑a / ↑b| < 1 / ↑b ^ n
state_after: no goals

tactic: simpa [rpow_neg] using hlt
state_before: x : ℝ
H : ∀ (p : ℝ), LiouvilleWith p x
n b : ℕ
hb : 1 < b
a : ℤ
hne : x ≠ ↑a / ↑b
hlt : |x - ↑a / ↑b| < ↑b ^ (-↑n)
⊢ |x - ↑a / ↑↑b| < 1 / ↑↑b ^ n
state_after: no goals
Theorem: Dioph.ne_dioph
File: Mathlib/NumberTheory/Dioph.lean

tactic: dsimp
state_before: α β : Type
n : ℕ
f g : (α → ℕ) → ℕ
df : DiophFn f
dg : DiophFn g
v : α → ℕ
⊢ v ∈ {v | f v < g v} ∪ {v | g v < f v} ↔ v ∈ {v | f v ≠ g v}
state_after: α β : Type
n : ℕ
f g : (α → ℕ) → ℕ
df : DiophFn f
dg : DiophFn g
v : α → ℕ
⊢ v ∈ {v | f v < g v} ∪ {v | g v < f v} ↔ ¬f v = g v

tactic: exact lt_or_lt_iff_ne (α := ℕ)
state_before: α β : Type
n : ℕ
f g : (α → ℕ) → ℕ
df : DiophFn f
dg : DiophFn g
v : α → ℕ
⊢ v ∈ {v | f v < g v} ∪ {v | g v < f v} ↔ ¬f v = g v
state_after: no goals
Theorem: Int.eq_mul_div_of_mul_eq_mul_of_dvd_left
File: Mathlib/Data/Int/Defs.lean

tactic: obtain ⟨k, rfl⟩ := hbc
state_before: a b c d m n : ℤ
hb : b ≠ 0
hbc : b ∣ c
h : b * a = c * d
⊢ a = c / b * d
state_after: case intro
a b d m n : ℤ
hb : b ≠ 0
k : ℤ
h : b * a = b * k * d
⊢ a = b * k / b * d

tactic: rw [Int.mul_ediv_cancel_left _ hb]
state_before: case intro
a b d m n : ℤ
hb : b ≠ 0
k : ℤ
h : b * a = b * k * d
⊢ a = b * k / b * d
state_after: case intro
a b d m n : ℤ
hb : b ≠ 0
k : ℤ
h : b * a = b * k * d
⊢ a = k * d

tactic: rwa [Int.mul_assoc, Int.mul_eq_mul_left_iff hb] at h
state_before: case intro
a b d m n : ℤ
hb : b ≠ 0
k : ℤ
h : b * a = b * k * d
⊢ a = k * d
state_after: no goals
Theorem: prod_eq_generateFrom
File: Mathlib/Topology/Constructions.lean

tactic: simpa [Set.prod_eq] using ht
state_before: X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : TopologicalSpace Z
inst✝² : TopologicalSpace W
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
t : Set X
ht : t ∈ inst✝⁵.1
⊢ IsOpen t ∧ IsOpen univ ∧ Prod.fst ⁻¹' t = t ×ˢ univ
state_after: no goals

tactic: simpa [Set.prod_eq] using ht
state_before: X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : TopologicalSpace Z
inst✝² : TopologicalSpace W
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
t : Set Y
ht : t ∈ inst✝⁴.1
⊢ IsOpen univ ∧ IsOpen t ∧ Prod.snd ⁻¹' t = univ ×ˢ t
state_after: no goals
Theorem: Finset.preimage_empty
File: Mathlib/Data/Finset/Preimage.lean

tactic: simp [InjOn]
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
f : α → β
⊢ InjOn f (f ⁻¹' ↑∅)
state_after: no goals

tactic: simp
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
f : α → β
⊢ ↑(∅.preimage f ⋯) = ↑∅
state_after: no goals
Theorem: MonotoneOn.congr
File: Mathlib/Data/Set/Function.lean

tactic: intro a ha b hb hab
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s : Set α
f₁ f₂ : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
h₁ : MonotoneOn f₁ s
h : EqOn f₁ f₂ s
⊢ MonotoneOn f₂ s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s : Set α
f₁ f₂ : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
h₁ : MonotoneOn f₁ s
h : EqOn f₁ f₂ s
a : α
ha : a ∈ s
b : α
hb : b ∈ s
hab : a ≤ b
⊢ f₂ a ≤ f₂ b

tactic: rw [← h ha, ← h hb]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s : Set α
f₁ f₂ : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
h₁ : MonotoneOn f₁ s
h : EqOn f₁ f₂ s
a : α
ha : a ∈ s
b : α
hb : b ∈ s
hab : a ≤ b
⊢ f₂ a ≤ f₂ b
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s : Set α
f₁ f₂ : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
h₁ : MonotoneOn f₁ s
h : EqOn f₁ f₂ s
a : α
ha : a ∈ s
b : α
hb : b ∈ s
hab : a ≤ b
⊢ f₁ a ≤ f₁ b

tactic: exact h₁ ha hb hab
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s : Set α
f₁ f₂ : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
h₁ : MonotoneOn f₁ s
h : EqOn f₁ f₂ s
a : α
ha : a ∈ s
b : α
hb : b ∈ s
hab : a ≤ b
⊢ f₁ a ≤ f₁ b
state_after: no goals
Theorem: Polynomial.exists_monic_irreducible_factor
File: Mathlib/RingTheory/Polynomial/Basic.lean

tactic: by_cases hf : f = 0
state_before: R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
F : Type u_2
inst✝ : Field F
f : F[X]
hu : ¬IsUnit f
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ g ∣ f
state_after: case pos
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
F : Type u_2
inst✝ : Field F
f : F[X]
hu : ¬IsUnit f
hf : f = 0
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ g ∣ f

case neg
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
F : Type u_2
inst✝ : Field F
f : F[X]
hu : ¬IsUnit f
hf : ¬f = 0
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ g ∣ f

tactic: obtain ⟨g, hi, hf⟩ := WfDvdMonoid.exists_irreducible_factor hu hf
state_before: case neg
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
F : Type u_2
inst✝ : Field F
f : F[X]
hu : ¬IsUnit f
hf : ¬f = 0
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ g ∣ f
state_after: case neg.intro.intro
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
F : Type u_2
inst✝ : Field F
f : F[X]
hu : ¬IsUnit f
hf✝ : ¬f = 0
g : F[X]
hi : Irreducible g
hf : g ∣ f
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ g ∣ f

tactic: have ha : Associated g (g * C g.leadingCoeff⁻¹) := associated_mul_unit_right _ _ <|
  isUnit_C.2 (leadingCoeff_ne_zero.2 hi.ne_zero).isUnit.inv
state_before: case neg.intro.intro
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
F : Type u_2
inst✝ : Field F
f : F[X]
hu : ¬IsUnit f
hf✝ : ¬f = 0
g : F[X]
hi : Irreducible g
hf : g ∣ f
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ g ∣ f
state_after: case neg.intro.intro
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
F : Type u_2
inst✝ : Field F
f : F[X]
hu : ¬IsUnit f
hf✝ : ¬f = 0
g : F[X]
hi : Irreducible g
hf : g ∣ f
ha : Associated g (g * C g.leadingCoeff⁻¹)
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ g ∣ f

tactic: exact ⟨_, monic_mul_leadingCoeff_inv hi.ne_zero, ha.irreducible hi, ha.dvd_iff_dvd_left.1 hf⟩
state_before: case neg.intro.intro
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
F : Type u_2
inst✝ : Field F
f : F[X]
hu : ¬IsUnit f
hf✝ : ¬f = 0
g : F[X]
hi : Irreducible g
hf : g ∣ f
ha : Associated g (g * C g.leadingCoeff⁻¹)
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ g ∣ f
state_after: no goals

tactic: exact ⟨X, monic_X, irreducible_X, hf ▸ dvd_zero X⟩
state_before: case pos
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
F : Type u_2
inst✝ : Field F
f : F[X]
hu : ¬IsUnit f
hf : f = 0
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ g ∣ f
state_after: no goals
Theorem: ProbabilityTheory.IndepFun.integrable_exp_mul_add
File: Mathlib/Probability/Moments.lean

tactic: simp_rw [Pi.add_apply, mul_add, exp_add]
state_before: Ω : Type u_1
ι : Type u_2
m : MeasurableSpace Ω
X✝ : Ω → ℝ
p : ℕ
μ : Measure Ω
t : ℝ
X Y : Ω → ℝ
h_indep : IndepFun X Y μ
h_int_X : Integrable (fun ω => rexp (t * X ω)) μ
h_int_Y : Integrable (fun ω => rexp (t * Y ω)) μ
⊢ Integrable (fun ω => rexp (t * (X + Y) ω)) μ
state_after: Ω : Type u_1
ι : Type u_2
m : MeasurableSpace Ω
X✝ : Ω → ℝ
p : ℕ
μ : Measure Ω
t : ℝ
X Y : Ω → ℝ
h_indep : IndepFun X Y μ
h_int_X : Integrable (fun ω => rexp (t * X ω)) μ
h_int_Y : Integrable (fun ω => rexp (t * Y ω)) μ
⊢ Integrable (fun ω => rexp (t * X ω) * rexp (t * Y ω)) μ

tactic: exact (h_indep.exp_mul t t).integrable_mul h_int_X h_int_Y
state_before: Ω : Type u_1
ι : Type u_2
m : MeasurableSpace Ω
X✝ : Ω → ℝ
p : ℕ
μ : Measure Ω
t : ℝ
X Y : Ω → ℝ
h_indep : IndepFun X Y μ
h_int_X : Integrable (fun ω => rexp (t * X ω)) μ
h_int_Y : Integrable (fun ω => rexp (t * Y ω)) μ
⊢ Integrable (fun ω => rexp (t * X ω) * rexp (t * Y ω)) μ
state_after: no goals
Theorem: NFA.pumping_lemma
File: Mathlib/Computability/NFA.lean

tactic: rw [← toDFA_correct] at hx ⊢
state_before: α : Type u
σ σ' : Type v
M : NFA α σ
inst✝ : Fintype σ
x : List α
hx : x ∈ M.accepts
hlen : Fintype.card (Set σ) ≤ x.length
⊢ ∃ a b c, x = a ++ b ++ c ∧ a.length + b.length ≤ Fintype.card (Set σ) ∧ b ≠ [] ∧ {a} * {b}∗ * {c} ≤ M.accepts
state_after: α : Type u
σ σ' : Type v
M : NFA α σ
inst✝ : Fintype σ
x : List α
hx : x ∈ M.toDFA.accepts
hlen : Fintype.card (Set σ) ≤ x.length
⊢ ∃ a b c, x = a ++ b ++ c ∧ a.length + b.length ≤ Fintype.card (Set σ) ∧ b ≠ [] ∧ {a} * {b}∗ * {c} ≤ M.toDFA.accepts

tactic: exact M.toDFA.pumping_lemma hx hlen
state_before: α : Type u
σ σ' : Type v
M : NFA α σ
inst✝ : Fintype σ
x : List α
hx : x ∈ M.toDFA.accepts
hlen : Fintype.card (Set σ) ≤ x.length
⊢ ∃ a b c, x = a ++ b ++ c ∧ a.length + b.length ≤ Fintype.card (Set σ) ∧ b ≠ [] ∧ {a} * {b}∗ * {c} ≤ M.toDFA.accepts
state_after: no goals
Theorem: QuotientGroup.eq
File: Mathlib/GroupTheory/Coset.lean

tactic: rw [leftRel_apply]
state_before: α : Type u_1
inst✝ : Group α
s : Subgroup α
a b : α
⊢ Setoid.r a b ↔ a⁻¹ * b ∈ s
state_after: no goals
Theorem: MulHom.prod_unique
File: Mathlib/Algebra/Group/Prod.lean

tactic: simp only [prod_apply, coe_fst, coe_snd, comp_apply]
state_before: A : Type u_1
B : Type u_2
G : Type u_3
H : Type u_4
M : Type u_5
N : Type u_6
P : Type u_7
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
f : M →ₙ* N × P
x : M
⊢ (((fst N P).comp f).prod ((snd N P).comp f)) x = f x
state_after: no goals
Theorem: CategoryTheory.Subobject.mk_eq_mk_of_comm
File: Mathlib/CategoryTheory/Subobject/Basic.lean

tactic: simp [w]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
B A₁ A₂ : C
f : A₁ ⟶ B
g : A₂ ⟶ B
inst✝¹ : Mono f
inst✝ : Mono g
i : A₁ ≅ A₂
w : i.hom ≫ g = f
⊢ (underlyingIso f ≪≫ i).hom ≫ g = (mk f).arrow
state_after: no goals
Theorem: IsUnit.isUnit_iff_mulRight_bijective
File: Mathlib/Algebra/Group/Units.lean

tactic: simp [mul_assoc]
state_before: α : Type u
M : Type u_1
N : Type u_2
inst✝ : Monoid M
a✝ b c a : M
h : IsUnit a
y : M
⊢ (fun x => x * a) (y * ↑h.unit⁻¹) = y
state_after: no goals
Theorem: Submonoid.LocalizationMap.mk'_eq_iff_eq
File: Mathlib/GroupTheory/MonoidLocalization.lean

tactic: rw [f.toMap.map_mul, f.toMap.map_mul, f.mk'_eq_iff_eq_mul.1 H,← mul_assoc, mk'_spec',
  mul_comm ((toMap f) x₂) _]
state_before: M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
x₁ x₂ : M
y₁ y₂ : ↥S
H : f.mk' x₁ y₁ = f.mk' x₂ y₂
⊢ f.toMap (↑y₂ * x₁) = f.toMap (↑y₁ * x₂)
state_after: no goals

tactic: rw [mk'_eq_iff_eq_mul, mk', mul_assoc, mul_comm _ (f.toMap y₁), ← mul_assoc, ←
  f.toMap.map_mul, mul_comm x₂, ← H, ← mul_comm x₁, f.toMap.map_mul,
  mul_inv_right f.map_units]
state_before: M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
x₁ x₂ : M
y₁ y₂ : ↥S
H : f.toMap (↑y₂ * x₁) = f.toMap (↑y₁ * x₂)
⊢ f.mk' x₁ y₁ = f.mk' x₂ y₂
state_after: no goals
Theorem: Subgroup.mul_injective_of_disjoint
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

tactic: intro x y hxy
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
N : Type u_5
inst✝ : Group N
H₁ H₂ : Subgroup G
h : Disjoint H₁ H₂
⊢ Injective fun g => ↑g.1 * ↑g.2
state_after: 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
N : Type u_5
inst✝ : Group N
H₁ H₂ : Subgroup G
h : Disjoint H₁ H₂
x y : ↥H₁ × ↥H₂
hxy : (fun g => ↑g.1 * ↑g.2) x = (fun g => ↑g.1 * ↑g.2) y
⊢ x = y

tactic: rw [← inv_mul_eq_iff_eq_mul, ← mul_assoc, ← mul_inv_eq_one, mul_assoc] at hxy
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
N : Type u_5
inst✝ : Group N
H₁ H₂ : Subgroup G
h : Disjoint H₁ H₂
x y : ↥H₁ × ↥H₂
hxy : (fun g => ↑g.1 * ↑g.2) x = (fun g => ↑g.1 * ↑g.2) y
⊢ x = y
state_after: 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
N : Type u_5
inst✝ : Group N
H₁ H₂ : Subgroup G
h : Disjoint H₁ H₂
x y : ↥H₁ × ↥H₂
hxy : (↑y.1)⁻¹ * ↑x.1 * (↑x.2 * (↑y.2)⁻¹) = 1
⊢ x = y

tactic: replace hxy := disjoint_iff_mul_eq_one.mp h (y.1⁻¹ * x.1).prop (x.2 * y.2⁻¹).prop hxy
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
N : Type u_5
inst✝ : Group N
H₁ H₂ : Subgroup G
h : Disjoint H₁ H₂
x y : ↥H₁ × ↥H₂
hxy : (↑y.1)⁻¹ * ↑x.1 * (↑x.2 * (↑y.2)⁻¹) = 1
⊢ x = y
state_after: 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
N : Type u_5
inst✝ : Group N
H₁ H₂ : Subgroup G
h : Disjoint H₁ H₂
x y : ↥H₁ × ↥H₂
hxy : ↑(y.1⁻¹ * x.1) = 1 ∧ ↑(x.2 * y.2⁻¹) = 1
⊢ x = y

tactic: rwa [coe_mul, coe_mul, coe_inv, coe_inv, inv_mul_eq_one, mul_inv_eq_one, ← Subtype.ext_iff, ←
  Subtype.ext_iff, eq_comm, ← Prod.ext_iff] at hxy
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
N : Type u_5
inst✝ : Group N
H₁ H₂ : Subgroup G
h : Disjoint H₁ H₂
x y : ↥H₁ × ↥H₂
hxy : ↑(y.1⁻¹ * x.1) = 1 ∧ ↑(x.2 * y.2⁻¹) = 1
⊢ x = y
state_after: no goals
Theorem: TopologicalSpace.Opens.mapIso_hom_app
File: Mathlib/Topology/Category/TopCat/Opens.lean

tactic: rw [h]
state_before: X Y Z : TopCat
f g : X ⟶ Y
h : f = g
U : Opens ↑Y
⊢ (map f).obj U = (map g).obj U
state_after: no goals
Theorem: embedding_toPullbackDiag
File: Mathlib/Topology/SeparatedMap.lean

tactic: rw [toPullbackDiag, nhds_induced, Filter.comap_comap, nhds_prod_eq, Filter.comap_prod]
state_before: X : Type u_1
Y : Sort u_2
A : Type ?u.29
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
f : X → Y
x : X
⊢ Filter.comap (toPullbackDiag f) (𝓝 (toPullbackDiag f x)) = 𝓝 x
state_after: X : Type u_1
Y : Sort u_2
A : Type ?u.29
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
f : X → Y
x : X
⊢ Filter.comap (Prod.fst ∘ Subtype.val ∘ toPullbackDiag f) (𝓝 x) ⊓
      Filter.comap (Prod.snd ∘ Subtype.val ∘ toPullbackDiag f) (𝓝 x) =
    𝓝 x

tactic: erw [Filter.comap_id, inf_idem]
state_before: X : Type u_1
Y : Sort u_2
A : Type ?u.29
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
f : X → Y
x : X
⊢ Filter.comap (Prod.fst ∘ Subtype.val ∘ toPullbackDiag f) (𝓝 x) ⊓
      Filter.comap (Prod.snd ∘ Subtype.val ∘ toPullbackDiag f) (𝓝 x) =
    𝓝 x
state_after: no goals
Theorem: MulLECancellable.mul_le_iff_le_one_left
File: Mathlib/Algebra/Order/Monoid/Unbundled/Basic.lean

tactic: rw [i.symm_op, ha.mul_le_iff_le_one_right]
state_before: α : Type u_1
β : Type u_2
inst✝² : LE α
inst✝¹ : MulOneClass α
i : IsSymmOp α α fun x x_1 => x * x_1
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : α
ha : MulLECancellable a
⊢ b * a ≤ a ↔ b ≤ 1
state_after: no goals
Theorem: Set.Iio_subset_Iio_iff
File: Mathlib/Order/Interval/Set/Basic.lean

tactic: refine ⟨fun h => ?_, fun h => Iio_subset_Iio h⟩
state_before: α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
a a₁ a₂ b b₁ b₂ c d : α
⊢ Iio a ⊆ Iio b ↔ a ≤ b
state_after: α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
a a₁ a₂ b b₁ b₂ c d : α
h : Iio a ⊆ Iio b
⊢ a ≤ b

tactic: by_contra ab
state_before: α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
a a₁ a₂ b b₁ b₂ c d : α
h : Iio a ⊆ Iio b
⊢ a ≤ b
state_after: α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
a a₁ a₂ b b₁ b₂ c d : α
h : Iio a ⊆ Iio b
ab : ¬a ≤ b
⊢ False

tactic: exact lt_irrefl _ (h (not_le.mp ab))
state_before: α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
a a₁ a₂ b b₁ b₂ c d : α
h : Iio a ⊆ Iio b
ab : ¬a ≤ b
⊢ False
state_after: no goals
Theorem: List.prefix_append_right_inj
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

tactic: rw [append_assoc, append_right_inj]
state_before: α✝ : Type u_1
l₁ l₂ l r : List α✝
⊢ l ++ l₁ ++ r = l ++ l₂ ↔ l₁ ++ r = l₂
state_after: no goals
Theorem: Complex.cos_sq
File: Mathlib/Data/Complex/Exponential.lean

tactic: simp [cos_two_mul, div_add_div_same, mul_div_cancel_left₀, two_ne_zero, -one_div]
state_before: x y : ℂ
⊢ cos x ^ 2 = 1 / 2 + cos (2 * x) / 2
state_after: no goals