ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: rank_eq_zero_iff_isTorsion
File: Mathlib/LinearAlgebra/Dimension/Finite.lean

Proof steps:
state_before: R✝ : Type u
M✝ M₁ : Type v
M' : Type v'
ι : Type w
inst✝¹² : Ring R✝
inst✝¹¹ : AddCommGroup M✝
inst✝¹⁰ : AddCommGroup M'
inst✝⁹ : AddCommGroup M₁
inst✝⁸ : Module R✝ M✝
inst✝⁷ : Module R✝ M'
inst✝⁶ : Module R✝ M₁
inst✝⁵ : Nontrivial R✝
inst✝⁴ : NoZeroSMulDivisors R✝ M✝
R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ Module.rank R M = 0 ↔ Module.IsTorsion R M
state_after: R✝ : Type u
M✝ M₁ : Type v
M' : Type v'
ι : Type w
inst✝¹² : Ring R✝
inst✝¹¹ : AddCommGroup M✝
inst✝¹⁰ : AddCommGroup M'
inst✝⁹ : AddCommGroup M₁
inst✝⁸ : Module R✝ M✝
inst✝⁷ : Module R✝ M'
inst✝⁶ : Module R✝ M₁
inst✝⁵ : Nontrivial R✝
inst✝⁴ : NoZeroSMulDivisors R✝ M✝
R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ (∀ (x : M), ∃ a, a ≠ 0 ∧ a • x = 0) ↔ ∀ ⦃x : M⦄, ∃ a, a • x = 0
tactic: rw [Module.IsTorsion, rank_eq_zero_iff]
state_before: R✝ : Type u
M✝ M₁ : Type v
M' : Type v'
ι : Type w
inst✝¹² : Ring R✝
inst✝¹¹ : AddCommGroup M✝
inst✝¹⁰ : AddCommGroup M'
inst✝⁹ : AddCommGroup M₁
inst✝⁸ : Module R✝ M✝
inst✝⁷ : Module R✝ M'
inst✝⁶ : Module R✝ M₁
inst✝⁵ : Nontrivial R✝
inst✝⁴ : NoZeroSMulDivisors R✝ M✝
R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ (∀ (x : M), ∃ a, a ≠ 0 ∧ a • x = 0) ↔ ∀ ⦃x : M⦄, ∃ a, a • x = 0
state_after: no goals
tactic: simp [mem_nonZeroDivisors_iff_ne_zero]
Theorem: CategoryTheory.Presheaf.isSheaf_iff_isSheaf'
File: Mathlib/CategoryTheory/Sites/Sheaf.lean

Proof steps:
state_before: C : Type u₁
inst✝⁶ : Category.{v₁, u₁} C
A : Type u₂
inst✝⁵ : Category.{v₂, u₂} A
A' : Type u₂
inst✝⁴ : Category.{max v₁ u₁, u₂} A'
B : Type u₃
inst✝³ : Category.{v₃, u₃} B
J : GrothendieckTopology C
U : C
R : Presieve U
P : Cᵒᵖ ⥤ A
P' : Cᵒᵖ ⥤ A'
inst✝² : HasProducts A
inst✝¹ : HasProducts A'
inst✝ : HasPullbacks C
⊢ IsSheaf J P' ↔ IsSheaf' J P'
state_after: case mp
C : Type u₁
inst✝⁶ : Category.{v₁, u₁} C
A : Type u₂
inst✝⁵ : Category.{v₂, u₂} A
A' : Type u₂
inst✝⁴ : Category.{max v₁ u₁, u₂} A'
B : Type u₃
inst✝³ : Category.{v₃, u₃} B
J : GrothendieckTopology C
U : C
R : Presieve U
P : Cᵒᵖ ⥤ A
P' : Cᵒᵖ ⥤ A'
inst✝² : HasProducts A
inst✝¹ : HasProducts A'
inst✝ : HasPullbacks C
⊢ IsSheaf J P' → IsSheaf' J P'

