tasksource/leandojo huggingface dataset:
Theorem: EMetric.hausdorffEdist_closure₁
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: refine' le_antisymm _ _
state_before: ι : Sort ?u.52150
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
⊢ hausdorffEdist (closure s) t = hausdorffEdist s t

tactic: calc
  _ ≤ hausdorffEdist (closure s) s + hausdorffEdist s t := hausdorffEdist_triangle
  _ = hausdorffEdist s t := by simp [hausdorffEdist_comm]
state_before: case refine'_1
ι : Sort ?u.52150
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
⊢ hausdorffEdist (closure s) t ≤ hausdorffEdist s t

tactic: simp [hausdorffEdist_comm]
state_before: ι : Sort ?u.52150
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
⊢ hausdorffEdist (closure s) s + hausdorffEdist s t = hausdorffEdist s t

tactic: calc
  _ ≤ hausdorffEdist s (closure s) + hausdorffEdist (closure s) t := hausdorffEdist_triangle
  _ = hausdorffEdist (closure s) t := by simp
state_before: case refine'_2
ι : Sort ?u.52150
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
⊢ hausdorffEdist s t ≤ hausdorffEdist (closure s) t

tactic: simp
state_before: ι : Sort ?u.52150
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
⊢ hausdorffEdist s (closure s) + hausdorffEdist (closure s) t = hausdorffEdist (closure s) t
Theorem: SubMulAction.subset_coe_pow
File: Mathlib/GroupTheory/GroupAction/SubMulAction/Pointwise.lean

tactic: rw [pow_zero, pow_zero]
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : Monoid R
inst✝³ : MulAction R M
inst✝² : Monoid M
inst✝¹ : IsScalarTower R M M
inst✝ : SMulCommClass R M M
p : SubMulAction R M
⊢ ↑p ^ 0 ⊆ ↑(p ^ 0)

tactic: exact subset_coe_one
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : Monoid R
inst✝³ : MulAction R M
inst✝² : Monoid M
inst✝¹ : IsScalarTower R M M
inst✝ : SMulCommClass R M M
p : SubMulAction R M
⊢ 1 ⊆ ↑1

tactic: rw [← Nat.succ_eq_add_one, coe_pow _ n.succ_ne_zero]
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : Monoid R
inst✝³ : MulAction R M
inst✝² : Monoid M
inst✝¹ : IsScalarTower R M M
inst✝ : SMulCommClass R M M
p : SubMulAction R M
n : ℕ
⊢ ↑p ^ (n + 1) ⊆ ↑(p ^ (n + 1))
Theorem: Cardinal.mul_eq_left
File: Mathlib/SetTheory/Cardinal/Ordinal.lean

