1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: IsPrimitiveRoot.inv
File: Mathlib/RingTheory/RootsOfUnity/Basic.lean

tactic: simp only [h.pow_eq_one, inv_one, eq_self_iff_true, inv_pow]
state_before: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
inst✝ : DivisionCommMonoid G
k l : ℕ
ζ : G
h : IsPrimitiveRoot ζ k
⊢ ζ⁻¹ ^ k = 1
state_after: no goals

tactic: intro l hl
state_before: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
inst✝ : DivisionCommMonoid G
k l : ℕ
ζ : G
h : IsPrimitiveRoot ζ k
⊢ ∀ (l : ℕ), ζ⁻¹ ^ l = 1 → k ∣ l
state_after: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
inst✝ : DivisionCommMonoid G
k l✝ : ℕ
ζ : G
h : IsPrimitiveRoot ζ k
l : ℕ
hl : ζ⁻¹ ^ l = 1
⊢ k ∣ l

tactic: apply h.dvd_of_pow_eq_one l
state_before: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
inst✝ : DivisionCommMonoid G
k l✝ : ℕ
ζ : G
h : IsPrimitiveRoot ζ k
l : ℕ
hl : ζ⁻¹ ^ l = 1
⊢ k ∣ l
state_after: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
inst✝ : DivisionCommMonoid G
k l✝ : ℕ
ζ : G
h : IsPrimitiveRoot ζ k
l : ℕ
hl : ζ⁻¹ ^ l = 1
⊢ ζ ^ l = 1

tactic: rw [← inv_inj, ← inv_pow, hl, inv_one]
state_before: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
inst✝ : DivisionCommMonoid G
k l✝ : ℕ
ζ : G
h : IsPrimitiveRoot ζ k
l : ℕ
hl : ζ⁻¹ ^ l = 1
⊢ ζ ^ l = 1
state_after: no goals
Theorem: Cardinal.one_eq_ofENat
File: Mathlib/SetTheory/Cardinal/ENat.lean

tactic: norm_cast
state_before: m : ℕ∞
⊢ 1 = ↑m ↔ m = 1
state_after: m : ℕ∞
⊢ 1 = m ↔ m = 1

tactic: apply eq_comm
state_before: m : ℕ∞
⊢ 1 = m ↔ m = 1
state_after: no goals
Theorem: Filter.HasBasis.uniformInducing_iff
File: Mathlib/Topology/UniformSpace/UniformEmbedding.lean

