tasksource/leandojo huggingface dataset:
Theorem: HasDerivAt.inner
File: Mathlib/Analysis/InnerProductSpace/Calculus.lean

tactic: simpa only [← hasDerivWithinAt_univ] using HasDerivWithinAt.inner 𝕜
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.77069
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : InnerProductSpace 𝕜 E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
inst✝² : NormedSpace ℝ E
G : Type ?u.77198
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
f✝ g✝ : G → E
f'✝ g'✝ : G →L[ℝ] E
s : Set G
x✝ : G
n : ℕ∞
f g : ℝ → E
f' g' : E
x : ℝ
⊢ HasDerivAt f f' x →
    HasDerivAt g g' x → HasDerivAt (fun t => Inner.inner (f t) (g t)) (Inner.inner (f x) g' + Inner.inner f' (g x)) x
Theorem: hasDerivAt_gronwallBound_shift
File: Mathlib/Analysis/ODE/Gronwall.lean

tactic: convert (hasDerivAt_gronwallBound δ K ε _).comp x ((hasDerivAt_id x).sub_const a) using 1
state_before: E : Type ?u.20531
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type ?u.20627
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε x a : ℝ
⊢ HasDerivAt (fun y => gronwallBound δ K ε (y - a)) (K * gronwallBound δ K ε (x - a) + ε) x

tactic: rw [id, mul_one]
state_before: case h.e'_7
E : Type ?u.20531
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type ?u.20627
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε x a : ℝ
⊢ K * gronwallBound δ K ε (x - a) + ε = (K * gronwallBound δ K ε (id x - a) + ε) * 1
Theorem: Ideal.torsionOf_eq_top_iff
File: Mathlib/Algebra/Module/Torsion.lean

tactic: refine' ⟨fun h => _, fun h => by simp [h]⟩
state_before: R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
⊢ torsionOf R M m = ⊤ ↔ m = 0

tactic: rw [← one_smul R m, ← mem_torsionOf_iff m (1 : R), h]
state_before: R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
h : torsionOf R M m = ⊤
⊢ m = 0

tactic: exact Submodule.mem_top
state_before: R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
h : torsionOf R M m = ⊤
⊢ 1 ∈ ⊤

tactic: simp [h]
state_before: R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
m : M
h : m = 0
⊢ torsionOf R M m = ⊤
Theorem: le_neg_self_iff
File: Mathlib/Algebra/Order/Ring/Defs.lean

tactic: rw [neg_neg]
state_before: α : Type u
β : Type ?u.188008
inst✝ : LinearOrderedRing α
a b c : α
⊢ a ≤ -a ↔ - -a ≤ -a
Theorem: Nat.Linear.Poly.denote_sort
File: src/lean/Init/Data/Nat/Linear.lean

tactic: simp
state_before: ctx : Context
m : Poly
⊢ denote ctx (sort m) = denote ctx m
Theorem: charmatrix_apply_natDegree
File: Mathlib/LinearAlgebra/Matrix/Charpoly/Coeff.lean

tactic: by_cases i = j <;> simp [h, ← degree_eq_iff_natDegree_eq_of_pos (Nat.succ_pos 0)]
state_before: R : Type u
inst✝⁴ : CommRing R
n G : Type v
inst✝³ : DecidableEq n
inst✝² : Fintype n
α β : Type v
inst✝¹ : DecidableEq α
M : Matrix n n R
inst✝ : Nontrivial R
i j : n
⊢ natDegree (charmatrix M i j) = if i = j then 1 else 0
Theorem: Real.exp_log
File: Mathlib/Analysis/SpecialFunctions/Log/Basic.lean

