harrywsanders/mathlib_extracted huggingface dataset:
-- Mathlib/Topology/MetricSpace/CantorScheme.lean
theorem Disjoint.map_injective (hA : CantorScheme.Disjoint A) : Injective (inducedMap A).2

Proof state:
case mk.mk.h.succ
β : Type u_1
α : Type u_2
A : List β → Set α
hA : CantorScheme.Disjoint A
x : ℕ → β
hx : x ∈ (inducedMap A).fst
y : ℕ → β
hy : y ∈ (inducedMap A).fst
hxy : (inducedMap A).snd ⟨x, hx⟩ = (inducedMap A).snd ⟨y, hy⟩
n : ℕ
ih : res x n = res y n
⊢ x n = y n

Tactic:
contrapose hA

Result:
case mk.mk.h.succ
β : Type u_1
α : Type u_2
A : List β → Set α
x : ℕ → β
hx : x ∈ (inducedMap A).fst
y : ℕ → β
hy : y ∈ (inducedMap A).fst
hxy : (inducedMap A).snd ⟨x, hx⟩ = (inducedMap A).snd ⟨y, hy⟩
n : ℕ
ih : res x n = res y n
hA : ¬x n = y n
⊢ ¬CantorScheme.Disjoint A

Proof state:
case mk.mk.h.zero
β : Type u_1
α : Type u_2
A : List β → Set α
hA : CantorScheme.Disjoint A
x : ℕ → β
hx : x ∈ (inducedMap A).fst
y : ℕ → β
hy : y ∈ (inducedMap A).fst
hxy : (inducedMap A).snd ⟨x, hx⟩ = (inducedMap A).snd ⟨y, hy⟩
⊢ res x 0 = res y 0

Tactic:
simp

Result:
no goals

Proof state:
case mk.mk.h.succ
β : Type u_1
α : Type u_2
A : List β → Set α
x : ℕ → β
hx : x ∈ (inducedMap A).fst
y : ℕ → β
hy : y ∈ (inducedMap A).fst
hxy : (inducedMap A).snd ⟨x, hx⟩ = (inducedMap A).snd ⟨y, hy⟩
n : ℕ
ih : res x n = res y n
hA : ¬x n = y n
⊢ ¬_root_.Disjoint (A (x n :: res x n)) (A (y n :: res x n))

Tactic:
rw [not_disjoint_iff]

