ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: contractible_iff_id_nullhomotopic
File: Mathlib/Topology/Homotopy/Contractible.lean

Proof steps:
state_before: Y : Type u_1
inst✝ : TopologicalSpace Y
⊢ ContractibleSpace Y ↔ (ContinuousMap.id Y).Nullhomotopic
state_after: case mp
Y : Type u_1
inst✝ : TopologicalSpace Y
⊢ ContractibleSpace Y → (ContinuousMap.id Y).Nullhomotopic

case mpr
Y : Type u_1
inst✝ : TopologicalSpace Y
⊢ (ContinuousMap.id Y).Nullhomotopic → ContractibleSpace Y
tactic: constructor
state_before: case mpr
Y : Type u_1
inst✝ : TopologicalSpace Y
⊢ (ContinuousMap.id Y).Nullhomotopic → ContractibleSpace Y
state_after: case mpr.intro
Y : Type u_1
inst✝ : TopologicalSpace Y
p : Y
h : (ContinuousMap.id Y).Homotopic (const Y p)
⊢ ContractibleSpace Y
tactic: rintro ⟨p, h⟩
state_before: case mpr.intro
Y : Type u_1
inst✝ : TopologicalSpace Y
p : Y
h : (ContinuousMap.id Y).Homotopic (const Y p)
⊢ ContractibleSpace Y
state_after: case mpr.intro.refine_1
Y : Type u_1
inst✝ : TopologicalSpace Y
p : Y
h : (ContinuousMap.id Y).Homotopic (const Y p)
⊢ ((const Unit p).comp (const Y ())).Homotopic (ContinuousMap.id Y)

case mpr.intro.refine_2
Y : Type u_1
inst✝ : TopologicalSpace Y
p : Y
h : (ContinuousMap.id Y).Homotopic (const Y p)
⊢ ((const Y ()).comp (const Unit p)).Homotopic (ContinuousMap.id Unit)
tactic: refine
    { hequiv_unit' :=
        ⟨{  toFun := ContinuousMap.const _ ()
            invFun := ContinuousMap.const _ p
            left_inv := ?_
            right_inv := ?_ }⟩ }
Theorem: padicNorm.int_eq_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 ↔ ¬↑(p ^ 1) ∣ m
tactic: nth_rw 2 [← pow_one p]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
m : ℤ
⊢ padicNorm p ↑m = 1 ↔ ¬↑(p ^ 1) ∣ m
state_after: p : ℕ
hp : Fact (Nat.Prime p)
m : ℤ
⊢ padicNorm p ↑m = 1 ↔ (↑p)⁻¹ < padicNorm p ↑m
tactic: simp only [dvd_iff_norm_le, Int.cast_natCast, Nat.cast_one, zpow_neg, zpow_one, not_le]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
m : ℤ
⊢ padicNorm p ↑m = 1 ↔ (↑p)⁻¹ < padicNorm p ↑m
state_after: case mp
p : ℕ
hp : Fact (Nat.Prime p)
m : ℤ
⊢ padicNorm p ↑m = 1 → (↑p)⁻¹ < padicNorm p ↑m

case mpr
p : ℕ
hp : Fact (Nat.Prime p)
m : ℤ
⊢ (↑p)⁻¹ < padicNorm p ↑m → padicNorm p ↑m = 1
tactic: constructor
Theorem: Trivialization.tendsto_nhds_iff
File: Mathlib/Topology/FiberBundle/Trivialization.lean

