1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Polynomial.isPrimitive_primPart
File: Mathlib/RingTheory/Polynomial/Content.lean

tactic: by_cases h : p = 0
state_before: R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p : R[X]
⊢ p.primPart.IsPrimitive
state_after: case pos
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p : R[X]
h : p = 0
⊢ p.primPart.IsPrimitive

case neg
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p : R[X]
h : ¬p = 0
⊢ p.primPart.IsPrimitive

tactic: rw [← content_eq_zero_iff] at h
state_before: case neg
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p : R[X]
h : ¬p = 0
⊢ p.primPart.IsPrimitive
state_after: case neg
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p : R[X]
h : ¬p.content = 0
⊢ p.primPart.IsPrimitive

tactic: rw [isPrimitive_iff_content_eq_one]
state_before: case neg
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p : R[X]
h : ¬p.content = 0
⊢ p.primPart.IsPrimitive
state_after: case neg
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p : R[X]
h : ¬p.content = 0
⊢ p.primPart.content = 1

tactic: apply mul_left_cancel₀ h
state_before: case neg
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p : R[X]
h : ¬p.content = 0
⊢ p.primPart.content = 1
state_after: case neg
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p : R[X]
h : ¬p.content = 0
⊢ p.content * p.primPart.content = p.content * 1

tactic: conv_rhs => rw [p.eq_C_content_mul_primPart, mul_one, content_C_mul, normalize_content]
state_before: case neg
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p : R[X]
h : ¬p.content = 0
⊢ p.content * p.primPart.content = p.content * 1
state_after: no goals

tactic: simp [h]
state_before: case pos
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p : R[X]
h : p = 0
⊢ p.primPart.IsPrimitive
state_after: no goals
Theorem: mul_self_eq_one_iff
File: Mathlib/Algebra/Ring/Commute.lean

tactic: rw [← (Commute.one_right a).mul_self_eq_mul_self_iff, mul_one]
state_before: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝¹ : NonAssocRing R
inst✝ : NoZeroDivisors R
a : R
⊢ a * a = 1 ↔ a = 1 ∨ a = -1
state_after: no goals
Theorem: div_mul_mul_cancel
File: Mathlib/Algebra/Group/Basic.lean

tactic: rw [mul_left_comm, div_mul_cancel, mul_comm]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : CommGroup G
a✝ b✝ c✝ d a b c : G
⊢ a / c * (b * c) = a * b
state_after: no goals
Theorem: mul_mem_closedBall_iff_norm
File: Mathlib/Analysis/Normed/Group/Basic.lean

tactic: rw [mem_closedBall_iff_norm'', mul_div_cancel_left]
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 ∈ closedBall a r ↔ ‖b‖ ≤ r
state_after: no goals
Theorem: lt_isLUB_iff
File: Mathlib/Order/Bounds/Basic.lean

tactic: simp_rw [← not_le, isLUB_le_iff h, mem_upperBounds, not_forall, not_le, exists_prop]
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝ : LinearOrder α
s : Set α
a b : α
h : IsLUB s a
⊢ b < a ↔ ∃ c ∈ s, b < c
state_after: no goals
Theorem: Set.diff_singleton_sSubset
File: Mathlib/Data/Set/Basic.lean

tactic: simp
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
a✝ b : α
s✝ s₁ s₂ t t₁ t₂ u s : Set α
a : α
⊢ ¬Disjoint s {a} ↔ a ∈ s
state_after: no goals
Theorem: MeasureTheory.average_eq
File: Mathlib/MeasureTheory/Integral/Average.lean

