tasksource/leandojo huggingface dataset:
Theorem: Matrix.TransvectionStruct.prod_mul_reverse_inv_prod
File: Mathlib/LinearAlgebra/Matrix/Transvection.lean

tactic: induction' L with t L IH
state_before: n : Type u_1
p : Type ?u.42156
R : Type u₂
𝕜 : Type ?u.42161
inst✝⁴ : Field 𝕜
inst✝³ : DecidableEq n
inst✝² : DecidableEq p
inst✝¹ : CommRing R
i j : n
inst✝ : Fintype n
L : List (TransvectionStruct n R)
⊢ List.prod (List.map toMatrix L) ⬝ List.prod (List.map (toMatrix ∘ TransvectionStruct.inv) (List.reverse L)) = 1

tactic: simp
state_before: case nil
n : Type u_1
p : Type ?u.42156
R : Type u₂
𝕜 : Type ?u.42161
inst✝⁴ : Field 𝕜
inst✝³ : DecidableEq n
inst✝² : DecidableEq p
inst✝¹ : CommRing R
i j : n
inst✝ : Fintype n
⊢ List.prod (List.map toMatrix []) ⬝ List.prod (List.map (toMatrix ∘ TransvectionStruct.inv) (List.reverse [])) = 1

tactic: suffices
  t.toMatrix ⬝
        ((L.map toMatrix).prod ⬝ (L.reverse.map (toMatrix ∘ TransvectionStruct.inv)).prod) ⬝
      t.inv.toMatrix = 1
  by simpa [Matrix.mul_assoc]
state_before: case cons
n : Type u_1
p : Type ?u.42156
R : Type u₂
𝕜 : Type ?u.42161
inst✝⁴ : Field 𝕜
inst✝³ : DecidableEq n
inst✝² : DecidableEq p
inst✝¹ : CommRing R
i j : n
inst✝ : Fintype n
t : TransvectionStruct n R
L : List (TransvectionStruct n R)
IH : List.prod (List.map toMatrix L) ⬝ List.prod (List.map (toMatrix ∘ TransvectionStruct.inv) (List.reverse L)) = 1
⊢ List.prod (List.map toMatrix (t :: L)) ⬝
      List.prod (List.map (toMatrix ∘ TransvectionStruct.inv) (List.reverse (t :: L))) =
    1

tactic: simp_rw [IH, Matrix.mul_one, t.mul_inv]
state_before: case cons
n : Type u_1
p : Type ?u.42156
R : Type u₂
𝕜 : Type ?u.42161
inst✝⁴ : Field 𝕜
inst✝³ : DecidableEq n
inst✝² : DecidableEq p
inst✝¹ : CommRing R
i j : n
inst✝ : Fintype n
t : TransvectionStruct n R
L : List (TransvectionStruct n R)
IH : List.prod (List.map toMatrix L) ⬝ List.prod (List.map (toMatrix ∘ TransvectionStruct.inv) (List.reverse L)) = 1
⊢ toMatrix t ⬝
        (List.prod (List.map toMatrix L) ⬝ List.prod (List.map (toMatrix ∘ TransvectionStruct.inv) (List.reverse L))) ⬝
      toMatrix (TransvectionStruct.inv t) =
    1

tactic: simpa [Matrix.mul_assoc]
state_before: n : Type u_1
p : Type ?u.42156
R : Type u₂
𝕜 : Type ?u.42161
inst✝⁴ : Field 𝕜
inst✝³ : DecidableEq n
inst✝² : DecidableEq p
inst✝¹ : CommRing R
i j : n
inst✝ : Fintype n
t : TransvectionStruct n R
L : List (TransvectionStruct n R)
IH : List.prod (List.map toMatrix L) ⬝ List.prod (List.map (toMatrix ∘ TransvectionStruct.inv) (List.reverse L)) = 1
this :
  toMatrix t ⬝
        (List.prod (List.map toMatrix L) ⬝ List.prod (List.map (toMatrix ∘ TransvectionStruct.inv) (List.reverse L))) ⬝
      toMatrix (TransvectionStruct.inv t) =
    1
⊢ List.prod (List.map toMatrix (t :: L)) ⬝
      List.prod (List.map (toMatrix ∘ TransvectionStruct.inv) (List.reverse (t :: L))) =
    1