Proof steps:
state_before: ι : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
Z : Type u_5
inst✝³ : TopologicalSpace B
inst✝² : TopologicalSpace F
proj : Z → B
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace (TotalSpace F E)
e : Trivialization F proj
x : Z
α : Type u_6
l : Filter α
f : α → Z
z : Z
hz : z ∈ e.source
⊢ Tendsto f l (𝓝 z) ↔ Tendsto (proj ∘ f) l (𝓝 (proj z)) ∧ Tendsto (fun x => (↑e (f x)).2) l (𝓝 (↑e z).2)
state_after: ι : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
Z : Type u_5
inst✝³ : TopologicalSpace B
inst✝² : TopologicalSpace F
proj : Z → B
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace (TotalSpace F E)
e : Trivialization F proj
x : Z
α : Type u_6
l : Filter α
f : α → Z
z : Z
hz : z ∈ e.source
⊢ ((Tendsto (fun n => ((↑e ∘ f) n).1) l (𝓝 (proj z)) ∧ Tendsto (fun n => ((↑e ∘ f) n).2) l (𝓝 (↑e z).2)) ∧
      ∀ᶠ (a : α) in l, f a ∈ e.source) ↔
    Tendsto (proj ∘ f) l (𝓝 (proj z)) ∧ Tendsto (fun x => (↑e (f x)).2) l (𝓝 (↑e z).2)
tactic: rw [e.nhds_eq_comap_inf_principal hz, tendsto_inf, tendsto_comap_iff, Prod.tendsto_iff, coe_coe,
    tendsto_principal, coe_fst _ hz]
state_before: ι : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
Z : Type u_5
inst✝³ : TopologicalSpace B
inst✝² : TopologicalSpace F
proj : Z → B
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace (TotalSpace F E)
e : Trivialization F proj
x : Z
α : Type u_6
l : Filter α
f : α → Z
z : Z
hz : z ∈ e.source
⊢ ((Tendsto (fun n => ((↑e ∘ f) n).1) l (𝓝 (proj z)) ∧ Tendsto (fun n => ((↑e ∘ f) n).2) l (𝓝 (↑e z).2)) ∧
      ∀ᶠ (a : α) in l, f a ∈ e.source) ↔
    Tendsto (proj ∘ f) l (𝓝 (proj z)) ∧ Tendsto (fun x => (↑e (f x)).2) l (𝓝 (↑e z).2)
state_after: case pos
ι : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
Z : Type u_5
inst✝³ : TopologicalSpace B
inst✝² : TopologicalSpace F
proj : Z → B
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace (TotalSpace F E)
e : Trivialization F proj
x : Z
α : Type u_6
l : Filter α
f : α → Z
z : Z
hz : z ∈ e.source
hl : ∀ᶠ (x : α) in l, f x ∈ e.source
⊢ ((Tendsto (fun n => ((↑e ∘ f) n).1) l (𝓝 (proj z)) ∧ Tendsto (fun n => ((↑e ∘ f) n).2) l (𝓝 (↑e z).2)) ∧
      ∀ᶠ (a : α) in l, f a ∈ e.source) ↔
    Tendsto (proj ∘ f) l (𝓝 (proj z)) ∧ Tendsto (fun x => (↑e (f x)).2) l (𝓝 (↑e z).2)

case neg
ι : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
Z : Type u_5
inst✝³ : TopologicalSpace B
inst✝² : TopologicalSpace F
proj : Z → B
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace (TotalSpace F E)
e : Trivialization F proj
x : Z
α : Type u_6
l : Filter α
f : α → Z
z : Z
hz : z ∈ e.source
hl : ¬∀ᶠ (x : α) in l, f x ∈ e.source
⊢ ((Tendsto (fun n => ((↑e ∘ f) n).1) l (𝓝 (proj z)) ∧ Tendsto (fun n => ((↑e ∘ f) n).2) l (𝓝 (↑e z).2)) ∧
      ∀ᶠ (a : α) in l, f a ∈ e.source) ↔
    Tendsto (proj ∘ f) l (𝓝 (proj z)) ∧ Tendsto (fun x => (↑e (f x)).2) l (𝓝 (↑e z).2)
tactic: by_cases hl : ∀ᶠ x in l, f x ∈ e.source
Theorem: Pi.isCompact_iff
File: Mathlib/Topology/Separation.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝⁵ : TopologicalSpace X
inst✝⁴ : FirstCountableTopology X
Z : Type u_3
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Z
ι : Type u_4
π : ι → Type u_5
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : ∀ (i : ι), T2Space (π i)
s : Set ((i : ι) → π i)
⊢ IsCompact s ↔ IsClosed s ∧ ∀ (i : ι), IsCompact (eval i '' s)
state_after: case mp
X : Type u_1
Y : Type u_2
inst✝⁵ : TopologicalSpace X
inst✝⁴ : FirstCountableTopology X
Z : Type u_3
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Z
ι : Type u_4
π : ι → Type u_5
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : ∀ (i : ι), T2Space (π i)
s : Set ((i : ι) → π i)
H : IsCompact s
⊢ IsClosed s ∧ ∀ (i : ι), IsCompact (eval i '' s)