tactic: rw [average_eq', integral_smul_measure, ENNReal.toReal_inv]
state_before: α : Type u_1
E : Type u_2
F : Type u_3
m0 : MeasurableSpace α
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : CompleteSpace E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
μ ν : Measure α
s t : Set α
f✝ g f : α → E
⊢ ⨍ (x : α), f x ∂μ = (μ univ).toReal⁻¹ • ∫ (x : α), f x ∂μ
state_after: no goals
Theorem: Equiv.Perm.mclosure_isSwap
File: Mathlib/GroupTheory/Perm/Sign.lean

tactic: cases nonempty_fintype α
state_before: α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
⊢ Submonoid.closure {σ | σ.IsSwap} = ⊤
state_after: case intro
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
val✝ : Fintype α
⊢ Submonoid.closure {σ | σ.IsSwap} = ⊤

tactic: refine top_unique fun x _ ↦ ?_
state_before: case intro
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
val✝ : Fintype α
⊢ Submonoid.closure {σ | σ.IsSwap} = ⊤
state_after: case intro
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
val✝ : Fintype α
x : Perm α
x✝ : x ∈ ⊤
⊢ x ∈ Submonoid.closure {σ | σ.IsSwap}

tactic: obtain ⟨h1, h2⟩ := Subtype.mem (truncSwapFactors x).out
state_before: case intro
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
val✝ : Fintype α
x : Perm α
x✝ : x ∈ ⊤
⊢ x ∈ Submonoid.closure {σ | σ.IsSwap}
state_after: case intro.intro
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
val✝ : Fintype α
x : Perm α
x✝ : x ∈ ⊤
h1 : (↑x.truncSwapFactors.out).prod = x
h2 : ∀ g ∈ ↑x.truncSwapFactors.out, g.IsSwap
⊢ x ∈ Submonoid.closure {σ | σ.IsSwap}

tactic: rw [← h1]
state_before: case intro.intro
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
val✝ : Fintype α
x : Perm α
x✝ : x ∈ ⊤
h1 : (↑x.truncSwapFactors.out).prod = x
h2 : ∀ g ∈ ↑x.truncSwapFactors.out, g.IsSwap
⊢ x ∈ Submonoid.closure {σ | σ.IsSwap}
state_after: case intro.intro
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
val✝ : Fintype α
x : Perm α
x✝ : x ∈ ⊤
h1 : (↑x.truncSwapFactors.out).prod = x
h2 : ∀ g ∈ ↑x.truncSwapFactors.out, g.IsSwap
⊢ (↑x.truncSwapFactors.out).prod ∈ Submonoid.closure {σ | σ.IsSwap}

tactic: exact Submonoid.list_prod_mem _ fun y hy ↦ Submonoid.subset_closure (h2 y hy)
state_before: case intro.intro
α : Type u
inst✝¹ : DecidableEq α
β : Type v
inst✝ : Finite α
val✝ : Fintype α
x : Perm α
x✝ : x ∈ ⊤
h1 : (↑x.truncSwapFactors.out).prod = x
h2 : ∀ g ∈ ↑x.truncSwapFactors.out, g.IsSwap
⊢ (↑x.truncSwapFactors.out).prod ∈ Submonoid.closure {σ | σ.IsSwap}
state_after: no goals
Theorem: DFinsupp.neLocus_sub_right
File: Mathlib/Data/DFinsupp/NeLocus.lean

tactic: simpa only [sub_eq_add_neg] using @neLocus_add_right α N _ _ _ _ _ _
state_before: α : Type u_1
N : α → Type u_2
inst✝² : DecidableEq α
inst✝¹ : (a : α) → DecidableEq (N a)
inst✝ : (a : α) → AddGroup (N a)
f f₁ f₂ g g₁ g₂ : Π₀ (a : α), N a
⊢ (f₁ - g).neLocus (f₂ - g) = f₁.neLocus f₂
state_after: no goals
Theorem: lp.single_neg
File: Mathlib/Analysis/NormedSpace/lpSpace.lean

tactic: refine ext (funext (fun (j : α) => ?_))
state_before: α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
⊢ lp.single p i (-a) = -lp.single p i a
state_after: α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
⊢ ↑(lp.single p i (-a)) j = ↑(-lp.single p i a) j

tactic: by_cases hi : j = i
state_before: α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
⊢ ↑(lp.single p i (-a)) j = ↑(-lp.single p i a) j
state_after: case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
hi : j = i
⊢ ↑(lp.single p i (-a)) j = ↑(-lp.single p i a) j

case neg
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
hi : ¬j = i
⊢ ↑(lp.single p i (-a)) j = ↑(-lp.single p i a) j

tactic: subst hi
state_before: case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
hi : j = i
⊢ ↑(lp.single p i (-a)) j = ↑(-lp.single p i a) j
state_after: case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
j : α
a : E j
⊢ ↑(lp.single p j (-a)) j = ↑(-lp.single p j a) j

tactic: simp [lp.single_apply_self]
state_before: case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
j : α
a : E j
⊢ ↑(lp.single p j (-a)) j = ↑(-lp.single p j a) j
state_after: no goals

tactic: simp [lp.single_apply_ne p i _ hi]
state_before: case neg
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
j : α
hi : ¬j = i
⊢ ↑(lp.single p i (-a)) j = ↑(-lp.single p i a) j
state_after: no goals
Theorem: BoxIntegral.Prepartition.sum_fiberwise
File: Mathlib/Analysis/BoxIntegral/Partition/Basic.lean

tactic: convert sum_fiberwise_of_maps_to (fun _ => Finset.mem_image_of_mem f) g
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π✝ π₁ π₂ : Prepartition I
x : ι → ℝ
πi πi₁ πi₂ : (J : Box ι) → Prepartition J
α : Type u_2
M : Type u_3
inst✝ : AddCommMonoid M
π : Prepartition I
f : Box ι → α
g : Box ι → M
⊢ ∑ y ∈ Finset.image f π.boxes, ∑ J ∈ (π.filter fun J => f J = y).boxes, g J = ∑ J ∈ π.boxes, g J
state_after: no goals
Theorem: LipschitzWith.coordinate
File: Mathlib/Analysis/NormedSpace/lpSpace.lean

tactic: simp_rw [← lipschitzOn_univ]
state_before: α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → ↥(lp (fun i => ℝ) ⊤)
K : ℝ≥0
⊢ LipschitzWith K f ↔ ∀ (i : ι), LipschitzWith K fun a => ↑(f a) i
state_after: α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → ↥(lp (fun i => ℝ) ⊤)
K : ℝ≥0
⊢ LipschitzOnWith K f Set.univ ↔ ∀ (i : ι), LipschitzOnWith K (fun a => ↑(f a) i) Set.univ

tactic: apply LipschitzOnWith.coordinate
state_before: α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
f : α → ↥(lp (fun i => ℝ) ⊤)
K : ℝ≥0
⊢ LipschitzOnWith K f Set.univ ↔ ∀ (i : ι), LipschitzOnWith K (fun a => ↑(f a) i) Set.univ
state_after: no goals
Theorem: star_le_one_iff
File: Mathlib/Algebra/Star/Order.lean

tactic: simpa using star_le_star_iff (x := x) (y := 1)
state_before: R : Type u
inst✝³ : Semiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x : R
⊢ star x ≤ 1 ↔ x ≤ 1
state_after: no goals
Theorem: Finset.sigmaLift_eq_empty
File: Mathlib/Data/Finset/Sigma.lean

tactic: simp_rw [sigmaLift]
state_before: ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
γ : ι → Type u_4
inst✝ : DecidableEq ι
f g : ⦃i : ι⦄ → α i → β i → Finset (γ i)
a : (i : ι) × α i
b : (i : ι) × β i
⊢ sigmaLift f a b = ∅ ↔ ∀ (h : a.fst = b.fst), f (h ▸ a.snd) b.snd = ∅
state_after: ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
γ : ι → Type u_4
inst✝ : DecidableEq ι
f g : ⦃i : ι⦄ → α i → β i → Finset (γ i)
a : (i : ι) × α i
b : (i : ι) × β i
⊢ (if h : a.fst = b.fst then map (Embedding.sigmaMk b.fst) (f (h ▸ a.snd) b.snd) else ∅) = ∅ ↔
    ∀ (h : a.fst = b.fst), f (h ▸ a.snd) b.snd = ∅

tactic: split_ifs with h
state_before: ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
γ : ι → Type u_4
inst✝ : DecidableEq ι
f g : ⦃i : ι⦄ → α i → β i → Finset (γ i)
a : (i : ι) × α i
b : (i : ι) × β i
⊢ (if h : a.fst = b.fst then map (Embedding.sigmaMk b.fst) (f (h ▸ a.snd) b.snd) else ∅) = ∅ ↔
    ∀ (h : a.fst = b.fst), f (h ▸ a.snd) b.snd = ∅
state_after: case pos
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
γ : ι → Type u_4
inst✝ : DecidableEq ι
f g : ⦃i : ι⦄ → α i → β i → Finset (γ i)
a : (i : ι) × α i
b : (i : ι) × β i
h : a.fst = b.fst
⊢ map (Embedding.sigmaMk b.fst) (f (h ▸ a.snd) b.snd) = ∅ ↔ ∀ (h : a.fst = b.fst), f (h ▸ a.snd) b.snd = ∅

case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
γ : ι → Type u_4
inst✝ : DecidableEq ι
f g : ⦃i : ι⦄ → α i → β i → Finset (γ i)
a : (i : ι) × α i
b : (i : ι) × β i
h : ¬a.fst = b.fst
⊢ ∅ = ∅ ↔ ∀ (h : a.fst = b.fst), f (h ▸ a.snd) b.snd = ∅

tactic: simp [h, forall_prop_of_true h]
state_before: case pos
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
γ : ι → Type u_4
inst✝ : DecidableEq ι
f g : ⦃i : ι⦄ → α i → β i → Finset (γ i)
a : (i : ι) × α i
b : (i : ι) × β i
h : a.fst = b.fst
⊢ map (Embedding.sigmaMk b.fst) (f (h ▸ a.snd) b.snd) = ∅ ↔ ∀ (h : a.fst = b.fst), f (h ▸ a.snd) b.snd = ∅
state_after: no goals

tactic: simp [h, forall_prop_of_false h]
state_before: case neg
ι : Type u_1
α : ι → Type u_2
β : ι → Type u_3
γ : ι → Type u_4
inst✝ : DecidableEq ι
f g : ⦃i : ι⦄ → α i → β i → Finset (γ i)
a : (i : ι) × α i
b : (i : ι) × β i
h : ¬a.fst = b.fst
⊢ ∅ = ∅ ↔ ∀ (h : a.fst = b.fst), f (h ▸ a.snd) b.snd = ∅
state_after: no goals
Theorem: Filter.IsBoundedUnder.isLittleO_sub_self_inv
File: Mathlib/Analysis/Asymptotics/SpecificAsymptotics.lean

tactic: refine (h.isBigO_const (one_ne_zero' ℝ)).trans_isLittleO (isLittleO_const_left.2 <| Or.inr ?_)
state_before: 𝕜 : Type u_1
E : Type u_2
inst✝¹ : NormedField 𝕜
inst✝ : Norm E
a : 𝕜
f : 𝕜 → E
h : IsBoundedUnder (fun x x_1 => x ≤ x_1) (𝓝[≠] a) (norm ∘ f)
⊢ f =o[𝓝[≠] a] fun x => (x - a)⁻¹
state_after: 𝕜 : Type u_1
E : Type u_2
inst✝¹ : NormedField 𝕜
inst✝ : Norm E
a : 𝕜
f : 𝕜 → E
h : IsBoundedUnder (fun x x_1 => x ≤ x_1) (𝓝[≠] a) (norm ∘ f)
⊢ Tendsto (norm ∘ fun x => (x - a)⁻¹) (𝓝[≠] a) atTop

tactic: exact (tendsto_norm_sub_self_punctured_nhds a).inv_tendsto_zero
state_before: 𝕜 : Type u_1
E : Type u_2
inst✝¹ : NormedField 𝕜
inst✝ : Norm E
a : 𝕜
f : 𝕜 → E
h : IsBoundedUnder (fun x x_1 => x ≤ x_1) (𝓝[≠] a) (norm ∘ f)
⊢ Tendsto (fun x => ‖x - a‖⁻¹) (𝓝[≠] a) atTop
state_after: no goals
Theorem: LinearEquiv.arrowCongr_comp
File: Mathlib/Algebra/Module/Equiv.lean

tactic: ext
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂✝ : Type u_13
N₃✝ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝¹² : CommSemiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : Module R M
inst✝⁷ : Module R M₂
inst✝⁶ : Module R M₃
N : Type u_17
N₂ : Type u_18
N₃ : Type u_19
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : AddCommMonoid N₃
inst✝² : Module R N
inst✝¹ : Module R N₂
inst✝ : Module R N₃
e₁ : M ≃ₗ[R] N
e₂ : M₂ ≃ₗ[R] N₂
e₃ : M₃ ≃ₗ[R] N₃
f : M →ₗ[R] M₂
g : M₂ →ₗ[R] M₃
⊢ (e₁.arrowCongr e₃) (g ∘ₗ f) = (e₂.arrowCongr e₃) g ∘ₗ (e₁.arrowCongr e₂) f
state_after: case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂✝ : Type u_13
N₃✝ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝¹² : CommSemiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : Module R M
inst✝⁷ : Module R M₂
inst✝⁶ : Module R M₃
N : Type u_17
N₂ : Type u_18
N₃ : Type u_19
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : AddCommMonoid N₃
inst✝² : Module R N
inst✝¹ : Module R N₂
inst✝ : Module R N₃
e₁ : M ≃ₗ[R] N
e₂ : M₂ ≃ₗ[R] N₂
e₃ : M₃ ≃ₗ[R] N₃
f : M →ₗ[R] M₂
g : M₂ →ₗ[R] M₃
x✝ : N
⊢ ((e₁.arrowCongr e₃) (g ∘ₗ f)) x✝ = ((e₂.arrowCongr e₃) g ∘ₗ (e₁.arrowCongr e₂) f) x✝

tactic: simp only [symm_apply_apply, arrowCongr_apply, LinearMap.comp_apply]
state_before: case h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
K : Type u_6
S : Type u_7
M : Type u_8
M₁ : Type u_9
M₂ : Type u_10
M₃ : Type u_11
N₁ : Type u_12
N₂✝ : Type u_13
N₃✝ : Type u_14
N₄ : Type u_15
ι : Type u_16
inst✝¹² : CommSemiring R
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : AddCommMonoid M₃
inst✝⁸ : Module R M
inst✝⁷ : Module R M₂
inst✝⁶ : Module R M₃
N : Type u_17
N₂ : Type u_18
N₃ : Type u_19
inst✝⁵ : AddCommMonoid N
inst✝⁴ : AddCommMonoid N₂
inst✝³ : AddCommMonoid N₃
inst✝² : Module R N
inst✝¹ : Module R N₂
inst✝ : Module R N₃
e₁ : M ≃ₗ[R] N
e₂ : M₂ ≃ₗ[R] N₂
e₃ : M₃ ≃ₗ[R] N₃
f : M →ₗ[R] M₂
g : M₂ →ₗ[R] M₃
x✝ : N
⊢ ((e₁.arrowCongr e₃) (g ∘ₗ f)) x✝ = ((e₂.arrowCongr e₃) g ∘ₗ (e₁.arrowCongr e₂) f) x✝
state_after: no goals
Theorem: ZFSet.mem_funs
File: Mathlib/SetTheory/ZFC/Basic.lean

tactic: simp [funs, IsFunc]
state_before: x y f : ZFSet
⊢ f ∈ x.funs y ↔ x.IsFunc y f
state_after: no goals
Theorem: Nat.mem_properDivisors_prime_pow
File: Mathlib/NumberTheory/Divisors.lean

tactic: rw [mem_properDivisors, Nat.dvd_prime_pow pp, ← exists_and_right]
state_before: n p : ℕ
pp : Prime p
k x : ℕ
⊢ x ∈ (p ^ k).properDivisors ↔ ∃ j, ∃ (_ : j < k), x = p ^ j
state_after: n p : ℕ
pp : Prime p
k x : ℕ
⊢ (∃ x_1, (x_1 ≤ k ∧ x = p ^ x_1) ∧ x < p ^ k) ↔ ∃ j, ∃ (_ : j < k), x = p ^ j

tactic: simp only [exists_prop, and_assoc]
state_before: n p : ℕ
pp : Prime p
k x : ℕ
⊢ (∃ x_1, (x_1 ≤ k ∧ x = p ^ x_1) ∧ x < p ^ k) ↔ ∃ j, ∃ (_ : j < k), x = p ^ j
state_after: n p : ℕ
pp : Prime p
k x : ℕ
⊢ (∃ x_1 ≤ k, x = p ^ x_1 ∧ x < p ^ k) ↔ ∃ j < k, x = p ^ j

tactic: apply exists_congr
state_before: n p : ℕ
pp : Prime p
k x : ℕ
⊢ (∃ x_1 ≤ k, x = p ^ x_1 ∧ x < p ^ k) ↔ ∃ j < k, x = p ^ j
state_after: case h
n p : ℕ
pp : Prime p
k x : ℕ
⊢ ∀ (a : ℕ), a ≤ k ∧ x = p ^ a ∧ x < p ^ k ↔ a < k ∧ x = p ^ a

tactic: intro a
state_before: case h
n p : ℕ
pp : Prime p
k x : ℕ
⊢ ∀ (a : ℕ), a ≤ k ∧ x = p ^ a ∧ x < p ^ k ↔ a < k ∧ x = p ^ a
state_after: case h
n p : ℕ
pp : Prime p
k x a : ℕ
⊢ a ≤ k ∧ x = p ^ a ∧ x < p ^ k ↔ a < k ∧ x = p ^ a

tactic: constructor <;> intro h
state_before: case h
n p : ℕ
pp : Prime p
k x a : ℕ
⊢ a ≤ k ∧ x = p ^ a ∧ x < p ^ k ↔ a < k ∧ x = p ^ a
state_after: case h.mp
n p : ℕ
pp : Prime p
k x a : ℕ
h : a ≤ k ∧ x = p ^ a ∧ x < p ^ k
⊢ a < k ∧ x = p ^ a

case h.mpr
n p : ℕ
pp : Prime p
k x a : ℕ
h : a < k ∧ x = p ^ a
⊢ a ≤ k ∧ x = p ^ a ∧ x < p ^ k

tactic: rcases h with ⟨_h_left, rfl, h_right⟩
state_before: case h.mp
n p : ℕ
pp : Prime p
k x a : ℕ
h : a ≤ k ∧ x = p ^ a ∧ x < p ^ k
⊢ a < k ∧ x = p ^ a
state_after: case h.mp.intro.intro
n p : ℕ
pp : Prime p
k a : ℕ
_h_left : a ≤ k
h_right : p ^ a < p ^ k
⊢ a < k ∧ p ^ a = p ^ a

tactic: rw [Nat.pow_lt_pow_iff_right pp.one_lt] at h_right
state_before: case h.mp.intro.intro
n p : ℕ
pp : Prime p
k a : ℕ
_h_left : a ≤ k
h_right : p ^ a < p ^ k
⊢ a < k ∧ p ^ a = p ^ a
state_after: case h.mp.intro.intro
n p : ℕ
pp : Prime p
k a : ℕ
_h_left : a ≤ k
h_right : a < k
⊢ a < k ∧ p ^ a = p ^ a

tactic: exact ⟨h_right, rfl⟩
state_before: case h.mp.intro.intro
n p : ℕ
pp : Prime p
k a : ℕ
_h_left : a ≤ k
h_right : a < k
⊢ a < k ∧ p ^ a = p ^ a
state_after: no goals

tactic: rcases h with ⟨h_left, rfl⟩
state_before: case h.mpr
n p : ℕ
pp : Prime p
k x a : ℕ
h : a < k ∧ x = p ^ a
⊢ a ≤ k ∧ x = p ^ a ∧ x < p ^ k
state_after: case h.mpr.intro
n p : ℕ
pp : Prime p
k a : ℕ
h_left : a < k
⊢ a ≤ k ∧ p ^ a = p ^ a ∧ p ^ a < p ^ k

tactic: rw [Nat.pow_lt_pow_iff_right pp.one_lt]
state_before: case h.mpr.intro
n p : ℕ
pp : Prime p
k a : ℕ
h_left : a < k
⊢ a ≤ k ∧ p ^ a = p ^ a ∧ p ^ a < p ^ k
state_after: case h.mpr.intro
n p : ℕ
pp : Prime p
k a : ℕ
h_left : a < k
⊢ a ≤ k ∧ p ^ a = p ^ a ∧ a < k

tactic: simp [h_left, le_of_lt]
state_before: case h.mpr.intro
n p : ℕ
pp : Prime p
k a : ℕ
h_left : a < k
⊢ a ≤ k ∧ p ^ a = p ^ a ∧ a < k
state_after: no goals
Theorem: AlgebraicGeometry.propertyIsLocalAtTarget_of_morphismRestrict
File: Mathlib/AlgebraicGeometry/Morphisms/Basic.lean

tactic: apply hP₃ f (fun i : 𝒰.J => Scheme.Hom.opensRange (𝒰.map i)) 𝒰.iSup_opensRange
state_before: P : MorphismProperty Scheme
hP₁ : P.RespectsIso
hP₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) (U : Opens ↑↑Y.toPresheafedSpace), P f → P (f ∣_ U)
hP₃ :
  ∀ {X Y : Scheme} (f : X ⟶ Y) {ι : Type u} (U : ι → Opens ↑↑Y.toPresheafedSpace),
    iSup U = ⊤ → (∀ (i : ι), P (f ∣_ U i)) → P f
X Y : Scheme
f : X ⟶ Y
𝒰 : Y.OpenCover
h𝒰 : ∀ (i : 𝒰.J), P pullback.snd
⊢ P f
state_after: P : MorphismProperty Scheme
hP₁ : P.RespectsIso
hP₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) (U : Opens ↑↑Y.toPresheafedSpace), P f → P (f ∣_ U)
hP₃ :
  ∀ {X Y : Scheme} (f : X ⟶ Y) {ι : Type u} (U : ι → Opens ↑↑Y.toPresheafedSpace),
    iSup U = ⊤ → (∀ (i : ι), P (f ∣_ U i)) → P f
X Y : Scheme
f : X ⟶ Y
𝒰 : Y.OpenCover
h𝒰 : ∀ (i : 𝒰.J), P pullback.snd
⊢ ∀ (i : 𝒰.J), P (f ∣_ Scheme.Hom.opensRange (𝒰.map i))

tactic: simp_rw [hP₁.arrow_mk_iso_iff (morphismRestrictOpensRange f _)]
state_before: P : MorphismProperty Scheme
hP₁ : P.RespectsIso
hP₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) (U : Opens ↑↑Y.toPresheafedSpace), P f → P (f ∣_ U)
hP₃ :
  ∀ {X Y : Scheme} (f : X ⟶ Y) {ι : Type u} (U : ι → Opens ↑↑Y.toPresheafedSpace),
    iSup U = ⊤ → (∀ (i : ι), P (f ∣_ U i)) → P f
