tasksource/leandojo huggingface dataset:
Theorem: disjoint_ball_ball_iff
File: Mathlib/Analysis/NormedSpace/Pointwise.lean

tactic: refine' ⟨fun h => le_of_not_lt fun hxy => _, ball_disjoint_ball⟩
state_before: 𝕜 : Type ?u.216099
E : Type u_1
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x y z : E
δ ε : ℝ
hδ : 0 < δ
hε : 0 < ε
⊢ Disjoint (ball x δ) (ball y ε) ↔ δ + ε ≤ dist x y

tactic: rw [add_comm] at hxy
state_before: 𝕜 : Type ?u.216099
E : Type u_1
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x y z : E
δ ε : ℝ
hδ : 0 < δ
hε : 0 < ε
h : Disjoint (ball x δ) (ball y ε)
hxy : dist x y < δ + ε
⊢ False

tactic: obtain ⟨z, hxz, hzy⟩ := exists_dist_lt_lt hδ hε hxy
state_before: 𝕜 : Type ?u.216099
E : Type u_1
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x y z : E
δ ε : ℝ
hδ : 0 < δ
hε : 0 < ε
h : Disjoint (ball x δ) (ball y ε)
hxy : dist x y < ε + δ
⊢ False

tactic: rw [dist_comm] at hxz
state_before: case intro.intro
𝕜 : Type ?u.216099
E : Type u_1
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x y z✝ : E
δ ε : ℝ
hδ : 0 < δ
hε : 0 < ε
h : Disjoint (ball x δ) (ball y ε)
hxy : dist x y < ε + δ
z : E
hxz : dist x z < δ
hzy : dist z y < ε
⊢ False

tactic: exact h.le_bot ⟨hxz, hzy⟩
state_before: case intro.intro
𝕜 : Type ?u.216099
E : Type u_1
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x y z✝ : E
δ ε : ℝ
hδ : 0 < δ
hε : 0 < ε
h : Disjoint (ball x δ) (ball y ε)
hxy : dist x y < ε + δ
z : E
hxz : dist z x < δ
hzy : dist z y < ε
⊢ False
Theorem: Ordinal.sup_eq_sup
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: simp
state_before: α : Type ?u.306687
β : Type ?u.306690
γ : Type ?u.306693
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι ι' : Type u
r : ι → ι → Prop
r' : ι' → ι' → Prop
inst✝¹ : IsWellOrder ι r
inst✝ : IsWellOrder ι' r'
o : Ordinal
ho : type r = o
ho' : type r' = o
f : (a : Ordinal) → a < o → Ordinal
⊢ range (familyOfBFamily' r ho f) = range (familyOfBFamily' r' ho' f)
Theorem: SimpleGraph.Reachable.dist_eq_zero_iff
File: Mathlib/Combinatorics/SimpleGraph/Metric.lean

tactic: simp [hr]
state_before: V : Type u_1
G : SimpleGraph V
u v : V
hr : Reachable G u v
⊢ dist G u v = 0 ↔ u = v
Theorem: Metric.infEdist_le_infEdist_cthickening_add
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: refine' le_of_forall_lt' fun r h => _
state_before: ι : Sort ?u.150279
α : Type u
β : Type v
inst✝ : PseudoEMetricSpace α
δ ε : ℝ
s t : Set α
x : α
⊢ infEdist x s ≤ infEdist x (cthickening δ s) + ENNReal.ofReal δ

tactic: simp_rw [← lt_tsub_iff_right, infEdist_lt_iff, mem_cthickening_iff] at h
state_before: ι : Sort ?u.150279
α : Type u
β : Type v
inst✝ : PseudoEMetricSpace α
δ ε : ℝ
s t : Set α
x : α
r : ℝ≥0∞
h : infEdist x (cthickening δ s) + ENNReal.ofReal δ < r
⊢ infEdist x s < r

tactic: obtain ⟨y, hy, hxy⟩ := h
state_before: ι : Sort ?u.150279
α : Type u
β : Type v
inst✝ : PseudoEMetricSpace α
δ ε : ℝ
s t : Set α
x : α
r : ℝ≥0∞
h : ∃ y, infEdist y s ≤ ENNReal.ofReal δ ∧ edist x y < r - ENNReal.ofReal δ
⊢ infEdist x s < r