Result:
case mk.mk.h.succ
β : Type u_1
α : Type u_2
A : List β → Set α
x : ℕ → β
hx : x ∈ (inducedMap A).fst
y : ℕ → β
hy : y ∈ (inducedMap A).fst
hxy : (inducedMap A).snd ⟨x, hx⟩ = (inducedMap A).snd ⟨y, hy⟩
n : ℕ
ih : res x n = res y n
hA : ¬x n = y n
⊢ ∃ x_1 ∈ A (x n :: res x n), x_1 ∈ A (y n :: res x n)
-- Mathlib/Algebra/Homology/Refinements.lean
lemma eq_liftCycles_homologyπ_up_to_refinements {A : C} {i : ι} (γ : A ⟶ K.homology i)
    (j : ι) (hj : c.next i = j) :
    ∃ (A' : C) (π : A' ⟶ A) (_ : Epi π) (z : A' ⟶ K.X i) (hz : z ≫ K.d i j = 0),
      π ≫ γ = K.liftCycles z j hj hz ≫ K.homologyπ i

Proof state:
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
K : HomologicalComplex C c
A : C
i : ι
γ : A ⟶ K.homology i
⊢ ∃ A' π, ∃ (_ : Epi π), ∃ z, ∃ (hz : z ≫ K.d i (c.next i) = 0), π ≫ γ = K.liftCycles z (c.next i) ⋯ hz ≫ K.homologyπ i

Tactic:
exact (K.sc i).eq_liftCycles_homologyπ_up_to_refinements γ

Result:
no goals

Proof state:
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
K : HomologicalComplex C c
A : C
i : ι
γ : A ⟶ K.homology i
j : ι
hj : c.next i = j
⊢ ∃ A' π, ∃ (_ : Epi π), ∃ z, ∃ (hz : z ≫ K.d i j = 0), π ≫ γ = K.liftCycles z j hj hz ≫ K.homologyπ i

Tactic:
subst hj

Result:
C : Type u_1
ι : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
K : HomologicalComplex C c
A : C
i : ι
γ : A ⟶ K.homology i
⊢ ∃ A' π, ∃ (_ : Epi π), ∃ z, ∃ (hz : z ≫ K.d i (c.next i) = 0), π ≫ γ = K.liftCycles z (c.next i) ⋯ hz ≫ K.homologyπ i
-- Mathlib/CategoryTheory/Preadditive/Biproducts.lean
theorem biproduct.desc_eq {T : C} {g : ∀ j, f j ⟶ T} :
    biproduct.desc g = ∑ j, biproduct.π f j ≫ g j

Proof state:
case w
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
J : Type
inst✝¹ : Fintype J
f : J → C
inst✝ : HasBiproduct f
T : C
g : (j : J) → f j ⟶ T
j : J
⊢ ι f j ≫ desc g = ι f j ≫ ∑ j : J, π f j ≫ g j

Tactic:
simp [comp_sum, biproduct.ι_π_assoc, dite_comp]

Result:
no goals

Proof state:
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
J : Type
inst✝¹ : Fintype J
f : J → C
inst✝ : HasBiproduct f
T : C
g : (j : J) → f j ⟶ T
⊢ desc g = ∑ j : J, π f j ≫ g j

Tactic:
ext j

Result:
case w
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
J : Type
inst✝¹ : Fintype J
f : J → C
inst✝ : HasBiproduct f
T : C
g : (j : J) → f j ⟶ T
j : J
⊢ ι f j ≫ desc g = ι f j ≫ ∑ j : J, π f j ≫ g j

Proof state:
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
J : Type
inst✝¹ : Fintype J
f : J → C
inst✝ : HasBiproduct f
T : C
g : (j : J) → f j ⟶ T
⊢ desc g = ∑ j : J, π f j ≫ g j

Tactic:
classical
ext j
simp [comp_sum, biproduct.ι_π_assoc, dite_comp]

Result:
no goals
-- Mathlib/MeasureTheory/Constructions/BorelSpace/Metrizable.lean
theorem aemeasurable_of_tendsto_metrizable_ae {ι} {μ : Measure α} {f : ι → α → β} {g : α → β}
    (u : Filter ι) [hu : NeBot u] [IsCountablyGenerated u] (hf : ∀ n, AEMeasurable (f n) μ)
    (h_tendsto : ∀ᵐ x ∂μ, Tendsto (fun n => f n x) u (𝓝 (g x))) : AEMeasurable g μ

Proof state:
case intro.refine_1
α : Type u_1
β : Type u_2
inst✝⁵ : MeasurableSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : PseudoMetrizableSpace β
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace β
ι : Type u_3
μ : Measure α
f : ι → α → β
g : α → β
u : Filter ι
hu : u.NeBot
inst✝ : u.IsCountablyGenerated
hf : ∀ (n : ι), AEMeasurable (f n) μ
h_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun n => f n x) u (𝓝 (g x))
v : ℕ → ι
hv : Tendsto v atTop u
h'f : ∀ (n : ℕ), AEMeasurable (f (v n)) μ
p : α → (ℕ → β) → Prop := fun x f' => Tendsto (fun n => f' n) atTop (𝓝 (g x))
hp : ∀ᵐ (x : α) ∂μ, p x fun n => f (v n) x
aeSeqLim : α → β := fun x => if x ∈ aeSeqSet h'f p then g x else ⋯.some
x : α
⊢ Tendsto (fun i => if x ∈ aeSeqSet h'f p then AEMeasurable.mk (f (v i)) ⋯ x else ⋯.some) atTop
    (𝓝 (if x ∈ aeSeqSet h'f p then g x else ⋯.some))

Tactic:
split_ifs with hx

Result:
case pos
α : Type u_1
β : Type u_2
inst✝⁵ : MeasurableSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : PseudoMetrizableSpace β
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace β
ι : Type u_3
μ : Measure α
f : ι → α → β
g : α → β
u : Filter ι
hu : u.NeBot
inst✝ : u.IsCountablyGenerated
hf : ∀ (n : ι), AEMeasurable (f n) μ
h_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun n => f n x) u (𝓝 (g x))
v : ℕ → ι
hv : Tendsto v atTop u
h'f : ∀ (n : ℕ), AEMeasurable (f (v n)) μ
p : α → (ℕ → β) → Prop := fun x f' => Tendsto (fun n => f' n) atTop (𝓝 (g x))
hp : ∀ᵐ (x : α) ∂μ, p x fun n => f (v n) x
aeSeqLim : α → β := fun x => if x ∈ aeSeqSet h'f p then g x else ⋯.some
x : α
hx : x ∈ aeSeqSet h'f p
⊢ Tendsto (fun i => AEMeasurable.mk (f (v i)) ⋯ x) atTop (𝓝 (g x))

case neg
α : Type u_1
β : Type u_2
inst✝⁵ : MeasurableSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : PseudoMetrizableSpace β
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace β
ι : Type u_3
μ : Measure α
f : ι → α → β
g : α → β
u : Filter ι
hu : u.NeBot
inst✝ : u.IsCountablyGenerated
hf : ∀ (n : ι), AEMeasurable (f n) μ
h_tendsto : ∀ᵐ (x : α) ∂μ, Tendsto (fun n => f n x) u (𝓝 (g x))
v : ℕ → ι
hv : Tendsto v atTop u
h'f : ∀ (n : ℕ), AEMeasurable (f (v n)) μ
p : α → (ℕ → β) → Prop := fun x f' => Tendsto (fun n => f' n) atTop (𝓝 (g x))
hp : ∀ᵐ (x : α) ∂μ, p x fun n => f (v n) x
aeSeqLim : α → β := fun x => if x ∈ aeSeqSet h'f p then g x else ⋯.some
x : α
hx : x ∉ aeSeqSet h'f p
⊢ Tendsto (fun i => ⋯.some) atTop (𝓝 ⋯.some)
-- Mathlib/Data/Fin/Tuple/Basic.lean
theorem append_left_eq_cons {n : ℕ} (x₀ : Fin 1 → α) (x : Fin n → α) :
    Fin.append x₀ x = Fin.cons (x₀ 0) x ∘ Fin.cast (Nat.add_comm ..)