Theorem: LocalEquiv.exists_mem_target
File: Mathlib/Logic/Equiv/LocalEquiv.lean

tactic: rw [← image_source_eq_target, bex_image_iff]
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.25497
δ : Type ?u.25500
e : LocalEquiv α β
e' : LocalEquiv β γ
p : β → Prop
⊢ (∃ y, y ∈ e.target ∧ p y) ↔ ∃ x, x ∈ e.source ∧ p (↑e x)
Theorem: Quiver.Path.toList_comp
File: Mathlib/Combinatorics/Quiver/Path.lean

tactic: simp
state_before: V : Type u
inst✝ : Quiver V
a b c d : V
p : Path a b
⊢ toList (comp p nil) = toList nil ++ toList p

tactic: simp [toList_comp]
state_before: V : Type u
inst✝ : Quiver V
a b c d✝ : V
p : Path a b
x✝ d : V
q : Path b d
a✝ : d ⟶ x✝
⊢ toList (comp p (cons q a✝)) = toList (cons q a✝) ++ toList p
Theorem: IsFractional.sup
File: Mathlib/RingTheory/FractionalIdeal.lean

tactic: rcases mem_sup.mp hb with ⟨bI, hbI, bJ, hbJ, rfl⟩
state_before: R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
b : P
hb : b ∈ I ⊔ J
⊢ IsInteger R ((aI * aJ) • b)

tactic: rw [smul_add]
state_before: case intro.intro.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R ((aI * aJ) • (bI + bJ))

tactic: apply isInteger_add
state_before: case intro.intro.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R ((aI * aJ) • bI + (aI * aJ) • bJ)

tactic: rw [mul_smul, smul_comm]
state_before: case intro.intro.intro.intro.ha
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R ((aI * aJ) • bI)

tactic: exact isInteger_smul (hI bI hbI)
state_before: case intro.intro.intro.intro.ha
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R (aJ • aI • bI)

tactic: rw [mul_smul]
state_before: case intro.intro.intro.intro.hb
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R ((aI * aJ) • bJ)

tactic: exact isInteger_smul (hJ bJ hbJ)
state_before: case intro.intro.intro.intro.hb
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R (aI • aJ • bJ)
Theorem: locallyConnectedSpace_iff_open_connected_subsets
File: Mathlib/Topology/Connected.lean

tactic: simp_rw [locallyConnectedSpace_iff_open_connected_basis]
state_before: α : Type u
β : Type v
ι : Type ?u.112377
π : ι → Type ?u.112382
inst✝ : TopologicalSpace α
s t u v : Set α
⊢ LocallyConnectedSpace α ↔ ∀ (x : α) (U : Set α), U ∈ 𝓝 x → ∃ V, V ⊆ U ∧ IsOpen V ∧ x ∈ V ∧ IsConnected V

tactic: refine forall_congr' fun _ => ?_
state_before: α : Type u
β : Type v
ι : Type ?u.112377
π : ι → Type ?u.112382
inst✝ : TopologicalSpace α
s t u v : Set α
⊢ (∀ (x : α), Filter.HasBasis (𝓝 x) (fun s => IsOpen s ∧ x ∈ s ∧ IsConnected s) id) ↔
    ∀ (x : α) (U : Set α), U ∈ 𝓝 x → ∃ V, V ⊆ U ∧ IsOpen V ∧ x ∈ V ∧ IsConnected V

tactic: constructor
state_before: α : Type u
β : Type v
ι : Type ?u.112377
π : ι → Type ?u.112382
inst✝ : TopologicalSpace α
s t u v : Set α
x✝ : α
⊢ Filter.HasBasis (𝓝 x✝) (fun s => IsOpen s ∧ x✝ ∈ s ∧ IsConnected s) id ↔
    ∀ (U : Set α), U ∈ 𝓝 x✝ → ∃ V, V ⊆ U ∧ IsOpen V ∧ x✝ ∈ V ∧ IsConnected V

tactic: intro h U hU
state_before: case mp
α : Type u
β : Type v
ι : Type ?u.112377
π : ι → Type ?u.112382
inst✝ : TopologicalSpace α
s t u v : Set α
x✝ : α
⊢ Filter.HasBasis (𝓝 x✝) (fun s => IsOpen s ∧ x✝ ∈ s ∧ IsConnected s) id →
    ∀ (U : Set α), U ∈ 𝓝 x✝ → ∃ V, V ⊆ U ∧ IsOpen V ∧ x✝ ∈ V ∧ IsConnected V