tactic: exact infEdist_le_edist_add_infEdist.trans_lt
  ((ENNReal.add_lt_add_of_lt_of_le (hy.trans_lt ENNReal.ofReal_lt_top).ne hxy hy).trans_eq
    (tsub_add_cancel_of_le <| le_self_add.trans (lt_tsub_iff_left.1 hxy).le))
state_before: case intro.intro
ι : Sort ?u.150279
α : Type u
β : Type v
inst✝ : PseudoEMetricSpace α
δ ε : ℝ
s t : Set α
x : α
r : ℝ≥0∞
y : α
hy : infEdist y s ≤ ENNReal.ofReal δ
hxy : edist x y < r - ENNReal.ofReal δ
⊢ infEdist x s < r
Theorem: WittVector.teichmuller_zero
File: Mathlib/RingTheory/WittVector/Teichmuller.lean

tactic: rw [zero_coeff]
state_before: case h.succ
p : ℕ
R : Type u_1
S : Type ?u.163480
hp : Fact (Nat.Prime p)
inst✝¹ : CommRing R
inst✝ : CommRing S
n✝ : ℕ
⊢ coeff (↑(teichmuller p) 0) (Nat.succ n✝) = coeff 0 (Nat.succ n✝)

tactic: rfl
state_before: case h.succ
p : ℕ
R : Type u_1
S : Type ?u.163480
hp : Fact (Nat.Prime p)
inst✝¹ : CommRing R
inst✝ : CommRing S
n✝ : ℕ
⊢ coeff (↑(teichmuller p) 0) (Nat.succ n✝) = 0
Theorem: Complex.cos_eq_cos_iff
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Complex.lean

tactic: rw [cos_sub_cos]
state_before: x y : ℂ
⊢ cos x - cos y = 0 ↔ -2 * sin ((x + y) / 2) * sin ((x - y) / 2) = 0

tactic: simp [(by norm_num : (2 : ℂ) ≠ 0)]
state_before: x y : ℂ
⊢ -2 * sin ((x + y) / 2) * sin ((x - y) / 2) = 0 ↔ sin ((x + y) / 2) = 0 ∨ sin ((x - y) / 2) = 0

tactic: norm_num
state_before: x y : ℂ
⊢ 2 ≠ 0

tactic: apply or_congr <;>
  field_simp [sin_eq_zero_iff, (by norm_num : -(2 : ℂ) ≠ 0), eq_sub_iff_add_eq',
    sub_eq_iff_eq_add, mul_comm (2 : ℂ), mul_right_comm _ (2 : ℂ)]
state_before: x y : ℂ
⊢ sin ((x - y) / 2) = 0 ∨ sin ((x + y) / 2) = 0 ↔ (∃ k, y = 2 * ↑k * ↑π + x) ∨ ∃ k, y = 2 * ↑k * ↑π - x

tactic: norm_num
state_before: x y : ℂ
⊢ -2 ≠ 0

tactic: rintro ⟨k, rfl⟩
state_before: case h₁.mpr
x y : ℂ
⊢ (∃ k, y = ↑k * ↑π * 2 + x) → ∃ k, x = ↑k * ↑π * 2 + y

tactic: use -k
state_before: case h₁.mpr.intro
x : ℂ
k : ℤ
⊢ ∃ k_1, x = ↑k_1 * ↑π * 2 + (↑k * ↑π * 2 + x)

tactic: simp
state_before: case h₁.mpr.intro
x : ℂ
k : ℤ
⊢ x = ↑(-k) * ↑π * 2 + (↑k * ↑π * 2 + x)
Theorem: IsSelfAdjoint.div
File: Mathlib/Algebra/Star/SelfAdjoint.lean