case mpr
X : Type u_1
Y : Type u_2
inst✝⁵ : TopologicalSpace X
inst✝⁴ : FirstCountableTopology X
Z : Type u_3
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Z
ι : Type u_4
π : ι → Type u_5
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : ∀ (i : ι), T2Space (π i)
s : Set ((i : ι) → π i)
H : IsClosed s ∧ ∀ (i : ι), IsCompact (eval i '' s)
⊢ IsCompact s
tactic: constructor <;> intro H
Theorem: CompleteOrthogonalIdempotents.unique_iff
File: Mathlib/RingTheory/Idempotents.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
inst✝³ : Ring R
inst✝² : Ring S
f : R →+* S
I : Type u_3
e : I → R
he✝ : OrthogonalIdempotents e
inst✝¹ : Fintype I
he : CompleteOrthogonalIdempotents e
inst✝ : Unique I
⊢ CompleteOrthogonalIdempotents e ↔ e default = 1
state_after: R : Type u_1
S : Type u_2
inst✝³ : Ring R
inst✝² : Ring S
f : R →+* S
I : Type u_3
e : I → R
he✝ : OrthogonalIdempotents e
inst✝¹ : Fintype I
he : CompleteOrthogonalIdempotents e
inst✝ : Unique I
⊢ ((∀ (i : I), IsIdempotentElem (e i)) ∧ ∀ (i j : I), i ≠ j → e i * e j = 0) ∧ ∑ i : I, e i = 1 ↔ e default = 1
tactic: rw [completeOrthogonalIdempotents_iff, orthogonalIdempotents_iff]
state_before: R : Type u_1
S : Type u_2
inst✝³ : Ring R
inst✝² : Ring S
f : R →+* S
I : Type u_3
e : I → R
he✝ : OrthogonalIdempotents e
inst✝¹ : Fintype I
he : CompleteOrthogonalIdempotents e
inst✝ : Unique I
⊢ ((∀ (i : I), IsIdempotentElem (e i)) ∧ ∀ (i j : I), i ≠ j → e i * e j = 0) ∧ ∑ i : I, e i = 1 ↔ e default = 1
state_after: R : Type u_1
S : Type u_2
inst✝³ : Ring R
inst✝² : Ring S
f : R →+* S
I : Type u_3
e : I → R
he✝ : OrthogonalIdempotents e
inst✝¹ : Fintype I
he : CompleteOrthogonalIdempotents e
inst✝ : Unique I
⊢ e default = 1 → IsIdempotentElem (e default)
tactic: simp only [Unique.forall_iff, ne_eq, not_true_eq_false, false_implies, and_true,
    Finset.univ_unique, Finset.sum_singleton, and_iff_right_iff_imp]
Theorem: LieModule.map_weightSpace_eq
File: Mathlib/Algebra/Lie/Weights/Basic.lean

Proof steps:
state_before: K : Type u_1
R : Type u_2
L : Type u_3
M : Type u_4
inst✝¹¹ : CommRing R
inst✝¹⁰ : LieRing L
inst✝⁹ : LieAlgebra R L
inst✝⁸ : LieAlgebra.IsNilpotent R L
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
M₂ : Type u_5
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : LieRingModule L M₂
inst✝ : LieModule R L M₂
χ : L → R
f : M →ₗ⁅R,L⁆ M₂
e : M ≃ₗ⁅R,L⁆ M₂
⊢ LieSubmodule.map e.toLieModuleHom (weightSpace M χ) = weightSpace M₂ χ
state_after: no goals
tactic: simp [map_weightSpace_eq_of_injective e.injective]
Theorem: AffineSubspace.convex
File: Mathlib/Analysis/Convex/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
β : Type u_4
inst✝⁴ : OrderedRing 𝕜
inst✝³ : AddCommGroup E
inst✝² : AddCommGroup F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s t : Set E
Q : AffineSubspace 𝕜 E
x : E
hx : x ∈ ↑Q
y : E
hy : y ∈ ↑Q
a b : 𝕜
x✝¹ : 0 ≤ a
x✝ : 0 ≤ b
hab : a + b = 1
⊢ a • x + b • y ∈ ↑Q
state_after: no goals
tactic: simpa [Convex.combo_eq_smul_sub_add hab] using Q.2 _ hy hx hx
Theorem: ascPochhammer_natDegree
File: Mathlib/RingTheory/Polynomial/Pochhammer.lean