tactic: rcases h.mem_iff.mp hU with ⟨V, hV, hVU⟩
state_before: case mp
α : Type u
β : Type v
ι : Type ?u.112377
π : ι → Type ?u.112382
inst✝ : TopologicalSpace α
s t u v : Set α
x✝ : α
h : Filter.HasBasis (𝓝 x✝) (fun s => IsOpen s ∧ x✝ ∈ s ∧ IsConnected s) id
U : Set α
hU : U ∈ 𝓝 x✝
⊢ ∃ V, V ⊆ U ∧ IsOpen V ∧ x✝ ∈ V ∧ IsConnected V

tactic: exact ⟨V, hVU, hV⟩
state_before: case mp.intro.intro
α : Type u
β : Type v
ι : Type ?u.112377
π : ι → Type ?u.112382
inst✝ : TopologicalSpace α
s t u v : Set α
x✝ : α
h : Filter.HasBasis (𝓝 x✝) (fun s => IsOpen s ∧ x✝ ∈ s ∧ IsConnected s) id
U : Set α
hU : U ∈ 𝓝 x✝
V : Set α
hV : IsOpen V ∧ x✝ ∈ V ∧ IsConnected V
hVU : id V ⊆ U
⊢ ∃ V, V ⊆ U ∧ IsOpen V ∧ x✝ ∈ V ∧ IsConnected V

tactic: exact fun h => ⟨fun U => ⟨fun hU =>
  let ⟨V, hVU, hV⟩ := h U hU
  ⟨V, hV, hVU⟩, fun ⟨V, ⟨hV, hxV, _⟩, hVU⟩ => mem_nhds_iff.mpr ⟨V, hVU, hV, hxV⟩⟩⟩
state_before: case mpr
α : Type u
β : Type v
ι : Type ?u.112377
π : ι → Type ?u.112382
inst✝ : TopologicalSpace α
s t u v : Set α
x✝ : α
⊢ (∀ (U : Set α), U ∈ 𝓝 x✝ → ∃ V, V ⊆ U ∧ IsOpen V ∧ x✝ ∈ V ∧ IsConnected V) →
    Filter.HasBasis (𝓝 x✝) (fun s => IsOpen s ∧ x✝ ∈ s ∧ IsConnected s) id
Theorem: tendsto_prod_principal_iff
File: Mathlib/Topology/UniformSpace/UniformConvergence.lean

tactic: rw [tendstoUniformlyOn_iff_tendstoUniformlyOnFilter]
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
c : β
⊢ Tendsto (↿F) (p ×ˢ 𝓟 s) (𝓝 c) ↔ TendstoUniformlyOn F (fun x => c) p s

tactic: exact tendsto_prod_filter_iff
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
c : β
⊢ Tendsto (↿F) (p ×ˢ 𝓟 s) (𝓝 c) ↔ TendstoUniformlyOnFilter F (fun x => c) p (𝓟 s)
Theorem: List.dlookup_isSome
File: Mathlib/Data/List/Sigma.lean

tactic: simp
state_before: α : Type u
β : α → Type v
l l₁ l₂ : List (Sigma β)
inst✝ : DecidableEq α
a : α
⊢ Option.isSome (dlookup a []) = true ↔ a ∈ keys []

