ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Finset.geomSum_ofColex_strictMono
File: Mathlib/Combinatorics/Colex.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
s t : Finset ℕ
n : ℕ
hn : 2 ≤ n
⊢ StrictMono fun s => ∑ k ∈ s.ofColex, n ^ k
state_after: case toColex.toColex
α : Type u_1
β : Type u_2
s✝ t✝ : Finset ℕ
n : ℕ
hn : 2 ≤ n
s t : Finset ℕ
hst : { ofColex := s } < { ofColex := t }
⊢ (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := s } < (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := t }
tactic: rintro ⟨s⟩ ⟨t⟩ hst
state_before: case toColex.toColex
α : Type u_1
β : Type u_2
s✝ t✝ : Finset ℕ
n : ℕ
hn : 2 ≤ n
s t : Finset ℕ
hst : { ofColex := s } < { ofColex := t }
⊢ (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := s } < (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := t }
state_after: case toColex.toColex
α : Type u_1
β : Type u_2
s✝ t✝ : Finset ℕ
n : ℕ
hn : 2 ≤ n
s t : Finset ℕ
hst : ∃ a ∈ t, a ∉ s ∧ ∀ b ∈ s, b ∉ t → b < a
⊢ (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := s } < (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := t }
tactic: rw [toColex_lt_toColex_iff_exists_forall_lt] at hst
state_before: case toColex.toColex
α : Type u_1
β : Type u_2
s✝ t✝ : Finset ℕ
n : ℕ
hn : 2 ≤ n
s t : Finset ℕ
hst : ∃ a ∈ t, a ∉ s ∧ ∀ b ∈ s, b ∉ t → b < a
⊢ (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := s } < (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := t }
state_after: case toColex.toColex.intro.intro.intro
α : Type u_1
β : Type u_2
s✝ t✝ : Finset ℕ
n : ℕ
hn : 2 ≤ n
s t : Finset ℕ
a : ℕ
hat : a ∈ t
has : a ∉ s
ha : ∀ b ∈ s, b ∉ t → b < a
⊢ (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := s } < (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := t }
tactic: obtain ⟨a, hat, has, ha⟩ := hst
state_before: case toColex.toColex.intro.intro.intro
α : Type u_1
β : Type u_2
s✝ t✝ : Finset ℕ
n : ℕ
hn : 2 ≤ n
s t : Finset ℕ
a : ℕ
hat : a ∈ t
has : a ∉ s
ha : ∀ b ∈ s, b ∉ t → b < a
⊢ (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := s } < (fun s => ∑ k ∈ s.ofColex, n ^ k) { ofColex := t }
state_after: case toColex.toColex.intro.intro.intro
α : Type u_1
β : Type u_2
s✝ t✝ : Finset ℕ
n : ℕ
hn : 2 ≤ n
s t : Finset ℕ
a : ℕ
hat : a ∈ t
has : a ∉ s
ha : ∀ b ∈ s, b ∉ t → b < a
⊢ ∑ i ∈ { ofColex := s }.ofColex \ { ofColex := t }.ofColex, n ^ i <
    ∑ i ∈ { ofColex := t }.ofColex \ { ofColex := s }.ofColex, n ^ i
tactic: rw [← sum_sdiff_lt_sum_sdiff]
state_before: case toColex.toColex.intro.intro.intro
α : Type u_1
β : Type u_2
s✝ t✝ : Finset ℕ
n : ℕ
hn : 2 ≤ n
s t : Finset ℕ
a : ℕ
hat : a ∈ t
has : a ∉ s
ha : ∀ b ∈ s, b ∉ t → b < a
⊢ ∑ i ∈ { ofColex := s }.ofColex \ { ofColex := t }.ofColex, n ^ i <
    ∑ i ∈ { ofColex := t }.ofColex \ { ofColex := s }.ofColex, n ^ i
state_after: no goals
tactic: exact (Nat.geomSum_lt hn <| by simpa).trans_le <| single_le_sum (fun _ _ ↦ by positivity) <|
    mem_sdiff.2 ⟨hat, has⟩