Proof steps:
state_before: S : Type u
inst✝² : Semiring S
n : ℕ
inst✝¹ : NoZeroDivisors S
inst✝ : Nontrivial S
⊢ (ascPochhammer S n).natDegree = n
state_after: case zero
S : Type u
inst✝² : Semiring S
inst✝¹ : NoZeroDivisors S
inst✝ : Nontrivial S
⊢ (ascPochhammer S 0).natDegree = 0

case succ
S : Type u
inst✝² : Semiring S
inst✝¹ : NoZeroDivisors S
inst✝ : Nontrivial S
n : ℕ
hn : (ascPochhammer S n).natDegree = n
⊢ (ascPochhammer S (n + 1)).natDegree = n + 1
tactic: induction' n with n hn
Theorem: AddSubgroup.vadd_opposite_image_add_preimage'
File: Mathlib/Algebra/Group/Subgroup/Pointwise.lean

Proof steps:
state_before: α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup A
s✝ : Set G
g : G
h : Gᵐᵒᵖ
s : Set G
⊢ (fun y => h • y) '' ((fun x => g * x) ⁻¹' s) = (fun x => g * x) ⁻¹' ((fun y => h • y) '' s)
state_after: no goals
tactic: simp [preimage_preimage, mul_assoc]
Theorem: CategoryTheory.MorphismProperty.monotone_map
File: Mathlib/CategoryTheory/MorphismProperty/Basic.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
D : Type u_1
inst✝ : Category.{u_2, u_1} D
F : C ⥤ D
⊢ Monotone fun x => x.map F
state_after: C : Type u
inst✝¹ : Category.{v, u} C
D : Type u_1
inst✝ : Category.{u_2, u_1} D
F : C ⥤ D
P Q : MorphismProperty C
h : P ≤ Q
X Y : D
f : X ⟶ Y
X' Y' : C
f' : X' ⟶ Y'
hf' : P f'
e : Arrow.mk (F.map f') ≅ Arrow.mk f
⊢ Q.map F f
tactic: intro P Q h X Y f ⟨X', Y', f', hf', ⟨e⟩⟩
state_before: C : Type u
inst✝¹ : Category.{v, u} C
D : Type u_1
inst✝ : Category.{u_2, u_1} D
F : C ⥤ D
P Q : MorphismProperty C
h : P ≤ Q
X Y : D
f : X ⟶ Y
X' Y' : C
f' : X' ⟶ Y'
hf' : P f'
e : Arrow.mk (F.map f') ≅ Arrow.mk f
⊢ Q.map F f
state_after: no goals
tactic: exact ⟨X', Y', f', h _ hf', ⟨e⟩⟩
Theorem: Nat.div_pow
File: Mathlib/Data/Nat/Defs.lean

Proof steps:
state_before: a b c d m n k : ℕ
p q : ℕ → Prop
h : a ∣ b
⊢ (b / a) ^ c = b ^ c / a ^ c
state_after: case inl
a b d m n k : ℕ
p q : ℕ → Prop
h : a ∣ b
⊢ (b / a) ^ 0 = b ^ 0 / a ^ 0

case inr
a b c d m n k : ℕ
p q : ℕ → Prop
h : a ∣ b
hc : c > 0
⊢ (b / a) ^ c = b ^ c / a ^ c
tactic: obtain rfl | hc := c.eq_zero_or_pos
state_before: case inr
a b c d m n k : ℕ
p q : ℕ → Prop
h : a ∣ b
hc : c > 0
⊢ (b / a) ^ c = b ^ c / a ^ c
state_after: case inr.inl
b c d m n k : ℕ
p q : ℕ → Prop
hc : c > 0
h : 0 ∣ b
⊢ (b / 0) ^ c = b ^ c / 0 ^ c

case inr.inr
a b c d m n k : ℕ
p q : ℕ → Prop
h : a ∣ b
hc : c > 0
ha : a > 0
⊢ (b / a) ^ c = b ^ c / a ^ c
tactic: obtain rfl | ha := a.eq_zero_or_pos
state_before: case inr.inr
a b c d m n k : ℕ
p q : ℕ → Prop
h : a ∣ b
hc : c > 0
ha : a > 0
⊢ (b / a) ^ c = b ^ c / a ^ c
state_after: case inr.inr
a b c d m n k : ℕ
p q : ℕ → Prop
h : a ∣ b
hc : c > 0
ha : a > 0
⊢ b ^ c = a ^ c * (b / a) ^ c
tactic: refine (Nat.div_eq_of_eq_mul_right (pos_pow_of_pos c ha) ?_).symm
state_before: case inr.inr
a b c d m n k : ℕ
p q : ℕ → Prop
h : a ∣ b
hc : c > 0
ha : a > 0
⊢ b ^ c = a ^ c * (b / a) ^ c
state_after: no goals
tactic: rw [← Nat.mul_pow, Nat.mul_div_cancel_left' h]
Theorem: GaloisConnection.l_iSup₂
File: Mathlib/Order/GaloisConnection.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
l : α → β
u : β → α
gc : GaloisConnection l u
f : (i : ι) → κ i → α
⊢ l (⨆ i, ⨆ j, f i j) = ⨆ i, ⨆ j, l (f i j)
state_after: no goals
tactic: simp_rw [gc.l_iSup]
Theorem: Set.Ici_add_Ioi_subset
File: Mathlib/Data/Set/Pointwise/Interval.lean

Proof steps:
state_before: α : Type u_1
inst✝³ : Mul α
inst✝² : PartialOrder α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass α α (Function.swap HMul.hMul) LT.lt
a b : α
⊢ Ici a * Ioi b ⊆ Ioi (a * b)
state_after: α : Type u_1
inst✝³ : Mul α
inst✝² : PartialOrder α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass α α (Function.swap HMul.hMul) LT.lt
a b : α
this :
  ∀ (M : Type ?u.12705) (N : Type ?u.12704) (μ : M → N → N) [inst : PartialOrder N]
    [inst_1 : CovariantClass M N μ fun x x_1 => x < x_1], CovariantClass M N μ fun x x_1 => x ≤ x_1
⊢ Ici a * Ioi b ⊆ Ioi (a * b)
tactic: haveI := covariantClass_le_of_lt
state_before: α : Type u_1
inst✝³ : Mul α
inst✝² : PartialOrder α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass α α (Function.swap HMul.hMul) LT.lt
a b : α
this :
  ∀ (M : Type ?u.12705) (N : Type ?u.12704) (μ : M → N → N) [inst : PartialOrder N]
    [inst_1 : CovariantClass M N μ fun x x_1 => x < x_1], CovariantClass M N μ fun x x_1 => x ≤ x_1
⊢ Ici a * Ioi b ⊆ Ioi (a * b)
state_after: case intro.intro.intro.intro
α : Type u_1
inst✝³ : Mul α
inst✝² : PartialOrder α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass α α (Function.swap HMul.hMul) LT.lt
a b : α
this :
  ∀ (M : Type ?u.12705) (N : Type ?u.12704) (μ : M → N → N) [inst : PartialOrder N]
    [inst_1 : CovariantClass M N μ fun x x_1 => x < x_1], CovariantClass M N μ fun x x_1 => x ≤ x_1
y : α
hya : y ∈ Ici a
z : α
hzb : z ∈ Ioi b
⊢ (fun x x_1 => x * x_1) y z ∈ Ioi (a * b)
tactic: rintro x ⟨y, hya, z, hzb, rfl⟩
state_before: case intro.intro.intro.intro
α : Type u_1
inst✝³ : Mul α
inst✝² : PartialOrder α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass α α (Function.swap HMul.hMul) LT.lt
a b : α
this :
  ∀ (M : Type ?u.12705) (N : Type ?u.12704) (μ : M → N → N) [inst : PartialOrder N]
    [inst_1 : CovariantClass M N μ fun x x_1 => x < x_1], CovariantClass M N μ fun x x_1 => x ≤ x_1
y : α
hya : y ∈ Ici a
z : α
hzb : z ∈ Ioi b
⊢ (fun x x_1 => x * x_1) y z ∈ Ioi (a * b)
state_after: no goals
tactic: exact mul_lt_mul_of_le_of_lt hya hzb
Theorem: CategoryTheory.Preadditive.cokernelCoforkOfCofork_ofπ
File: Mathlib/CategoryTheory/Preadditive/Basic.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
P : C
π : Y ⟶ P
w : f ≫ π = g ≫ π
⊢ (f - g) ≫ π = 0
state_after: no goals
tactic: simp [w]
Theorem: inv_mul_eq_of_eq_mul
File: Mathlib/Algebra/Group/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : Group G
a b c d : G
n : ℤ
h : b = a * c
⊢ a⁻¹ * b = c
state_after: no goals
tactic: simp [h]
Theorem: ZMod.intCast_comp_cast
File: Mathlib/Data/ZMod/Basic.lean

Proof steps:
state_before: n : ℕ
R : Type u_1
inst✝ : Ring R
⊢ Int.cast ∘ cast = cast
state_after: case zero
R : Type u_1
inst✝ : Ring R
⊢ Int.cast ∘ cast = cast

case succ
R : Type u_1
inst✝ : Ring R
n✝ : ℕ
⊢ Int.cast ∘ cast = cast
tactic: cases n
Theorem: HomologicalComplex.mkHomFromSingle_f
File: Mathlib/Algebra/Homology/Single.lean

Proof steps:
state_before: V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
inst✝¹ : HasZeroObject V
ι : Type u_1
inst✝ : DecidableEq ι
c : ComplexShape ι
K : HomologicalComplex V c
j : ι
A : V
φ : A ⟶ K.X j
hφ : ∀ (k : ι), c.Rel j k → φ ≫ K.d j k = 0
⊢ (mkHomFromSingle φ hφ).f j = (singleObjXSelf c j A).hom ≫ φ
state_after: V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
inst✝¹ : HasZeroObject V
ι : Type u_1
inst✝ : DecidableEq ι
c : ComplexShape ι
K : HomologicalComplex V c
j : ι
A : V
φ : A ⟶ K.X j
hφ : ∀ (k : ι), c.Rel j k → φ ≫ K.d j k = 0
⊢ (if hi : j = j then (singleObjXIsoOfEq c j A j hi).hom ≫ φ ≫ 𝟙 (K.X j) else 0) = (singleObjXSelf c j A).hom ≫ φ
tactic: dsimp [mkHomFromSingle]
state_before: V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
inst✝¹ : HasZeroObject V
ι : Type u_1
inst✝ : DecidableEq ι
c : ComplexShape ι
K : HomologicalComplex V c
j : ι
A : V
φ : A ⟶ K.X j
hφ : ∀ (k : ι), c.Rel j k → φ ≫ K.d j k = 0
⊢ (if hi : j = j then (singleObjXIsoOfEq c j A j hi).hom ≫ φ ≫ 𝟙 (K.X j) else 0) = (singleObjXSelf c j A).hom ≫ φ
state_after: V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
inst✝¹ : HasZeroObject V
ι : Type u_1
inst✝ : DecidableEq ι
c : ComplexShape ι
K : HomologicalComplex V c
j : ι
A : V
φ : A ⟶ K.X j
hφ : ∀ (k : ι), c.Rel j k → φ ≫ K.d j k = 0
⊢ (singleObjXIsoOfEq c j A j ⋯).hom ≫ φ = (singleObjXSelf c j A).hom ≫ φ
tactic: rw [dif_pos rfl, comp_id]
state_before: V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
inst✝¹ : HasZeroObject V
ι : Type u_1
inst✝ : DecidableEq ι
c : ComplexShape ι
K : HomologicalComplex V c
j : ι
A : V
φ : A ⟶ K.X j
hφ : ∀ (k : ι), c.Rel j k → φ ≫ K.d j k = 0
⊢ (singleObjXIsoOfEq c j A j ⋯).hom ≫ φ = (singleObjXSelf c j A).hom ≫ φ
state_after: no goals
tactic: rfl
Theorem: le_of_forall_one_lt_lt_mul
File: Mathlib/Algebra/Order/Group/Unbundled/Basic.lean

Proof steps:
state_before: α : Type u
inst✝² : Group α
inst✝¹ : LinearOrder α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b c : α
h : ∀ (ε : α), 1 < ε → a < b * ε
h₁ : b < a
⊢ a < a
state_after: no goals
tactic: simpa using h _ (lt_inv_mul_iff_lt.mpr h₁)
Theorem: Localization.le_comap_primeCompl_iff
File: Mathlib/RingTheory/Localization/AtPrime.lean

Proof steps:
state_before: R : Type u_1
inst✝³ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝² : CommSemiring S
inst✝¹ : Algebra R S
P : Type u_3
inst✝ : CommSemiring P
I : Ideal R
hI : I.IsPrime
J : Ideal P
hJ : J.IsPrime
f : R →+* P
h : I.primeCompl ≤ Submonoid.comap f J.primeCompl
x : R
hx : x ∈ Ideal.comap f J
⊢ x ∈ I
state_after: R : Type u_1
inst✝³ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝² : CommSemiring S
inst✝¹ : Algebra R S
P : Type u_3
inst✝ : CommSemiring P
I : Ideal R
hI : I.IsPrime
J : Ideal P
hJ : J.IsPrime
f : R →+* P
h : I.primeCompl ≤ Submonoid.comap f J.primeCompl
x : R
hx : x ∉ I
⊢ x ∉ Ideal.comap f J
tactic: contrapose! hx
state_before: R : Type u_1
inst✝³ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝² : CommSemiring S
inst✝¹ : Algebra R S
P : Type u_3
inst✝ : CommSemiring P
I : Ideal R
hI : I.IsPrime
J : Ideal P
hJ : J.IsPrime
f : R →+* P
h : I.primeCompl ≤ Submonoid.comap f J.primeCompl
x : R
hx : x ∉ I
⊢ x ∉ Ideal.comap f J
state_after: no goals
tactic: exact h hx
Theorem: FractionalIdeal.mul_le
File: Mathlib/RingTheory/FractionalIdeal/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J K : FractionalIdeal S P
⊢ I * J ≤ K ↔ ∀ i ∈ I, ∀ j ∈ J, i * j ∈ K
state_after: R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J K : FractionalIdeal S P
⊢ ⟨↑I * ↑J, ⋯⟩ ≤ K ↔ ∀ i ∈ I, ∀ j ∈ J, i * j ∈ K
tactic: simp only [mul_def]
state_before: R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J K : FractionalIdeal S P
⊢ ⟨↑I * ↑J, ⋯⟩ ≤ K ↔ ∀ i ∈ I, ∀ j ∈ J, i * j ∈ K
state_after: no goals
tactic: exact Submodule.mul_le
Theorem: Finset.sum_mem_multiset
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

Proof steps:
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 α
m : Multiset α
f : { x // x ∈ m } → β
g : α → β
hfg : ∀ (x : { x // x ∈ m }), f x = g ↑x
⊢ ∏ x : { x // x ∈ m }, f x = ∏ x ∈ m.toFinset, g x
state_after: no goals
tactic: refine prod_bij' (fun x _ ↦ x) (fun x hx ↦ ⟨x, Multiset.mem_toFinset.1 hx⟩) ?_ ?_ ?_ ?_ ?_ <;>
    simp [hfg]
Theorem: isAddUnit_of_subsingleton
File: Mathlib/Algebra/Group/Units.lean

Proof steps:
state_before: α : Type u
M : Type u_1
N : Type u_2
inst✝¹ : Monoid M
inst✝ : Subsingleton M
a : M
⊢ a * a = 1
state_after: no goals
tactic: subsingleton
state_before: α : Type u
M : Type u_1
N : Type u_2
inst✝¹ : Monoid M
inst✝ : Subsingleton M
a : M
⊢ a * a = 1
state_after: no goals
tactic: subsingleton
Theorem: Quiver.hom_cast_eq_of_cons_eq_cons
File: Mathlib/Combinatorics/Quiver/Cast.lean

Proof steps:
state_before: U : Type u_1
inst✝ : Quiver U
u v v' w : U
p : Path u v
p' : Path u v'
e : v ⟶ w
e' : v' ⟶ w
h : p.cons e = p'.cons e'
⊢ Hom.cast ⋯ ⋯ e = e'
state_after: U : Type u_1
inst✝ : Quiver U
u v v' w : U
p : Path u v
p' : Path u v'
e : v ⟶ w
e' : v' ⟶ w
h : p.cons e = p'.cons e'
⊢ HEq e e'
tactic: rw [Hom.cast_eq_iff_heq]
state_before: U : Type u_1
inst✝ : Quiver U
u v v' w : U
p : Path u v
p' : Path u v'
e : v ⟶ w
e' : v' ⟶ w
h : p.cons e = p'.cons e'
⊢ HEq e e'
state_after: no goals
tactic: exact hom_heq_of_cons_eq_cons h
Theorem: Int.lt_floor_add_one
File: Mathlib/Algebra/Order/Floor.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
z : ℤ
a✝ a : α
⊢ a < ↑⌊a⌋ + 1
state_after: no goals
tactic: simpa only [Int.succ, Int.cast_add, Int.cast_one] using lt_succ_floor a
Theorem: CategoryTheory.Limits.WidePullback.lift_π
File: Mathlib/CategoryTheory/Limits/Shapes/WidePullbacks.lean

Proof steps:
state_before: J : Type w
C✝ : Type u
inst✝² : Category.{v, u} C✝
C : Type u
inst✝¹ : Category.{v, u} C
B : C
objs : J → C
arrows : (j : J) → objs j ⟶ B
inst✝ : HasWidePullback B objs arrows
X : C
f : X ⟶ B
fs : (j : J) → X ⟶ objs j
w : ∀ (j : J), fs j ≫ arrows j = f
j : J
⊢ lift f fs w ≫ π arrows j = fs j
state_after: no goals
tactic: simp only [limit.lift_π, WidePullbackShape.mkCone_pt, WidePullbackShape.mkCone_π_app]
Theorem: Orientation.oangle_add_cyc3_neg_right
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Basic.lean

Proof steps:
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y z : V
hx : x ≠ 0
hy : y ≠ 0
hz : z ≠ 0
⊢ o.oangle x (-y) + o.oangle y (-z) + o.oangle z (-x) = ↑π
state_after: no goals
tactic: simp_rw [← oangle_neg_left_eq_neg_right, o.oangle_add_cyc3_neg_left hx hy hz]
Theorem: mul_lowerClosure
File: Mathlib/Algebra/Order/UpperLower.lean

Proof steps:
state_before: α : Type u_1
inst✝ : OrderedCommGroup α
s t : Set α
a : α
⊢ s * ↑(lowerClosure t) = ↑(lowerClosure (s * t))
state_after: α : Type u_1
inst✝ : OrderedCommGroup α
s t : Set α
a : α
⊢ ⋃ a ∈ s, a • ↑(lowerClosure t) = ⋃ i ∈ s, ↑(i • lowerClosure t)
tactic: simp_rw [← smul_eq_mul, ← Set.iUnion_smul_set, lowerClosure_iUnion, lowerClosure_smul,
    LowerSet.coe_iSup₂]
state_before: α : Type u_1
inst✝ : OrderedCommGroup α
s t : Set α
a : α
⊢ ⋃ a ∈ s, a • ↑(lowerClosure t) = ⋃ i ∈ s, ↑(i • lowerClosure t)
state_after: no goals
tactic: rfl