Proof state:
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
⊢ append x₀ x = cons (x₀ 0) x ∘ Fin.cast ⋯

Tactic:
ext i

Result:
case h
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin (1 + n)
⊢ append x₀ x i = (cons (x₀ 0) x ∘ Fin.cast ⋯) i

Proof state:
case h.refine_2
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin n
⊢ cons (x₀ 0) x i.succ = x i

Tactic:
exact Fin.cons_succ _ _ _

Result:
no goals

Proof state:
case h.refine_1
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
⊢ ∀ (i : Fin 1), append x₀ x (castAdd n i) = (cons (x₀ 0) x ∘ Fin.cast ⋯) (castAdd n i)

Tactic:
intro i

Result:
case h.refine_1
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin 1
⊢ append x₀ x (castAdd n i) = (cons (x₀ 0) x ∘ Fin.cast ⋯) (castAdd n i)

Proof state:
case h.refine_1
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin 1
⊢ cons (x₀ 0) x (Fin.cast ⋯ (castAdd n 0)) = x₀ 0

Tactic:
exact Fin.cons_zero _ _

Result:
no goals

Proof state:
case h.refine_2
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
⊢ ∀ (i : Fin n), append x₀ x (natAdd 1 i) = (cons (x₀ 0) x ∘ Fin.cast ⋯) (natAdd 1 i)

Tactic:
intro i

Result:
case h.refine_2
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin n
⊢ append x₀ x (natAdd 1 i) = (cons (x₀ 0) x ∘ Fin.cast ⋯) (natAdd 1 i)

Proof state:
case h
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin (1 + n)
⊢ append x₀ x i = (cons (x₀ 0) x ∘ Fin.cast ⋯) i

Tactic:
refine Fin.addCases ?_ ?_ i <;> clear i

Result:
case h.refine_1
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
⊢ ∀ (i : Fin 1), append x₀ x (castAdd n i) = (cons (x₀ 0) x ∘ Fin.cast ⋯) (castAdd n i)

case h.refine_2
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
⊢ ∀ (i : Fin n), append x₀ x (natAdd 1 i) = (cons (x₀ 0) x ∘ Fin.cast ⋯) (natAdd 1 i)

Proof state:
case h.refine_2
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin n
⊢ append x₀ x (natAdd 1 i) = (cons (x₀ 0) x ∘ Fin.cast ⋯) (natAdd 1 i)

Tactic:
rw [Fin.append_right, Function.comp_apply, Fin.cast_natAdd, eq_comm, Fin.addNat_one]

Result:
case h.refine_2
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin n
⊢ cons (x₀ 0) x i.succ = x i

Proof state:
case h.refine_1
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin 1
⊢ append x₀ x (castAdd n i) = (cons (x₀ 0) x ∘ Fin.cast ⋯) (castAdd n i)

Tactic:
rw [Subsingleton.elim i 0, Fin.append_left, Function.comp_apply, eq_comm]

Result:
case h.refine_1
α : Sort u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin 1
⊢ cons (x₀ 0) x (Fin.cast ⋯ (castAdd n 0)) = x₀ 0
-- Mathlib/Analysis/Convex/Join.lean
theorem convexJoin_iUnion_left (s : ι → Set E) (t : Set E) :
    convexJoin 𝕜 (⋃ i, s i) t = ⋃ i, convexJoin 𝕜 (s i) t