X Y : Scheme
f : X ⟶ Y
𝒰 : Y.OpenCover
h𝒰 : ∀ (i : 𝒰.J), P pullback.snd
⊢ ∀ (i : 𝒰.J), P (f ∣_ Scheme.Hom.opensRange (𝒰.map i))
state_after: P : MorphismProperty Scheme
hP₁ : P.RespectsIso
hP₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) (U : Opens ↑↑Y.toPresheafedSpace), P f → P (f ∣_ U)
hP₃ :
  ∀ {X Y : Scheme} (f : X ⟶ Y) {ι : Type u} (U : ι → Opens ↑↑Y.toPresheafedSpace),
    iSup U = ⊤ → (∀ (i : ι), P (f ∣_ U i)) → P f
X Y : Scheme
f : X ⟶ Y
𝒰 : Y.OpenCover
h𝒰 : ∀ (i : 𝒰.J), P pullback.snd
⊢ ∀ (i : 𝒰.J), P pullback.snd

tactic: exact h𝒰
state_before: P : MorphismProperty Scheme
hP₁ : P.RespectsIso
hP₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) (U : Opens ↑↑Y.toPresheafedSpace), P f → P (f ∣_ U)
hP₃ :
  ∀ {X Y : Scheme} (f : X ⟶ Y) {ι : Type u} (U : ι → Opens ↑↑Y.toPresheafedSpace),
    iSup U = ⊤ → (∀ (i : ι), P (f ∣_ U i)) → P f