case mpr
C : Type u₁
inst✝⁶ : Category.{v₁, u₁} C
A : Type u₂
inst✝⁵ : Category.{v₂, u₂} A
A' : Type u₂
inst✝⁴ : Category.{max v₁ u₁, u₂} A'
B : Type u₃
inst✝³ : Category.{v₃, u₃} B
J : GrothendieckTopology C
U : C
R : Presieve U
P : Cᵒᵖ ⥤ A
P' : Cᵒᵖ ⥤ A'
inst✝² : HasProducts A
inst✝¹ : HasProducts A'
inst✝ : HasPullbacks C
⊢ IsSheaf' J P' → IsSheaf J P'
tactic: constructor
Theorem: Real.sin_eq_zero_iff_cos_eq
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

Proof steps:
state_before: x : ℝ
⊢ sin x = 0 ↔ cos x = 1 ∨ cos x = -1
state_after: x : ℝ
⊢ sin x = 0 ↔ 0 = sin x * sin x
tactic: rw [← mul_self_eq_one_iff, ← sin_sq_add_cos_sq x, sq, sq, ← sub_eq_iff_eq_add, sub_self]
state_before: x : ℝ
⊢ sin x = 0 ↔ 0 = sin x * sin x
state_after: no goals
tactic: exact ⟨fun h => by rw [h, mul_zero], eq_zero_of_mul_self_eq_zero ∘ Eq.symm⟩
Theorem: mul_le_of_nonneg_of_le_div
File: Mathlib/Algebra/Order/Field/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 ≤ b
hc : 0 ≤ c
h : a ≤ b / c
⊢ a * c ≤ b
state_after: case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b d e : α
m n : ℤ
hb : 0 ≤ b
hc : 0 ≤ 0
h : a ≤ b / 0
⊢ a * 0 ≤ b

case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 ≤ b
hc✝ : 0 ≤ c
h : a ≤ b / c
hc : 0 < c
⊢ a * c ≤ b
tactic: obtain rfl | hc := hc.eq_or_lt
Theorem: Cardinal.prod_eq_zero
File: Mathlib/SetTheory/Cardinal/Basic.lean