Proof state:
ι : Sort u_1
𝕜 : Type u_2
E : Type u_3
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s : ι → Set E
t : Set E
⊢ ⋃ x, ⋃ i, ⋃ (_ : x ∈ s i), ⋃ y ∈ t, segment 𝕜 x y = ⋃ i, ⋃ x ∈ s i, ⋃ y ∈ t, segment 𝕜 x y

Tactic:
exact iUnion_comm _

Result:
no goals

Proof state:
ι : Sort u_1
𝕜 : Type u_2
E : Type u_3
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s : ι → Set E
t : Set E
⊢ convexJoin 𝕜 (⋃ i, s i) t = ⋃ i, convexJoin 𝕜 (s i) t

Tactic:
simp_rw [convexJoin, mem_iUnion, iUnion_exists]

Result:
ι : Sort u_1
𝕜 : Type u_2
E : Type u_3
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s : ι → Set E
t : Set E
⊢ ⋃ x, ⋃ i, ⋃ (_ : x ∈ s i), ⋃ y ∈ t, segment 𝕜 x y = ⋃ i, ⋃ x ∈ s i, ⋃ y ∈ t, segment 𝕜 x y
-- Mathlib/GroupTheory/Coxeter/Basic.lean
theorem wordProd_singleton (i : B) : π ([i]) = s i

Proof state:
B : Type u_1
W : Type u_3
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
⊢ cs.wordProd [i] = cs.simple i

Tactic:
simp [wordProd]

Result:
no goals
-- Mathlib/Algebra/Module/Submodule/Basic.lean
theorem not_mem_of_ortho {x : M} {N : Submodule R M}
    (ortho : ∀ (c : R), ∀ y ∈ N, c • x + y = (0 : M) → c = 0) : x ∉ N

Proof state:
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x : M
N : Submodule R M
ortho : ∀ (c : R), ∀ y ∈ N, c • x + y = 0 → c = 0
⊢ x ∉ N

Tactic:
intro hx

Result:
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x : M
N : Submodule R M
ortho : ∀ (c : R), ∀ y ∈ N, c • x + y = 0 → c = 0
hx : x ∈ N
⊢ False

Proof state:
R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : IsDomain R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x : M
N : Submodule R M
ortho : ∀ (c : R), ∀ y ∈ N, c • x + y = 0 → c = 0
hx : x ∈ N
⊢ False

Tactic:
simpa using ortho (-1) x hx

Result:
no goals
-- Mathlib/Analysis/InnerProductSpace/Dual.lean
theorem unique_continuousLinearMapOfBilin {v f : E} (is_lax_milgram : ∀ w, ⟪f, w⟫ = B v w) :
    f = B♯ v

Proof state:
𝕜 : Type u_1
E : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : CompleteSpace E
B : E →L⋆[𝕜] E →L[𝕜] 𝕜
v f : E
is_lax_milgram : ∀ (w : E), ⟪f, w⟫_𝕜 = (B v) w
w : E
⊢ ⟪f, w⟫_𝕜 = ⟪B♯ v, w⟫_𝕜

Tactic:
rw [continuousLinearMapOfBilin_apply]

Result:
𝕜 : Type u_1
E : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : CompleteSpace E
B : E →L⋆[𝕜] E →L[𝕜] 𝕜
v f : E
is_lax_milgram : ∀ (w : E), ⟪f, w⟫_𝕜 = (B v) w
w : E
⊢ ⟪f, w⟫_𝕜 = (B v) w

Proof state:
𝕜 : Type u_1
E : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : CompleteSpace E
B : E →L⋆[𝕜] E →L[𝕜] 𝕜
v f : E
is_lax_milgram : ∀ (w : E), ⟪f, w⟫_𝕜 = (B v) w
⊢ ∀ (v_1 : E), ⟪f, v_1⟫_𝕜 = ⟪B♯ v, v_1⟫_𝕜

Tactic:
intro w

Result:
𝕜 : Type u_1
E : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : CompleteSpace E
B : E →L⋆[𝕜] E →L[𝕜] 𝕜
v f : E
is_lax_milgram : ∀ (w : E), ⟪f, w⟫_𝕜 = (B v) w
w : E
⊢ ⟪f, w⟫_𝕜 = ⟪B♯ v, w⟫_𝕜

Proof state:
𝕜 : Type u_1
E : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : CompleteSpace E
B : E →L⋆[𝕜] E →L[𝕜] 𝕜
v f : E
is_lax_milgram : ∀ (w : E), ⟪f, w⟫_𝕜 = (B v) w
⊢ f = B♯ v