Theorem: Mathlib.Tactic.Ring.cast_zero
File: Mathlib/Tactic/Ring/Basic.lean

Proof steps:
state_before: u✝ : Lean.Level
arg : Q(Type u✝)
sα✝ : Q(CommSemiring «$arg»)
u : Lean.Level
α : Q(Type u)
sα : Q(CommSemiring «$α»)
R : Type u_1
inst✝ : CommSemiring R
a a' a₁ a₂ a₃ b b' b₁ b₂ b₃ c c₁ c₂ : R
e : a = ↑0
⊢ a = 0
state_after: no goals
tactic: simp [e]
Theorem: Subfield.coe_sInf
File: Mathlib/Algebra/Field/Subfield.lean

Proof steps:
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
S : Set (Subfield K)
⊢ ↑(sInf (toSubring '' S)) = ⋂ s ∈ S, ↑s
state_after: case h
K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
S : Set (Subfield K)
x : K
⊢ x ∈ ↑(sInf (toSubring '' S)) ↔ x ∈ ⋂ s ∈ S, ↑s
tactic: ext x
state_before: case h
K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
S : Set (Subfield K)
x : K
⊢ x ∈ ↑(sInf (toSubring '' S)) ↔ x ∈ ⋂ s ∈ S, ↑s
state_after: case h
K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
S : Set (Subfield K)
x : K
⊢ (∀ (i : Subring K), x ∈ ⋂ (_ : i ∈ toSubring '' S), ↑i) ↔ ∀ (i : Subfield K), x ∈ ⋂ (_ : i ∈ S), ↑i
tactic: rw [Subring.coe_sInf, Set.mem_iInter, Set.mem_iInter]
state_before: case h
K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
S : Set (Subfield K)
x : K
⊢ (∀ (i : Subring K), x ∈ ⋂ (_ : i ∈ toSubring '' S), ↑i) ↔ ∀ (i : Subfield K), x ∈ ⋂ (_ : i ∈ S), ↑i
state_after: no goals
tactic: exact
      ⟨fun h s s' ⟨s_mem, s'_eq⟩ => h s.toSubring _ ⟨⟨s, s_mem, rfl⟩, s'_eq⟩,
        fun h s s' ⟨⟨s'', s''_mem, s_eq⟩, (s'_eq : ↑s = s')⟩ =>
        h s'' _ ⟨s''_mem, by simp [← s_eq, ← s'_eq]⟩⟩
Theorem: toIocDiv_add_right'
File: Mathlib/Algebra/Order/ToIntervalMod.lean

Proof steps:
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
⊢ toIocDiv hp (a + p) b = toIocDiv hp a b - 1
state_after: no goals
tactic: simpa only [one_zsmul] using toIocDiv_add_zsmul' hp a b 1
Theorem: Multiset.Rel.add
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
δ : Type u_3
r : α → β → Prop
p : γ → δ → Prop
s : Multiset α
t : Multiset β
u : Multiset α
v : Multiset β
hst : Rel r s t
huv : Rel r u v
⊢ Rel r (s + u) (t + v)
state_after: no goals
tactic: induction hst with
  | zero => simpa using huv
  | cons hab hst ih => simpa using ih.cons hab
Theorem: LipschitzWith.eval
File: Mathlib/Topology/EMetricSpace/Lipschitz.lean

Proof steps:
state_before: α✝ : Type u
β : Type v
γ : Type w
ι : Type x
inst✝⁴ : PseudoEMetricSpace α✝
inst✝³ : PseudoEMetricSpace β
inst✝² : PseudoEMetricSpace γ
K : ℝ≥0
f✝ : α✝ → β
x y : α✝
r : ℝ≥0∞
α : ι → Type u
inst✝¹ : (i : ι) → PseudoEMetricSpace (α i)
inst✝ : Fintype ι
i : ι
f g : (x : ι) → α x
⊢ edist (eval i f) (eval i g) ≤ edist f g
state_after: no goals
tactic: convert edist_le_pi_edist f g i
Theorem: RingHom.SurjectiveOnStalks.exists_mul_eq_tmul
File: Mathlib/RingTheory/SurjectiveOnStalks.lean

Proof steps:
state_before: R : Type u_1
inst✝⁶ : CommRing R
M : Submonoid R
S : Type u_2
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
T : Type u_3
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
g : S →+* T
f : R →+* S
hf₂ : (algebraMap R T).SurjectiveOnStalks
x : S ⊗[R] T
J : Ideal T
hJ : J.IsPrime
⊢ ∃ t r a, r • t ∉ J ∧ 1 ⊗ₜ[R] (r • t) * x = a ⊗ₜ[R] t
state_after: no goals
tactic: induction x with
  | zero =>
    exact ⟨1, 1, 0, by rw [one_smul]; exact J.primeCompl.one_mem,
      by rw [mul_zero, TensorProduct.zero_tmul]⟩
  | tmul x₁ x₂ =>
    obtain ⟨y, s, c, hs, hc, e⟩ := (surjective_localRingHom_iff _).mp (hf₂ J hJ) x₂
    simp_rw [Algebra.smul_def]
    refine ⟨c, s, y • x₁, J.primeCompl.mul_mem hc hs, ?_⟩
    rw [Algebra.TensorProduct.tmul_mul_tmul, one_mul, mul_comm _ c, e,
      TensorProduct.smul_tmul, Algebra.smul_def, mul_comm]
  | add x₁ x₂ hx₁ hx₂ =>
    obtain ⟨t₁, r₁, a₁, hr₁, e₁⟩ := hx₁
    obtain ⟨t₂, r₂, a₂, hr₂, e₂⟩ := hx₂
    have : (r₁ * r₂) • (t₁ * t₂) = (r₁ • t₁) * (r₂ • t₂) := by
      simp_rw [← smul_eq_mul]; rw [smul_smul_smul_comm]
    refine ⟨t₁ * t₂, r₁ * r₂, r₂ • a₁ + r₁ • a₂, this.symm ▸ J.primeCompl.mul_mem hr₁ hr₂, ?_⟩
    rw [this, ← one_mul (1 : S), ← Algebra.TensorProduct.tmul_mul_tmul, mul_add, mul_comm (_ ⊗ₜ _),
      mul_assoc, e₁, Algebra.TensorProduct.tmul_mul_tmul, one_mul, smul_mul_assoc,
      ← TensorProduct.smul_tmul, mul_comm (_ ⊗ₜ _), mul_assoc, e₂,
      Algebra.TensorProduct.tmul_mul_tmul, one_mul, smul_mul_assoc, ← TensorProduct.smul_tmul,
      TensorProduct.add_tmul, mul_comm t₁ t₂]
Theorem: AddOreLocalization.zero_def
File: Mathlib/RingTheory/OreLocalization/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝² : Monoid R
S : Submonoid R
inst✝¹ : OreSet S
X : Type ?u.83714
inst✝ : MulAction R X
⊢ 1 = 1 /ₒ 1
state_after: no goals
tactic: with_unfolding_all rfl
Theorem: Basis.self_mem_span_image
File: Mathlib/LinearAlgebra/Basis.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
b b₁ : Basis ι R M
i✝ : ι
c : R
x : M
inst✝ : Nontrivial R
i : ι
s : Set ι
⊢ b i ∈ span R (⇑b '' s) ↔ i ∈ s
state_after: no goals
tactic: simp [mem_span_image, Finsupp.support_single_ne_zero]
Theorem: Polynomial.natDegree_taylor
File: Mathlib/Algebra/Polynomial/Taylor.lean

Proof steps:
state_before: R : Type u_1
inst✝ : Semiring R
r✝ : R
f p : R[X]
r : R
⊢ ((taylor r) p).natDegree = p.natDegree
state_after: R : Type u_1
inst✝ : Semiring R
r✝ : R
f p : R[X]
r : R
⊢ ∀ (n : ℕ) (c : R), c ≠ 0 → ((taylor r) ((monomial n) c)).natDegree = n
tactic: refine map_natDegree_eq_natDegree _ ?_
state_before: R : Type u_1
inst✝ : Semiring R
r✝ : R
f p : R[X]
r : R
⊢ ∀ (n : ℕ) (c : R), c ≠ 0 → ((taylor r) ((monomial n) c)).natDegree = n
state_after: R : Type u_1
inst✝ : Semiring R
r✝ : R
f p : R[X]
r : R
a✝ : Nontrivial R
⊢ ∀ (n : ℕ) (c : R), c ≠ 0 → ((taylor r) ((monomial n) c)).natDegree = n
tactic: nontriviality R
state_before: R : Type u_1
inst✝ : Semiring R
r✝ : R
f p : R[X]
r : R
a✝ : Nontrivial R
⊢ ∀ (n : ℕ) (c : R), c ≠ 0 → ((taylor r) ((monomial n) c)).natDegree = n
state_after: R : Type u_1
inst✝ : Semiring R
r✝ : R
f p : R[X]
r : R
a✝ : Nontrivial R
n : ℕ
c : R
c0 : c ≠ 0
⊢ ((taylor r) ((monomial n) c)).natDegree = n
tactic: intro n c c0
state_before: R : Type u_1
inst✝ : Semiring R
r✝ : R
f p : R[X]
r : R
a✝ : Nontrivial R
n : ℕ
c : R
c0 : c ≠ 0
⊢ ((taylor r) ((monomial n) c)).natDegree = n
state_after: no goals
tactic: simp [taylor_monomial, natDegree_C_mul_eq_of_mul_ne_zero, natDegree_pow_X_add_C, c0]
Theorem: pow_right_strictMono
File: Mathlib/Algebra/Order/Ring/Basic.lean

Proof steps:
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : StrictOrderedSemiring R
a x y : R
n✝ m : ℕ
h : 1 < a
this : 0 < a
n : ℕ
⊢ a ^ n < a ^ (n + 1)
state_after: no goals
tactic: simpa only [one_mul, pow_succ'] using mul_lt_mul h (le_refl (a ^ n)) (pow_pos this _) this.le
Theorem: mul_nonneg_of_nonpos_of_nonpos
File: Mathlib/Algebra/Order/Ring/Unbundled/Basic.lean

Proof steps:
state_before: α : Type u
β : Type u_1
inst✝⁵ : Semiring α
inst✝⁴ : Preorder α
a b c d : α
inst✝³ : ExistsAddOfLE α
inst✝² : MulPosMono α
inst✝¹ : CovariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
ha : a ≤ 0
hb : b ≤ 0
⊢ 0 ≤ a * b
state_after: no goals
tactic: simpa only [zero_mul] using mul_le_mul_of_nonpos_right ha hb
Theorem: Set.neg_mem_addCentralizer
File: Mathlib/Algebra/Group/Center.lean

Proof steps:
state_before: M : Type u_1
S T : Set M
inst✝ : Group M
a b : M
ha : a ∈ S.centralizer
g : M
hg : g ∈ S
⊢ g * a⁻¹ = a⁻¹ * g
state_after: no goals
tactic: rw [mul_inv_eq_iff_eq_mul, mul_assoc, eq_inv_mul_iff_mul_eq, ha g hg]
Theorem: VectorBundleCore.mem_source_at
File: Mathlib/Topology/VectorBundle/Basic.lean

Proof steps:
state_before: R : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
inst✝⁸ : NontriviallyNormedField R
inst✝⁷ : (x : B) → AddCommMonoid (E x)
inst✝⁶ : (x : B) → Module R (E x)
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace R F
inst✝³ : TopologicalSpace B
inst✝² : TopologicalSpace (TotalSpace F E)
inst✝¹ : (x : B) → TopologicalSpace (E x)
inst✝ : FiberBundle F E
ι : Type u_5
Z : VectorBundleCore R B F ι
b : B
a : F
i j : ι
⊢ { proj := b, snd := a } ∈ (Z.localTrivAt b).source
state_after: R : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
inst✝⁸ : NontriviallyNormedField R
inst✝⁷ : (x : B) → AddCommMonoid (E x)
inst✝⁶ : (x : B) → Module R (E x)
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace R F
inst✝³ : TopologicalSpace B
inst✝² : TopologicalSpace (TotalSpace F E)
inst✝¹ : (x : B) → TopologicalSpace (E x)
inst✝ : FiberBundle F E
ι : Type u_5
Z : VectorBundleCore R B F ι
b : B
a : F
i j : ι
⊢ { proj := b, snd := a }.proj ∈ Z.baseSet (Z.indexAt b)
tactic: rw [localTrivAt, mem_localTriv_source]
state_before: R : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
inst✝⁸ : NontriviallyNormedField R
inst✝⁷ : (x : B) → AddCommMonoid (E x)
inst✝⁶ : (x : B) → Module R (E x)
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace R F
inst✝³ : TopologicalSpace B
inst✝² : TopologicalSpace (TotalSpace F E)
inst✝¹ : (x : B) → TopologicalSpace (E x)
inst✝ : FiberBundle F E
ι : Type u_5
Z : VectorBundleCore R B F ι
b : B
a : F
i j : ι
⊢ { proj := b, snd := a }.proj ∈ Z.baseSet (Z.indexAt b)
state_after: no goals
tactic: exact Z.mem_baseSet_at b
Theorem: Metric.Sigma.fst_eq_of_dist_lt_one
File: Mathlib/Topology/MetricSpace/Gluing.lean

Proof steps:
state_before: ι : Type u_1
E : ι → Type u_2
inst✝ : (i : ι) → MetricSpace (E i)
x y : (i : ι) × E i
h : dist x y < 1
⊢ x.fst = y.fst
state_after: case mk
ι : Type u_1
E : ι → Type u_2
inst✝ : (i : ι) → MetricSpace (E i)
y : (i : ι) × E i
fst✝ : ι
snd✝ : E fst✝
h : dist ⟨fst✝, snd✝⟩ y < 1
⊢ ⟨fst✝, snd✝⟩.fst = y.fst
tactic: cases x
state_before: case mk
ι : Type u_1
E : ι → Type u_2
inst✝ : (i : ι) → MetricSpace (E i)
y : (i : ι) × E i
fst✝ : ι
snd✝ : E fst✝
h : dist ⟨fst✝, snd✝⟩ y < 1
⊢ ⟨fst✝, snd✝⟩.fst = y.fst
state_after: case mk.mk
ι : Type u_1
E : ι → Type u_2
inst✝ : (i : ι) → MetricSpace (E i)
fst✝¹ : ι
snd✝¹ : E fst✝¹
fst✝ : ι
snd✝ : E fst✝
h : dist ⟨fst✝¹, snd✝¹⟩ ⟨fst✝, snd✝⟩ < 1
⊢ ⟨fst✝¹, snd✝¹⟩.fst = ⟨fst✝, snd✝⟩.fst
tactic: cases y
state_before: case mk.mk
ι : Type u_1
E : ι → Type u_2
inst✝ : (i : ι) → MetricSpace (E i)
fst✝¹ : ι
snd✝¹ : E fst✝¹
fst✝ : ι
snd✝ : E fst✝
h : dist ⟨fst✝¹, snd✝¹⟩ ⟨fst✝, snd✝⟩ < 1
⊢ ⟨fst✝¹, snd✝¹⟩.fst = ⟨fst✝, snd✝⟩.fst
state_after: case mk.mk
ι : Type u_1
E : ι → Type u_2
inst✝ : (i : ι) → MetricSpace (E i)
fst✝¹ : ι
snd✝¹ : E fst✝¹
fst✝ : ι
snd✝ : E fst✝
h : ⟨fst✝¹, snd✝¹⟩.fst ≠ ⟨fst✝, snd✝⟩.fst
⊢ 1 ≤ dist ⟨fst✝¹, snd✝¹⟩ ⟨fst✝, snd✝⟩
tactic: contrapose! h
state_before: case mk.mk
ι : Type u_1
E : ι → Type u_2
inst✝ : (i : ι) → MetricSpace (E i)
fst✝¹ : ι
snd✝¹ : E fst✝¹
fst✝ : ι
snd✝ : E fst✝
h : ⟨fst✝¹, snd✝¹⟩.fst ≠ ⟨fst✝, snd✝⟩.fst
⊢ 1 ≤ dist ⟨fst✝¹, snd✝¹⟩ ⟨fst✝, snd✝⟩
state_after: no goals
tactic: apply one_le_dist_of_ne h
Theorem: Rat.den_dvd
File: Mathlib/Data/Rat/Lemmas.lean

Proof steps:
state_before: a b : ℤ
⊢ ↑(a /. b).den ∣ b
state_after: case pos
a b : ℤ
b0 : b = 0
⊢ ↑(a /. b).den ∣ b

case neg
a b : ℤ
b0 : ¬b = 0
⊢ ↑(a /. b).den ∣ b
tactic: by_cases b0 : b = 0
state_before: case neg
a b : ℤ
b0 : ¬b = 0
⊢ ↑(a /. b).den ∣ b
state_after: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a /. b = { num := n, den := d, den_nz := h, reduced := c }
⊢ ↑{ num := n, den := d, den_nz := h, reduced := c }.den ∣ b
tactic: cases' e : a /. b with n d h c
state_before: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a /. b = { num := n, den := d, den_nz := h, reduced := c }
⊢ ↑{ num := n, den := d, den_nz := h, reduced := c }.den ∣ b
state_after: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ ↑{ num := n, den := d, den_nz := h, reduced := c }.den ∣ b
tactic: rw [mk'_eq_divInt, divInt_eq_iff b0 (ne_of_gt (Int.natCast_pos.2 (Nat.pos_of_ne_zero h)))] at e
state_before: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ ↑{ num := n, den := d, den_nz := h, reduced := c }.den ∣ b
state_after: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ d ∣ n.natAbs * b.natAbs
tactic: refine Int.dvd_natAbs.1 <| Int.natCast_dvd_natCast.2 <| c.symm.dvd_of_dvd_mul_left ?_
state_before: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ d ∣ n.natAbs * b.natAbs
state_after: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ ↑d ∣ a * ↑d
tactic: rw [← Int.natAbs_mul, ← Int.natCast_dvd_natCast, Int.dvd_natAbs, ← e]
state_before: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ ↑d ∣ a * ↑d
state_after: no goals
tactic: simp
Theorem: NNRat.le_def
File: Mathlib/Data/NNRat/Defs.lean

Proof steps:
state_before: p✝ q✝ : ℚ≥0
n₁ n₂ d₁ d₂ d : ℕ
p q : ℚ≥0
⊢ p ≤ q ↔ p.num * q.den ≤ q.num * p.den
state_after: p✝ q✝ : ℚ≥0
n₁ n₂ d₁ d₂ d : ℕ
p q : ℚ≥0
⊢ (↑p).num * ↑(↑q).den ≤ (↑q).num * ↑(↑p).den ↔ p.num * q.den ≤ q.num * p.den
tactic: rw [← NNRat.coe_le_coe, Rat.le_def]
state_before: p✝ q✝ : ℚ≥0
n₁ n₂ d₁ d₂ d : ℕ
p q : ℚ≥0
⊢ (↑p).num * ↑(↑q).den ≤ (↑q).num * ↑(↑p).den ↔ p.num * q.den ≤ q.num * p.den
state_after: no goals
tactic: norm_cast
Theorem: lipschitzWith_neg_iff
File: Mathlib/Analysis/Normed/Group/Uniform.lean

Proof steps:
state_before: 𝓕 : Type u_1
α✝ : Type u_2
E✝ : Type u_3
F : Type u_4
inst✝³ : SeminormedCommGroup E✝
inst✝² : SeminormedCommGroup F
a a₁ a₂ b b₁ b₂ : E✝
r r₁ r₂ : ℝ
α : Type u_5
E : Type u_6
inst✝¹ : SeminormedCommGroup E
inst✝ : PseudoEMetricSpace α
K Kf Kg : ℝ≥0
f g : α → E
s : Set α
x : α
⊢ LipschitzWith K f⁻¹ ↔ LipschitzWith K f
state_after: no goals
tactic: simp [LipschitzWith]
Theorem: pow_eq_one_iff_modEq
File: Mathlib/GroupTheory/OrderOfElement.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝ : Monoid G
a b x y : G
n m : ℕ
⊢ x ^ n = 1 ↔ n ≡ 0 [MOD orderOf x]
state_after: no goals
tactic: rw [modEq_zero_iff_dvd, orderOf_dvd_iff_pow_eq_one]
Theorem: LinearPMap.mkSpanSingleton'_apply_self
File: Mathlib/LinearAlgebra/LinearPMap.lean

Proof steps:
state_before: R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
x : E
y : F
H : ∀ (c : R), c • x = 0 → c • y = 0
h : x ∈ (mkSpanSingleton' x y H).domain
⊢ ↑(mkSpanSingleton' x y H) ⟨x, h⟩ = y
state_after: R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
x : E
y : F
H : ∀ (c : R), c • x = 0 → c • y = 0
h : x ∈ (mkSpanSingleton' x y H).domain
this : ↑(mkSpanSingleton' x y H) ⟨1 • x, ⋯⟩ = 1 • y
⊢ ↑(mkSpanSingleton' x y H) ⟨x, h⟩ = y
tactic: have := by refine mkSpanSingleton'_apply x y H 1 ?_; rwa [one_smul]
state_before: R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
x : E
y : F
H : ∀ (c : R), c • x = 0 → c • y = 0
h : x ∈ (mkSpanSingleton' x y H).domain
this : ↑(mkSpanSingleton' x y H) ⟨1 • x, ⋯⟩ = 1 • y
⊢ ↑(mkSpanSingleton' x y H) ⟨x, h⟩ = y
state_after: no goals
tactic: convert this <;> rw [one_smul]
Theorem: isIntegralCurveAt_comp_add
File: Mathlib/Geometry/Manifold/IntegralCurve.lean

Proof steps:
state_before: E : Type u_1
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : CompleteSpace E
H : Type u_2
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type u_3
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
γ γ' : ℝ → M
v : (x : M) → TangentSpace I x
s s' : Set ℝ
t₀ dt : ℝ
⊢ IsIntegralCurveAt γ v t₀ ↔ IsIntegralCurveAt (γ ∘ fun x => x + dt) v (t₀ - dt)
state_after: E : Type u_1
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : CompleteSpace E
H : Type u_2
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type u_3
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
γ γ' : ℝ → M
v : (x : M) → TangentSpace I x
s s' : Set ℝ
t₀ dt : ℝ
hγ : IsIntegralCurveAt (γ ∘ fun x => x + dt) v (t₀ - dt)
⊢ IsIntegralCurveAt γ v t₀
tactic: refine ⟨fun hγ ↦ hγ.comp_add _, fun hγ ↦ ?_⟩
state_before: E : Type u_1
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : CompleteSpace E
H : Type u_2
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type u_3
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
γ γ' : ℝ → M
v : (x : M) → TangentSpace I x
s s' : Set ℝ
t₀ dt : ℝ
hγ : IsIntegralCurveAt (γ ∘ fun x => x + dt) v (t₀ - dt)
⊢ IsIntegralCurveAt γ v t₀
state_after: case h.e'_11
E : Type u_1
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : CompleteSpace E
H : Type u_2
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type u_3
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
γ γ' : ℝ → M
v : (x : M) → TangentSpace I x
s s' : Set ℝ
t₀ dt : ℝ
hγ : IsIntegralCurveAt (γ ∘ fun x => x + dt) v (t₀ - dt)
⊢ γ = (γ ∘ fun x => x + dt) ∘ fun x => x + -dt

case h.e'_13
E : Type u_1
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : CompleteSpace E
H : Type u_2
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type u_3
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
γ γ' : ℝ → M
v : (x : M) → TangentSpace I x
s s' : Set ℝ
t₀ dt : ℝ
hγ : IsIntegralCurveAt (γ ∘ fun x => x + dt) v (t₀ - dt)
⊢ t₀ = t₀ - dt - -dt
tactic: convert hγ.comp_add (-dt)
Theorem: CategoryTheory.isIso_of_mono_of_strongEpi
File: Mathlib/CategoryTheory/Limits/Shapes/StrongEpi.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
P Q : C
f : P ⟶ Q
inst✝¹ : Mono f
inst✝ : StrongEpi f
⊢ 𝟙 P ≫ f = f ≫ 𝟙 Q
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
P Q : C
f : P ⟶ Q
inst✝¹ : Mono f
inst✝ : StrongEpi f
⊢ f ≫ ⋯.lift = 𝟙 P ∧ ⋯.lift ≫ f = 𝟙 Q
state_after: no goals
tactic: aesop_cat
Theorem: subsingleton_iff
File: Mathlib/Logic/Nontrivial/Defs.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
⊢ Subsingleton α → ∀ (x y : α), x = y
state_after: α : Type u_1
β : Type u_2
h : Subsingleton α
⊢ ∀ (x y : α), x = y
tactic: intro h
state_before: α : Type u_1
β : Type u_2
h : Subsingleton α
⊢ ∀ (x y : α), x = y
state_after: no goals
tactic: exact Subsingleton.elim
Theorem: Submodule.mul_one_div_le_one
File: Mathlib/Algebra/Algebra/Operations.lean

Proof steps:
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
M N : Submodule R A
m n : A
I : Submodule R A
⊢ I * (1 / I) ≤ 1
state_after: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
M N : Submodule R A
m n : A
I : Submodule R A
⊢ ∀ m ∈ I, ∀ n ∈ 1 / I, m * n ∈ 1
tactic: rw [Submodule.mul_le]
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
M N : Submodule R A
m n : A
I : Submodule R A
⊢ ∀ m ∈ I, ∀ n ∈ 1 / I, m * n ∈ 1
state_after: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
M N : Submodule R A
m✝ n✝ : A
I : Submodule R A
m : A
hm : m ∈ I
n : A
hn : n ∈ 1 / I
⊢ m * n ∈ 1
tactic: intro m hm n hn
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
M N : Submodule R A
m✝ n✝ : A
I : Submodule R A
m : A
hm : m ∈ I
n : A
hn : n ∈ 1 / I
⊢ m * n ∈ 1
state_after: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
M N : Submodule R A
m✝ n✝ : A
I : Submodule R A
m : A
hm : m ∈ I
n : A
hn : ∀ y ∈ I, n * y ∈ 1
⊢ m * n ∈ 1
tactic: rw [Submodule.mem_div_iff_forall_mul_mem] at hn
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
M N : Submodule R A
m✝ n✝ : A
I : Submodule R A
m : A
hm : m ∈ I
n : A
hn : ∀ y ∈ I, n * y ∈ 1
⊢ m * n ∈ 1
state_after: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
M N : Submodule R A
m✝ n✝ : A
I : Submodule R A
m : A
hm : m ∈ I
n : A
hn : ∀ y ∈ I, n * y ∈ 1
⊢ n * m ∈ 1
tactic: rw [mul_comm]
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
M N : Submodule R A
m✝ n✝ : A
I : Submodule R A
m : A
hm : m ∈ I
n : A
hn : ∀ y ∈ I, n * y ∈ 1
⊢ n * m ∈ 1
state_after: no goals
tactic: exact hn m hm