tactic: simp only [isSelfAdjoint_iff, star_div', hx.star_eq, hy.star_eq]
state_before: R : Type u_1
A : Type ?u.52269
inst✝¹ : Semifield R
inst✝ : StarRing R
x y : R
hx : IsSelfAdjoint x
hy : IsSelfAdjoint y
⊢ IsSelfAdjoint (x / y)
Theorem: List.getLast_append
File: Std/Data/List/Lemmas.lean

tactic: simp [getLast_cons' _ fun H => cons_ne_nil _ _ (append_eq_nil.1 H).2, getLast_append t]
state_before: α : Type u_1
a✝ a : α
t : List α
h : a :: t ++ [a✝] ≠ []
⊢ getLast (a :: t ++ [a✝]) h = a✝
Theorem: CategoryTheory.Adjunction.CoreHomEquiv.homEquiv_naturality_left_aux
File: Mathlib/CategoryTheory/Adjunction/Basic.lean

tactic: rw [← homEquiv_naturality_right, ← Equiv.eq_symm_apply]
state_before: C : Type u₁
inst✝¹ : Category C
D : Type u₂
inst✝ : Category D
F : C ⥤ D
G : D ⥤ C
adj : CoreHomEquiv F G
X' X : C
Y Y' : D
f : X' ⟶ X
g : F.obj X ⟶ Y
⊢ ↑(homEquiv adj X' (F.obj X)) (F.map f) ≫ G.map g = f ≫ ↑(homEquiv adj X Y) g

tactic: simp
state_before: C : Type u₁
inst✝¹ : Category C
D : Type u₂
inst✝ : Category D
F : C ⥤ D
G : D ⥤ C
adj : CoreHomEquiv F G
X' X : C
Y Y' : D
f : X' ⟶ X
g : F.obj X ⟶ Y
⊢ F.map f ≫ g = ↑(homEquiv adj X' Y).symm (f ≫ ↑(homEquiv adj X Y) g)
Theorem: hensels_lemma
File: Mathlib/NumberTheory/Padics/Hensel.lean

tactic: exact ⟨soln_gen hnorm, eval_soln hnorm,
  soln_dist_to_a_lt_deriv hnorm ha, soln_deriv_norm hnorm, fun z => soln_unique hnorm ha z⟩
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
F : Polynomial ℤ_[p]
a : ℤ_[p]
hnorm : ‖Polynomial.eval a F‖ < ‖Polynomial.eval a (↑Polynomial.derivative F)‖ ^ 2
ha : ¬Polynomial.eval a F = 0
⊢ ∃ z,
    Polynomial.eval z F = 0 ∧
      ‖z - a‖ < ‖Polynomial.eval a (↑Polynomial.derivative F)‖ ∧
        ‖Polynomial.eval z (↑Polynomial.derivative F)‖ = ‖Polynomial.eval a (↑Polynomial.derivative F)‖ ∧
          ∀ (z' : ℤ_[p]), Polynomial.eval z' F = 0 → ‖z' - a‖ < ‖Polynomial.eval a (↑Polynomial.derivative F)‖ → z' = z
Theorem: CategoryTheory.Over.w
File: Mathlib/CategoryTheory/Over.lean

tactic: have := f.w
state_before: T : Type u₁
inst✝ : Category T
X : T
A B : Over X
f : A ⟶ B
⊢ f.left ≫ B.hom = A.hom

tactic: aesop_cat
state_before: T : Type u₁
inst✝ : Category T
X : T
A B : Over X
f : A ⟶ B
this : (𝟭 T).map f.left ≫ B.hom = A.hom ≫ (Functor.fromPUnit X).map f.right
⊢ f.left ≫ B.hom = A.hom
Theorem: RingQuot.Rel.neg
File: Mathlib/Algebra/RingQuot.lean

tactic: simp only [neg_eq_neg_one_mul a, neg_eq_neg_one_mul b, Rel.mul_right h]
state_before: R✝ : Type u₁
inst✝⁴ : Semiring R✝
S : Type u₂
inst✝³ : CommSemiring S
A : Type u₃
inst✝² : Semiring A
inst✝¹ : Algebra S A
R : Type u₁
inst✝ : Ring R
r : R → R → Prop
a b : R
h : Rel r a b
⊢ Rel r (-a) (-b)
Theorem: Ordinal.apply_le_nfpFamily
File: Mathlib/SetTheory/Ordinal/FixedPoint.lean

tactic: refine' ⟨fun h => _, fun h i => _⟩
state_before: ι : Type u
f✝ : ι → Ordinal → Ordinal
hι : Nonempty ι
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a b : Ordinal
⊢ (∀ (i : ι), f i b ≤ nfpFamily f a) ↔ b ≤ nfpFamily f a

tactic: rw [← nfpFamily_fp (H i)]
state_before: case refine'_2
ι : Type u
f✝ : ι → Ordinal → Ordinal
hι : Nonempty ι
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a b : Ordinal
h : b ≤ nfpFamily f a
i : ι
⊢ f i b ≤ nfpFamily f a

tactic: exact (H i).monotone h
state_before: case refine'_2
ι : Type u
f✝ : ι → Ordinal → Ordinal
hι : Nonempty ι
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a b : Ordinal
h : b ≤ nfpFamily f a
i : ι
⊢ f i b ≤ f i (nfpFamily f a)

tactic: cases' hι with i
state_before: case refine'_1
ι : Type u
f✝ : ι → Ordinal → Ordinal
hι : Nonempty ι
f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a b : Ordinal
h : ∀ (i : ι), f i b ≤ nfpFamily f a
⊢ b ≤ nfpFamily f a

tactic: exact ((H i).self_le b).trans (h i)
state_before: case refine'_1.intro
ι : Type u
f✝ f : ι → Ordinal → Ordinal
H : ∀ (i : ι), IsNormal (f i)
a b : Ordinal
h : ∀ (i : ι), f i b ≤ nfpFamily f a
i : ι
⊢ b ≤ nfpFamily f a
Theorem: Submonoid.mem_sSup_of_mem
File: Mathlib/GroupTheory/Submonoid/Membership.lean

tactic: rw [←SetLike.le_def]
state_before: M : Type u_1
A : Type ?u.45947
B : Type ?u.45950
inst✝ : MulOneClass M
S : Set (Submonoid M)
s : Submonoid M
hs : s ∈ S
⊢ ∀ {x : M}, x ∈ s → x ∈ sSup S

tactic: exact le_sSup hs
state_before: M : Type u_1
A : Type ?u.45947
B : Type ?u.45950
inst✝ : MulOneClass M
S : Set (Submonoid M)
s : Submonoid M
hs : s ∈ S
⊢ s ≤ sSup S
Theorem: IsTorsionFree.quotient_torsion
File: Mathlib/GroupTheory/Torsion.lean

tactic: induction' g using QuotientGroup.induction_on' with g
state_before: G : Type u_1
H : Type ?u.217260
inst✝ : CommGroup G
g : G ⧸ torsion G
hne : g ≠ 1
hfin : IsOfFinOrder g
⊢ g = 1

tactic: obtain ⟨m, mpos, hm⟩ := (isOfFinOrder_iff_pow_eq_one _).mp hfin
state_before: case H
G : Type u_1
H : Type ?u.217260
inst✝ : CommGroup G
g✝ : G ⧸ torsion G
hne✝ : g✝ ≠ 1
hfin✝ : IsOfFinOrder g✝
g : G
hne : ↑g ≠ 1
hfin : IsOfFinOrder ↑g
⊢ ↑g = 1

tactic: obtain ⟨n, npos, hn⟩ := (isOfFinOrder_iff_pow_eq_one _).mp ((QuotientGroup.eq_one_iff _).mp hm)
state_before: case H.intro.intro
G : Type u_1
H : Type ?u.217260
inst✝ : CommGroup G
g✝ : G ⧸ torsion G
hne✝ : g✝ ≠ 1
hfin✝ : IsOfFinOrder g✝
g : G
hne : ↑g ≠ 1
hfin : IsOfFinOrder ↑g
m : ℕ
mpos : 0 < m
hm : ↑g ^ m = 1
⊢ ↑g = 1

tactic: exact
  (QuotientGroup.eq_one_iff g).mpr
    ((isOfFinOrder_iff_pow_eq_one _).mpr ⟨m * n, mul_pos mpos npos, (pow_mul g m n).symm ▸ hn⟩)
state_before: case H.intro.intro.intro.intro
G : Type u_1
H : Type ?u.217260
inst✝ : CommGroup G
g✝ : G ⧸ torsion G
hne✝ : g✝ ≠ 1
hfin✝ : IsOfFinOrder g✝
g : G
hne : ↑g ≠ 1
hfin : IsOfFinOrder ↑g
m : ℕ
mpos : 0 < m
hm : ↑g ^ m = 1
n : ℕ
npos : 0 < n
hn : (fun x => x ^ m) g ^ n = 1
⊢ ↑g = 1
Theorem: Finset.erase_idem
File: Mathlib/Data/Finset/Basic.lean

tactic: simp
state_before: α : Type u_1
β : Type ?u.216461
γ : Type ?u.216464
inst✝ : DecidableEq α
s✝ t u v : Finset α
a✝ b a : α
s : Finset α
⊢ erase (erase s a) a = erase s a
Theorem: Filter.hasBasis_iInf_principal_finite
File: Mathlib/Order/Filter/Bases.lean

tactic: refine' ⟨fun U => (mem_iInf_finite _).trans _⟩
state_before: α : Type u_2
β : Type ?u.63130
γ : Type ?u.63133
ι✝ : Sort ?u.63136
ι' : Sort ?u.63139
l l' : Filter α
p : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
ι : Type u_1
s : ι → Set α
⊢ HasBasis (⨅ (i : ι), 𝓟 (s i)) (fun t => Set.Finite t) fun t => ⋂ (i : ι) (_ : i ∈ t), s i

tactic: simp only [iInf_principal_finset, mem_iUnion, mem_principal, exists_prop,
  exists_finite_iff_finset, Finset.set_biInter_coe]
state_before: α : Type u_2
β : Type ?u.63130
γ : Type ?u.63133
ι✝ : Sort ?u.63136
ι' : Sort ?u.63139
l l' : Filter α
p : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
ι : Type u_1
s : ι → Set α
U : Set α
⊢ (∃ t, U ∈ ⨅ (i : ι) (_ : i ∈ t), 𝓟 (s i)) ↔ ∃ i, Set.Finite i ∧ (⋂ (i_1 : ι) (_ : i_1 ∈ i), s i_1) ⊆ U
Theorem: Multiset.sup_powerset_len
File: Mathlib/Algebra/BigOperators/Basic.lean

tactic: convert bind_powerset_len x using 1
state_before: ι : Type ?u.910499
β : Type u
α✝ : Type v
γ : Type w
s s₁ s₂ : Finset α✝
a : α✝
f g : α✝ → β
inst✝¹ : DecidableEq α✝
α : Type u_1
inst✝ : DecidableEq α
x : Multiset α
⊢ (Finset.sup (Finset.range (↑card x + 1)) fun k => powersetLen k x) = powerset x

tactic: rw [Multiset.bind, Multiset.join, ← Finset.range_val, ← Finset.sum_eq_multiset_sum]
state_before: case h.e'_2
ι : Type ?u.910499
β : Type u
α✝ : Type v
γ : Type w
s s₁ s₂ : Finset α✝
a : α✝
f g : α✝ → β
inst✝¹ : DecidableEq α✝
α : Type u_1
inst✝ : DecidableEq α
x : Multiset α
⊢ (Finset.sup (Finset.range (↑card x + 1)) fun k => powersetLen k x) =
    bind (range (↑card x + 1)) fun k => powersetLen k x

tactic: exact
  Eq.symm (finset_sum_eq_sup_iff_disjoint.mpr fun _ _ _ _ h => pairwise_disjoint_powersetLen x h)
state_before: case h.e'_2
ι : Type ?u.910499
β : Type u
α✝ : Type v
γ : Type w
s s₁ s₂ : Finset α✝
a : α✝
f g : α✝ → β
inst✝¹ : DecidableEq α✝
α : Type u_1
inst✝ : DecidableEq α
x : Multiset α
⊢ (Finset.sup (Finset.range (↑card x + 1)) fun k => powersetLen k x) =
    ∑ x_1 in Finset.range (↑card x + 1), powersetLen x_1 x
Theorem: CategoryTheory.topologyOfClosureOperator_close
File: Mathlib/CategoryTheory/Sites/Closed.lean

tactic: ext Y
state_before: C : Type u
inst✝ : Category C
J₁ J₂ : GrothendieckTopology C
c : (X : C) → ClosureOperator (Sieve X)
pb :
  ∀ ⦃X Y : C⦄ (f : Y ⟶ X) (S : Sieve X), ↑(c Y).toOrderHom (Sieve.pullback f S) = Sieve.pullback f (↑(c X).toOrderHom S)
X : C
S : Sieve X
⊢ GrothendieckTopology.close (topologyOfClosureOperator c pb) S = ↑(c X).toOrderHom S

tactic: intro f
state_before: case h
C : Type u
inst✝ : Category C
J₁ J₂ : GrothendieckTopology C
c : (X : C) → ClosureOperator (Sieve X)
pb :
  ∀ ⦃X Y : C⦄ (f : Y ⟶ X) (S : Sieve X), ↑(c Y).toOrderHom (Sieve.pullback f S) = Sieve.pullback f (↑(c X).toOrderHom S)
X : C
S : Sieve X
Y : C
⊢ ∀ (f : Y ⟶ X),
    (GrothendieckTopology.close (topologyOfClosureOperator c pb) S).arrows f ↔ (↑(c X).toOrderHom S).arrows f

tactic: change c _ (Sieve.pullback f S) = ⊤ ↔ c _ S f
state_before: case h
C : Type u
inst✝ : Category C
J₁ J₂ : GrothendieckTopology C
c : (X : C) → ClosureOperator (Sieve X)
pb :
  ∀ ⦃X Y : C⦄ (f : Y ⟶ X) (S : Sieve X), ↑(c Y).toOrderHom (Sieve.pullback f S) = Sieve.pullback f (↑(c X).toOrderHom S)
X : C
S : Sieve X
Y : C
f : Y ⟶ X
⊢ (GrothendieckTopology.close (topologyOfClosureOperator c pb) S).arrows f ↔ (↑(c X).toOrderHom S).arrows f

tactic: rw [pb, Sieve.pullback_eq_top_iff_mem]
state_before: case h
C : Type u
inst✝ : Category C
J₁ J₂ : GrothendieckTopology C
c : (X : C) → ClosureOperator (Sieve X)
pb :
  ∀ ⦃X Y : C⦄ (f : Y ⟶ X) (S : Sieve X), ↑(c Y).toOrderHom (Sieve.pullback f S) = Sieve.pullback f (↑(c X).toOrderHom S)
X : C
S : Sieve X
Y : C
f : Y ⟶ X
⊢ ↑(c Y).toOrderHom (Sieve.pullback f S) = ⊤ ↔ (↑(c X).toOrderHom S).arrows f
Theorem: AffineSubspace.bot_parallel_iff_eq_bot
File: Mathlib/LinearAlgebra/AffineSpace/AffineSubspace.lean

tactic: rw [parallel_comm, parallel_bot_iff_eq_bot]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : AffineSubspace k P
⊢ ⊥ ∥ s ↔ s = ⊥
Theorem: CategoryTheory.NatIso.naturality_2'
File: Mathlib/CategoryTheory/NatIso.lean

tactic: rw [← Category.assoc, ← naturality, Category.assoc, IsIso.hom_inv_id, Category.comp_id]
state_before: C : Type u₁
inst✝³ : Category C
D : Type u₂
inst✝² : Category D
E : Type u₃
inst✝¹ : Category E
F G : C ⥤ D
X Y : C
α : F ⟶ G
f : X ⟶ Y
inst✝ : IsIso (α.app Y)
⊢ α.app X ≫ G.map f ≫ inv (α.app Y) = F.map f
Theorem: CategoryTheory.exact_zero_left_of_mono
File: Mathlib/Algebra/Homology/Exact.lean

tactic: simp
state_before: V : Type u
inst✝⁵ : Category V
inst✝⁴ : HasImages V
A B C D : V
f : A ⟶ B
g : B ⟶ C
h : C ⟶ D
inst✝³ : HasZeroMorphisms V
inst✝² : HasEqualizers V
inst✝¹ : HasZeroObject V
inst✝ : Mono g
⊢ 0 ≫ g = 0
Theorem: Ordinal.le_div
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: apply limitRecOn a
state_before: α : Type ?u.234535
β : Type ?u.234538
γ : Type ?u.234541
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b c : Ordinal
c0 : c ≠ 0
⊢ a ≤ b / c ↔ c * a ≤ b

tactic: simp only [mul_zero, Ordinal.zero_le]
state_before: case H₁
α : Type ?u.234535
β : Type ?u.234538
γ : Type ?u.234541
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b c : Ordinal
c0 : c ≠ 0
⊢ 0 ≤ b / c ↔ c * 0 ≤ b

tactic: intros
state_before: case H₂
α : Type ?u.234535
β : Type ?u.234538
γ : Type ?u.234541
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b c : Ordinal
c0 : c ≠ 0
⊢ ∀ (o : Ordinal), (o ≤ b / c ↔ c * o ≤ b) → (succ o ≤ b / c ↔ c * succ o ≤ b)

tactic: rw [succ_le_iff, lt_div c0]
state_before: case H₂
α : Type ?u.234535
β : Type ?u.234538
γ : Type ?u.234541
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b c : Ordinal
c0 : c ≠ 0
o✝ : Ordinal
a✝ : o✝ ≤ b / c ↔ c * o✝ ≤ b
⊢ succ o✝ ≤ b / c ↔ c * succ o✝ ≤ b

tactic: simp (config := { contextual := true }) only [mul_le_of_limit, limit_le, iff_self_iff,
  forall_true_iff]
state_before: case H₃
α : Type ?u.234535
β : Type ?u.234538
γ : Type ?u.234541
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b c : Ordinal
c0 : c ≠ 0
⊢ ∀ (o : Ordinal), IsLimit o → (∀ (o' : Ordinal), o' < o → (o' ≤ b / c ↔ c * o' ≤ b)) → (o ≤ b / c ↔ c * o ≤ b)
Theorem: one_le_pow_of_one_le
File: Mathlib/Algebra/GroupPower/Order.lean

tactic: rw [pow_zero]
state_before: β : Type ?u.216636
A : Type ?u.216639
G : Type ?u.216642
M : Type ?u.216645
R : Type u_1
inst✝ : OrderedSemiring R
a x y : R
n m : ℕ
H : 1 ≤ a
⊢ 1 ≤ a ^ 0

tactic: rw [pow_succ]
state_before: β : Type ?u.216636
A : Type ?u.216639
G : Type ?u.216642
M : Type ?u.216645
R : Type u_1
inst✝ : OrderedSemiring R
a x y : R
n✝ m : ℕ
H : 1 ≤ a
n : ℕ
⊢ 1 ≤ a ^ (n + 1)

tactic: simpa only [mul_one] using
  mul_le_mul H (one_le_pow_of_one_le H n) zero_le_one (le_trans zero_le_one H)
state_before: β : Type ?u.216636
A : Type ?u.216639
G : Type ?u.216642
M : Type ?u.216645
R : Type u_1
inst✝ : OrderedSemiring R
a x y : R
n✝ m : ℕ
H : 1 ≤ a
n : ℕ
⊢ 1 ≤ a * a ^ n
Theorem: MeasureTheory.Measure.sum_smul_dirac
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

tactic: simpa using (map_eq_sum μ id measurable_id).symm
state_before: α : Type u_1
β : Type ?u.354461
γ : Type ?u.354464
δ : Type ?u.354467
ι : Type ?u.354470
R : Type ?u.354473
R' : Type ?u.354476
m0 : MeasurableSpace α
inst✝³ : MeasurableSpace β
inst✝² : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
inst✝¹ : Countable α
inst✝ : MeasurableSingletonClass α
μ : Measure α
⊢ (sum fun a => ↑↑μ {a} • dirac a) = μ
Theorem: toIcoDiv_zsmul_add
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: rw [add_comm, toIcoDiv_add_zsmul, add_comm]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
m : ℤ
⊢ toIcoDiv hp a (m • p + b) = m + toIcoDiv hp a b
Theorem: MvPolynomial.aeval_id_rename
File: Mathlib/Data/MvPolynomial/Monad.lean

tactic: rw [aeval_rename, Function.comp.left_id]
state_before: σ : Type u_3
τ : Type u_1
R : Type u_2
S : Type ?u.269321
T : Type ?u.269324
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : CommSemiring T
f✝ f : σ → MvPolynomial τ R
p : MvPolynomial σ R
⊢ ↑(aeval id) (↑(rename f) p) = ↑(aeval f) p
Theorem: Lagrange.nodalWeight_ne_zero
File: Mathlib/LinearAlgebra/Lagrange.lean

tactic: rw [nodalWeight, prod_ne_zero_iff]
state_before: F : Type u_2
inst✝¹ : Field F
ι : Type u_1
s : Finset ι
v : ι → F
i : ι
r : ι → F
x : F
inst✝ : DecidableEq ι
hvs : Set.InjOn v ↑s
hi : i ∈ s
⊢ nodalWeight s v i ≠ 0

tactic: intro j hj
state_before: F : Type u_2
inst✝¹ : Field F
ι : Type u_1
s : Finset ι
v : ι → F
i : ι
r : ι → F
x : F
inst✝ : DecidableEq ι
hvs : Set.InjOn v ↑s
hi : i ∈ s
⊢ ∀ (a : ι), a ∈ Finset.erase s i → (v i - v a)⁻¹ ≠ 0

tactic: rcases mem_erase.mp hj with ⟨hij, hj⟩
state_before: F : Type u_2
inst✝¹ : Field F
ι : Type u_1
s : Finset ι
v : ι → F
i : ι
r : ι → F
x : F
inst✝ : DecidableEq ι
hvs : Set.InjOn v ↑s
hi : i ∈ s
j : ι
hj : j ∈ Finset.erase s i
⊢ (v i - v j)⁻¹ ≠ 0

tactic: refine' inv_ne_zero (sub_ne_zero_of_ne (mt (hvs.eq_iff hi hj).mp hij.symm))
state_before: case intro
F : Type u_2
inst✝¹ : Field F
ι : Type u_1
s : Finset ι
v : ι → F
i : ι
r : ι → F
x : F
inst✝ : DecidableEq ι
hvs : Set.InjOn v ↑s
hi : i ∈ s
j : ι
hj✝ : j ∈ Finset.erase s i
hij : j ≠ i
hj : j ∈ s
⊢ (v i - v j)⁻¹ ≠ 0
Theorem: Int.ModEq.neg
File: Mathlib/Data/Int/ModEq.lean

tactic: simp_rw [← sub_eq_add_neg, sub_self]
state_before: m n a b c d : ℤ
h : a ≡ b [ZMOD n]
⊢ a + -a ≡ b + -b [ZMOD n]

tactic: rfl
state_before: m n a b c d : ℤ
h : a ≡ b [ZMOD n]
⊢ 0 ≡ 0 [ZMOD n]
Theorem: Polynomial.monomial_mul_monomial
File: Mathlib/Data/Polynomial/Basic.lean

tactic: simp only [toFinsupp_monomial, toFinsupp_mul, AddMonoidAlgebra.single_mul_single]
state_before: R : Type u
a b : R
m✝ n✝ : ℕ
inst✝ : Semiring R
p q : R[X]
n m : ℕ
r s : R
⊢ (↑(monomial n) r * ↑(monomial m) s).toFinsupp = (↑(monomial (n + m)) (r * s)).toFinsupp
Theorem: CategoryTheory.Equivalence.cancel_unit_right_assoc'
File: Mathlib/CategoryTheory/Equivalence.lean

tactic: simp only [← Category.assoc, cancel_mono]
state_before: C : Type u₁
inst✝² : Category C
D : Type u₂
inst✝¹ : Category D
E : Type u₃
inst✝ : Category E
e : C ≌ D
W X X' Y Y' Z : C
f : W ⟶ X
g : X ⟶ Y
h : Y ⟶ Z
f' : W ⟶ X'
g' : X' ⟶ Y'
h' : Y' ⟶ Z
⊢ f ≫ g ≫ h ≫ (unit e).app Z = f' ≫ g' ≫ h' ≫ (unit e).app Z ↔ f ≫ g ≫ h = f' ≫ g' ≫ h'
Theorem: iSup_unpair
File: Mathlib/Data/Nat/Pairing.lean

tactic: rw [← (iSup_prod : (⨆ i : ℕ × ℕ, f i.1 i.2) = _), ← Nat.surjective_unpair.iSup_comp]
state_before: α : Type u_1
inst✝ : CompleteLattice α
f : ℕ → ℕ → α
⊢ (⨆ (n : ℕ), f (unpair n).fst (unpair n).snd) = ⨆ (i : ℕ) (j : ℕ), f i j
Theorem: Submonoid.LocalizationMap.mk'_mul_eq_mk'_of_mul
File: Mathlib/GroupTheory/MonoidLocalization.lean

tactic: rw [mul_comm, mul_mk'_eq_mk'_of_mul]
state_before: M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type ?u.926006
inst✝ : CommMonoid P
f : LocalizationMap S N
x₁ x₂ : M
y : { x // x ∈ S }
⊢ mk' f x₂ y * ↑(toMap f) x₁ = mk' f (x₁ * x₂) y
Theorem: DMatrix.map_map
File: Mathlib/Data/Matrix/DMatrix.lean

tactic: ext
state_before: l : Type ?u.3756
m : Type u_1
n : Type u_2
o : Type ?u.3765
inst✝³ : Fintype l
inst✝² : Fintype m
inst✝¹ : Fintype n
inst✝ : Fintype o
α : m → n → Type v
M : DMatrix m n α
β : m → n → Type w
γ : m → n → Type z
f : ⦃i : m⦄ → ⦃j : n⦄ → α i j → β i j
g : ⦃i : m⦄ → ⦃j : n⦄ → β i j → γ i j
⊢ map (map M f) g = map M fun i j x => g (f x)

tactic: simp
state_before: case a
l : Type ?u.3756
m : Type u_1
n : Type u_2
o : Type ?u.3765
inst✝³ : Fintype l
inst✝² : Fintype m
inst✝¹ : Fintype n
inst✝ : Fintype o
α : m → n → Type v
M : DMatrix m n α
β : m → n → Type w
γ : m → n → Type z
f : ⦃i : m⦄ → ⦃j : n⦄ → α i j → β i j
g : ⦃i : m⦄ → ⦃j : n⦄ → β i j → γ i j
i✝ : m
j✝ : n
⊢ map (map M f) g i✝ j✝ = map M (fun i j x => g (f x)) i✝ j✝