tactic: rw [exp_log_eq_abs hx.ne']
state_before: x y : ℝ
hx : 0 < x
⊢ exp (log x) = x

tactic: exact abs_of_pos hx
state_before: x y : ℝ
hx : 0 < x
⊢ abs x = x
Theorem: Asymptotics.isBigO_nat_atTop_iff
File: Mathlib/Analysis/Asymptotics/Asymptotics.lean

tactic: rw [← Nat.cofinite_eq_atTop, isBigO_cofinite_iff h]
state_before: α : Type ?u.688066
β : Type ?u.688069
E : Type ?u.688072
F : Type ?u.688075
G : Type ?u.688078
E' : Type ?u.688081
F' : Type ?u.688084
G' : Type ?u.688087
E'' : Type u_2
F'' : Type u_1
G'' : Type ?u.688096
R : Type ?u.688099
R' : Type ?u.688102
𝕜 : Type ?u.688105
𝕜' : Type ?u.688108
inst✝¹² : Norm E
inst✝¹¹ : Norm F
inst✝¹⁰ : Norm G
inst✝⁹ : SeminormedAddCommGroup E'
inst✝⁸ : SeminormedAddCommGroup F'
inst✝⁷ : SeminormedAddCommGroup G'
inst✝⁶ : NormedAddCommGroup E''
inst✝⁵ : NormedAddCommGroup F''
inst✝⁴ : NormedAddCommGroup G''
inst✝³ : SeminormedRing R
inst✝² : SeminormedRing R'
inst✝¹ : NormedField 𝕜
inst✝ : NormedField 𝕜'
c c' c₁ c₂ : ℝ
f✝ : α → E
g✝ : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
f : ℕ → E''
g : ℕ → F''
h : ∀ (x : ℕ), g x = 0 → f x = 0
⊢ f =O[atTop] g ↔ ∃ C, ∀ (x : ℕ), ‖f x‖ ≤ C * ‖g x‖
Theorem: UniformInducing.equicontinuousAt_iff
File: Mathlib/Topology/UniformSpace/Equicontinuity.lean

tactic: have := (UniformFun.postcomp_uniformInducing (α := ι) hu).inducing
state_before: ι : Type u_3
κ : Type ?u.129520
X : Type u_4
Y : Type ?u.129526
Z : Type ?u.129529
α : Type u_1
β : Type u_2
γ : Type ?u.129538
𝓕 : Type ?u.129541
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : TopologicalSpace Z
inst✝² : UniformSpace α
inst✝¹ : UniformSpace β
inst✝ : UniformSpace γ
F : ι → X → α
x₀ : X
u : α → β
hu : UniformInducing u
⊢ EquicontinuousAt F x₀ ↔ EquicontinuousAt ((fun x x_1 => x ∘ x_1) u ∘ F) x₀

tactic: rw [equicontinuousAt_iff_continuousAt, equicontinuousAt_iff_continuousAt, this.continuousAt_iff]
state_before: ι : Type u_3
κ : Type ?u.129520
X : Type u_4
Y : Type ?u.129526
Z : Type ?u.129529
α : Type u_1
β : Type u_2
γ : Type ?u.129538
𝓕 : Type ?u.129541
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : TopologicalSpace Z
inst✝² : UniformSpace α
inst✝¹ : UniformSpace β
inst✝ : UniformSpace γ
F : ι → X → α
x₀ : X
u : α → β
hu : UniformInducing u
this : Inducing (↑UniformFun.ofFun ∘ (fun x => u ∘ x) ∘ ↑toFun)
⊢ EquicontinuousAt F x₀ ↔ EquicontinuousAt ((fun x x_1 => x ∘ x_1) u ∘ F) x₀

tactic: rfl
state_before: ι : Type u_3
κ : Type ?u.129520
X : Type u_4
Y : Type ?u.129526
Z : Type ?u.129529
α : Type u_1
β : Type u_2
γ : Type ?u.129538
𝓕 : Type ?u.129541
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : TopologicalSpace Z
inst✝² : UniformSpace α
inst✝¹ : UniformSpace β
inst✝ : UniformSpace γ
F : ι → X → α
x₀ : X
u : α → β
hu : UniformInducing u
this : Inducing (↑UniformFun.ofFun ∘ (fun x => u ∘ x) ∘ ↑toFun)
⊢ ContinuousAt ((↑UniformFun.ofFun ∘ (fun x => u ∘ x) ∘ ↑toFun) ∘ ↑UniformFun.ofFun ∘ Function.swap F) x₀ ↔
    ContinuousAt (↑UniformFun.ofFun ∘ Function.swap ((fun x x_1 => x ∘ x_1) u ∘ F)) x₀
Theorem: Equiv.Perm.sameCycle_pow_left
File: Mathlib/GroupTheory/Perm/Cycle/Basic.lean

tactic: rw [← zpow_ofNat, sameCycle_zpow_left]
state_before: ι : Type ?u.142827
α : Type u_1
β : Type ?u.142833
f g : Perm α
p : α → Prop
x y z : α
n : ℕ
⊢ SameCycle f (↑(f ^ n) x) y ↔ SameCycle f x y
Theorem: CategoryTheory.isUnit_iff_isIso
File: Mathlib/CategoryTheory/Endomorphism.lean

tactic: simp
state_before: C : Type u
inst✝ : Category C
X : C
f : End X
h : IsIso f
⊢ f * inv f = 1

tactic: simp
state_before: C : Type u
inst✝ : Category C
X : C
f : End X
h : IsIso f
⊢ inv f * f = 1
Theorem: Finset.mulEtransformRight_one
File: Mathlib/Combinatorics/Additive/Etransform.lean

tactic: simp [mulEtransformRight]
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Group α
e : α
x : Finset α × Finset α
⊢ mulEtransformRight 1 x = x
Theorem: Polynomial.derivative_X_sub_C_sq
File: Mathlib/Data/Polynomial/Derivative.lean

tactic: rw [derivative_sq, derivative_X_sub_C, mul_one]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
A : Type z
a b : R
n : ℕ
inst✝ : CommRing R
c : R
⊢ ↑derivative ((X - ↑C c) ^ 2) = ↑C 2 * (X - ↑C c)
Theorem: Inducing.inseparable_iff
File: Mathlib/Topology/Inseparable.lean

tactic: simp only [inseparable_iff_specializes_and, hf.specializes_iff]
state_before: X : Type u_1
Y : Type u_2
Z : Type ?u.32496
α : Type ?u.32499
ι : Type ?u.32502
π : ι → Type ?u.32507
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x y z : X
s : Set X
f : X → Y
hf : Inducing f
⊢ (f x ~ᵢ f y) ↔ (x ~ᵢ y)
Theorem: toMul_multiset_sum
File: Mathlib/Algebra/BigOperators/Basic.lean

tactic: simp [toMul, ofMul]
state_before: ι : Type ?u.997971
β : Type u
α : Type v
γ : Type w
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : CommMonoid α
s : Multiset (Additive α)
⊢ ↑toMul (Multiset.sum s) = Multiset.prod (Multiset.map (↑toMul) s)

tactic: rfl
state_before: ι : Type ?u.997971
β : Type u
α : Type v
γ : Type w
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝ : CommMonoid α
s : Multiset (Additive α)
⊢ Multiset.sum s = Multiset.prod s
Theorem: Subgroup.conj_smul_subgroupOf
File: Mathlib/GroupTheory/Subgroup/Pointwise.lean

tactic: refine' le_antisymm _ _
state_before: α : Type ?u.110756
G : Type u_1
A : Type ?u.110762
S : Type ?u.110765
inst✝³ : Group G
inst✝² : AddGroup A
s : Set G
inst✝¹ : Monoid α
inst✝ : MulDistribMulAction α G
P H : Subgroup G
hP : P ≤ H
h : { x // x ∈ H }
⊢ ↑MulAut.conj h • subgroupOf P H = subgroupOf (↑MulAut.conj ↑h • P) H

tactic: rintro - ⟨g, hg, rfl⟩
state_before: case refine'_1
α : Type ?u.110756
G : Type u_1
A : Type ?u.110762
S : Type ?u.110765
inst✝³ : Group G
inst✝² : AddGroup A
s : Set G
inst✝¹ : Monoid α
inst✝ : MulDistribMulAction α G
P H : Subgroup G
hP : P ≤ H
h : { x // x ∈ H }
⊢ ↑MulAut.conj h • subgroupOf P H ≤ subgroupOf (↑MulAut.conj ↑h • P) H

tactic: exact ⟨g, hg, rfl⟩
state_before: case refine'_1.intro.intro
α : Type ?u.110756
G : Type u_1
A : Type ?u.110762
S : Type ?u.110765
inst✝³ : Group G
inst✝² : AddGroup A
s : Set G
inst✝¹ : Monoid α
inst✝ : MulDistribMulAction α G
P H : Subgroup G
hP : P ≤ H
h g : { x // x ∈ H }
hg : g ∈ ↑(subgroupOf P H)
⊢ ↑(↑(MulDistribMulAction.toMonoidEnd ((fun x => MulAut { x // x ∈ H }) h) { x // x ∈ H }) (↑MulAut.conj h)) g ∈
    subgroupOf (↑MulAut.conj ↑h • P) H

tactic: rintro p ⟨g, hg, hp⟩
state_before: case refine'_2
α : Type ?u.110756
G : Type u_1
A : Type ?u.110762
S : Type ?u.110765
inst✝³ : Group G
inst✝² : AddGroup A
s : Set G
inst✝¹ : Monoid α
inst✝ : MulDistribMulAction α G
P H : Subgroup G
hP : P ≤ H
h : { x // x ∈ H }
⊢ subgroupOf (↑MulAut.conj ↑h • P) H ≤ ↑MulAut.conj h • subgroupOf P H

tactic: exact ⟨⟨g, hP hg⟩, hg, Subtype.ext hp⟩
state_before: case refine'_2.intro.intro
α : Type ?u.110756
G : Type u_1
A : Type ?u.110762
S : Type ?u.110765
inst✝³ : Group G
inst✝² : AddGroup A
s : Set G
inst✝¹ : Monoid α
inst✝ : MulDistribMulAction α G
P H : Subgroup G
hP : P ≤ H
h p : { x // x ∈ H }
g : G
hg : g ∈ ↑P
hp : ↑(↑(MulDistribMulAction.toMonoidEnd ((fun x => MulAut G) ↑h) G) (↑MulAut.conj ↑h)) g = ↑(Subgroup.subtype H) p
⊢ p ∈ ↑MulAut.conj h • subgroupOf P H
Theorem: List.pairwise_join
File: Mathlib/Data/List/Pairwise.lean

tactic: induction' L with l L IH
state_before: α : Type u_1
β : Type ?u.29811
R S T : α → α → Prop
a : α
l : List α
L : List (List α)
⊢ Pairwise R (join L) ↔
    (∀ (l : List α), l ∈ L → Pairwise R l) ∧ Pairwise (fun l₁ l₂ => ∀ (x : α), x ∈ l₁ → ∀ (y : α), y ∈ l₂ → R x y) L

tactic: have :
  (∀ x : α, x ∈ l → ∀ (y : α) (x_1 : List α), x_1 ∈ L → y ∈ x_1 → R x y) ↔
    ∀ a' : List α, a' ∈ L → ∀ x : α, x ∈ l → ∀ y : α, y ∈ a' → R x y :=
  ⟨fun h a b c d e => h c d e a b, fun h c d e a b => h a b c d e⟩
state_before: case cons
α : Type u_1
β : Type ?u.29811
R S T : α → α → Prop
a : α
l✝ l : List α
L : List (List α)
IH :
  Pairwise R (join L) ↔
    (∀ (l : List α), l ∈ L → Pairwise R l) ∧ Pairwise (fun l₁ l₂ => ∀ (x : α), x ∈ l₁ → ∀ (y : α), y ∈ l₂ → R x y) L
⊢ Pairwise R (join (l :: L)) ↔
    (∀ (l_1 : List α), l_1 ∈ l :: L → Pairwise R l_1) ∧
      Pairwise (fun l₁ l₂ => ∀ (x : α), x ∈ l₁ → ∀ (y : α), y ∈ l₂ → R x y) (l :: L)

tactic: simp only [join, pairwise_append, IH, mem_join, exists_imp, and_imp, this, forall_mem_cons,
  pairwise_cons]
state_before: case cons
α : Type u_1
β : Type ?u.29811
R S T : α → α → Prop
a : α
l✝ l : List α
L : List (List α)
IH :
  Pairwise R (join L) ↔
    (∀ (l : List α), l ∈ L → Pairwise R l) ∧ Pairwise (fun l₁ l₂ => ∀ (x : α), x ∈ l₁ → ∀ (y : α), y ∈ l₂ → R x y) L
this :
  (∀ (x : α), x ∈ l → ∀ (y : α) (x_1 : List α), x_1 ∈ L → y ∈ x_1 → R x y) ↔
    ∀ (a' : List α), a' ∈ L → ∀ (x : α), x ∈ l → ∀ (y : α), y ∈ a' → R x y
⊢ Pairwise R (join (l :: L)) ↔
    (∀ (l_1 : List α), l_1 ∈ l :: L → Pairwise R l_1) ∧
      Pairwise (fun l₁ l₂ => ∀ (x : α), x ∈ l₁ → ∀ (y : α), y ∈ l₂ → R x y) (l :: L)

tactic: simp only [and_assoc, and_comm, and_left_comm]
state_before: case cons
α : Type u_1
β : Type ?u.29811
R S T : α → α → Prop
a : α
l✝ l : List α
L : List (List α)
IH :
  Pairwise R (join L) ↔
    (∀ (l : List α), l ∈ L → Pairwise R l) ∧ Pairwise (fun l₁ l₂ => ∀ (x : α), x ∈ l₁ → ∀ (y : α), y ∈ l₂ → R x y) L
this :
  (∀ (x : α), x ∈ l → ∀ (y : α) (x_1 : List α), x_1 ∈ L → y ∈ x_1 → R x y) ↔
    ∀ (a' : List α), a' ∈ L → ∀ (x : α), x ∈ l → ∀ (y : α), y ∈ a' → R x y
⊢ (Pairwise R l ∧
      ((∀ (l : List α), l ∈ L → Pairwise R l) ∧
          Pairwise (fun l₁ l₂ => ∀ (x : α), x ∈ l₁ → ∀ (y : α), y ∈ l₂ → R x y) L) ∧
        ∀ (a' : List α), a' ∈ L → ∀ (x : α), x ∈ l → ∀ (y : α), y ∈ a' → R x y) ↔
    (Pairwise R l ∧ ∀ (l : List α), l ∈ L → Pairwise R l) ∧
      (∀ (a' : List α), a' ∈ L → ∀ (x : α), x ∈ l → ∀ (y : α), y ∈ a' → R x y) ∧
        Pairwise (fun l₁ l₂ => ∀ (x : α), x ∈ l₁ → ∀ (y : α), y ∈ l₂ → R x y) L

tactic: simp only [join, Pairwise.nil, forall_prop_of_false (not_mem_nil _), forall_const, and_self_iff]
state_before: case nil
α : Type u_1
β : Type ?u.29811
R S T : α → α → Prop
a : α
l : List α
⊢ Pairwise R (join []) ↔
    (∀ (l : List α), l ∈ [] → Pairwise R l) ∧ Pairwise (fun l₁ l₂ => ∀ (x : α), x ∈ l₁ → ∀ (y : α), y ∈ l₂ → R x y) []
Theorem: Real.volume_val
File: Mathlib/MeasureTheory/Measure/Lebesgue/Basic.lean

tactic: simp [volume_eq_stieltjes_id]
state_before: ι : Type ?u.117408
inst✝ : Fintype ι
s : Set ℝ
⊢ ↑↑volume s = ↑↑(StieltjesFunction.measure StieltjesFunction.id) s
Theorem: Affine.Simplex.centroid_eq_of_range_eq
File: Mathlib/LinearAlgebra/AffineSpace/Independent.lean

tactic: rw [← Set.image_univ, ← Set.image_univ, ← Finset.coe_univ] at h
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
s₁ s₂ : Simplex k P n
h : Set.range s₁.points = Set.range s₂.points
⊢ Finset.centroid k Finset.univ s₁.points = Finset.centroid k Finset.univ s₂.points

tactic: exact
  Finset.univ.centroid_eq_of_inj_on_of_image_eq k _
    (fun _ _ _ _ he => AffineIndependent.injective s₁.Independent he)
    (fun _ _ _ _ he => AffineIndependent.injective s₂.Independent he) h
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
s₁ s₂ : Simplex k P n
h✝ : s₁.points '' Set.univ = s₂.points '' Set.univ
h : s₁.points '' ↑Finset.univ = s₂.points '' ↑Finset.univ
⊢ Finset.centroid k Finset.univ s₁.points = Finset.centroid k Finset.univ s₂.points
Theorem: List.getLast_replicate_succ
File: Mathlib/Data/List/Basic.lean

tactic: simp only [replicate_succ']
state_before: ι : Type ?u.33399
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
m : ℕ
a : α
⊢ getLast (replicate (m + 1) a) (_ : replicate (m + 1) a ≠ []) = a

tactic: exact getLast_append_singleton _
state_before: ι : Type ?u.33399
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
m : ℕ
a : α
⊢ getLast (replicate m a ++ [a]) (_ : replicate m a ++ [a] ≠ []) = a
Theorem: BoundedContinuousFunction.norm_eq
File: Mathlib/Topology/ContinuousFunction/Bounded.lean

tactic: simp [norm_def, BoundedContinuousFunction.dist_eq]
state_before: F : Type ?u.981248
α : Type u
β : Type v
γ : Type w
inst✝¹ : TopologicalSpace α
inst✝ : SeminormedAddCommGroup β
f✝ g : α →ᵇ β
x : α
C : ℝ
f : α →ᵇ β
⊢ ‖f‖ = sInf {C | 0 ≤ C ∧ ∀ (x : α), ‖↑f x‖ ≤ C}
Theorem: Set.image3_congr
File: Mathlib/Data/Set/NAry.lean

tactic: ext x
state_before: α : Type u_1
α' : Type ?u.30846
β : Type u_2
β' : Type ?u.30852
γ : Type u_3
γ' : Type ?u.30858
δ : Type u_4
δ' : Type ?u.30864
ε : Type ?u.30867
ε' : Type ?u.30870
ζ : Type ?u.30873
ζ' : Type ?u.30876
ν : Type ?u.30879
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a a' : α
b b' : β
c c' : γ
d d' : δ
h : ∀ (a : α), a ∈ s → ∀ (b : β), b ∈ t → ∀ (c : γ), c ∈ u → g a b c = g' a b c
⊢ image3 g s t u = image3 g' s t u

tactic: constructor <;> rintro ⟨a, b, c, ha, hb, hc, rfl⟩ <;>
  exact ⟨a, b, c, ha, hb, hc, by rw [h a ha b hb c hc]⟩
state_before: case h
α : Type u_1
α' : Type ?u.30846
β : Type u_2
β' : Type ?u.30852
γ : Type u_3
γ' : Type ?u.30858
δ : Type u_4
δ' : Type ?u.30864
ε : Type ?u.30867
ε' : Type ?u.30870
ζ : Type ?u.30873
ζ' : Type ?u.30876
ν : Type ?u.30879
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a a' : α
b b' : β
c c' : γ
d d' : δ
h : ∀ (a : α), a ∈ s → ∀ (b : β), b ∈ t → ∀ (c : γ), c ∈ u → g a b c = g' a b c
x : δ
⊢ x ∈ image3 g s t u ↔ x ∈ image3 g' s t u

tactic: rw [h a ha b hb c hc]
state_before: α : Type u_1
α' : Type ?u.30846
β : Type u_2
β' : Type ?u.30852
γ : Type u_3
γ' : Type ?u.30858
δ : Type u_4
δ' : Type ?u.30864
ε : Type ?u.30867
ε' : Type ?u.30870
ζ : Type ?u.30873
ζ' : Type ?u.30876
ν : Type ?u.30879
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a✝ a' : α
b✝ b' : β
c✝ c' : γ
d d' : δ
h : ∀ (a : α), a ∈ s → ∀ (b : β), b ∈ t → ∀ (c : γ), c ∈ u → g a b c = g' a b c
a : α
b : β
c : γ
ha : a ∈ s
hb : b ∈ t
hc : c ∈ u
⊢ g a b c = g' a b c
Theorem: Real.sin_two_mul
File: Mathlib/Data/Complex/Exponential.lean

tactic: simp [sin_two_mul]
state_before: x y : ℝ
⊢ ↑(sin (2 * x)) = ↑(2 * sin x * cos x)
Theorem: Real.real_sqrt_le_nat_sqrt_succ
File: Mathlib/Data/Real/Sqrt.lean

tactic: rw [Real.sqrt_le_iff]
state_before: a : ℕ
⊢ sqrt ↑a ≤ ↑(Nat.sqrt a) + 1

tactic: constructor
state_before: a : ℕ
⊢ 0 ≤ ↑(Nat.sqrt a) + 1 ∧ ↑a ≤ (↑(Nat.sqrt a) + 1) ^ 2

tactic: norm_cast
state_before: case left
a : ℕ
⊢ 0 ≤ ↑(Nat.sqrt a) + 1

tactic: apply zero_le
state_before: case left
a : ℕ
⊢ 0 ≤ Nat.sqrt a + 1

tactic: norm_cast
state_before: case right
a : ℕ
⊢ ↑a ≤ (↑(Nat.sqrt a) + 1) ^ 2

tactic: exact le_of_lt (Nat.lt_succ_sqrt' a)
state_before: case right
a : ℕ
⊢ a ≤ (Nat.sqrt a + 1) ^ 2
Theorem: Finset.SupIndep.sup
File: Mathlib/Order/SupIndep.lean

tactic: simp_rw [supIndep_iff_pairwiseDisjoint] at hs hg⊢
state_before: α : Type u_3
β : Type ?u.19950
ι : Type u_1
ι' : Type u_2
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → Finset ι
f : ι → α
hs : SupIndep s fun i => Finset.sup (g i) f
hg : ∀ (i' : ι'), i' ∈ s → SupIndep (g i') f
⊢ SupIndep (Finset.sup s g) f

tactic: rw [sup_eq_biUnion, coe_biUnion]
state_before: α : Type u_3
β : Type ?u.19950
ι : Type u_1
ι' : Type u_2
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → Finset ι
f : ι → α
hs : Set.PairwiseDisjoint ↑s fun i => Finset.sup (g i) f
hg : ∀ (i' : ι'), i' ∈ s → Set.PairwiseDisjoint (↑(g i')) f
⊢ Set.PairwiseDisjoint (↑(Finset.sup s g)) f

tactic: exact hs.biUnion_finset hg
state_before: α : Type u_3
β : Type ?u.19950
ι : Type u_1
ι' : Type u_2
inst✝² : DistribLattice α
inst✝¹ : OrderBot α
s✝ : Finset ι
f✝ : ι → α
inst✝ : DecidableEq ι
s : Finset ι'
g : ι' → Finset ι
f : ι → α
hs : Set.PairwiseDisjoint ↑s fun i => Finset.sup (g i) f
hg : ∀ (i' : ι'), i' ∈ s → Set.PairwiseDisjoint (↑(g i')) f
⊢ Set.PairwiseDisjoint (⋃ (x : ι') (_ : x ∈ ↑s), ↑(g x)) f
Theorem: Finset.insert_sdiff_of_not_mem
File: Mathlib/Data/Finset/Basic.lean

tactic: rw [← coe_inj, coe_insert, coe_sdiff, coe_sdiff, coe_insert]
state_before: α : Type u_1
β : Type ?u.240257
γ : Type ?u.240260
inst✝ : DecidableEq α
s✝ t✝ u v : Finset α
a b : α
s t : Finset α
x : α
h : ¬x ∈ t
⊢ insert x s \ t = insert x (s \ t)

tactic: exact Set.insert_diff_of_not_mem _ h
state_before: α : Type u_1
β : Type ?u.240257
γ : Type ?u.240260
inst✝ : DecidableEq α
s✝ t✝ u v : Finset α
a b : α
s t : Finset α
x : α
h : ¬x ∈ t
⊢ insert x ↑s \ ↑t = insert x (↑s \ ↑t)
Theorem: AddMonoidAlgebra.finiteType_iff_fg
File: Mathlib/RingTheory/FiniteType.lean

tactic: refine' ⟨fun h => _, fun h => @AddMonoidAlgebra.finiteType_of_fg _ _ _ _ h⟩
state_before: R : Type u_1
M : Type u_2
inst✝² : AddCommMonoid M
inst✝¹ : CommRing R
inst✝ : Nontrivial R
⊢ FiniteType R (AddMonoidAlgebra R M) ↔ AddMonoid.FG M

tactic: obtain ⟨S, hS⟩ := @exists_finset_adjoin_eq_top R M _ _ h
state_before: R : Type u_1
M : Type u_2
inst✝² : AddCommMonoid M
inst✝¹ : CommRing R
inst✝ : Nontrivial R
h : FiniteType R (AddMonoidAlgebra R M)
⊢ AddMonoid.FG M

tactic: refine' AddMonoid.fg_def.2 ⟨S, (eq_top_iff' _).2 fun m => _⟩
state_before: case intro
R : Type u_1
M : Type u_2
inst✝² : AddCommMonoid M
inst✝¹ : CommRing R
inst✝ : Nontrivial R
h : FiniteType R (AddMonoidAlgebra R M)
S : Finset M
hS : adjoin R (of' R M '' ↑S) = ⊤
⊢ AddMonoid.FG M

tactic: have hm : of' R M m ∈ Subalgebra.toSubmodule (adjoin R (of' R M '' ↑S)) := by
  simp only [hS, top_toSubmodule, Submodule.mem_top]
state_before: case intro
R : Type u_1
M : Type u_2
inst✝² : AddCommMonoid M
inst✝¹ : CommRing R
inst✝ : Nontrivial R
h : FiniteType R (AddMonoidAlgebra R M)
S : Finset M
hS : adjoin R (of' R M '' ↑S) = ⊤
m : M
⊢ m ∈ closure ↑S

tactic: rw [adjoin_eq_span] at hm
state_before: case intro
R : Type u_1
M : Type u_2
inst✝² : AddCommMonoid M
inst✝¹ : CommRing R
inst✝ : Nontrivial R
h : FiniteType R (AddMonoidAlgebra R M)
S : Finset M
hS : adjoin R (of' R M '' ↑S) = ⊤
m : M
hm : of' R M m ∈ ↑Subalgebra.toSubmodule (adjoin R (of' R M '' ↑S))
⊢ m ∈ closure ↑S

tactic: exact mem_closure_of_mem_span_closure hm
state_before: case intro
R : Type u_1
M : Type u_2
inst✝² : AddCommMonoid M
inst✝¹ : CommRing R
inst✝ : Nontrivial R
h : FiniteType R (AddMonoidAlgebra R M)
S : Finset M
hS : adjoin R (of' R M '' ↑S) = ⊤
m : M
hm : of' R M m ∈ span R ↑(Submonoid.closure (of' R M '' ↑S))
⊢ m ∈ closure ↑S

tactic: simp only [hS, top_toSubmodule, Submodule.mem_top]
state_before: R : Type u_1
M : Type u_2
inst✝² : AddCommMonoid M
inst✝¹ : CommRing R
inst✝ : Nontrivial R
h : FiniteType R (AddMonoidAlgebra R M)
S : Finset M
hS : adjoin R (of' R M '' ↑S) = ⊤
m : M
⊢ of' R M m ∈ ↑Subalgebra.toSubmodule (adjoin R (of' R M '' ↑S))
Theorem: Ordinal.mul_add_mod_self
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: rcases eq_or_ne x 0 with rfl | hx
state_before: α : Type ?u.265351
β : Type ?u.265354
γ : Type ?u.265357
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
x y z : Ordinal
⊢ (x * y + z) % x = z % x

tactic: simp
state_before: case inl
α : Type ?u.265351
β : Type ?u.265354
γ : Type ?u.265357
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
y z : Ordinal
⊢ (0 * y + z) % 0 = z % 0

tactic: rwa [mod_def, mul_add_div, mul_add, ← sub_sub, add_sub_cancel, mod_def]
state_before: case inr
α : Type ?u.265351
β : Type ?u.265354
γ : Type ?u.265357
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
x y z : Ordinal
hx : x ≠ 0
⊢ (x * y + z) % x = z % x
Theorem: Lagrange.degree_interpolate_lt
File: Mathlib/LinearAlgebra/Lagrange.lean

tactic: rw [Nat.cast_withBot]
state_before: F : Type u_2
inst✝¹ : Field F
ι : Type u_1
inst✝ : DecidableEq ι
s t : Finset ι
i j : ι
v r r' : ι → F
hvs : Set.InjOn v ↑s
⊢ degree (↑(interpolate s v) r) < ↑(card s)

tactic: rcases eq_empty_or_nonempty s with (rfl | h)
state_before: F : Type u_2
inst✝¹ : Field F
ι : Type u_1
inst✝ : DecidableEq ι
s t : Finset ι
i j : ι
v r r' : ι → F
hvs : Set.InjOn v ↑s
⊢ degree (↑(interpolate s v) r) < ↑(card s)

tactic: rw [interpolate_empty, degree_zero, card_empty]
state_before: case inl
F : Type u_2
inst✝¹ : Field F
ι : Type u_1
inst✝ : DecidableEq ι
t : Finset ι
i j : ι
v r r' : ι → F
hvs : Set.InjOn v ↑∅
⊢ degree (↑(interpolate ∅ v) r) < ↑(card ∅)

tactic: exact WithBot.bot_lt_coe _
state_before: case inl
F : Type u_2
inst✝¹ : Field F
ι : Type u_1
inst✝ : DecidableEq ι
t : Finset ι
i j : ι
v r r' : ι → F
hvs : Set.InjOn v ↑∅
⊢ ⊥ < ↑0

tactic: refine' lt_of_le_of_lt (degree_interpolate_le _ hvs) _
state_before: case inr
F : Type u_2
inst✝¹ : Field F
ι : Type u_1
inst✝ : DecidableEq ι
s t : Finset ι
i j : ι
v r r' : ι → F
hvs : Set.InjOn v ↑s
h : Finset.Nonempty s
⊢ degree (↑(interpolate s v) r) < ↑(card s)

tactic: rw [Nat.cast_withBot, WithBot.coe_lt_coe]
state_before: case inr
F : Type u_2
inst✝¹ : Field F
ι : Type u_1
inst✝ : DecidableEq ι
s t : Finset ι
i j : ι
v r r' : ι → F
hvs : Set.InjOn v ↑s
h : Finset.Nonempty s
⊢ ↑(card s - 1) < ↑(card s)

tactic: exact Nat.sub_lt (Nonempty.card_pos h) zero_lt_one
state_before: case inr
F : Type u_2
inst✝¹ : Field F
ι : Type u_1
inst✝ : DecidableEq ι
s t : Finset ι
i j : ι
v r r' : ι → F
hvs : Set.InjOn v ↑s
h : Finset.Nonempty s
⊢ card s - 1 < card s