tactic: rw [mul_eq_max_of_aleph0_le_left ha hb', max_eq_left hb]
state_before: a b : Cardinal
ha : ℵ₀ ≤ a
hb : b ≤ a
hb' : b ≠ 0
⊢ a * b = a
Theorem: WithBot.monotone_map_iff
File: Mathlib/Order/WithBot.lean

tactic: simp [Monotone]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.28695
δ : Type ?u.28698
a b : α
inst✝¹ : Preorder α
inst✝ : Preorder β
f : α → β
⊢ ((Monotone fun a => map f ↑a) ∧ ∀ (x : α), map f ⊥ ≤ map f ↑x) ↔ Monotone f
Theorem: ZMod.χ₈'_nat_eq_if_mod_eight
File: Mathlib/NumberTheory/LegendreSymbol/ZModChar.lean

tactic: exact_mod_cast χ₈'_int_eq_if_mod_eight n
state_before: n : ℕ
⊢ ↑χ₈' ↑n = if n % 2 = 0 then 0 else if n % 8 = 1 ∨ n % 8 = 3 then 1 else -1
Theorem: SimpleGraph.chromaticNumber_top
File: Mathlib/Combinatorics/SimpleGraph/Coloring.lean

tactic: apply chromaticNumber_eq_card_of_forall_surj (selfColoring _)
state_before: V : Type u
G : SimpleGraph V
α : Type v
C : Coloring G α
inst✝ : Fintype V
⊢ chromaticNumber ⊤ = Fintype.card V

tactic: intro C
state_before: V : Type u
G : SimpleGraph V
α : Type v
C : Coloring G α
inst✝ : Fintype V
⊢ ∀ (C' : Coloring ⊤ V), Function.Surjective ↑C'

tactic: rw [← Finite.injective_iff_surjective]
state_before: V : Type u
G : SimpleGraph V
α : Type v
C✝ : Coloring G α
inst✝ : Fintype V
C : Coloring ⊤ V
⊢ Function.Surjective ↑C

tactic: intro v w
state_before: V : Type u
G : SimpleGraph V
α : Type v
C✝ : Coloring G α
inst✝ : Fintype V
C : Coloring ⊤ V
⊢ Function.Injective ↑C

tactic: contrapose
state_before: V : Type u
G : SimpleGraph V
α : Type v
C✝ : Coloring G α
inst✝ : Fintype V
C : Coloring ⊤ V
v w : V
⊢ ↑C v = ↑C w → v = w

tactic: intro h
state_before: V : Type u
G : SimpleGraph V
α : Type v
C✝ : Coloring G α
inst✝ : Fintype V
C : Coloring ⊤ V
v w : V
⊢ ¬v = w → ¬↑C v = ↑C w

tactic: exact C.valid h
state_before: V : Type u
G : SimpleGraph V
α : Type v
C✝ : Coloring G α
inst✝ : Fintype V
C : Coloring ⊤ V
v w : V
h : ¬v = w
⊢ ¬↑C v = ↑C w
Theorem: CategoryTheory.Equivalence.functor_asEquivalence
File: Mathlib/CategoryTheory/Equivalence.lean

tactic: cases E
state_before: C : Type u₁
inst✝¹ : Category C
D : Type u₂
inst✝ : Category D
E : C ≌ D
⊢ asEquivalence E.functor = E

tactic: congr
state_before: case mk'
C : Type u₁
inst✝¹ : Category C
D : Type u₂
inst✝ : Category D
functor✝ : C ⥤ D
inverse✝ : D ⥤ C
unitIso✝ : 𝟭 C ≅ functor✝ ⋙ inverse✝
counitIso✝ : inverse✝ ⋙ functor✝ ≅ 𝟭 D
functor_unitIso_comp✝ :
  ∀ (X : C), functor✝.map (unitIso✝.hom.app X) ≫ counitIso✝.hom.app (functor✝.obj X) = 𝟙 (functor✝.obj X)
⊢ asEquivalence (mk' functor✝ inverse✝ unitIso✝ counitIso✝).functor = mk' functor✝ inverse✝ unitIso✝ counitIso✝
Theorem: Balanced.neg_mem_iff
File: Mathlib/Analysis/LocallyConvex/Basic.lean

tactic: convert hs.mem_smul_iff (x := x) (norm_neg 1) using 0
state_before: 𝕜 : Type u_1
𝕝 : Type ?u.117311
E : Type u_2
ι : Sort ?u.117317
κ : ι → Sort ?u.117322
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedRing 𝕝
inst✝⁴ : NormedSpace 𝕜 𝕝
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : SMulWithZero 𝕝 E
inst✝ : IsScalarTower 𝕜 𝕝 E
s t u v A B : Set E
x : E
a b : 𝕜
hs : Balanced 𝕜 s
⊢ -x ∈ s ↔ x ∈ s

tactic: simp only [neg_smul, one_smul 𝕜 x]
state_before: case a
𝕜 : Type u_1
𝕝 : Type ?u.117311
E : Type u_2
ι : Sort ?u.117317
κ : ι → Sort ?u.117322
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedRing 𝕝
inst✝⁴ : NormedSpace 𝕜 𝕝
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : SMulWithZero 𝕝 E
inst✝ : IsScalarTower 𝕜 𝕝 E
s t u v A B : Set E
x : E
a b : 𝕜
hs : Balanced 𝕜 s
⊢ (-x ∈ s ↔ x ∈ s) ↔ (-1 • x ∈ s ↔ 1 • x ∈ s)
Theorem: List.sublists_concat
File: Mathlib/Data/List/Sublists.lean

tactic: rw [sublists_append, sublists_singleton, bind_eq_bind, cons_bind, cons_bind, nil_bind,
   map_id' append_nil, append_nil]
state_before: α : Type u
β : Type v
γ : Type w
l : List α
a : α
⊢ sublists (l ++ [a]) = sublists l ++ map (fun x => x ++ [a]) (sublists l)
Theorem: List.length_replicate
File: src/lean/Init/Data/List/Basic.lean

tactic: induction n <;> simp_all
state_before: α : Type u
β : Type v
γ : Type w
n : Nat
a : α
⊢ length (replicate n a) = n
Theorem: Polynomial.lifts_iff_liftsRing
File: Mathlib/Data/Polynomial/Lifts.lean

tactic: simp only [lifts, liftsRing, RingHom.mem_range, RingHom.mem_rangeS]
state_before: R : Type u
inst✝¹ : Ring R
S : Type v
inst✝ : Ring S
f : R →+* S
p : S[X]
⊢ p ∈ lifts f ↔ p ∈ liftsRing f
Theorem: Set.Ici_sSup
File: Mathlib/Data/Set/Lattice.lean

tactic: rw [sSup_eq_iSup, Ici_iSup₂]
state_before: α : Type u_1
β : Type ?u.297530
γ : Type ?u.297533
ι : Sort ?u.297536
ι' : Sort ?u.297539
ι₂ : Sort ?u.297542
κ : ι → Sort ?u.297547
κ₁ : ι → Sort ?u.297552
κ₂ : ι → Sort ?u.297557
κ' : ι' → Sort ?u.297562
inst✝ : CompleteLattice α
s : Set α
⊢ Ici (sSup s) = ⋂ (a : α) (_ : a ∈ s), Ici a
Theorem: FreeLieAlgebra.Rel.smulOfTower
File: Mathlib/Algebra/Lie/Free.lean

tactic: rw [← smul_one_smul R t a, ← smul_one_smul R t b]
state_before: R : Type u
X : Type v
inst✝³ : CommRing R
S : Type u_1
inst✝² : Monoid S
inst✝¹ : DistribMulAction S R
inst✝ : IsScalarTower S R R
t : S
a b : lib R X
h : Rel R X a b
⊢ Rel R X (t • a) (t • b)

tactic: exact h.smul _
state_before: R : Type u
X : Type v
inst✝³ : CommRing R
S : Type u_1
inst✝² : Monoid S
inst✝¹ : DistribMulAction S R
inst✝ : IsScalarTower S R R
t : S
a b : lib R X
h : Rel R X a b
⊢ Rel R X ((t • 1) • a) ((t • 1) • b)
Theorem: Int.units_eq_one_or
File: Mathlib/Data/Int/Units.lean

tactic: simpa only [Units.ext_iff, units_natAbs] using natAbs_eq u
state_before: u : ℤˣ
⊢ u = 1 ∨ u = -1
Theorem: String.extract.go₁_zero_utf8Len
File: Std/Data/String/Lemmas.lean

tactic: simpa using go₂_append_left s [] 0 (utf8Len s) rfl
state_before: s : List Char
⊢ go₂ s { byteIdx := 0 } { byteIdx := utf8Len s } = s
Theorem: IsPrimePow.minFac_pow_factorization_eq
File: Mathlib/Data/Nat/Factorization/PrimePow.lean

tactic: obtain ⟨p, k, hp, hk, rfl⟩ := hn
state_before: R : Type ?u.14
inst✝ : CommMonoidWithZero R
n✝ p : R
k n : ℕ
hn : IsPrimePow n
⊢ Nat.minFac n ^ ↑(Nat.factorization n) (Nat.minFac n) = n

tactic: rw [← Nat.prime_iff] at hp
state_before: case intro.intro.intro.intro
R : Type ?u.14
inst✝ : CommMonoidWithZero R
n p✝ : R
k✝ p k : ℕ
hp : Prime p
hk : 0 < k
⊢ Nat.minFac (p ^ k) ^ ↑(Nat.factorization (p ^ k)) (Nat.minFac (p ^ k)) = p ^ k

tactic: rw [hp.pow_minFac hk.ne', hp.factorization_pow, Finsupp.single_eq_same]
state_before: case intro.intro.intro.intro
R : Type ?u.14
inst✝ : CommMonoidWithZero R
n p✝ : R
k✝ p k : ℕ
hp : Nat.Prime p
hk : 0 < k
⊢ Nat.minFac (p ^ k) ^ ↑(Nat.factorization (p ^ k)) (Nat.minFac (p ^ k)) = p ^ k
Theorem: Finset.preimage_mul_left_singleton
File: Mathlib/Data/Finset/Pointwise.lean

tactic: classical rw [← image_mul_left', image_singleton]
state_before: F : Type ?u.671388
α : Type u_1
β : Type ?u.671394
γ : Type ?u.671397
inst✝ : Group α
s t : Finset α
a b : α
⊢ preimage {b} ((fun x x_1 => x * x_1) a)
      (_ : Set.InjOn ((fun x x_1 => x * x_1) a) ((fun x x_1 => x * x_1) a ⁻¹' ↑{b})) =
    {a⁻¹ * b}

tactic: rw [← image_mul_left', image_singleton]
state_before: F : Type ?u.671388
α : Type u_1
β : Type ?u.671394
γ : Type ?u.671397
inst✝ : Group α
s t : Finset α
a b : α
⊢ preimage {b} ((fun x x_1 => x * x_1) a)
      (_ : Set.InjOn ((fun x x_1 => x * x_1) a) ((fun x x_1 => x * x_1) a ⁻¹' ↑{b})) =
    {a⁻¹ * b}
Theorem: Sum.LiftRel.lex
File: Mathlib/Data/Sum/Basic.lean

tactic: cases h
state_before: α : Type u
α' : Type w
β : Type v
β' : Type x
γ : Type ?u.30404
δ : Type ?u.30407
r r₁ r₂ : α → α → Prop
s s₁ s₂ : β → β → Prop
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
x y a b : α ⊕ β
h : LiftRel r s a b
⊢ Lex r s a b

tactic: exact Lex.inl ‹_›
state_before: case inl
α : Type u
α' : Type w
β : Type v
β' : Type x
γ : Type ?u.30404
δ : Type ?u.30407
r r₁ r₂ : α → α → Prop
s s₁ s₂ : β → β → Prop
a a₁ a₂ : α
b b₁ b₂ : β
x y : α ⊕ β
a✝¹ c✝ : α
a✝ : r a✝¹ c✝
⊢ Lex r s (inl a✝¹) (inl c✝)

tactic: exact Lex.inr ‹_›
state_before: case inr
α : Type u
α' : Type w
β : Type v
β' : Type x
γ : Type ?u.30404
δ : Type ?u.30407
r r₁ r₂ : α → α → Prop
s s₁ s₂ : β → β → Prop
a a₁ a₂ : α
b b₁ b₂ : β
x y : α ⊕ β
b✝ d✝ : β
a✝ : s b✝ d✝
⊢ Lex r s (inr b✝) (inr d✝)
Theorem: Stream'.Seq1.map_id
File: Mathlib/Data/Seq/Seq.lean

tactic: simp [map]
state_before: α : Type u
β : Type v
γ : Type w
a : α
s : Seq α
⊢ map id (a, s) = (a, s)
Theorem: borel_eq_generateFrom_Ioc
File: Mathlib/MeasureTheory/Constructions/BorelSpace/Basic.lean

tactic: simpa only [exists_prop, mem_univ, true_and_iff] using
  (@dense_univ α _).borel_eq_generateFrom_Ioc_mem_aux (fun _ _ => mem_univ _) fun _ _ _ _ =>
    mem_univ _
state_before: α✝ : Type ?u.674070
β : Type ?u.674073
γ : Type ?u.674076
γ₂ : Type ?u.674079
δ : Type ?u.674082
ι : Sort y
s t u : Set α✝
inst✝²⁰ : TopologicalSpace α✝
inst✝¹⁹ : MeasurableSpace α✝
inst✝¹⁸ : OpensMeasurableSpace α✝
inst✝¹⁷ : TopologicalSpace β
inst✝¹⁶ : MeasurableSpace β
inst✝¹⁵ : OpensMeasurableSpace β
inst✝¹⁴ : TopologicalSpace γ
inst✝¹³ : MeasurableSpace γ
inst✝¹² : BorelSpace γ
inst✝¹¹ : TopologicalSpace γ₂
inst✝¹⁰ : MeasurableSpace γ₂
inst✝⁹ : BorelSpace γ₂
inst✝⁸ : MeasurableSpace δ
α' : Type ?u.674175
inst✝⁷ : TopologicalSpace α'
inst✝⁶ : MeasurableSpace α'
inst✝⁵ : LinearOrder α✝
inst✝⁴ : OrderClosedTopology α✝
a b x : α✝
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : SecondCountableTopology α
inst✝¹ : LinearOrder α
inst✝ : OrderTopology α
⊢ borel α = MeasurableSpace.generateFrom {S | ∃ l u, l < u ∧ Ioc l u = S}
Theorem: CategoryTheory.Limits.HasZeroObject.zeroIsoIsTerminal_hom
File: Mathlib/CategoryTheory/Limits/Shapes/ZeroMorphisms.lean

tactic: ext
state_before: C : Type u
inst✝³ : Category C
D : Type u'
inst✝² : Category D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
X : C
t : IsTerminal X
⊢ (zeroIsoIsTerminal t).hom = 0
Theorem: ENNReal.mul_rpow_of_ne_zero
File: Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean

tactic: simp [*, mul_rpow_eq_ite]
state_before: x y : ℝ≥0∞
hx : x ≠ 0
hy : y ≠ 0
z : ℝ
⊢ (x * y) ^ z = x ^ z * y ^ z
Theorem: Int.mod_one
File: Std/Data/Int/DivMod.lean

tactic: simp [mod_def, Int.div_one, Int.one_mul, Int.sub_self]
state_before: a : Int
⊢ mod a 1 = 0
Theorem: EMetric.infEdist_le_hausdorffEdist_of_mem
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: rw [hausdorffEdist_def]
state_before: ι : Sort ?u.37567
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
h : x ∈ s
⊢ infEdist x t ≤ hausdorffEdist s t

tactic: refine le_trans ?_ le_sup_left
state_before: ι : Sort ?u.37567
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
h : x ∈ s
⊢ infEdist x t ≤ (⨆ (x : α) (_ : x ∈ s), infEdist x t) ⊔ ⨆ (y : α) (_ : y ∈ t), infEdist y s

tactic: exact le_iSup₂ (α := ℝ≥0∞) x h
state_before: ι : Sort ?u.37567
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
h : x ∈ s
⊢ infEdist x t ≤ ⨆ (x : α) (_ : x ∈ s), infEdist x t
Theorem: LieHom.range_eq_top
File: Mathlib/Algebra/Lie/Submodule.lean

tactic: rw [← LieSubalgebra.coe_to_submodule_eq_iff, range_coeSubmodule, LieSubalgebra.top_coe_submodule]
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
⊢ range f = ⊤ ↔ Function.Surjective ↑f

tactic: exact LinearMap.range_eq_top
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
⊢ LinearMap.range ↑f = ⊤ ↔ Function.Surjective ↑f
Theorem: Subalgebra.isAlgebraic_iff
File: Mathlib/RingTheory/Algebraic.lean

tactic: delta Algebra.IsAlgebraic Subalgebra.IsAlgebraic
state_before: R : Type u
A : Type v
inst✝² : CommRing R
inst✝¹ : Ring A
inst✝ : Algebra R A
S : Subalgebra R A
⊢ IsAlgebraic S ↔ Algebra.IsAlgebraic R { x // x ∈ S }

tactic: rw [Subtype.forall']
state_before: R : Type u
A : Type v
inst✝² : CommRing R
inst✝¹ : Ring A
inst✝ : Algebra R A
S : Subalgebra R A
⊢ (∀ (x : A), x ∈ S → _root_.IsAlgebraic R x) ↔ ∀ (x : { x // x ∈ S }), _root_.IsAlgebraic R x

tactic: refine' forall_congr' fun x => exists_congr fun p => and_congr Iff.rfl _
state_before: R : Type u
A : Type v
inst✝² : CommRing R
inst✝¹ : Ring A
inst✝ : Algebra R A
S : Subalgebra R A
⊢ (∀ (x : { a // a ∈ S }), _root_.IsAlgebraic R ↑x) ↔ ∀ (x : { x // x ∈ S }), _root_.IsAlgebraic R x

tactic: have h : Function.Injective S.val := Subtype.val_injective
state_before: R : Type u
A : Type v
inst✝² : CommRing R
inst✝¹ : Ring A
inst✝ : Algebra R A
S : Subalgebra R A
x : { a // a ∈ S }
p : R[X]
⊢ ↑(aeval ↑x) p = 0 ↔ ↑(aeval x) p = 0

tactic: conv_rhs => rw [← h.eq_iff, AlgHom.map_zero]
state_before: R : Type u
A : Type v
inst✝² : CommRing R
inst✝¹ : Ring A
inst✝ : Algebra R A
S : Subalgebra R A
x : { a // a ∈ S }
p : R[X]
h : Function.Injective ↑(val S)
⊢ ↑(aeval ↑x) p = 0 ↔ ↑(aeval x) p = 0

tactic: rw [← aeval_algHom_apply, S.val_apply]
state_before: R : Type u
A : Type v
inst✝² : CommRing R
inst✝¹ : Ring A
inst✝ : Algebra R A
S : Subalgebra R A
x : { a // a ∈ S }
p : R[X]
h : Function.Injective ↑(val S)
⊢ ↑(aeval ↑x) p = 0 ↔ ↑(val S) (↑(aeval x) p) = 0
Theorem: PadicSeq.norm_const
File: Mathlib/NumberTheory/Padics/PadicNumbers.lean

tactic: have : const (padicNorm p) q ≈ 0 := by simp [hq]; apply Setoid.refl (const (padicNorm p) 0)
state_before: p : ℕ
hp : Fact (Nat.Prime p)
q : ℚ
hq : q = 0
⊢ norm (const (padicNorm p) q) = padicNorm p q

tactic: subst hq
state_before: p : ℕ
hp : Fact (Nat.Prime p)
q : ℚ
hq : q = 0
this : const (padicNorm p) q ≈ 0
⊢ norm (const (padicNorm p) q) = padicNorm p q

tactic: simp [norm, this]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
this : const (padicNorm p) 0 ≈ 0
⊢ norm (const (padicNorm p) 0) = padicNorm p 0

tactic: simp [hq]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
q : ℚ
hq : q = 0
⊢ const (padicNorm p) q ≈ 0

tactic: apply Setoid.refl (const (padicNorm p) 0)
state_before: p : ℕ
hp : Fact (Nat.Prime p)
q : ℚ
hq : q = 0
⊢ 0 ≈ 0

tactic: have : ¬const (padicNorm p) q ≈ 0 := not_equiv_zero_const_of_nonzero hq
state_before: p : ℕ
hp : Fact (Nat.Prime p)
q : ℚ
hq : ¬q = 0
⊢ norm (const (padicNorm p) q) = padicNorm p q

tactic: simp [norm, this]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
q : ℚ
hq : ¬q = 0
this : ¬const (padicNorm p) q ≈ 0
⊢ norm (const (padicNorm p) q) = padicNorm p q
Theorem: abs_one_div
File: Mathlib/Algebra/Order/Field/Basic.lean

tactic: rw [abs_div, abs_one]
state_before: ι : Type ?u.201202
α : Type u_1
β : Type ?u.201208
inst✝ : LinearOrderedField α
a✝ b c d : α
n : ℤ
a : α
⊢ abs (1 / a) = 1 / abs a
Theorem: completeSpace_congr
File: Mathlib/Topology/UniformSpace/UniformEmbedding.lean

tactic: rw [completeSpace_iff_isComplete_range he.toUniformInducing, e.range_eq_univ,
  completeSpace_iff_isComplete_univ]
state_before: α : Type u
β : Type v
γ : Type w
inst✝² : UniformSpace α
inst✝¹ : UniformSpace β
inst✝ : UniformSpace γ
e : α ≃ β
he : UniformEmbedding ↑e
⊢ CompleteSpace α ↔ CompleteSpace β
Theorem: LocalHomeomorph.isLocalStructomorphWithinAt_source_iff
File: Mathlib/Geometry/Manifold/LocalInvariantProperties.lean

tactic: simp_rw [union_compl_self, mem_univ]
state_before: H : Type u_1
M : Type ?u.71024
H' : Type ?u.71027
M' : Type ?u.71030
X : Type ?u.71033
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
inst✝⁵ : ChartedSpace H M
inst✝⁴ : TopologicalSpace H'
inst✝³ : TopologicalSpace M'
inst✝² : ChartedSpace H' M'
inst✝¹ : TopologicalSpace X
G✝ : StructureGroupoid H
G' : StructureGroupoid H'
e e' : LocalHomeomorph M H
f✝ f' : LocalHomeomorph M' H'
P : (H → H') → Set H → H → Prop
g g' : M → M'
s t : Set M
x✝ : M
Q : (H → H) → Set H → H → Prop
G : StructureGroupoid H
inst✝ : ClosedUnderRestriction G
f : LocalHomeomorph H H
x : H
⊢ x ∈ f.source ∪ f.sourceᶜ
Theorem: Finset.image₂_singleton_right
File: Mathlib/Data/Finset/NAry.lean

tactic: simp
state_before: α : Type u_2
α' : Type ?u.29712
β : Type u_3
β' : Type ?u.29718
γ : Type u_1
γ' : Type ?u.29724
δ : Type ?u.29727
δ' : Type ?u.29730
ε : Type ?u.29733
ε' : Type ?u.29736
ζ : Type ?u.29739
ζ' : Type ?u.29742
ν : Type ?u.29745
inst✝⁷ : DecidableEq α'
inst✝⁶ : DecidableEq β'
inst✝⁵ : DecidableEq γ
inst✝⁴ : DecidableEq γ'
inst✝³ : DecidableEq δ
inst✝² : DecidableEq δ'
inst✝¹ : DecidableEq ε
inst✝ : DecidableEq ε'
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c x : γ
⊢ x ∈ image₂ f s {b} ↔ x ∈ image (fun a => f a b) s
Theorem: StarSubalgebra.bot_toSubalgebra
File: Mathlib/Algebra/Star/Subalgebra.lean

tactic: change Algebra.adjoin R (∅ ∪ star ∅) = Algebra.adjoin R ∅
state_before: F : Type ?u.698810
R : Type u_2
A : Type u_1
B : Type ?u.698819
inst✝⁹ : CommSemiring R
inst✝⁸ : StarRing R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : StarRing A
inst✝⁴ : StarModule R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : StarRing B
inst✝ : StarModule R B
⊢ ⊥.toSubalgebra = ⊥

tactic: simp
state_before: F : Type ?u.698810
R : Type u_2
A : Type u_1
B : Type ?u.698819
inst✝⁹ : CommSemiring R
inst✝⁸ : StarRing R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : StarRing A
inst✝⁴ : StarModule R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : StarRing B
inst✝ : StarModule R B
⊢ Algebra.adjoin R (∅ ∪ star ∅) = Algebra.adjoin R ∅
Theorem: InnerProductGeometry.sin_angle_add_mul_norm_of_inner_eq_zero
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/RightAngle.lean

tactic: by_cases h0 : x = 0 ∧ y = 0
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : inner x y = 0
⊢ Real.sin (angle x (x + y)) * ‖x + y‖ = ‖y‖

tactic: rw [not_and_or] at h0
state_before: case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : inner x y = 0
h0 : ¬(x = 0 ∧ y = 0)
⊢ Real.sin (angle x (x + y)) * ‖x + y‖ = ‖y‖

tactic: rw [sin_angle_add_of_inner_eq_zero h h0, div_mul_cancel]
state_before: case neg
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : inner x y = 0
h0 : ¬x = 0 ∨ ¬y = 0
⊢ Real.sin (angle x (x + y)) * ‖x + y‖ = ‖y‖

tactic: rw [← mul_self_ne_zero, norm_add_sq_eq_norm_sq_add_norm_sq_real h]
state_before: case neg.h
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : inner x y = 0
h0 : ¬x = 0 ∨ ¬y = 0
⊢ ‖x + y‖ ≠ 0

tactic: refine' (ne_of_lt _).symm
state_before: case neg.h
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : inner x y = 0
h0 : ¬x = 0 ∨ ¬y = 0
⊢ ‖x‖ * ‖x‖ + ‖y‖ * ‖y‖ ≠ 0

tactic: rcases h0 with (h0 | h0)
state_before: case neg.h
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : inner x y = 0
h0 : ¬x = 0 ∨ ¬y = 0
⊢ 0 < ‖x‖ * ‖x‖ + ‖y‖ * ‖y‖

tactic: simp [h0]
state_before: case pos
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : inner x y = 0
h0 : x = 0 ∧ y = 0
⊢ Real.sin (angle x (x + y)) * ‖x + y‖ = ‖y‖

tactic: exact Left.add_pos_of_pos_of_nonneg (mul_self_pos.2 (norm_ne_zero_iff.2 h0)) (mul_self_nonneg _)
state_before: case neg.h.inl
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : inner x y = 0
h0 : ¬x = 0
⊢ 0 < ‖x‖ * ‖x‖ + ‖y‖ * ‖y‖

tactic: exact Left.add_pos_of_nonneg_of_pos (mul_self_nonneg _) (mul_self_pos.2 (norm_ne_zero_iff.2 h0))
state_before: case neg.h.inr
V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : inner x y = 0
h0 : ¬y = 0
⊢ 0 < ‖x‖ * ‖x‖ + ‖y‖ * ‖y‖
Theorem: FreeProduct.NeWord.prod_singleton
File: Mathlib/GroupTheory/FreeProduct.lean

tactic: simp [toWord, prod, Word.prod]
state_before: ι : Type u_2
M : ι → Type u_1
inst✝¹ : (i : ι) → Monoid (M i)
N : Type ?u.597231
inst✝ : Monoid N
i : ι
x : M i
hne_one : x ≠ 1
⊢ prod (singleton x hne_one) = ↑of x
Theorem: Cardinal.principal_add_ord
File: Mathlib/SetTheory/Cardinal/Ordinal.lean

tactic: rw [lt_ord, Ordinal.card_add] at *
state_before: c : Cardinal
hc : ℵ₀ ≤ c
a b : Ordinal
ha : a < ord c
hb : b < ord c
⊢ (fun x x_1 => x + x_1) a b < ord c

tactic: exact add_lt_of_lt hc ha hb
state_before: c : Cardinal
hc : ℵ₀ ≤ c
a b : Ordinal
ha : card a < c
hb : card b < c
⊢ card a + card b < c
Theorem: List.insertNthTR_go_eq
File: Std/Data/List/Basic.lean

tactic: simp [insertNthTR.go, insertNth]
state_before: α✝ : Type u_1
a : α✝
acc : Array α✝
n✝ : Nat
⊢ insertNthTR.go a (n✝ + 1) [] acc = acc.data ++ insertNth (n✝ + 1) a []

tactic: simp [insertNthTR.go, insertNth, insertNthTR_go_eq n l]
state_before: α✝ : Type u_1
a✝ : α✝
acc : Array α✝
n : Nat
a : α✝
l : List α✝
⊢ insertNthTR.go a✝ (n + 1) (a :: l) acc = acc.data ++ insertNth (n + 1) a✝ (a :: l)
Theorem: Finset.prod_Ioc_succ_top
File: Mathlib/Algebra/BigOperators/Intervals.lean

tactic: rw [← prod_Ioc_consecutive _ hab (Nat.le_succ b), Nat.Ioc_succ_singleton, prod_singleton]
state_before: α : Type u
β : Type v
γ : Type w
s₂ s₁ s : Finset α
a✝ : α
g f✝ : α → β
inst✝ : CommMonoid β
a b : ℕ
hab : a ≤ b
f : ℕ → β
⊢ ∏ k in Ioc a (b + 1), f k = (∏ k in Ioc a b, f k) * f (b + 1)