Tactic:
refine ext_inner_right 𝕜 ?_

Result:
𝕜 : Type u_1
E : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : CompleteSpace E
B : E →L⋆[𝕜] E →L[𝕜] 𝕜
v f : E
is_lax_milgram : ∀ (w : E), ⟪f, w⟫_𝕜 = (B v) w
⊢ ∀ (v_1 : E), ⟪f, v_1⟫_𝕜 = ⟪B♯ v, v_1⟫_𝕜

Proof state:
𝕜 : Type u_1
E : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
inst✝ : CompleteSpace E
B : E →L⋆[𝕜] E →L[𝕜] 𝕜
v f : E
is_lax_milgram : ∀ (w : E), ⟪f, w⟫_𝕜 = (B v) w
w : E
⊢ ⟪f, w⟫_𝕜 = (B v) w

Tactic:
exact is_lax_milgram w

Result:
no goals
-- Mathlib/Computability/Tape.lean
theorem ListBlank.append_assoc {Γ} [Inhabited Γ] (l₁ l₂ : List Γ) (l₃ : ListBlank Γ) :
    ListBlank.append (l₁ ++ l₂) l₃ = ListBlank.append l₁ (ListBlank.append l₂ l₃)

Proof state:
Γ : Type u_1
inst✝ : Inhabited Γ
l₁ l₂ : List Γ
l₃ : ListBlank Γ
l : List Γ
⊢ append (l₁ ++ l₂) (mk l) = append l₁ (append l₂ (mk l))

Tactic:
simp only [ListBlank.append_mk, List.append_assoc]

Result:
no goals

Proof state:
Γ : Type u_1
inst✝ : Inhabited Γ
l₁ l₂ : List Γ
l₃ : ListBlank Γ
l : List Γ
⊢ append (l₁ ++ l₂) ⟦l⟧ = append l₁ (append l₂ ⟦l⟧)

Tactic:
suffices append (l₁ ++ l₂) (mk l) = append l₁ (append l₂ (mk l)) by exact this

Result:
Γ : Type u_1
inst✝ : Inhabited Γ
l₁ l₂ : List Γ
l₃ : ListBlank Γ
l : List Γ
⊢ append (l₁ ++ l₂) (mk l) = append l₁ (append l₂ (mk l))

Proof state:
Γ : Type u_1
inst✝ : Inhabited Γ
l₁ l₂ : List Γ
l₃ : ListBlank Γ
⊢ append (l₁ ++ l₂) l₃ = append l₁ (append l₂ l₃)

Tactic:
refine l₃.inductionOn fun l ↦ ?_

Result:
Γ : Type u_1
inst✝ : Inhabited Γ
l₁ l₂ : List Γ
l₃ : ListBlank Γ
l : List Γ
⊢ append (l₁ ++ l₂) ⟦l⟧ = append l₁ (append l₂ ⟦l⟧)

Proof state:
Γ : Type u_1
inst✝ : Inhabited Γ
l₁ l₂ : List Γ
l₃ : ListBlank Γ
l : List Γ
this : append (l₁ ++ l₂) (mk l) = append l₁ (append l₂ (mk l))
⊢ append (l₁ ++ l₂) ⟦l⟧ = append l₁ (append l₂ ⟦l⟧)

Tactic:
exact this

Result:
no goals
-- Mathlib/Analysis/NormedSpace/Pointwise.lean
theorem infEdist_thickening (hδ : 0 < δ) (s : Set E) (x : E) :
    infEdist x (thickening δ s) = infEdist x s - ENNReal.ofReal δ

Proof state:
case inr.coe.intro.intro
E : Type u_2
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
δ : ℝ
hδ : 0 < δ
s : Set E
x : E
hs : ENNReal.ofReal δ ≤ infEdist x s
z : E
hz : z ∈ s
r : NNReal
h : dist x z < δ + (↑r - δ)
hr : 0 < ↑r - δ
y : E
hxy : dist x y < ↑r - δ
hyz : dist y z < δ
⊢ infEdist x (thickening δ s) + ENNReal.ofReal δ < ↑r

Tactic:
refine (ENNReal.add_lt_add_right ofReal_ne_top <|
  infEdist_lt_iff.2 ⟨_, mem_thickening_iff.2 ⟨_, hz, hyz⟩, edist_lt_ofReal.2 hxy⟩).trans_le ?_

