tasksource/leandojo huggingface dataset:
Theorem: LinearMap.subset_bipolar
File: Mathlib/Analysis/LocallyConvex/Polar.lean

tactic: rw [B.flip_apply]
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type u_3
inst✝⁴ : NormedCommRing 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜
s : Set E
x : E
hx : x ∈ s
y : F
hy : y ∈ polar B s
⊢ ‖↑(↑(flip B) y) x‖ ≤ 1

tactic: exact hy x hx
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type u_3
inst✝⁴ : NormedCommRing 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜
s : Set E
x : E
hx : x ∈ s
y : F
hy : y ∈ polar B s
⊢ ‖↑(↑B x) y‖ ≤ 1
Theorem: Subsemigroup.mem_sup_right
File: Mathlib/GroupTheory/Subsemigroup/Membership.lean

tactic: have : T ≤ S ⊔ T := le_sup_right
state_before: ι : Sort ?u.7990
M : Type u_1
A : Type ?u.7996
B : Type ?u.7999
inst✝ : Mul M
S T : Subsemigroup M
⊢ ∀ {x : M}, x ∈ T → x ∈ S ⊔ T

tactic: tauto
state_before: ι : Sort ?u.7990
M : Type u_1
A : Type ?u.7996
B : Type ?u.7999
inst✝ : Mul M
S T : Subsemigroup M
this : T ≤ S ⊔ T
⊢ ∀ {x : M}, x ∈ T → x ∈ S ⊔ T
Theorem: WithBot.unbot'_lt_iff
File: Mathlib/Order/WithBot.lean

tactic: cases a
state_before: α : Type u_1
β : Type ?u.40647
γ : Type ?u.40650
δ : Type ?u.40653
a✝ b✝ : α
inst✝ : LT α
a : WithBot α
b c : α
ha : a ≠ ⊥
⊢ unbot' b a < c ↔ a < ↑c