tactic: by_cases h : a = a'
state_before: α : Type u
β : α → Type v
l✝ l₁ l₂ : List (Sigma β)
inst✝ : DecidableEq α
a a' : α
b : β a'
l : List (Sigma β)
⊢ Option.isSome (dlookup a ({ fst := a', snd := b } :: l)) = true ↔ a ∈ keys ({ fst := a', snd := b } :: l)

tactic: subst a'
state_before: case pos
α : Type u
β : α → Type v
l✝ l₁ l₂ : List (Sigma β)
inst✝ : DecidableEq α
a a' : α
b : β a'
l : List (Sigma β)
h : a = a'
⊢ Option.isSome (dlookup a ({ fst := a', snd := b } :: l)) = true ↔ a ∈ keys ({ fst := a', snd := b } :: l)

tactic: simp
state_before: case pos
α : Type u
β : α → Type v
l✝ l₁ l₂ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l : List (Sigma β)
b : β a
⊢ Option.isSome (dlookup a ({ fst := a, snd := b } :: l)) = true ↔ a ∈ keys ({ fst := a, snd := b } :: l)

tactic: simp [h, dlookup_isSome]
state_before: case neg
α : Type u
β : α → Type v
l✝ l₁ l₂ : List (Sigma β)
inst✝ : DecidableEq α
a a' : α
b : β a'
l : List (Sigma β)
h : ¬a = a'
⊢ Option.isSome (dlookup a ({ fst := a', snd := b } :: l)) = true ↔ a ∈ keys ({ fst := a', snd := b } :: l)
Theorem: TypeVec.subtypeVal_nil
File: Mathlib/Data/TypeVec.lean

tactic: rintro ⟨⟩
state_before: n : ℕ
α : TypeVec 0
ps : α ⟹ repeat 0 Prop
⊢ ∀ (x : Fin2 0), subtypeVal ps x = nilFun x
Theorem: NNReal.eventually_pow_one_div_le
File: Mathlib/Analysis/SpecialFunctions/Pow/Continuity.lean

tactic: obtain ⟨m, hm⟩ := add_one_pow_unbounded_of_pos x (tsub_pos_of_lt hy)
state_before: x y : ℝ≥0
hy : 1 < y
⊢ ∀ᶠ (n : ℕ) in atTop, x ^ (1 / ↑n) ≤ y

tactic: rw [tsub_add_cancel_of_le hy.le] at hm
state_before: case intro
x y : ℝ≥0
hy : 1 < y
m : ℕ
hm : x < (y - 1 + 1) ^ m
⊢ ∀ᶠ (n : ℕ) in atTop, x ^ (1 / ↑n) ≤ y

tactic: refine' eventually_atTop.2 ⟨m + 1, fun n hn => _⟩
state_before: case intro
x y : ℝ≥0
hy : 1 < y
m : ℕ
hm : x < y ^ m
⊢ ∀ᶠ (n : ℕ) in atTop, x ^ (1 / ↑n) ≤ y

tactic: simpa only [NNReal.rpow_one_div_le_iff (Nat.cast_pos.2 <| m.succ_pos.trans_le hn),
  NNReal.rpow_nat_cast] using hm.le.trans (pow_le_pow hy.le (m.le_succ.trans hn))
state_before: case intro
x y : ℝ≥0
hy : 1 < y
m : ℕ
hm : x < y ^ m
n : ℕ
hn : n ≥ m + 1
⊢ x ^ (1 / ↑n) ≤ y
Theorem: PerfectClosure.R.sound
File: Mathlib/FieldTheory/PerfectClosure.lean

tactic: subst H
state_before: K : Type u
inst✝² : CommRing K
p : ℕ
inst✝¹ : Fact (Nat.Prime p)
inst✝ : CharP K p
m n : ℕ
x y : K
H : (↑(frobenius K p)^[m]) x = y
⊢ mk K p (n, x) = mk K p (m + n, y)

tactic: induction' m with m ih
state_before: K : Type u
inst✝² : CommRing K
p : ℕ
inst✝¹ : Fact (Nat.Prime p)
inst✝ : CharP K p
m n : ℕ
x : K
⊢ mk K p (n, x) = mk K p (m + n, (↑(frobenius K p)^[m]) x)

tactic: rw [ih, Nat.succ_add, iterate_succ']
state_before: case succ
K : Type u
inst✝² : CommRing K
p : ℕ
inst✝¹ : Fact (Nat.Prime p)
inst✝ : CharP K p
n : ℕ
x : K
m : ℕ
ih : mk K p (n, x) = mk K p (m + n, (↑(frobenius K p)^[m]) x)
⊢ mk K p (n, x) = mk K p (Nat.succ m + n, (↑(frobenius K p)^[Nat.succ m]) x)

tactic: apply Quot.sound
state_before: case succ
K : Type u
inst✝² : CommRing K
p : ℕ
inst✝¹ : Fact (Nat.Prime p)
inst✝ : CharP K p
n : ℕ
x : K
m : ℕ
ih : mk K p (n, x) = mk K p (m + n, (↑(frobenius K p)^[m]) x)
⊢ mk K p (m + n, (↑(frobenius K p)^[m]) x) = mk K p (Nat.succ (m + n), (↑(frobenius K p) ∘ ↑(frobenius K p)^[m]) x)

tactic: apply R.intro
state_before: case succ.a
K : Type u
inst✝² : CommRing K
p : ℕ
inst✝¹ : Fact (Nat.Prime p)
inst✝ : CharP K p
n : ℕ
x : K
m : ℕ
ih : mk K p (n, x) = mk K p (m + n, (↑(frobenius K p)^[m]) x)
⊢ R K p (m + n, (↑(frobenius K p)^[m]) x) (Nat.succ (m + n), (↑(frobenius K p) ∘ ↑(frobenius K p)^[m]) x)

tactic: simp only [Nat.zero_eq, zero_add, iterate_zero_apply]
state_before: case zero
K : Type u
inst✝² : CommRing K
p : ℕ
inst✝¹ : Fact (Nat.Prime p)
inst✝ : CharP K p
n : ℕ
x : K
⊢ mk K p (n, x) = mk K p (Nat.zero + n, (↑(frobenius K p)^[Nat.zero]) x)
Theorem: Nat.coprime_mul_iff_right
File: Std/Data/Nat/Gcd.lean

tactic: rw [@coprime_comm k, @coprime_comm k, @coprime_comm k, coprime_mul_iff_left]
state_before: k m n : Nat
⊢ coprime k (m * n) ↔ coprime k m ∧ coprime k n
Theorem: IsGδ.union
File: Mathlib/Topology/GDelta.lean

tactic: rcases hs with ⟨S, Sopen, Scount, rfl⟩
state_before: α : Type u_1
β : Type ?u.6391
γ : Type ?u.6394
ι : Type ?u.6397
inst✝ : TopologicalSpace α
s t : Set α
hs : IsGδ s
ht : IsGδ t
⊢ IsGδ (s ∪ t)

tactic: rcases ht with ⟨T, Topen, Tcount, rfl⟩
state_before: case intro.intro.intro
α : Type u_1
β : Type ?u.6391
γ : Type ?u.6394
ι : Type ?u.6397
inst✝ : TopologicalSpace α
t : Set α
ht : IsGδ t
S : Set (Set α)
Sopen : ∀ (t : Set α), t ∈ S → IsOpen t
Scount : Set.Countable S
⊢ IsGδ (⋂₀ S ∪ t)

tactic: rw [sInter_union_sInter]
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type ?u.6391
γ : Type ?u.6394
ι : Type ?u.6397
inst✝ : TopologicalSpace α
S : Set (Set α)
Sopen : ∀ (t : Set α), t ∈ S → IsOpen t
Scount : Set.Countable S
T : Set (Set α)
Topen : ∀ (t : Set α), t ∈ T → IsOpen t
Tcount : Set.Countable T
⊢ IsGδ (⋂₀ S ∪ ⋂₀ T)

tactic: apply isGδ_biInter_of_open (Scount.prod Tcount)
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type ?u.6391
γ : Type ?u.6394
ι : Type ?u.6397
inst✝ : TopologicalSpace α
S : Set (Set α)
Sopen : ∀ (t : Set α), t ∈ S → IsOpen t
Scount : Set.Countable S
T : Set (Set α)
Topen : ∀ (t : Set α), t ∈ T → IsOpen t
Tcount : Set.Countable T
⊢ IsGδ (⋂ (p : Set α × Set α) (_ : p ∈ S ×ˢ T), p.fst ∪ p.snd)

tactic: rintro ⟨a, b⟩ ⟨ha, hb⟩
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type ?u.6391
γ : Type ?u.6394
ι : Type ?u.6397
inst✝ : TopologicalSpace α
S : Set (Set α)
Sopen : ∀ (t : Set α), t ∈ S → IsOpen t
Scount : Set.Countable S
T : Set (Set α)
Topen : ∀ (t : Set α), t ∈ T → IsOpen t
Tcount : Set.Countable T
⊢ ∀ (i : Set α × Set α), i ∈ S ×ˢ T → IsOpen (i.fst ∪ i.snd)

tactic: exact (Sopen a ha).union (Topen b hb)
state_before: case intro.intro.intro.intro.intro.intro.mk.intro
α : Type u_1
β : Type ?u.6391
γ : Type ?u.6394
ι : Type ?u.6397
inst✝ : TopologicalSpace α
S : Set (Set α)
Sopen : ∀ (t : Set α), t ∈ S → IsOpen t
Scount : Set.Countable S
T : Set (Set α)
Topen : ∀ (t : Set α), t ∈ T → IsOpen t
Tcount : Set.Countable T
a b : Set α
ha : (a, b).fst ∈ S
hb : (a, b).snd ∈ T
⊢ IsOpen ((a, b).fst ∪ (a, b).snd)
Theorem: FiniteDimensional.finiteDimensional_iff_of_rank_eq_nsmul
File: Mathlib/LinearAlgebra/FiniteDimensional.lean

tactic: simp only [FiniteDimensional, ← IsNoetherian.iff_fg, IsNoetherian.iff_rank_lt_aleph0, hVW,
  Cardinal.nsmul_lt_aleph0_iff_of_ne_zero hn]
state_before: K : Type u
V : Type v
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
V₂ : Type v'
inst✝³ : AddCommGroup V₂
inst✝² : Module K V₂
W : Type v
inst✝¹ : AddCommGroup W
inst✝ : Module K W
n : ℕ
hn : n ≠ 0
hVW : Module.rank K V = n • Module.rank K W
⊢ FiniteDimensional K V ↔ FiniteDimensional K W
Theorem: Polynomial.Monic.map
File: Mathlib/Data/Polynomial/Monic.lean

tactic: unfold Monic
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : Monic p
⊢ Monic (Polynomial.map f p)

tactic: nontriviality
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : Monic p
⊢ Polynomial.leadingCoeff (Polynomial.map f p) = 1

tactic: have : f p.leadingCoeff ≠ 0 := by
  rw [show _ = _ from hp, f.map_one]
  exact one_ne_zero
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : Monic p
✝ : Nontrivial S
⊢ Polynomial.leadingCoeff (Polynomial.map f p) = 1

tactic: rw [Polynomial.leadingCoeff, coeff_map]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : Monic p
✝ : Nontrivial S
this : ↑f (Polynomial.leadingCoeff p) ≠ 0
⊢ Polynomial.leadingCoeff (Polynomial.map f p) = 1

tactic: suffices p.coeff (p.map f).natDegree = 1 by simp [this]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : Monic p
✝ : Nontrivial S
this : ↑f (Polynomial.leadingCoeff p) ≠ 0
⊢ ↑f (coeff p (natDegree (Polynomial.map f p))) = 1

tactic: rwa [natDegree_eq_of_degree_eq (degree_map_eq_of_leadingCoeff_ne_zero f this)]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : Monic p
✝ : Nontrivial S
this : ↑f (Polynomial.leadingCoeff p) ≠ 0
⊢ coeff p (natDegree (Polynomial.map f p)) = 1

tactic: rw [show _ = _ from hp, f.map_one]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : Monic p
✝ : Nontrivial S
⊢ ↑f (Polynomial.leadingCoeff p) ≠ 0

tactic: exact one_ne_zero
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : Monic p
✝ : Nontrivial S
⊢ 1 ≠ 0

tactic: simp [this]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : Monic p
✝ : Nontrivial S
this✝ : ↑f (Polynomial.leadingCoeff p) ≠ 0
this : coeff p (natDegree (Polynomial.map f p)) = 1
⊢ ↑f (coeff p (natDegree (Polynomial.map f p))) = 1
Theorem: CompositionAsSet.length_lt_card_boundaries
File: Mathlib/Combinatorics/Composition.lean

tactic: rw [c.card_boundaries_eq_succ_length]
state_before: n : ℕ
c : CompositionAsSet n
⊢ length c < Finset.card c.boundaries

tactic: exact lt_add_one _
state_before: n : ℕ
c : CompositionAsSet n
⊢ length c < length c + 1
Theorem: Finsupp.mapRange_sub
File: Mathlib/Data/Finsupp/Defs.lean

tactic: simp only [hf', sub_apply, mapRange_apply]
state_before: α : Type u_3
β : Type ?u.443969
γ : Type ?u.443972
ι : Type ?u.443975
M : Type ?u.443978
M' : Type ?u.443981
N : Type ?u.443984
P : Type ?u.443987
G : Type u_1
H : Type u_2
R : Type ?u.443996
S : Type ?u.443999
inst✝¹ : SubNegZeroMonoid G
inst✝ : SubNegZeroMonoid H
f : G → H
hf : f 0 = 0
hf' : ∀ (x y : G), f (x - y) = f x - f y
v₁ v₂ : α →₀ G
x✝ : α
⊢ ↑(mapRange f hf (v₁ - v₂)) x✝ = ↑(mapRange f hf v₁ - mapRange f hf v₂) x✝
Theorem: PiNat.disjoint_cylinder_of_longestPrefix_lt
File: Mathlib/Topology/MetricSpace/PiNat.lean

tactic: contrapose! hn
state_before: E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : ¬x ∈ s
n : ℕ
hn : longestPrefix x s < n
⊢ Disjoint s (cylinder x n)

tactic: rcases not_disjoint_iff_nonempty_inter.1 hn with ⟨y, ys, hy⟩
state_before: E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : ¬x ∈ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
⊢ n ≤ longestPrefix x s

tactic: apply le_trans _ (firstDiff_le_longestPrefix hs hx ys)
state_before: case intro.intro
E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : ¬x ∈ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
y : (n : ℕ) → E n
ys : y ∈ s
hy : y ∈ cylinder x n
⊢ n ≤ longestPrefix x s

tactic: apply (mem_cylinder_iff_le_firstDiff (ne_of_mem_of_not_mem ys hx).symm _).1
state_before: E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : ¬x ∈ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
y : (n : ℕ) → E n
ys : y ∈ s
hy : y ∈ cylinder x n
⊢ n ≤ firstDiff x y

tactic: rwa [mem_cylinder_comm]
state_before: E : ℕ → Type u_1
inst✝¹ : (n : ℕ) → TopologicalSpace (E n)
inst✝ : ∀ (n : ℕ), DiscreteTopology (E n)
s : Set ((n : ℕ) → E n)
hs : IsClosed s
x : (n : ℕ) → E n
hx : ¬x ∈ s
n : ℕ
hn : ¬Disjoint s (cylinder x n)
y : (n : ℕ) → E n
ys : y ∈ s
hy : y ∈ cylinder x n
⊢ x ∈ cylinder y n
Theorem: sup_sdiff_distrib
File: Mathlib/Order/Heyting/Basic.lean

tactic: simp_rw [sdiff_le_iff, sup_le_iff, sdiff_le_iff]
state_before: ι : Type ?u.136072
α : Type u_1
β : Type ?u.136078
inst✝ : GeneralizedCoheytingAlgebra α
a✝ b✝ c✝ d✝ a b c d : α
⊢ (a ⊔ b) \ c ≤ d ↔ a \ c ⊔ b \ c ≤ d
Theorem: CategoryTheory.wellPowered_of_equiv
File: Mathlib/CategoryTheory/Subobject/WellPowered.lean

tactic: infer_instance
state_before: C : Type u₁
inst✝² : Category C
D : Type u₂
inst✝¹ : Category D
e : C ≌ D
inst✝ : WellPowered C
X : D
⊢ EssentiallySmall (MonoOver ((Equivalence.symm e).functor.obj X))
Theorem: BilinForm.sub_right
File: Mathlib/LinearAlgebra/BilinearForm.lean

tactic: rw [sub_eq_add_neg, sub_eq_add_neg, add_right, neg_right]
state_before: R : Type ?u.61548
M : Type ?u.61551
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_1
M₁ : Type u_2
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type ?u.62199
M₂ : Type ?u.62202
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type ?u.62389
M₃ : Type ?u.62392
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type ?u.62980
K : Type ?u.62983
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
x y z : M₁
⊢ bilin B₁ x (y - z) = bilin B₁ x y - bilin B₁ x z
Theorem: List.getLast_append_singleton
File: Mathlib/Data/List/Basic.lean

tactic: simp only [getLast_append]
state_before: ι : Type ?u.30072
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
a : α
l : List α
⊢ getLast (l ++ [a]) (_ : l ++ [a] ≠ []) = a
Theorem: Real.arcsin_eq_of_sin_eq
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Inverse.lean

tactic: subst y
state_before: x y : ℝ
h₁ : sin x = y
h₂ : x ∈ Icc (-(π / 2)) (π / 2)
⊢ arcsin y = x

tactic: exact injOn_sin (arcsin_mem_Icc _) h₂ (sin_arcsin' (sin_mem_Icc x))
state_before: x : ℝ
h₂ : x ∈ Icc (-(π / 2)) (π / 2)
⊢ arcsin (sin x) = x