X Y : Scheme
f : X ⟶ Y
𝒰 : Y.OpenCover
h𝒰 : ∀ (i : 𝒰.J), P pullback.snd
⊢ ∀ (i : 𝒰.J), P pullback.snd
state_after: no goals
Theorem: AlgebraicGeometry.genericPoint_eq_bot_of_affine
File: Mathlib/AlgebraicGeometry/FunctionField.lean

tactic: apply (genericPoint_spec (Spec R)).eq
state_before: X : Scheme
R : CommRingCat
inst✝ : IsDomain ↑R
⊢ genericPoint ↑↑(Spec R).toPresheafedSpace = ⊥
state_after: X : Scheme
R : CommRingCat
inst✝ : IsDomain ↑R
⊢ IsGenericPoint ⊥ ⊤

tactic: rw [isGenericPoint_def]
state_before: X : Scheme
R : CommRingCat
inst✝ : IsDomain ↑R
⊢ IsGenericPoint ⊥ ⊤
state_after: X : Scheme
R : CommRingCat
inst✝ : IsDomain ↑R
⊢ closure {⊥} = ⊤

tactic: rw [← PrimeSpectrum.zeroLocus_vanishingIdeal_eq_closure, PrimeSpectrum.vanishingIdeal_singleton]
state_before: X : Scheme
R : CommRingCat
inst✝ : IsDomain ↑R
⊢ closure {⊥} = ⊤
state_after: X : Scheme
R : CommRingCat
inst✝ : IsDomain ↑R
⊢ PrimeSpectrum.zeroLocus ↑⊥.asIdeal = ⊤

tactic: rw [Set.top_eq_univ, ← PrimeSpectrum.zeroLocus_singleton_zero]
state_before: X : Scheme
R : CommRingCat
inst✝ : IsDomain ↑R
⊢ PrimeSpectrum.zeroLocus ↑⊥.asIdeal = ⊤
state_after: X : Scheme
R : CommRingCat
inst✝ : IsDomain ↑R
⊢ PrimeSpectrum.zeroLocus ↑⊥.asIdeal = PrimeSpectrum.zeroLocus {0}

tactic: rfl
state_before: X : Scheme
R : CommRingCat
inst✝ : IsDomain ↑R
⊢ PrimeSpectrum.zeroLocus ↑⊥.asIdeal = PrimeSpectrum.zeroLocus {0}
state_after: no goals
Theorem: intCast_mem
File: Mathlib/Algebra/Ring/Subring/Basic.lean

tactic: simp only [← zsmul_one, zsmul_mem, one_mem]
state_before: R : Type u
S : Type v
T : Type w
inst✝¹ : Ring R
inst✝ : SetLike S R
hSR : SubringClass S R
s : S
n : ℤ
⊢ ↑n ∈ s
state_after: no goals