Proof steps:
state_before: α β : Type u
ι : Type u_1
f : ι → Cardinal.{u}
⊢ prod f = 0 ↔ ∃ i, f i = 0
state_after: case intro
α β : Type u
ι : Type u_1
f : ι → Type u
⊢ (prod fun i => #(f i)) = 0 ↔ ∃ i, (fun i => #(f i)) i = 0
tactic: lift f to ι → Type u using fun _ => trivial
state_before: case intro
α β : Type u
ι : Type u_1
f : ι → Type u
⊢ (prod fun i => #(f i)) = 0 ↔ ∃ i, (fun i => #(f i)) i = 0
state_after: no goals
tactic: simp only [mk_eq_zero_iff, ← mk_pi, isEmpty_pi]
Theorem: MeasurableSet.inter
File: Mathlib/MeasureTheory/MeasurableSpace/Defs.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
δ' : Type u_5
ι : Sort u_6
s t u : Set α
m : MeasurableSpace α
s₁ s₂ : Set α
h₁ : MeasurableSet s₁
h₂ : MeasurableSet s₂
⊢ MeasurableSet (s₁ ∩ s₂)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
δ' : Type u_5
ι : Sort u_6
s t u : Set α
m : MeasurableSpace α
s₁ s₂ : Set α
h₁ : MeasurableSet s₁
h₂ : MeasurableSet s₂
⊢ MeasurableSet (s₁ᶜ ∪ s₂ᶜ)ᶜ
tactic: rw [inter_eq_compl_compl_union_compl]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
δ' : Type u_5
ι : Sort u_6
s t u : Set α
m : MeasurableSpace α
s₁ s₂ : Set α
h₁ : MeasurableSet s₁
h₂ : MeasurableSet s₂
⊢ MeasurableSet (s₁ᶜ ∪ s₂ᶜ)ᶜ
state_after: no goals
tactic: exact (h₁.compl.union h₂.compl).compl
Theorem: quadraticChar_odd_prime
File: Mathlib/NumberTheory/LegendreSymbol/QuadraticChar/GaussSum.lean

Proof steps:
state_before: F : Type u_1
inst✝³ : Field F
inst✝² : Fintype F
inst✝¹ : DecidableEq F
hF : ringChar F ≠ 2
p : ℕ
inst✝ : Fact (Nat.Prime p)
hp₁ : p ≠ 2
hp₂ : ringChar F ≠ p
⊢ (quadraticChar F) ↑p = (quadraticChar (ZMod p)) (↑(χ₄ ↑(Fintype.card F)) * ↑(Fintype.card F))
state_after: F : Type u_1
inst✝³ : Field F
inst✝² : Fintype F
inst✝¹ : DecidableEq F
hF : ringChar F ≠ 2
p : ℕ
inst✝ : Fact (Nat.Prime p)
hp₁ : p ≠ 2
hp₂ : ringChar F ≠ p
⊢ (quadraticChar F) ↑p = (quadraticChar (ZMod p)) (↑((quadraticChar F) (-1)) * ↑(Fintype.card F))
tactic: rw [← quadraticChar_neg_one hF]
state_before: F : Type u_1
inst✝³ : Field F
inst✝² : Fintype F
inst✝¹ : DecidableEq F
hF : ringChar F ≠ 2
p : ℕ
inst✝ : Fact (Nat.Prime p)
hp₁ : p ≠ 2
hp₂ : ringChar F ≠ p
⊢ (quadraticChar F) ↑p = (quadraticChar (ZMod p)) (↑((quadraticChar F) (-1)) * ↑(Fintype.card F))
state_after: F : Type u_1
inst✝³ : Field F
inst✝² : Fintype F
inst✝¹ : DecidableEq F
hF : ringChar F ≠ 2
p : ℕ
inst✝ : Fact (Nat.Prime p)
hp₁ : p ≠ 2
hp₂ : ringChar F ≠ p
h :
  (quadraticChar F) ↑(Fintype.card (ZMod p)) = (quadraticChar (ZMod p)) (↑((quadraticChar F) (-1)) * ↑(Fintype.card F))
⊢ (quadraticChar F) ↑p = (quadraticChar (ZMod p)) (↑((quadraticChar F) (-1)) * ↑(Fintype.card F))
tactic: have h := quadraticChar_card_card hF (ne_of_eq_of_ne (ringChar_zmod_n p) hp₁)
    (ne_of_eq_of_ne (ringChar_zmod_n p) hp₂.symm)
state_before: F : Type u_1
inst✝³ : Field F
inst✝² : Fintype F
inst✝¹ : DecidableEq F
hF : ringChar F ≠ 2
p : ℕ
inst✝ : Fact (Nat.Prime p)
hp₁ : p ≠ 2
hp₂ : ringChar F ≠ p
h :
  (quadraticChar F) ↑(Fintype.card (ZMod p)) = (quadraticChar (ZMod p)) (↑((quadraticChar F) (-1)) * ↑(Fintype.card F))
⊢ (quadraticChar F) ↑p = (quadraticChar (ZMod p)) (↑((quadraticChar F) (-1)) * ↑(Fintype.card F))
state_after: no goals
tactic: rwa [card p] at h
Theorem: DirectSum.coeAddMonoidHom_eq_dfinsupp_sum
File: Mathlib/Algebra/DirectSum/Basic.lean

Proof steps:
state_before: ι : Type v
β : ι → Type w
inst✝⁵ : (i : ι) → AddCommMonoid (β i)
inst✝⁴ : DecidableEq ι
M : Type u_1
S : Type u_2
inst✝³ : DecidableEq M
inst✝² : AddCommMonoid M
inst✝¹ : SetLike S M
inst✝ : AddSubmonoidClass S M
A : ι → S
x : ⨁ (i : ι), ↥(A i)
⊢ (DirectSum.coeAddMonoidHom A) x = DFinsupp.sum x fun i x => ↑x
state_after: ι : Type v
β : ι → Type w
inst✝⁵ : (i : ι) → AddCommMonoid (β i)
inst✝⁴ : DecidableEq ι
M : Type u_1
S : Type u_2
inst✝³ : DecidableEq M
inst✝² : AddCommMonoid M
inst✝¹ : SetLike S M
inst✝ : AddSubmonoidClass S M
A : ι → S
x : ⨁ (i : ι), ↥(A i)
⊢ (DFinsupp.sumAddHom fun i => AddSubmonoidClass.subtype (A i)) x = DFinsupp.sum x fun i x => ↑x
tactic: simp only [DirectSum.coeAddMonoidHom, toAddMonoid, DFinsupp.liftAddHom, AddEquiv.coe_mk,
    Equiv.coe_fn_mk]
state_before: ι : Type v
β : ι → Type w
inst✝⁵ : (i : ι) → AddCommMonoid (β i)
inst✝⁴ : DecidableEq ι
M : Type u_1
S : Type u_2
inst✝³ : DecidableEq M
inst✝² : AddCommMonoid M
inst✝¹ : SetLike S M
inst✝ : AddSubmonoidClass S M
A : ι → S
x : ⨁ (i : ι), ↥(A i)
⊢ (DFinsupp.sumAddHom fun i => AddSubmonoidClass.subtype (A i)) x = DFinsupp.sum x fun i x => ↑x
state_after: no goals
tactic: exact DFinsupp.sumAddHom_apply _ x
Theorem: primorial_add_dvd
File: Mathlib/NumberTheory/Primorial.lean

Proof steps:
state_before: m n : ℕ
h : n ≤ m
p : ℕ
hp : p ∈ filter Nat.Prime (Ico (m + 1) (m + n + 1))
⊢ p ∣ (m + n).choose m
state_after: m n : ℕ
h : n ≤ m
p : ℕ
hp : (m + 1 ≤ p ∧ p < m + n + 1) ∧ Nat.Prime p
⊢ p ∣ (m + n).choose m
tactic: rw [mem_filter, mem_Ico] at hp
state_before: m n : ℕ
h : n ≤ m
p : ℕ
hp : (m + 1 ≤ p ∧ p < m + n + 1) ∧ Nat.Prime p
⊢ p ∣ (m + n).choose m
state_after: no goals
tactic: exact hp.2.dvd_choose_add hp.1.1 (h.trans_lt (m.lt_succ_self.trans_le hp.1.1))
              (Nat.lt_succ_iff.1 hp.1.2)
Theorem: tprod_le_of_prod_le'
File: Mathlib/Topology/Algebra/InfiniteSum/Order.lean

Proof steps:
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
inst✝² : OrderedCommMonoid α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
f g : ι → α
a a₁ a₂ : α
ha₂ : 1 ≤ a₂
h : ∀ (s : Finset ι), ∏ i ∈ s, f i ≤ a₂
⊢ ∏' (i : ι), f i ≤ a₂
state_after: case pos
ι : Type u_1
κ : Type u_2
α : Type u_3
inst✝² : OrderedCommMonoid α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
f g : ι → α
a a₁ a₂ : α
ha₂ : 1 ≤ a₂
h : ∀ (s : Finset ι), ∏ i ∈ s, f i ≤ a₂
hf : Multipliable f
⊢ ∏' (i : ι), f i ≤ a₂

case neg
ι : Type u_1
κ : Type u_2
α : Type u_3
inst✝² : OrderedCommMonoid α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
f g : ι → α
a a₁ a₂ : α
ha₂ : 1 ≤ a₂
h : ∀ (s : Finset ι), ∏ i ∈ s, f i ≤ a₂
hf : ¬Multipliable f
⊢ ∏' (i : ι), f i ≤ a₂
tactic: by_cases hf : Multipliable f
Theorem: Ideal.Factors.inertiaDeg_ne_zero
File: Mathlib/NumberTheory/RamificationInertia.lean

Proof steps:
state_before: R : Type u
inst✝⁵ : CommRing R
S : Type v
inst✝⁴ : CommRing S
f : R →+* S
p : Ideal R
P✝ : Ideal S
inst✝³ : IsDedekindDomain S
inst✝² : Algebra R S
inst✝¹ : IsNoetherian R S
inst✝ : p.IsMaximal
P : { x // x ∈ (factors (map (algebraMap R S) p)).toFinset }
⊢ inertiaDeg (algebraMap R S) p ↑P ≠ 0
state_after: R : Type u
inst✝⁵ : CommRing R
S : Type v
inst✝⁴ : CommRing S
f : R →+* S
p : Ideal R
P✝ : Ideal S
inst✝³ : IsDedekindDomain S
inst✝² : Algebra R S
inst✝¹ : IsNoetherian R S
inst✝ : p.IsMaximal
P : { x // x ∈ (factors (map (algebraMap R S) p)).toFinset }
⊢ finrank (R ⧸ p) (S ⧸ ↑P) ≠ 0
tactic: rw [inertiaDeg_algebraMap]
state_before: R : Type u
inst✝⁵ : CommRing R
S : Type v
inst✝⁴ : CommRing S
f : R →+* S
p : Ideal R
P✝ : Ideal S
inst✝³ : IsDedekindDomain S
inst✝² : Algebra R S
inst✝¹ : IsNoetherian R S
inst✝ : p.IsMaximal
P : { x // x ∈ (factors (map (algebraMap R S) p)).toFinset }
⊢ finrank (R ⧸ p) (S ⧸ ↑P) ≠ 0
state_after: no goals
tactic: exact (FiniteDimensional.finrank_pos_iff.mpr inferInstance).ne'
Theorem: DFinsupp.prod_finset_sum_index
File: Mathlib/Data/DFinsupp/Basic.lean

Proof steps:
state_before: ι : Type u
γ✝ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝³ : DecidableEq ι
γ : Type w
α : Type x
inst✝² : (i : ι) → AddCommMonoid (β i)
inst✝¹ : (i : ι) → (x : β i) → Decidable (x ≠ 0)
inst✝ : CommMonoid γ
s : Finset α
g : α → Π₀ (i : ι), β i
h : (i : ι) → β i → γ
h_zero : ∀ (i : ι), h i 0 = 1
h_add : ∀ (i : ι) (b₁ b₂ : β i), h i (b₁ + b₂) = h i b₁ * h i b₂
⊢ ∏ i ∈ s, (g i).prod h = (∑ i ∈ s, g i).prod h
state_after: no goals
tactic: classical
  exact Finset.induction_on s (by simp [prod_zero_index])
        (by simp (config := { contextual := true }) [prod_add_index, h_zero, h_add])
Theorem: Asymptotics.isEquivalent_zero_iff_eventually_zero
File: Mathlib/Analysis/Asymptotics/AsymptoticEquivalent.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : NormedAddCommGroup β
u v w : α → β
l : Filter α
⊢ u ~[l] 0 ↔ u =ᶠ[l] 0
state_after: α : Type u_1
β : Type u_2
inst✝ : NormedAddCommGroup β
u v w : α → β
l : Filter α
⊢ u =o[l] 0 ↔ u =ᶠ[l] 0
tactic: rw [IsEquivalent, sub_zero]
state_before: α : Type u_1
β : Type u_2
inst✝ : NormedAddCommGroup β
u v w : α → β
l : Filter α
⊢ u =o[l] 0 ↔ u =ᶠ[l] 0
state_after: no goals
tactic: exact isLittleO_zero_right_iff
Theorem: SimplicialObject.Splitting.cofan_inj_πSummand_eq_id
File: Mathlib/AlgebraicTopology/DoldKan/SplitSimplicialObject.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ (s.cofan Δ).inj A ≫ s.πSummand A = 𝟙 (summand s.N Δ A)
state_after: no goals
tactic: simp [πSummand]
Theorem: Multiset.dedup_map_of_injective
File: Mathlib/Data/Multiset/Dedup.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
f : α → β
hf : Function.Injective f
s : Multiset α
l : List α
⊢ (map f (Quot.mk Setoid.r l)).dedup = map f (dedup (Quot.mk Setoid.r l))
state_after: no goals
tactic: simp [List.dedup_map_of_injective hf l]
Theorem: ENNReal.div_le_iff_le_mul
File: Mathlib/Data/ENNReal/Inv.lean

Proof steps:
state_before: a b c d : ℝ≥0∞
r p q : ℝ≥0
hb0 : b ≠ 0 ∨ c ≠ ⊤
hbt : b ≠ ⊤ ∨ c ≠ 0
⊢ a / b ≤ c ↔ a ≤ c * b
state_after: a b c d : ℝ≥0∞
r p q : ℝ≥0
hb0 : b ≠ 0 ∨ c ≠ ⊤
hbt : b ≠ ⊤ ∨ c ≠ 0
⊢ a * b⁻¹ ≤ c ↔ a ≤ c / b⁻¹
tactic: suffices a * b⁻¹ ≤ c ↔ a ≤ c / b⁻¹ by simpa [div_eq_mul_inv]
state_before: a b c d : ℝ≥0∞
r p q : ℝ≥0
hb0 : b ≠ 0 ∨ c ≠ ⊤
hbt : b ≠ ⊤ ∨ c ≠ 0
⊢ a * b⁻¹ ≤ c ↔ a ≤ c / b⁻¹
state_after: no goals
tactic: refine (ENNReal.le_div_iff_mul_le ?_ ?_).symm <;> simpa
Theorem: CategoryTheory.composePath_comp
File: Mathlib/CategoryTheory/PathCategory.lean

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
X Y Z : C
f : Path X Y
g : Path Y Z
⊢ composePath (f.comp g) = composePath f ≫ composePath g
state_after: case nil
C : Type u₁
inst✝ : Category.{v₁, u₁} C
X Y Z : C
f : Path X Y
⊢ composePath (f.comp Path.nil) = composePath f ≫ composePath Path.nil

case cons
C : Type u₁
inst✝ : Category.{v₁, u₁} C
X Y Z : C
f : Path X Y
Y' Z' : C
g : Path Y Y'
e : Y' ⟶ Z'
ih : composePath (f.comp g) = composePath f ≫ composePath g
⊢ composePath (f.comp (g.cons e)) = composePath f ≫ composePath (g.cons e)
tactic: induction' g with Y' Z' g e ih
Theorem: padicNorm.int_lt_one_iff
File: Mathlib/NumberTheory/Padics/PadicNorm.lean

Proof steps:
state_before: p : ℕ
hp : Fact (Nat.Prime p)
m : ℤ
⊢ padicNorm p ↑m < 1 ↔ ↑p ∣ m
state_after: p : ℕ
hp : Fact (Nat.Prime p)
m : ℤ
⊢ ¬padicNorm p ↑m < 1 ↔ padicNorm p ↑m ≤ 1 ∧ ¬padicNorm p ↑m < 1
tactic: rw [← not_iff_not, ← int_eq_one_iff, eq_iff_le_not_lt]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
m : ℤ
⊢ ¬padicNorm p ↑m < 1 ↔ padicNorm p ↑m ≤ 1 ∧ ¬padicNorm p ↑m < 1
state_after: no goals
tactic: simp only [padicNorm.of_int, true_and_iff]
Theorem: AddSubgroup.mem_ofAddUnits_iff_toAddUnits_mem
File: Mathlib/Algebra/Group/Submonoid/Units.lean

Proof steps:
state_before: M : Type u_1
inst✝¹ : Monoid M
G : Type u_2
inst✝ : Group G
H : Subgroup Gˣ
x : G
⊢ x ∈ H.ofUnits ↔ toUnits x ∈ H
state_after: no goals
tactic: simp_rw [mem_ofUnits_iff, toUnits.surjective.exists, val_toUnits_apply, exists_eq_right]
Theorem: Polynomial.map_monomial
File: Mathlib/Algebra/Polynomial/Eval.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a✝ b : R
m n✝ : ℕ
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
n : ℕ
a : R
⊢ map f ((monomial n) a) = (monomial n) (f a)
state_after: R : Type u
S : Type v
T : Type w
ι : Type y
a✝ b : R
m n✝ : ℕ
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
n : ℕ
a : R
⊢ eval₂ (C.comp f) X ((monomial n) a) = (monomial n) (f a)
tactic: dsimp only [map]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a✝ b : R
m n✝ : ℕ
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
n : ℕ
a : R
⊢ eval₂ (C.comp f) X ((monomial n) a) = (monomial n) (f a)
state_after: R : Type u
S : Type v
T : Type w
ι : Type y
a✝ b : R
m n✝ : ℕ
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
n : ℕ
a : R
⊢ (C.comp f) a * X ^ n = C (f a) * X ^ n
tactic: rw [eval₂_monomial, ← C_mul_X_pow_eq_monomial]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a✝ b : R
m n✝ : ℕ
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
n : ℕ
a : R
⊢ (C.comp f) a * X ^ n = C (f a) * X ^ n
state_after: no goals
tactic: rfl
Theorem: Polynomial.exists_monic_irreducible_factor
File: Mathlib/RingTheory/Polynomial/Basic.lean

Proof steps:
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: by_cases hf : f = 0
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: obtain ⟨g, hi, hf⟩ := WfDvdMonoid.exists_irreducible_factor hu 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
⊢ ∃ 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: 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
ha : Associated g (g * C g.leadingCoeff⁻¹)
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ g ∣ f
state_after: no goals
tactic: exact ⟨_, monic_mul_leadingCoeff_inv hi.ne_zero, ha.irreducible hi, ha.dvd_iff_dvd_left.1 hf⟩
Theorem: LTSeries.comap_toFun
File: Mathlib/Order/RelSeries.lean

Proof steps:
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
inst✝¹ : Preorder α
inst✝ : Preorder β
p : LTSeries β
f : α → β
comap : ∀ ⦃x y : α⦄, f x < f y → x < y
surjective : Function.Surjective f
i j : Fin (p.length + 1)
h : i < j
⊢ f ((fun i => ⋯.choose) i) < f ((fun i => ⋯.choose) j)
state_after: no goals
tactic: simpa only [(surjective _).choose_spec] using p.strictMono h
Theorem: tangentBundle_model_space_coe_chartAt
File: Mathlib/Geometry/Manifold/VectorBundle/Tangent.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝¹⁴ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹³ : NormedAddCommGroup E
inst✝¹² : NormedSpace 𝕜 E
E' : Type u_3
inst✝¹¹ : NormedAddCommGroup E'
inst✝¹⁰ : NormedSpace 𝕜 E'
H : Type u_4
inst✝⁹ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_5
inst✝⁸ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝⁷ : TopologicalSpace M
inst✝⁶ : ChartedSpace H M
inst✝⁵ : SmoothManifoldWithCorners I M
M' : Type u_7
inst✝⁴ : TopologicalSpace M'
inst✝³ : ChartedSpace H' M'
inst✝² : SmoothManifoldWithCorners I' M'
F : Type u_8
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
p : TangentBundle I H
⊢ ↑(chartAt (ModelProd H E) p) = ⇑(TotalSpace.toProd H E)
state_after: 𝕜 : Type u_1
inst✝¹⁴ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹³ : NormedAddCommGroup E
inst✝¹² : NormedSpace 𝕜 E
E' : Type u_3
inst✝¹¹ : NormedAddCommGroup E'
inst✝¹⁰ : NormedSpace 𝕜 E'
H : Type u_4
inst✝⁹ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_5
inst✝⁸ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝⁷ : TopologicalSpace M
inst✝⁶ : ChartedSpace H M
inst✝⁵ : SmoothManifoldWithCorners I M
M' : Type u_7
inst✝⁴ : TopologicalSpace M'
inst✝³ : ChartedSpace H' M'
inst✝² : SmoothManifoldWithCorners I' M'
F : Type u_8
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
p : TangentBundle I H
⊢ ↑(TotalSpace.toProd H E).toPartialEquiv = ⇑(TotalSpace.toProd H E)
tactic: rw [← PartialHomeomorph.coe_coe, tangentBundle_model_space_chartAt]
state_before: 𝕜 : Type u_1
inst✝¹⁴ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹³ : NormedAddCommGroup E
inst✝¹² : NormedSpace 𝕜 E
E' : Type u_3
inst✝¹¹ : NormedAddCommGroup E'
inst✝¹⁰ : NormedSpace 𝕜 E'
H : Type u_4
inst✝⁹ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_5
inst✝⁸ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M : Type u_6
inst✝⁷ : TopologicalSpace M
inst✝⁶ : ChartedSpace H M
inst✝⁵ : SmoothManifoldWithCorners I M
M' : Type u_7
inst✝⁴ : TopologicalSpace M'
inst✝³ : ChartedSpace H' M'
inst✝² : SmoothManifoldWithCorners I' M'
F : Type u_8
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
p : TangentBundle I H
⊢ ↑(TotalSpace.toProd H E).toPartialEquiv = ⇑(TotalSpace.toProd H E)
state_after: no goals
tactic: rfl