Result:
case inr.coe.intro.intro
E : Type u_2
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
δ : ℝ
hδ : 0 < δ
s : Set E
x : E
hs : ENNReal.ofReal δ ≤ infEdist x s
z : E
hz : z ∈ s
r : NNReal
h : dist x z < δ + (↑r - δ)
hr : 0 < ↑r - δ
y : E
hxy : dist x y < ↑r - δ
hyz : dist y z < δ
⊢ ENNReal.ofReal (↑r - δ) + ENNReal.ofReal δ ≤ ↑r

Proof state:
case inr
E : Type u_2
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
δ : ℝ
hδ : 0 < δ
s : Set E
x : E
hs : ENNReal.ofReal δ ≤ infEdist x s
z : E
hz : z ∈ s
r : ℝ≥0∞
h : edist x z < r
⊢ infEdist x (thickening δ s) + ENNReal.ofReal δ < r

Tactic:
cases r with
| top =>
  exact add_lt_top.2 ⟨lt_top_iff_ne_top.2 <| infEdist_ne_top ⟨z, self_subset_thickening hδ _ hz⟩,
    ofReal_lt_top⟩
| coe r =>
  have hr : 0 < ↑r - δ := by
    refine sub_pos_of_lt ?_
    have := hs.trans_lt ((infEdist_le_edist_of_mem hz).trans_lt h)
    rw [ofReal_eq_coe_nnreal hδ.le] at this
    exact mod_cast this
  rw [edist_lt_coe, ← dist_lt_coe, ← add_sub_cancel δ ↑r] at h
  obtain ⟨y, hxy, hyz⟩ := exists_dist_lt_lt hr hδ h
  refine (ENNReal.add_lt_add_right ofReal_ne_top <|
    infEdist_lt_iff.2 ⟨_, mem_thickening_iff.2 ⟨_, hz, hyz⟩, edist_lt_ofReal.2 hxy⟩).trans_le ?_
  rw [← ofReal_add hr.le hδ.le, sub_add_cancel, ofReal_coe_nnreal]

Result:
no goals

Proof state:
case inl
E : Type u_2
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℝ E
δ : ℝ
hδ : 0 < δ
s : Set E
x : E
hs : infEdist x s < ENNReal.ofReal δ
⊢ x ∈ thickening δ s

Tactic:
exact hs

Result:
no goals
-- Mathlib/Topology/UniformSpace/Equiv.lean
theorem toEquiv_injective : Function.Injective (toEquiv : α ≃ᵤ β → α ≃ β)
  | ⟨e, h₁, h₂⟩, ⟨e', h₁', h₂'⟩, h => by simpa only [mk.injEq]