tactic: . rw [some_eq_coe, unbot'_coe, coe_lt_coe]
state_before: case some
α : Type u_1
β : Type ?u.40647
γ : Type ?u.40650
δ : Type ?u.40653
a b✝ : α
inst✝ : LT α
b c val✝ : α
ha : Option.some val✝ ≠ ⊥
⊢ unbot' b (Option.some val✝) < c ↔ Option.some val✝ < ↑c

tactic: exact (ha rfl).elim
state_before: case none
α : Type u_1
β : Type ?u.40647
γ : Type ?u.40650
δ : Type ?u.40653
a b✝ : α
inst✝ : LT α
b c : α
ha : none ≠ ⊥
⊢ unbot' b none < c ↔ none < ↑c

tactic: rw [some_eq_coe, unbot'_coe, coe_lt_coe]
state_before: case some
α : Type u_1
β : Type ?u.40647
γ : Type ?u.40650
δ : Type ?u.40653
a b✝ : α
inst✝ : LT α
b c val✝ : α
ha : Option.some val✝ ≠ ⊥
⊢ unbot' b (Option.some val✝) < c ↔ Option.some val✝ < ↑c
Theorem: WithSeminorms.image_isVonNBounded_iff_finset_seminorm_bounded
File: Mathlib/Analysis/LocallyConvex/WithSeminorms.lean

tactic: simp_rw [hp.isVonNBounded_iff_finset_seminorm_bounded, Set.ball_image_iff]
state_before: 𝕜 : Type u_2
𝕜₂ : Type ?u.473913
𝕝 : Type ?u.473916
𝕝₂ : Type ?u.473919
E : Type u_3
F : Type ?u.473925
G : Type u_1
ι : Type u_4
ι' : Type ?u.473934
inst✝⁴ : NontriviallyNormedField 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : Nonempty ι
p : SeminormFamily 𝕜 E ι
inst✝ : TopologicalSpace E
f : G → E
s : Set G
hp : WithSeminorms p
⊢ Bornology.IsVonNBounded 𝕜 (f '' s) ↔ ∀ (I : Finset ι), ∃ r, r > 0 ∧ ∀ (x : G), x ∈ s → ↑(Finset.sup I p) (f x) < r
Theorem: Finsupp.mapRange_zero
File: Mathlib/Data/Finsupp/Defs.lean

tactic: simp only [hf, zero_apply, mapRange_apply]
state_before: α : Type u_3
β : Type ?u.178673
γ : Type ?u.178676
ι : Type ?u.178679
M : Type u_2
M' : Type ?u.178685
N : Type u_1
P : Type ?u.178691
G : Type ?u.178694
H : Type ?u.178697
R : Type ?u.178700
S : Type ?u.178703
inst✝² : Zero M
inst✝¹ : Zero N
inst✝ : Zero P
f : M → N
hf : f 0 = 0
a : α
⊢ ↑(mapRange f hf 0) a = ↑0 a
Theorem: Ideal.quotEquivOfEq_symm
File: Mathlib/RingTheory/Ideal/Quotient.lean

tactic: ext
state_before: R✝ : Type u
inst✝¹ : CommRing R✝
I✝ : Ideal R✝
a b : R✝
S : Type v
R : Type u_1
inst✝ : CommRing R
I J : Ideal R
h : I = J
⊢ RingEquiv.symm (quotEquivOfEq h) = quotEquivOfEq (_ : J = I)

tactic: rfl
state_before: case h
R✝ : Type u
inst✝¹ : CommRing R✝
I✝ : Ideal R✝
a b : R✝
S : Type v
R : Type u_1
inst✝ : CommRing R
I J : Ideal R
h : I = J
x✝ : R ⧸ J
⊢ ↑(RingEquiv.symm (quotEquivOfEq h)) x✝ = ↑(quotEquivOfEq (_ : J = I)) x✝
Theorem: MonoidHom.apply_mnat
File: Mathlib/Algebra/GroupPower/Lemmas.lean

tactic: rw [← powersHom_symm_apply, ← powersHom_apply, Equiv.apply_symm_apply]
state_before: α : Type ?u.341364
M : Type u
N : Type v
G : Type w
H : Type x
A : Type y
B : Type z
R : Type u₁
S : Type u₂
inst✝ : Monoid M
f : Multiplicative ℕ →* M
n : Multiplicative ℕ
⊢ ↑f n = ↑f (↑Multiplicative.ofAdd 1) ^ ↑Multiplicative.toAdd n
Theorem: IsIntegralClosure.mk'_algebraMap
File: Mathlib/RingTheory/IntegralClosure.lean

tactic: rw [algebraMap_mk', ← IsScalarTower.algebraMap_apply]
state_before: R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : CommRing A
inst✝⁵ : CommRing B
inst✝⁴ : Algebra R B
inst✝³ : Algebra A B
inst✝² : IsIntegralClosure A R B
inst✝¹ : Algebra R A
inst✝ : IsScalarTower R A B
x : R
h : optParam (IsIntegral R (↑(algebraMap R B) x)) (_ : IsIntegral R (↑(algebraMap R ((fun x => B) x)) x))
⊢ ↑(algebraMap A B) (mk' A (↑(algebraMap R B) x) h) = ↑(algebraMap A B) (↑(algebraMap R A) x)
Theorem: Filter.disjoint_principal_left
File: Mathlib/Order/Filter/Bases.lean

tactic: rw [disjoint_comm, disjoint_principal_right]
state_before: α : Type u_1
β : Type ?u.56617
γ : Type ?u.56620
ι : Sort ?u.56623
ι' : Sort ?u.56626
l l' : Filter α
p : ι → Prop
s✝ : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
f : Filter α
s : Set α
⊢ Disjoint (𝓟 s) f ↔ sᶜ ∈ f
Theorem: ContinuousLinearEquiv.comp_right_differentiableAt_iff
File: Mathlib/Analysis/Calculus/FDeriv/Equiv.lean

tactic: simp only [← differentiableWithinAt_univ, ← iso.comp_right_differentiableWithinAt_iff,
  preimage_univ]
state_before: 𝕜 : Type u_1
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type u_4
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type u_3
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type ?u.169117
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
f✝ f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x✝ : E
s t : Set E
L L₁ L₂ : Filter E
iso : E ≃L[𝕜] F
f : F → G
x : E
⊢ DifferentiableAt 𝕜 (f ∘ ↑iso) x ↔ DifferentiableAt 𝕜 f (↑iso x)
Theorem: Ideal.exists_minimalPrimes_comap_eq
File: Mathlib/RingTheory/Ideal/MinimalPrime.lean

tactic: obtain ⟨p', h₁, h₂, h₃⟩ := Ideal.exists_comap_eq_of_mem_minimalPrimes f p H
state_before: R : Type u_2
S : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ Ideal.minimalPrimes (comap f I)
⊢ ∃ p', p' ∈ Ideal.minimalPrimes I ∧ comap f p' = p

tactic: obtain ⟨q, hq, hq'⟩ := Ideal.exists_minimalPrimes_le h₂
state_before: case intro.intro.intro
R : Type u_2
S : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ Ideal.minimalPrimes (comap f I)
p' : Ideal S
h₁ : IsPrime p'
h₂ : I ≤ p'
h₃ : comap f p' = p
⊢ ∃ p', p' ∈ Ideal.minimalPrimes I ∧ comap f p' = p

tactic: refine' ⟨q, hq, Eq.symm _⟩
state_before: case intro.intro.intro.intro.intro
R : Type u_2
S : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ Ideal.minimalPrimes (comap f I)
p' : Ideal S
h₁ : IsPrime p'
h₂ : I ≤ p'
h₃ : comap f p' = p
q : Ideal S
hq : q ∈ Ideal.minimalPrimes I
hq' : q ≤ p'
⊢ ∃ p', p' ∈ Ideal.minimalPrimes I ∧ comap f p' = p

tactic: have := hq.1.1
state_before: case intro.intro.intro.intro.intro
R : Type u_2
S : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ Ideal.minimalPrimes (comap f I)
p' : Ideal S
h₁ : IsPrime p'
h₂ : I ≤ p'
h₃ : comap f p' = p
q : Ideal S
hq : q ∈ Ideal.minimalPrimes I
hq' : q ≤ p'
⊢ p = comap f q

tactic: have := (Ideal.comap_mono hq').trans_eq h₃
state_before: case intro.intro.intro.intro.intro
R : Type u_2
S : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ Ideal.minimalPrimes (comap f I)
p' : Ideal S
h₁ : IsPrime p'
h₂ : I ≤ p'
h₃ : comap f p' = p
q : Ideal S
hq : q ∈ Ideal.minimalPrimes I
hq' : q ≤ p'
this : IsPrime q
⊢ p = comap f q

tactic: exact (H.2 ⟨inferInstance, Ideal.comap_mono hq.1.2⟩ this).antisymm this
state_before: case intro.intro.intro.intro.intro
R : Type u_2
S : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ Ideal.minimalPrimes (comap f I)
p' : Ideal S
h₁ : IsPrime p'
h₂ : I ≤ p'
h₃ : comap f p' = p
q : Ideal S
hq : q ∈ Ideal.minimalPrimes I
hq' : q ≤ p'
this✝ : IsPrime q
this : comap f q ≤ p
⊢ p = comap f q
Theorem: HasStrictDerivAt.const_mul
File: Mathlib/Analysis/Calculus/Deriv/Mul.lean

tactic: convert (hasStrictDerivAt_const _ _).mul hd using 1
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type ?u.270691
𝔸 : Type u_1
inst✝³ : NormedField 𝕜'
inst✝² : NormedRing 𝔸
inst✝¹ : NormedAlgebra 𝕜 𝕜'
inst✝ : NormedAlgebra 𝕜 𝔸
c✝ d : 𝕜 → 𝔸
c' d' : 𝔸
u v : 𝕜 → 𝕜'
c : 𝔸
hd : HasStrictDerivAt d d' x
⊢ HasStrictDerivAt (fun y => c * d y) (c * d') x

tactic: rw [zero_mul, zero_add]
state_before: case h.e'_7
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type ?u.270691
𝔸 : Type u_1
inst✝³ : NormedField 𝕜'
inst✝² : NormedRing 𝔸
inst✝¹ : NormedAlgebra 𝕜 𝕜'
inst✝ : NormedAlgebra 𝕜 𝔸
c✝ d : 𝕜 → 𝔸
c' d' : 𝔸
u v : 𝕜 → 𝕜'
c : 𝔸
hd : HasStrictDerivAt d d' x
⊢ c * d' = 0 * d x + c * d'
Theorem: Set.isUnit_iff_singleton
File: Mathlib/Data/Set/Pointwise/Basic.lean

tactic: simp only [isUnit_iff, Group.isUnit, and_true_iff]
state_before: F : Type ?u.120690
α : Type u_1
β : Type ?u.120696
γ : Type ?u.120699
inst✝ : Group α
s t : Set α
a b : α
⊢ IsUnit s ↔ ∃ a, s = {a}
Theorem: String.Iterator.ValidFor.valid
File: Std/Data/String/Lemmas.lean

tactic: simpa [List.reverseAux_eq] using Pos.Valid.mk l.reverse r
state_before: l r : List Char
⊢ Valid { s := { data := List.reverseAux l r }, i := { byteIdx := utf8Len l } }
Theorem: Metric.dist_le_infDist_add_diam
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: rw [infDist, diam, dist_edist]
state_before: ι : Sort ?u.63481
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
hs : Bounded s
hy : y ∈ s
⊢ dist x y ≤ infDist x s + diam s

tactic: exact toReal_le_add (edist_le_infEdist_add_ediam hy) (infEdist_ne_top ⟨y, hy⟩) hs.ediam_ne_top
state_before: ι : Sort ?u.63481
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
hs : Bounded s
hy : y ∈ s
⊢ ENNReal.toReal (edist x y) ≤ ENNReal.toReal (infEdist x s) + ENNReal.toReal (EMetric.diam s)
Theorem: LinearEquiv.arrowCongr_comp
File: Mathlib/LinearAlgebra/Basic.lean

tactic: ext
state_before: R : Type u_4
R₁ : Type ?u.2165977
R₂ : Type ?u.2165980
R₃ : Type ?u.2165983
R₄ : Type ?u.2165986
S : Type ?u.2165989
K : Type ?u.2165992
K₂ : Type ?u.2165995
M : Type u_5
M' : Type ?u.2166001
M₁ : Type ?u.2166004
M₂ : Type u_6
M₃ : Type u_7
M₄ : Type ?u.2166013
N✝ : Type ?u.2166016
N₂✝ : Type ?u.2166019
ι : Type ?u.2166022
V : Type ?u.2166025
V₂ : Type ?u.2166028
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_1
N₂ : Type u_2
N₃ : Type u_3
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₃
⊢ ↑(arrowCongr e₁ e₃) (LinearMap.comp g f) = LinearMap.comp (↑(arrowCongr e₂ e₃) g) (↑(arrowCongr e₁ e₂) f)

tactic: simp only [symm_apply_apply, arrowCongr_apply, LinearMap.comp_apply]
state_before: case h
R : Type u_4
R₁ : Type ?u.2165977
R₂ : Type ?u.2165980
R₃ : Type ?u.2165983
R₄ : Type ?u.2165986
S : Type ?u.2165989
K : Type ?u.2165992
K₂ : Type ?u.2165995
M : Type u_5
M' : Type ?u.2166001
M₁ : Type ?u.2166004
M₂ : Type u_6
M₃ : Type u_7
M₄ : Type ?u.2166013
N✝ : Type ?u.2166016
N₂✝ : Type ?u.2166019
ι : Type ?u.2166022
V : Type ?u.2166025
V₂ : Type ?u.2166028
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_1
N₂ : Type u_2
N₃ : Type u_3
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
⊢ ↑(↑(arrowCongr e₁ e₃) (LinearMap.comp g f)) x✝ = ↑(LinearMap.comp (↑(arrowCongr e₂ e₃) g) (↑(arrowCongr e₁ e₂) f)) x✝
Theorem: Associates.FactorSet.prod_eq_zero_iff
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

tactic: induction p using WithTop.recTopCoe
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Nontrivial α
p : FactorSet α
⊢ prod p = 0 ↔ p = ⊤

tactic: . rw [prod_coe, Multiset.prod_eq_zero_iff, Multiset.mem_map, eq_false WithTop.coe_ne_top,
    iff_false_iff, not_exists]
  exact fun a => not_and_of_not_right _ a.prop.ne_zero
state_before: case coe
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Nontrivial α
a✝ : Multiset { a // Irreducible a }
⊢ prod ↑a✝ = 0 ↔ ↑a✝ = ⊤

tactic: simp only [iff_self_iff, eq_self_iff_true, Associates.prod_top]
state_before: case top
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Nontrivial α
⊢ prod ⊤ = 0 ↔ ⊤ = ⊤

tactic: rw [prod_coe, Multiset.prod_eq_zero_iff, Multiset.mem_map, eq_false WithTop.coe_ne_top,
  iff_false_iff, not_exists]
state_before: case coe
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Nontrivial α
a✝ : Multiset { a // Irreducible a }
⊢ prod ↑a✝ = 0 ↔ ↑a✝ = ⊤

tactic: exact fun a => not_and_of_not_right _ a.prop.ne_zero
state_before: case coe
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : Nontrivial α
a✝ : Multiset { a // Irreducible a }
⊢ ∀ (x : { a // Irreducible a }), ¬(x ∈ a✝ ∧ ↑x = 0)
Theorem: AddAction.stabilizer_vadd_eq_stabilizer_map_conj
File: Mathlib/GroupTheory/GroupAction/Basic.lean

tactic: ext h
state_before: α : Type u
β : Type v
γ : Type w
inst✝¹ : AddGroup α
inst✝ : AddAction α β
g : α
x : β
⊢ stabilizer α (g +ᵥ x) = AddSubgroup.map (AddEquiv.toAddMonoidHom (↑AddAut.conj g)) (stabilizer α x)

tactic: rw [mem_stabilizer_iff, ← vadd_left_cancel_iff (-g), vadd_vadd, vadd_vadd, vadd_vadd,
  add_left_neg, zero_vadd, ← mem_stabilizer_iff, AddSubgroup.mem_map_equiv,
  AddAut.conj_symm_apply]
state_before: case h
α : Type u
β : Type v
γ : Type w
inst✝¹ : AddGroup α
inst✝ : AddAction α β
g : α
x : β
h : α
⊢ h ∈ stabilizer α (g +ᵥ x) ↔ h ∈ AddSubgroup.map (AddEquiv.toAddMonoidHom (↑AddAut.conj g)) (stabilizer α x)
Theorem: MvPolynomial.eval₂_eta
File: Mathlib/Data/MvPolynomial/Basic.lean

tactic: apply MvPolynomial.induction_on p <;>
  simp (config := { contextual := true }) [eval₂_add, eval₂_mul]
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
f : R →+* S₁
g : σ → S₁
p : MvPolynomial σ R
⊢ eval₂ C X p = p
Theorem: Homotopy.prevD_succ_cochainComplex
File: Mathlib/Algebra/Homology/Homotopy.lean

tactic: dsimp [prevD]
state_before: ι : Type ?u.373772
V : Type u
inst✝¹ : Category V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f✝ g : C ⟶ D
h k : D ⟶ E
i✝ : ι
P Q : CochainComplex V ℕ
f : (i j : ℕ) → X P i ⟶ X Q j
i : ℕ
⊢ ↑(prevD (i + 1)) f = f (i + 1) i ≫ d Q i (i + 1)

tactic: have : (ComplexShape.up ℕ).prev (i + 1) = i := CochainComplex.prev_nat_succ i
state_before: ι : Type ?u.373772
V : Type u
inst✝¹ : Category V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f✝ g : C ⟶ D
h k : D ⟶ E
i✝ : ι
P Q : CochainComplex V ℕ
f : (i j : ℕ) → X P i ⟶ X Q j
i : ℕ
⊢ f (i + 1) (ComplexShape.prev (ComplexShape.up ℕ) (i + 1)) ≫
      d Q (ComplexShape.prev (ComplexShape.up ℕ) (i + 1)) (i + 1) =
    f (i + 1) i ≫ d Q i (i + 1)

tactic: congr 2
state_before: ι : Type ?u.373772
V : Type u
inst✝¹ : Category V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f✝ g : C ⟶ D
h k : D ⟶ E
i✝ : ι
P Q : CochainComplex V ℕ
f : (i j : ℕ) → X P i ⟶ X Q j
i : ℕ
this : ComplexShape.prev (ComplexShape.up ℕ) (i + 1) = i
⊢ f (i + 1) (ComplexShape.prev (ComplexShape.up ℕ) (i + 1)) ≫
      d Q (ComplexShape.prev (ComplexShape.up ℕ) (i + 1)) (i + 1) =
    f (i + 1) i ≫ d Q i (i + 1)
Theorem: RingEquiv.map_eq_neg_one_iff
File: Mathlib/Algebra/Ring/Equiv.lean

tactic: rw [← neg_eq_iff_eq_neg, ← neg_eq_iff_eq_neg, ← map_neg, RingEquiv.map_eq_one_iff]
state_before: F : Type ?u.77751
α : Type ?u.77754
β : Type ?u.77757
R : Type u_2
S : Type u_1
S' : Type ?u.77766
inst✝¹ : NonAssocRing R
inst✝ : NonAssocRing S
f : R ≃+* S
x✝ y x : R
⊢ ↑f x = -1 ↔ x = -1
Theorem: CategoryTheory.Limits.kernelIsoOfEq_hom_comp_ι
File: Mathlib/CategoryTheory/Limits/Shapes/Kernels.lean

tactic: cases h
state_before: C : Type u
inst✝⁴ : Category C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasKernel f✝
f g : X ⟶ Y
inst✝¹ : HasKernel f
inst✝ : HasKernel g
h : f = g
⊢ (kernelIsoOfEq h).hom ≫ kernel.ι g = kernel.ι f

tactic: simp
state_before: case refl
C : Type u
inst✝⁴ : Category C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasKernel f✝
f : X ⟶ Y
inst✝¹ inst✝ : HasKernel f
⊢ (kernelIsoOfEq (_ : f = f)).hom ≫ kernel.ι f = kernel.ι f
Theorem: isAntichain_and_greatest_iff
File: Mathlib/Order/Antichain.lean

tactic: rintro rfl
state_before: α : Type u_1
β : Type ?u.11422
r r₁ r₂ : α → α → Prop
r' : β → β → Prop
s t : Set α
a b : α
inst✝ : Preorder α
⊢ s = {a} → IsAntichain (fun x x_1 => x ≤ x_1) s ∧ IsGreatest s a

tactic: exact ⟨isAntichain_singleton _ _, isGreatest_singleton⟩
state_before: α : Type u_1
β : Type ?u.11422
r r₁ r₂ : α → α → Prop
r' : β → β → Prop
t : Set α
a b : α
inst✝ : Preorder α
⊢ IsAntichain (fun x x_1 => x ≤ x_1) {a} ∧ IsGreatest {a} a
Theorem: CategoryTheory.IsSeparating.isDetecting
File: Mathlib/CategoryTheory/Generator.lean

tactic: intro X Y f hf
state_before: C : Type u₁
inst✝² : Category C
D : Type u₂
inst✝¹ : Category D
inst✝ : Balanced C
𝒢 : Set C
h𝒢 : IsSeparating 𝒢
⊢ IsDetecting 𝒢

tactic: refine'
  (isIso_iff_mono_and_epi _).2 ⟨⟨fun g h hgh => h𝒢 _ _ fun G hG i => _⟩, ⟨fun g h hgh => _⟩⟩
state_before: C : Type u₁
inst✝² : Category C
D : Type u₂
inst✝¹ : Category D
inst✝ : Balanced C
𝒢 : Set C
h𝒢 : IsSeparating 𝒢
X Y : C
f : X ⟶ Y
hf : ∀ (G : C), G ∈ 𝒢 → ∀ (h : G ⟶ Y), ∃! h', h' ≫ f = h
⊢ IsIso f

tactic: obtain ⟨t, -, ht⟩ := hf G hG (i ≫ g ≫ f)
state_before: case refine'_1
C : Type u₁
inst✝² : Category C
D : Type u₂
inst✝¹ : Category D
inst✝ : Balanced C
𝒢 : Set C
h𝒢 : IsSeparating 𝒢
X Y : C
f : X ⟶ Y
hf : ∀ (G : C), G ∈ 𝒢 → ∀ (h : G ⟶ Y), ∃! h', h' ≫ f = h
Z✝ : C
g h : Z✝ ⟶ X
hgh : g ≫ f = h ≫ f
G : C
hG : G ∈ 𝒢
i : G ⟶ Z✝
⊢ i ≫ g = i ≫ h

tactic: rw [ht (i ≫ g) (Category.assoc _ _ _), ht (i ≫ h) (hgh.symm ▸ Category.assoc _ _ _)]
state_before: case refine'_1.intro.intro
C : Type u₁
inst✝² : Category C
D : Type u₂
inst✝¹ : Category D
inst✝ : Balanced C
𝒢 : Set C
h𝒢 : IsSeparating 𝒢
X Y : C
f : X ⟶ Y
hf : ∀ (G : C), G ∈ 𝒢 → ∀ (h : G ⟶ Y), ∃! h', h' ≫ f = h
Z✝ : C
g h : Z✝ ⟶ X
hgh : g ≫ f = h ≫ f
G : C
hG : G ∈ 𝒢
i : G ⟶ Z✝
t : G ⟶ X
ht : ∀ (y : G ⟶ X), (fun h' => h' ≫ f = i ≫ g ≫ f) y → y = t
⊢ i ≫ g = i ≫ h

tactic: refine' h𝒢 _ _ fun G hG i => _
state_before: case refine'_2
C : Type u₁
inst✝² : Category C
D : Type u₂
inst✝¹ : Category D
inst✝ : Balanced C
𝒢 : Set C
h𝒢 : IsSeparating 𝒢
X Y : C
f : X ⟶ Y
hf : ∀ (G : C), G ∈ 𝒢 → ∀ (h : G ⟶ Y), ∃! h', h' ≫ f = h
Z✝ : C
g h : Y ⟶ Z✝
hgh : f ≫ g = f ≫ h
⊢ g = h

tactic: obtain ⟨t, rfl, -⟩ := hf G hG i
state_before: case refine'_2
C : Type u₁
inst✝² : Category C
D : Type u₂
inst✝¹ : Category D
inst✝ : Balanced C
𝒢 : Set C
h𝒢 : IsSeparating 𝒢
X Y : C
f : X ⟶ Y
hf : ∀ (G : C), G ∈ 𝒢 → ∀ (h : G ⟶ Y), ∃! h', h' ≫ f = h
Z✝ : C
g h : Y ⟶ Z✝
hgh : f ≫ g = f ≫ h
G : C
hG : G ∈ 𝒢
i : G ⟶ Y
⊢ i ≫ g = i ≫ h

tactic: rw [Category.assoc, hgh, Category.assoc]
state_before: case refine'_2.intro.intro
C : Type u₁
inst✝² : Category C
D : Type u₂
inst✝¹ : Category D
inst✝ : Balanced C
𝒢 : Set C
h𝒢 : IsSeparating 𝒢
X Y : C
f : X ⟶ Y
hf : ∀ (G : C), G ∈ 𝒢 → ∀ (h : G ⟶ Y), ∃! h', h' ≫ f = h
Z✝ : C
g h : Y ⟶ Z✝
hgh : f ≫ g = f ≫ h
G : C
hG : G ∈ 𝒢
t : G ⟶ X
⊢ (t ≫ f) ≫ g = (t ≫ f) ≫ h
Theorem: Set.singleton_subset_singleton
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 : Set α
⊢ {a} ⊆ {b} ↔ a = b
Theorem: Ideal.le_of_pow_le_prime
File: Mathlib/RingTheory/DedekindDomain/Ideal.lean

tactic: by_cases hP0 : P = ⊥
state_before: R : Type u_1
A : Type ?u.1186416
K : Type ?u.1186419
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
I P : Ideal R
hP : IsPrime P
n : ℕ
h : I ^ n ≤ P
⊢ I ≤ P

tactic: rw [← Ideal.dvd_iff_le] at h ⊢
state_before: case neg
R : Type u_1
A : Type ?u.1186416
K : Type ?u.1186419
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
I P : Ideal R
hP : IsPrime P
n : ℕ
h : I ^ n ≤ P
hP0 : ¬P = ⊥
⊢ I ≤ P

tactic: exact ((Ideal.prime_iff_isPrime hP0).mpr hP).dvd_of_dvd_pow h
state_before: case neg
R : Type u_1
A : Type ?u.1186416
K : Type ?u.1186419
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
I P : Ideal R
hP : IsPrime P
n : ℕ
h : P ∣ I ^ n
hP0 : ¬P = ⊥
⊢ P ∣ I

tactic: simp only [hP0, le_bot_iff] at h ⊢
state_before: case pos
R : Type u_1
A : Type ?u.1186416
K : Type ?u.1186419
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
I P : Ideal R
hP : IsPrime P
n : ℕ
h : I ^ n ≤ P
hP0 : P = ⊥
⊢ I ≤ P

tactic: exact pow_eq_zero h
state_before: case pos
R : Type u_1
A : Type ?u.1186416
K : Type ?u.1186419
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
I P : Ideal R
hP : IsPrime P
n : ℕ
hP0 : P = ⊥
h : I ^ n = ⊥
⊢ I = ⊥
Theorem: List.product_eq_productTR
File: Std/Data/List/Basic.lean

tactic: funext α β l₁ l₂
state_before: ⊢ @product = @productTR

tactic: simp [product, productTR]
state_before: case h.h.h.h
α : Type u_2
β : Type u_1
l₁ : List α
l₂ : List β
⊢ product l₁ l₂ = productTR l₁ l₂

tactic: rw [Array.foldl_data_eq_bind]
state_before: case h.h.h.h
α : Type u_2
β : Type u_1
l₁ : List α
l₂ : List β
⊢ (List.bind l₁ fun a => map (Prod.mk a) l₂) =
    (foldl (fun acc a => foldl (fun acc b => Array.push acc (a, b)) acc l₂) #[] l₁).data

tactic: rfl
state_before: case h.h.h.h
α : Type u_2
β : Type u_1
l₁ : List α
l₂ : List β
⊢ (List.bind l₁ fun a => map (Prod.mk a) l₂) = #[].data ++ List.bind l₁ ?h.h.h.h.G

case h.h.h.h.G
α : Type u_2
β : Type u_1
l₁ : List α
l₂ : List β
⊢ α → List (α × β)

case h.h.h.h.H
α : Type u_2
β : Type u_1
l₁ : List α
l₂ : List β
⊢ ∀ (acc : Array (α × β)) (a : α), (foldl (fun acc b => Array.push acc (a, b)) acc l₂).data = acc.data ++ ?h.h.h.h.G a

tactic: intros
state_before: case h.h.h.h.H
α : Type u_2
β : Type u_1
l₁ : List α
l₂ : List β
⊢ ∀ (acc : Array (α × β)) (a : α),
    (foldl (fun acc b => Array.push acc (a, b)) acc l₂).data = acc.data ++ map (Prod.mk a) l₂

tactic: apply Array.foldl_data_eq_map
state_before: case h.h.h.h.H
α : Type u_2
β : Type u_1
l₁ : List α
l₂ : List β
acc✝ : Array (α × β)
a✝ : α
⊢ (foldl (fun acc b => Array.push acc (a✝, b)) acc✝ l₂).data = acc✝.data ++ map (Prod.mk a✝) l₂
Theorem: TopCat.Presheaf.Pushforward.id_inv_app'
File: Mathlib/Topology/Sheaves/Presheaf.lean

tactic: dsimp [id]
state_before: C : Type u
inst✝ : Category C
X : TopCat
ℱ : Presheaf C X
U : Set ↑X
p : IsOpen U
⊢ (id ℱ).inv.app { carrier := U, is_open' := p }.op = ℱ.map (𝟙 { carrier := U, is_open' := p }.op)

tactic: simp [CategoryStruct.comp]
state_before: C : Type u
inst✝ : Category C
X : TopCat
ℱ : Presheaf C X
U : Set ↑X
p : IsOpen U
⊢ ((Functor.leftUnitor ℱ).inv ≫ whiskerRight (NatTrans.op (Opens.mapId X).hom) ℱ).app
      { carrier := U, is_open' := p }.op =
    ℱ.map (𝟙 { carrier := U, is_open' := p }.op)