tactic: simp [uniformInducing_iff', h.uniformContinuous_iff h', (h'.comap _).le_basis_iff h, subset_def]
state_before: α : Type u
β : Type v
γ : Type w
inst✝² : UniformSpace α
inst✝¹ : UniformSpace β
inst✝ : UniformSpace γ
ι : Sort u_1
ι' : Sort u_2
p : ι → Prop
p' : ι' → Prop
s : ι → Set (α × α)
s' : ι' → Set (β × β)
h : (𝓤 α).HasBasis p s
h' : (𝓤 β).HasBasis p' s'
f : α → β
⊢ UniformInducing f ↔
    (∀ (i : ι'), p' i → ∃ j, p j ∧ ∀ (x y : α), (x, y) ∈ s j → (f x, f y) ∈ s' i) ∧
      ∀ (j : ι), p j → ∃ i, p' i ∧ ∀ (x y : α), (f x, f y) ∈ s' i → (x, y) ∈ s j
state_after: no goals
Theorem: Finset.sup_image₂_left
File: Mathlib/Data/Finset/NAry.lean

tactic: simp only [image₂, sup_image, sup_product_left]
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁹ : DecidableEq α'
inst✝⁸ : DecidableEq β'
inst✝⁷ : DecidableEq γ
inst✝⁶ : DecidableEq γ'
inst✝⁵ : DecidableEq δ
inst✝⁴ : DecidableEq δ'
inst✝³ : DecidableEq ε
inst✝² : DecidableEq ε'
f f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
inst✝¹ : SemilatticeSup δ
inst✝ : OrderBot δ
g : γ → δ
⊢ (image₂ f s t).sup g = s.sup fun x => t.sup fun x_1 => g (f x x_1)
state_after: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁹ : DecidableEq α'
inst✝⁸ : DecidableEq β'
inst✝⁷ : DecidableEq γ
inst✝⁶ : DecidableEq γ'
inst✝⁵ : DecidableEq δ
inst✝⁴ : DecidableEq δ'
inst✝³ : DecidableEq ε
inst✝² : DecidableEq ε'
f f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
inst✝¹ : SemilatticeSup δ
inst✝ : OrderBot δ
g : γ → δ
⊢ (s.sup fun i => t.sup fun i' => (g ∘ uncurry f) (i, i')) = s.sup fun x => t.sup fun x_1 => g (f x x_1)

tactic: rfl
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁹ : DecidableEq α'
inst✝⁸ : DecidableEq β'
inst✝⁷ : DecidableEq γ
inst✝⁶ : DecidableEq γ'
inst✝⁵ : DecidableEq δ
inst✝⁴ : DecidableEq δ'
inst✝³ : DecidableEq ε
inst✝² : DecidableEq ε'
f f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
inst✝¹ : SemilatticeSup δ
inst✝ : OrderBot δ
g : γ → δ
⊢ (s.sup fun i => t.sup fun i' => (g ∘ uncurry f) (i, i')) = s.sup fun x => t.sup fun x_1 => g (f x x_1)
state_after: no goals
Theorem: LSeries.abscissaOfAbsConv_le_of_isBigO_rpow
File: Mathlib/NumberTheory/LSeries/Convergence.lean

tactic: rw [show x = x + 1 - 1 by ring] at h
state_before: f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ x
⊢ abscissaOfAbsConv f ≤ ↑x + 1
state_after: f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
⊢ abscissaOfAbsConv f ≤ ↑x + 1

tactic: by_contra! H
state_before: f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
⊢ abscissaOfAbsConv f ≤ ↑x + 1
state_after: f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
H : ↑x + 1 < abscissaOfAbsConv f
⊢ False

tactic: obtain ⟨y, hy₁, hy₂⟩ := EReal.exists_between_coe_real H
state_before: f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
H : ↑x + 1 < abscissaOfAbsConv f
⊢ False
state_after: case intro.intro
f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
H : ↑x + 1 < abscissaOfAbsConv f
y : ℝ
hy₁ : ↑x + 1 < ↑y
hy₂ : ↑y < abscissaOfAbsConv f
⊢ False

tactic: exact (LSeriesSummable_of_isBigO_rpow (s := y) (EReal.coe_lt_coe_iff.mp hy₁) h
  |>.abscissaOfAbsConv_le.trans_lt hy₂).false
state_before: case intro.intro
f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
H : ↑x + 1 < abscissaOfAbsConv f
y : ℝ
hy₁ : ↑x + 1 < ↑y
hy₂ : ↑y < abscissaOfAbsConv f
⊢ False
state_after: no goals

tactic: ring
state_before: f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ x
⊢ x = x + 1 - 1
state_after: no goals
Theorem: hnot_sdiff_comm
File: Mathlib/Order/Heyting/Basic.lean

tactic: simp_rw [← top_sdiff', sdiff_right_comm]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : CoheytingAlgebra α
a✝ b✝ c a b : α
⊢ ￢a \ b = ￢b \ a
state_after: no goals
Theorem: preimage_mul_sphere
File: Mathlib/Analysis/Normed/Group/Basic.lean

tactic: ext c
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✝¹ : SeminormedCommGroup E
inst✝ : SeminormedCommGroup F
a✝ a₁ a₂ b✝ b₁ b₂ : E
r✝ r₁ r₂ : ℝ
a b : E
r : ℝ
⊢ (fun x => b * x) ⁻¹' sphere a r = sphere (a / b) r
state_after: case h
𝓕 : 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✝¹ : SeminormedCommGroup E
inst✝ : SeminormedCommGroup F
a✝ a₁ a₂ b✝ b₁ b₂ : E
r✝ r₁ r₂ : ℝ
a b : E
r : ℝ
c : E
⊢ c ∈ (fun x => b * x) ⁻¹' sphere a r ↔ c ∈ sphere (a / b) r

tactic: simp only [Set.mem_preimage, mem_sphere_iff_norm', div_div_eq_mul_div, mul_comm]
state_before: case h
𝓕 : 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✝¹ : SeminormedCommGroup E
inst✝ : SeminormedCommGroup F
a✝ a₁ a₂ b✝ b₁ b₂ : E
r✝ r₁ r₂ : ℝ
a b : E
r : ℝ
c : E
⊢ c ∈ (fun x => b * x) ⁻¹' sphere a r ↔ c ∈ sphere (a / b) r
state_after: no goals
Theorem: Set.eq_empty_or_encard_eq_top_or_encard_diff_singleton_lt
File: Mathlib/Data/Set/Card.lean

tactic: refine s.eq_empty_or_nonempty.elim Or.inl (Or.inr ∘ fun ⟨a,ha⟩ ↦
  (s.finite_or_infinite.elim (fun hfin ↦ Or.inr ⟨a, ha, ?_⟩) (Or.inl ∘ Infinite.encard_eq)))
state_before: α : Type u_1
β : Type u_2
s✝ t : Set α
a b : α
s : Set α
⊢ s = ∅ ∨ s.encard = ⊤ ∨ ∃ a ∈ s, (s \ {a}).encard < s.encard
state_after: α : Type u_1
β : Type u_2
s✝ t : Set α
a✝ b : α
s : Set α
x✝ : s.Nonempty
a : α
ha : a ∈ s
hfin : s.Finite
⊢ (s \ {a}).encard < s.encard

tactic: rw [← encard_diff_singleton_add_one ha]
state_before: α : Type u_1
β : Type u_2
s✝ t : Set α
a✝ b : α
s : Set α
x✝ : s.Nonempty
a : α
ha : a ∈ s
hfin : s.Finite
⊢ (s \ {a}).encard < s.encard
state_after: α : Type u_1
β : Type u_2
s✝ t : Set α
a✝ b : α
s : Set α
x✝ : s.Nonempty
a : α
ha : a ∈ s
hfin : s.Finite
⊢ (s \ {a}).encard < (s \ {a}).encard + 1

tactic: nth_rw 1 [← add_zero (encard _)]
state_before: α : Type u_1
β : Type u_2
s✝ t : Set α
a✝ b : α
s : Set α
x✝ : s.Nonempty
a : α
ha : a ∈ s
hfin : s.Finite
⊢ (s \ {a}).encard < (s \ {a}).encard + 1
state_after: α : Type u_1
β : Type u_2
s✝ t : Set α
a✝ b : α
s : Set α
x✝ : s.Nonempty
a : α
ha : a ∈ s
hfin : s.Finite
⊢ (s \ {a}).encard + 0 < (s \ {a}).encard + 1

tactic: exact WithTop.add_lt_add_left (hfin.diff _).encard_lt_top.ne zero_lt_one
state_before: α : Type u_1
β : Type u_2
s✝ t : Set α
a✝ b : α
s : Set α
x✝ : s.Nonempty
a : α
ha : a ∈ s
hfin : s.Finite
⊢ (s \ {a}).encard + 0 < (s \ {a}).encard + 1
state_after: no goals
Theorem: Mathlib.Meta.NormNum.isInt_rpow_neg
File: Mathlib/Analysis/SpecialFunctions/Pow/Real.lean

tactic: rwa [pb.out, Real.rpow_intCast]
state_before: a b : ℝ
nb ne : ℕ
pb : IsInt b (Int.negOfNat nb)
pe' : IsInt (a ^ Int.negOfNat nb) (Int.negOfNat ne)
⊢ IsInt (a ^ b) (Int.negOfNat ne)
state_after: no goals
Theorem: Behrend.two_div_one_sub_two_div_e_le_eight
File: Mathlib/Combinatorics/Additive/AP/Three/Behrend.lean

tactic: rw [div_le_iff, mul_sub, mul_one, mul_div_assoc', le_sub_comm, div_le_iff (exp_pos _)]
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
⊢ 2 / (1 - 2 / rexp 1) ≤ 8
state_after: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
⊢ 8 * 2 ≤ (8 - 2) * rexp 1

α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
⊢ 0 < 1 - 2 / rexp 1

tactic: rw [sub_pos, div_lt_one] <;> exact exp_one_gt_d9.trans' (by norm_num)
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
⊢ 0 < 1 - 2 / rexp 1
state_after: no goals

tactic: have : 16 < 6 * (2.7182818283 : ℝ) := by norm_num
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
⊢ 8 * 2 ≤ (8 - 2) * rexp 1
state_after: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
this : 16 < 6 * 2.7182818283
⊢ 8 * 2 ≤ (8 - 2) * rexp 1

tactic: linarith [exp_one_gt_d9]
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
this : 16 < 6 * 2.7182818283
⊢ 8 * 2 ≤ (8 - 2) * rexp 1
state_after: no goals

tactic: norm_num
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
⊢ 16 < 6 * 2.7182818283
state_after: no goals

tactic: norm_num
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
⊢ 0 < 2.7182818283
state_after: no goals
Theorem: Matrix.diagonal_apply_eq
File: Mathlib/Data/Matrix/Basic.lean

tactic: simp [diagonal]
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
m' : o → Type u_5
n' : o → Type u_6
R : Type u_7
S : Type u_8
α : Type v
β : Type w
γ : Type u_9
inst✝¹ : DecidableEq n
inst✝ : Zero α
d : n → α
i : n
⊢ diagonal d i i = d i
state_after: no goals
Theorem: uniqueDiffOn_Ici
File: Mathlib/Analysis/Calculus/TangentCone.lean

tactic: simp only [interior_Ici, nonempty_Ioi]
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
x y : E
s t : Set E
a : ℝ
⊢ (interior (Ici a)).Nonempty
state_after: no goals
Theorem: Submonoid.noncommProd_mem
File: Mathlib/Algebra/Group/Submonoid/Membership.lean

tactic: apply multiset_noncommProd_mem
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝² : Monoid M
inst✝¹ : SetLike B M
inst✝ : SubmonoidClass B M
S✝ : B
s S : Submonoid M
ι : Type u_4
t : Finset ι
f : ι → M
comm : (↑t).Pairwise fun a b => Commute (f a) (f b)
h : ∀ c ∈ t, f c ∈ S
⊢ t.noncommProd f comm ∈ S
state_after: case h
M : Type u_1
A : Type u_2
B : Type u_3
inst✝² : Monoid M
inst✝¹ : SetLike B M
inst✝ : SubmonoidClass B M
S✝ : B
s S : Submonoid M
ι : Type u_4
t : Finset ι
f : ι → M
comm : (↑t).Pairwise fun a b => Commute (f a) (f b)
h : ∀ c ∈ t, f c ∈ S
⊢ ∀ x ∈ Multiset.map f t.val, x ∈ S

tactic: intro y
state_before: case h
M : Type u_1
A : Type u_2
B : Type u_3
inst✝² : Monoid M
inst✝¹ : SetLike B M
inst✝ : SubmonoidClass B M
S✝ : B
s S : Submonoid M
ι : Type u_4
t : Finset ι
f : ι → M
comm : (↑t).Pairwise fun a b => Commute (f a) (f b)
h : ∀ c ∈ t, f c ∈ S
⊢ ∀ x ∈ Multiset.map f t.val, x ∈ S
state_after: case h
M : Type u_1
A : Type u_2
B : Type u_3
inst✝² : Monoid M
inst✝¹ : SetLike B M
inst✝ : SubmonoidClass B M
S✝ : B
s S : Submonoid M
ι : Type u_4
t : Finset ι
f : ι → M
comm : (↑t).Pairwise fun a b => Commute (f a) (f b)
h : ∀ c ∈ t, f c ∈ S
y : M
⊢ y ∈ Multiset.map f t.val → y ∈ S

tactic: rw [Multiset.mem_map]
state_before: case h
M : Type u_1
A : Type u_2
B : Type u_3
inst✝² : Monoid M
inst✝¹ : SetLike B M
inst✝ : SubmonoidClass B M
S✝ : B
s S : Submonoid M
ι : Type u_4
t : Finset ι
f : ι → M
comm : (↑t).Pairwise fun a b => Commute (f a) (f b)
h : ∀ c ∈ t, f c ∈ S
y : M
⊢ y ∈ Multiset.map f t.val → y ∈ S
state_after: case h
M : Type u_1
A : Type u_2
B : Type u_3
inst✝² : Monoid M
inst✝¹ : SetLike B M
inst✝ : SubmonoidClass B M
S✝ : B
s S : Submonoid M
ι : Type u_4
t : Finset ι
f : ι → M
comm : (↑t).Pairwise fun a b => Commute (f a) (f b)
h : ∀ c ∈ t, f c ∈ S
y : M
⊢ (∃ a ∈ t.val, f a = y) → y ∈ S

tactic: rintro ⟨x, ⟨hx, rfl⟩⟩
state_before: case h
M : Type u_1
A : Type u_2
B : Type u_3
inst✝² : Monoid M
inst✝¹ : SetLike B M
inst✝ : SubmonoidClass B M
S✝ : B
s S : Submonoid M
ι : Type u_4
t : Finset ι
f : ι → M
comm : (↑t).Pairwise fun a b => Commute (f a) (f b)
h : ∀ c ∈ t, f c ∈ S
y : M
⊢ (∃ a ∈ t.val, f a = y) → y ∈ S
state_after: case h.intro.intro
M : Type u_1
A : Type u_2
B : Type u_3
inst✝² : Monoid M
inst✝¹ : SetLike B M
inst✝ : SubmonoidClass B M
S✝ : B
s S : Submonoid M
ι : Type u_4
t : Finset ι
f : ι → M
comm : (↑t).Pairwise fun a b => Commute (f a) (f b)
h : ∀ c ∈ t, f c ∈ S
x : ι
hx : x ∈ t.val
⊢ f x ∈ S

tactic: exact h x hx
state_before: case h.intro.intro
M : Type u_1
A : Type u_2
B : Type u_3
inst✝² : Monoid M
inst✝¹ : SetLike B M
inst✝ : SubmonoidClass B M
S✝ : B
s S : Submonoid M
ι : Type u_4
t : Finset ι
f : ι → M
comm : (↑t).Pairwise fun a b => Commute (f a) (f b)
h : ∀ c ∈ t, f c ∈ S
x : ι
hx : x ∈ t.val
⊢ f x ∈ S
state_after: no goals
Theorem: Matroid.mapEmbedding_indep_iff
File: Mathlib/Data/Matroid/Map.lean

tactic: rw [mapEmbedding, map_indep_iff]
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α ↪ β
I : Set β
⊢ (M.mapEmbedding f).Indep I ↔ M.Indep (⇑f ⁻¹' I) ∧ I ⊆ range ⇑f
state_after: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α ↪ β
I : Set β
⊢ (∃ I₀, M.Indep I₀ ∧ I = ⇑f '' I₀) ↔ M.Indep (⇑f ⁻¹' I) ∧ I ⊆ range ⇑f

tactic: refine ⟨?_, fun ⟨h,h'⟩ ↦ ⟨f ⁻¹' I, h, by rwa [eq_comm, image_preimage_eq_iff]⟩⟩
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α ↪ β
I : Set β
⊢ (∃ I₀, M.Indep I₀ ∧ I = ⇑f '' I₀) ↔ M.Indep (⇑f ⁻¹' I) ∧ I ⊆ range ⇑f
state_after: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α ↪ β
I : Set β
⊢ (∃ I₀, M.Indep I₀ ∧ I = ⇑f '' I₀) → M.Indep (⇑f ⁻¹' I) ∧ I ⊆ range ⇑f

tactic: rintro ⟨I, hI, rfl⟩
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α ↪ β
I : Set β
⊢ (∃ I₀, M.Indep I₀ ∧ I = ⇑f '' I₀) → M.Indep (⇑f ⁻¹' I) ∧ I ⊆ range ⇑f
state_after: case intro.intro
α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α ↪ β
I : Set α
hI : M.Indep I
⊢ M.Indep (⇑f ⁻¹' (⇑f '' I)) ∧ ⇑f '' I ⊆ range ⇑f

tactic: rw [preimage_image_eq _ f.injective]
state_before: case intro.intro
α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α ↪ β
I : Set α
hI : M.Indep I
⊢ M.Indep (⇑f ⁻¹' (⇑f '' I)) ∧ ⇑f '' I ⊆ range ⇑f
state_after: case intro.intro
α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α ↪ β
I : Set α
hI : M.Indep I
⊢ M.Indep I ∧ ⇑f '' I ⊆ range ⇑f

tactic: exact ⟨hI, image_subset_range _ _⟩
state_before: case intro.intro
α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α ↪ β
I : Set α
hI : M.Indep I
⊢ M.Indep I ∧ ⇑f '' I ⊆ range ⇑f
state_after: no goals

tactic: rwa [eq_comm, image_preimage_eq_iff]
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α ↪ β
I : Set β
x✝ : M.Indep (⇑f ⁻¹' I) ∧ I ⊆ range ⇑f
h : M.Indep (⇑f ⁻¹' I)
h' : I ⊆ range ⇑f
⊢ I = ⇑f '' (⇑f ⁻¹' I)
state_after: no goals
Theorem: Num.dvd_to_nat
File: Mathlib/Data/Num/Lemmas.lean

tactic: rw [← of_to_nat n, e]
state_before: m n : Num
x✝ : ↑m ∣ ↑n
k : ℕ
e : ↑n = ↑m * k
⊢ n = m * ↑k
state_after: m n : Num
x✝ : ↑m ∣ ↑n
k : ℕ
e : ↑n = ↑m * k
⊢ ↑(↑m * k) = m * ↑k

tactic: simp
state_before: m n : Num
x✝ : ↑m ∣ ↑n
k : ℕ
e : ↑n = ↑m * k
⊢ ↑(↑m * k) = m * ↑k
state_after: no goals

tactic: simp [e, mul_to_nat]
state_before: m n : Num
x✝ : m ∣ n
k : Num
e : n = m * k
⊢ ↑n = ↑m * ↑k
state_after: no goals
Theorem: Finset.coe_pair
File: Mathlib/Data/Finset/Basic.lean

tactic: ext
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s t u v : Finset α
a✝ b✝ a b : α
⊢ ↑{a, b} = {a, b}
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s t u v : Finset α
a✝ b✝ a b x✝ : α
⊢ x✝ ∈ ↑{a, b} ↔ x✝ ∈ {a, b}

tactic: simp
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s t u v : Finset α
a✝ b✝ a b x✝ : α
⊢ x✝ ∈ ↑{a, b} ↔ x✝ ∈ {a, b}
state_after: no goals
Theorem: Finset.max_erase_ne_self
File: Mathlib/Data/Finset/Lattice.lean

tactic: by_cases s0 : (s.erase x).Nonempty
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset α
⊢ (s.erase x).max ≠ ↑x
state_after: case pos
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset α
s0 : (s.erase x).Nonempty
⊢ (s.erase x).max ≠ ↑x

case neg
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset α
s0 : ¬(s.erase x).Nonempty
⊢ (s.erase x).max ≠ ↑x

tactic: refine ne_of_eq_of_ne (coe_max' s0).symm ?_
state_before: case pos
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset α
s0 : (s.erase x).Nonempty
⊢ (s.erase x).max ≠ ↑x
state_after: case pos
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset α
s0 : (s.erase x).Nonempty
⊢ ↑((s.erase x).max' s0) ≠ ↑x

tactic: exact WithBot.coe_eq_coe.not.mpr (max'_erase_ne_self _)
state_before: case pos
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset α
s0 : (s.erase x).Nonempty
⊢ ↑((s.erase x).max' s0) ≠ ↑x
state_after: no goals

tactic: rw [not_nonempty_iff_eq_empty.mp s0, max_empty]
state_before: case neg
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset α
s0 : ¬(s.erase x).Nonempty
⊢ (s.erase x).max ≠ ↑x
state_after: case neg
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset α
s0 : ¬(s.erase x).Nonempty
⊢ ⊥ ≠ ↑x

tactic: exact WithBot.bot_ne_coe
state_before: case neg
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset α
s0 : ¬(s.erase x).Nonempty
⊢ ⊥ ≠ ↑x
state_after: no goals
Theorem: PFun.dom_of_mem_fix
File: Mathlib/Data/PFun.lean

tactic: let ⟨h₁, h₂⟩ := Part.mem_assert_iff.1 h
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ι : Type u_6
f : α →. β ⊕ α
a : α
b : β
h : b ∈ f.fix a
⊢ (f a).Dom
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ι : Type u_6
f : α →. β ⊕ α
a : α
b : β
h : b ∈ f.fix a
h₁ : Acc (fun x y => Sum.inr x ∈ f y) a
h₂ :
  b ∈
    WellFounded.fixF
      (fun a IH =>
        Part.assert (f a).Dom fun hf =>
          match e : (f a).get hf with
          | Sum.inl b => Part.some b
          | Sum.inr a' => IH a' ⋯)
      a h₁
⊢ (f a).Dom

tactic: rw [WellFounded.fixFEq] at h₂
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ι : Type u_6
f : α →. β ⊕ α
a : α
b : β
h : b ∈ f.fix a
h₁ : Acc (fun x y => Sum.inr x ∈ f y) a
h₂ :
  b ∈
    WellFounded.fixF
      (fun a IH =>
        Part.assert (f a).Dom fun hf =>
          match e : (f a).get hf with
          | Sum.inl b => Part.some b
          | Sum.inr a' => IH a' ⋯)
      a h₁
⊢ (f a).Dom
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ι : Type u_6
f : α →. β ⊕ α
a : α
b : β
h : b ∈ f.fix a
h₁ : Acc (fun x y => Sum.inr x ∈ f y) a
h₂ :
  b ∈
    Part.assert (f a).Dom fun hf =>
      match e : (f a).get hf with
      | Sum.inl b => Part.some b
      | Sum.inr a' =>
        (fun y p =>
            WellFounded.fixF
              (fun a IH =>
                Part.assert (f a).Dom fun hf =>
                  match e : (f a).get hf with
                  | Sum.inl b => Part.some b
                  | Sum.inr a' => IH a' ⋯)
              y ⋯)
          a' ⋯
⊢ (f a).Dom

tactic: exact h₂.fst.fst
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ι : Type u_6
f : α →. β ⊕ α
a : α
b : β
h : b ∈ f.fix a
h₁ : Acc (fun x y => Sum.inr x ∈ f y) a
h₂ :
  b ∈
    Part.assert (f a).Dom fun hf =>
      match e : (f a).get hf with
      | Sum.inl b => Part.some b
      | Sum.inr a' =>
        (fun y p =>
            WellFounded.fixF
              (fun a IH =>
                Part.assert (f a).Dom fun hf =>
                  match e : (f a).get hf with
                  | Sum.inl b => Part.some b
                  | Sum.inr a' => IH a' ⋯)
              y ⋯)
          a' ⋯
⊢ (f a).Dom
state_after: no goals
Theorem: List.takeList_eq_takeListTR
File: .lake/packages/batteries/Batteries/Data/List/Basic.lean

tactic: funext α xs ns
state_before: ⊢ @takeList = @takeListTR
state_after: case h.h.h
α : Type u_1
xs : List α
ns : List Nat
⊢ xs.takeList ns = xs.takeListTR ns

tactic: simp [takeListTR]
state_before: case h.h.h
α : Type u_1
xs : List α
ns : List Nat
⊢ xs.takeList ns = xs.takeListTR ns
state_after: case h.h.h
α : Type u_1
xs : List α
ns : List Nat
⊢ xs.takeList ns = takeListTR.go ns xs #[]

tactic: simp [takeListTR, go]
state_before: case h.h.h
α : Type u_1
xs : List α
ns : List Nat
⊢ xs.takeList ns = takeListTR.go ns xs #[]
state_after: no goals

tactic: simp [takeListTR.go, takeList]
state_before: α : Type u_1
xs✝ : List α
ns : List Nat
acc : Array (List α)
xs : List α
⊢ takeListTR.go [] xs acc =
    match xs.takeList [] with
    | (l, r) => (acc.toList ++ l, r)
state_after: no goals

tactic: simp [takeListTR.go, takeList, go _ ns]
state_before: α : Type u_1
xs✝ : List α
ns✝ : List Nat
acc : Array (List α)
n : Nat
ns : List Nat
xs : List α
⊢ takeListTR.go (n :: ns) xs acc =
    match xs.takeList (n :: ns) with
    | (l, r) => (acc.toList ++ l, r)
state_after: no goals
Theorem: Complex.IsExpCmpFilter.isLittleO_exp_cpow
File: Mathlib/Analysis/SpecialFunctions/CompareExp.lean

tactic: simpa using hl.isLittleO_cpow_mul_exp hb 0 a
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
a : ℂ
b : ℝ
hb : b < 0
⊢ (fun z => cexp (↑b * z)) =o[l] fun z => z ^ a
state_after: no goals
Theorem: Multiset.length_ndinsert_of_not_mem
File: Mathlib/Data/Multiset/FinsetOps.lean

tactic: simp [h]
state_before: α : Type u_1
inst✝ : DecidableEq α
s✝ : Multiset α
a : α
s : Multiset α
h : a ∉ s
⊢ card (ndinsert a s) = card s + 1
state_after: no goals
Theorem: Units.mul_eq_one_iff_inv_eq
File: Mathlib/Algebra/Group/Units.lean

tactic: rw [← inv_mul_eq_one, inv_inv]
state_before: α : Type u
inst✝ : Monoid α
a✝ b c u : αˣ
a : α
⊢ ↑u * a = 1 ↔ ↑u⁻¹ = a
state_after: no goals