Proof state:
α : Type u
β : Type u_1
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
e : α ≃ β
h₁ : UniformContinuous e.toFun
h₂ : UniformContinuous e.invFun
e' : α ≃ β
h₁' : UniformContinuous e'.toFun
h₂' : UniformContinuous e'.invFun
h :
  { toEquiv := e, uniformContinuous_toFun := h₁, uniformContinuous_invFun := h₂ }.toEquiv =
    { toEquiv := e', uniformContinuous_toFun := h₁', uniformContinuous_invFun := h₂' }.toEquiv
⊢ { toEquiv := e, uniformContinuous_toFun := h₁, uniformContinuous_invFun := h₂ } =
    { toEquiv := e', uniformContinuous_toFun := h₁', uniformContinuous_invFun := h₂' }

Tactic:
simpa only [mk.injEq]

Result:
no goals
-- Mathlib/Computability/AkraBazzi/AkraBazzi.lean
lemma exists_eventually_r_le_const_mul :
    ∃ c ∈ Set.Ioo (0 : ℝ) 1, ∀ᶠ (n : ℕ) in atTop, ∀ i, r i n ≤ c * n

Proof state:
α : Type u_1
inst✝¹ : Fintype α
T : ℕ → ℝ
g : ℝ → ℝ
a b : α → ℝ
r : α → ℕ → ℕ
inst✝ : Nonempty α
R : AkraBazziRecurrence T g a b r
c : ℝ := b (max_bi b) + (1 - b (max_bi b)) / 2
h_max_bi_pos : 0 < b (max_bi b)
h_max_bi_lt_one : 0 < 1 - b (max_bi b)
hc_pos : 0 < c
h₁ : 0 < (1 - b (max_bi b)) / 2
⊢ b (max_bi b) * (1 / 2) + 1 / 2 < 1 * (1 / 2) + 1 / 2

Tactic:
gcongr

Result:
case bc.bc
α : Type u_1
inst✝¹ : Fintype α
T : ℕ → ℝ
g : ℝ → ℝ
a b : α → ℝ
r : α → ℕ → ℕ
inst✝ : Nonempty α
R : AkraBazziRecurrence T g a b r
c : ℝ := b (max_bi b) + (1 - b (max_bi b)) / 2
h_max_bi_pos : 0 < b (max_bi b)
h_max_bi_lt_one : 0 < 1 - b (max_bi b)
hc_pos : 0 < c
h₁ : 0 < (1 - b (max_bi b)) / 2
⊢ b (max_bi b) < 1
-- Mathlib/.lake/packages/lean4/src/lean/Init/Data/BitVec/Lemmas.lean
theorem msb_ushiftRight {x : BitVec w} {n : Nat} :
    (x >>> n).msb = (!decide (0 < n) && x.msb)

Proof state:
w : Nat
x : BitVec w
nn : Nat
ih : (x >>> nn).msb = (!decide (0 < nn) && x.msb)
⊢ nn + 1 > 0

Tactic:
omega

Result:
no goals

Proof state:
w : Nat
x : BitVec w
⊢ (x >>> 0).msb = (!decide (0 < 0) && x.msb)

Tactic:
simp

Result:
no goals

Proof state:
case succ
w : Nat
x : BitVec w
n✝ : Nat
a✝ : (x >>> n✝).msb = (!decide (0 < n✝) && x.msb)
⊢ (x >>> (n✝ + 1)).msb = (!decide (0 < n✝ + 1) && x.msb)

Tactic:
case succ nn ih =>
  simp [BitVec.ushiftRight_eq, getMsbD_ushiftRight, BitVec.msb, ih, show nn + 1 > 0 by omega]

Result:
no goals

Proof state:
w : Nat
x : BitVec w
n : Nat
⊢ (x >>> n).msb = (!decide (0 < n) && x.msb)

Tactic:
induction n

Result:
case zero
w : Nat
x : BitVec w
⊢ (x >>> 0).msb = (!decide (0 < 0) && x.msb)

case succ
w : Nat
x : BitVec w
n✝ : Nat
a✝ : (x >>> n✝).msb = (!decide (0 < n✝) && x.msb)
⊢ (x >>> (n✝ + 1)).msb = (!decide (0 < n✝ + 1) && x.msb)

Proof state:
w : Nat
x : BitVec w
nn : Nat
ih : (x >>> nn).msb = (!decide (0 < nn) && x.msb)
⊢ (x >>> (nn + 1)).msb = (!decide (0 < nn + 1) && x.msb)

Tactic:
simp [BitVec.ushiftRight_eq, getMsbD_ushiftRight, BitVec.msb, ih, show nn + 1 > 0 by omega]

Result:
no goals

Proof state:
case zero
w : Nat
x : BitVec w
⊢ (x >>> 0).msb = (!decide (0 < 0) && x.msb)

case succ
w : Nat
x : BitVec w
n✝ : Nat
a✝ : (x >>> n✝).msb = (!decide (0 < n✝) && x.msb)
⊢ (x >>> (n✝ + 1)).msb = (!decide (0 < n✝ + 1) && x.msb)

Tactic:
case zero =>
  simp

Result:
case succ
w : Nat
x : BitVec w
n✝ : Nat
a✝ : (x >>> n✝).msb = (!decide (0 < n✝) && x.msb)
⊢ (x >>> (n✝ + 1)).msb = (!decide (0 < n✝ + 1) && x.msb)
-- Mathlib/Topology/Baire/Lemmas.lean
theorem eventually_residual {p : X → Prop} :
    (∀ᶠ x in residual X, p x) ↔ ∃ t : Set X, IsGδ t ∧ Dense t ∧ ∀ x ∈ t, p x

Proof state:
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : BaireSpace X
p : X → Prop
⊢ (∀ᶠ (x : X) in residual X, p x) ↔ ∃ t, IsGδ t ∧ Dense t ∧ ∀ x ∈ t, p x

Tactic:
simp only [Filter.Eventually, mem_residual, subset_def, mem_setOf_eq]

Result:
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : BaireSpace X
p : X → Prop
⊢ (∃ t, (∀ x ∈ t, p x) ∧ IsGδ t ∧ Dense t) ↔ ∃ t, IsGδ t ∧ Dense t ∧ ∀ x ∈ t, p x

Proof state:
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : BaireSpace X
p : X → Prop
⊢ (∃ t, (∀ x ∈ t, p x) ∧ IsGδ t ∧ Dense t) ↔ ∃ t, IsGδ t ∧ Dense t ∧ ∀ x ∈ t, p x

Tactic:
tauto

Result:
no goals
-- Mathlib/GroupTheory/OreLocalization/Basic.lean
theorem mul_div_one {p r : R} {s : S} : (p /ₒ s) * (r /ₒ 1) = (p * r) /ₒ s

Proof state:
R : Type u_1
inst✝¹ : Monoid R
S : Submonoid R
inst✝ : OreSet S
p r : R
s : ↥S
⊢ p /ₒ s * (r /ₒ 1) = p * r /ₒ s

Tactic:
simp [oreDiv_mul_char p r s 1 p 1 (by simp)]

Result:
no goals

Proof state:
R : Type u_1
inst✝¹ : Monoid R
S : Submonoid R
inst✝ : OreSet S
p r : R
s : ↥S
⊢ ↑1 * p = p * ↑1

Tactic:
simp

Result:
no goals
-- Mathlib/SetTheory/Surreal/Multiplication.lean
/-- Symmetry properties of `IH4`. -/
lemma ih4_neg : IH4 x₁ x₂ y → IH4 (-x₂) (-x₁) y ∧ IH4 x₁ x₂ (-y)

Proof state:
case refine_1
x₁ x₂ y : PGame
h : ∀ ⦃z w : PGame⦄, w.IsOption y → (z.IsOption x₁ → P2 z x₂ w) ∧ (z.IsOption x₂ → P2 x₁ z w)
z w : PGame
h' : w.IsOption y
⊢ ((-z).IsOption x₂ → P2 z (-x₁) w) ∧ ((-z).IsOption x₁ → P2 (-x₂) z w)

Tactic:
convert (h h').symm using 2 <;> rw [P2_neg_left, neg_neg]

Result:
no goals

Proof state:
x₁ x₂ y : PGame
⊢ IH4 x₁ x₂ y → IH4 (-x₂) (-x₁) y ∧ IH4 x₁ x₂ (-y)

Tactic:
simp_rw [IH4, isOption_neg]

Result:
x₁ x₂ y : PGame
⊢ (∀ ⦃z w : PGame⦄, w.IsOption y → (z.IsOption x₁ → P2 z x₂ w) ∧ (z.IsOption x₂ → P2 x₁ z w)) →
    (∀ ⦃z w : PGame⦄, w.IsOption y → ((-z).IsOption x₂ → P2 z (-x₁) w) ∧ ((-z).IsOption x₁ → P2 (-x₂) z w)) ∧
      ∀ ⦃z w : PGame⦄, (-w).IsOption y → (z.IsOption x₁ → P2 z x₂ w) ∧ (z.IsOption x₂ → P2 x₁ z w)

Proof state:
case refine_2
x₁ x₂ y : PGame
h : ∀ ⦃z w : PGame⦄, w.IsOption y → (z.IsOption x₁ → P2 z x₂ w) ∧ (z.IsOption x₂ → P2 x₁ z w)
z w : PGame
h' : (-w).IsOption y
⊢ (z.IsOption x₁ → P2 z x₂ w) ∧ (z.IsOption x₂ → P2 x₁ z w)

Tactic:
convert h h' using 2 <;> rw [P2_neg_right]

Result:
no goals

Proof state:
x₁ x₂ y : PGame
⊢ (∀ ⦃z w : PGame⦄, w.IsOption y → (z.IsOption x₁ → P2 z x₂ w) ∧ (z.IsOption x₂ → P2 x₁ z w)) →
    (∀ ⦃z w : PGame⦄, w.IsOption y → ((-z).IsOption x₂ → P2 z (-x₁) w) ∧ ((-z).IsOption x₁ → P2 (-x₂) z w)) ∧
      ∀ ⦃z w : PGame⦄, (-w).IsOption y → (z.IsOption x₁ → P2 z x₂ w) ∧ (z.IsOption x₂ → P2 x₁ z w)

Tactic:
refine fun h ↦ ⟨fun z w h' ↦ ?_, fun z w h' ↦ ?_⟩

Result:
case refine_1
x₁ x₂ y : PGame
h : ∀ ⦃z w : PGame⦄, w.IsOption y → (z.IsOption x₁ → P2 z x₂ w) ∧ (z.IsOption x₂ → P2 x₁ z w)
z w : PGame
h' : w.IsOption y
⊢ ((-z).IsOption x₂ → P2 z (-x₁) w) ∧ ((-z).IsOption x₁ → P2 (-x₂) z w)

case refine_2
x₁ x₂ y : PGame
h : ∀ ⦃z w : PGame⦄, w.IsOption y → (z.IsOption x₁ → P2 z x₂ w) ∧ (z.IsOption x₂ → P2 x₁ z w)
z w : PGame
h' : (-w).IsOption y
⊢ (z.IsOption x₁ → P2 z x₂ w) ∧ (z.IsOption x₂ → P2 x₁ z w)