tasksource/leandojo huggingface dataset:
Theorem: MeasureTheory.SimpleFunc.FinMeasSupp.of_lintegral_ne_top
File: Mathlib/MeasureTheory/Function/SimpleFunc.lean

tactic: refine' finMeasSupp_iff.2 fun b hb => _
state_before: α : Type u_1
β : Type ?u.921719
γ : Type ?u.921722
δ : Type ?u.921725
m : MeasurableSpace α
inst✝¹ : Zero β
inst✝ : Zero γ
μ : Measure α
f✝ : α →ₛ β
f : α →ₛ ℝ≥0∞
h : lintegral f μ ≠ ⊤
⊢ SimpleFunc.FinMeasSupp f μ

tactic: rw [f.lintegral_eq_of_subset' (Finset.subset_insert b _)] at h
state_before: α : Type u_1
β : Type ?u.921719
γ : Type ?u.921722
δ : Type ?u.921725
m : MeasurableSpace α
inst✝¹ : Zero β
inst✝ : Zero γ
μ : Measure α
f✝ : α →ₛ β
f : α →ₛ ℝ≥0∞
h : lintegral f μ ≠ ⊤
b : ℝ≥0∞
hb : b ≠ 0
⊢ ↑↑μ (↑f ⁻¹' {b}) < ⊤

tactic: refine' ENNReal.lt_top_of_mul_ne_top_right _ hb
state_before: α : Type u_1
β : Type ?u.921719
γ : Type ?u.921722
δ : Type ?u.921725
m : MeasurableSpace α
inst✝¹ : Zero β
inst✝ : Zero γ
μ : Measure α
f✝ : α →ₛ β
f : α →ₛ ℝ≥0∞
b : ℝ≥0∞
h : ∑ x in insert b (SimpleFunc.range f \ {0}), x * ↑↑μ (↑f ⁻¹' {x}) ≠ ⊤
hb : b ≠ 0
⊢ ↑↑μ (↑f ⁻¹' {b}) < ⊤

tactic: exact (lt_top_of_sum_ne_top h (Finset.mem_insert_self _ _)).ne
state_before: α : Type u_1
β : Type ?u.921719
γ : Type ?u.921722
δ : Type ?u.921725
m : MeasurableSpace α
inst✝¹ : Zero β
inst✝ : Zero γ
μ : Measure α
f✝ : α →ₛ β
f : α →ₛ ℝ≥0∞
b : ℝ≥0∞
h : ∑ x in insert b (SimpleFunc.range f \ {0}), x * ↑↑μ (↑f ⁻¹' {x}) ≠ ⊤
hb : b ≠ 0
⊢ b * ↑↑μ (↑f ⁻¹' {b}) ≠ ⊤
Theorem: FirstOrder.Language.exists_elementaryEmbedding_card_eq
File: Mathlib/ModelTheory/Satisfiability.lean

tactic: cases le_or_gt (lift.{w'} κ) (Cardinal.lift.{w} (#M))
state_before: L : Language
T : Theory L
α : Type w
n : ℕ
M : Type w'
inst✝ : Structure L M
iM : Infinite M
κ : Cardinal
h1 : ℵ₀ ≤ κ
h2 : lift (card L) ≤ lift κ
⊢ ∃ N, (Nonempty (↑N ↪ₑ[L] M) ∨ Nonempty (M ↪ₑ[L] ↑N)) ∧ (#↑N) = κ

tactic: case inl h =>
  obtain ⟨N, hN1, hN2⟩ := exists_elementaryEmbedding_card_eq_of_le L M κ h1 h2 h
  exact ⟨N, Or.inl hN1, hN2⟩
state_before: case inl
L : Language
T : Theory L
α : Type w
n : ℕ
M : Type w'
inst✝ : Structure L M
iM : Infinite M
κ : Cardinal
h1 : ℵ₀ ≤ κ
h2 : lift (card L) ≤ lift κ
h✝ : lift κ ≤ lift (#M)
⊢ ∃ N, (Nonempty (↑N ↪ₑ[L] M) ∨ Nonempty (M ↪ₑ[L] ↑N)) ∧ (#↑N) = κ

case inr
L : Language
T : Theory L
α : Type w
n : ℕ
M : Type w'
inst✝ : Structure L M
iM : Infinite M
κ : Cardinal
h1 : ℵ₀ ≤ κ
h2 : lift (card L) ≤ lift κ
h✝ : lift κ > lift (#M)
⊢ ∃ N, (Nonempty (↑N ↪ₑ[L] M) ∨ Nonempty (M ↪ₑ[L] ↑N)) ∧ (#↑N) = κ

tactic: case inr h =>
  obtain ⟨N, hN1, hN2⟩ := exists_elementaryEmbedding_card_eq_of_ge L M κ h2 (le_of_lt h)
  exact ⟨N, Or.inr hN1, hN2⟩
state_before: case inr
L : Language
T : Theory L
α : Type w
n : ℕ
M : Type w'
inst✝ : Structure L M
iM : Infinite M
κ : Cardinal
h1 : ℵ₀ ≤ κ
h2 : lift (card L) ≤ lift κ
h✝ : lift κ > lift (#M)
⊢ ∃ N, (Nonempty (↑N ↪ₑ[L] M) ∨ Nonempty (M ↪ₑ[L] ↑N)) ∧ (#↑N) = κ

tactic: obtain ⟨N, hN1, hN2⟩ := exists_elementaryEmbedding_card_eq_of_le L M κ h1 h2 h
state_before: L : Language
T : Theory L
α : Type w
n : ℕ
M : Type w'
inst✝ : Structure L M
iM : Infinite M
κ : Cardinal
h1 : ℵ₀ ≤ κ
h2 : lift (card L) ≤ lift κ
h : lift κ ≤ lift (#M)
⊢ ∃ N, (Nonempty (↑N ↪ₑ[L] M) ∨ Nonempty (M ↪ₑ[L] ↑N)) ∧ (#↑N) = κ

tactic: exact ⟨N, Or.inl hN1, hN2⟩
state_before: case intro.intro
L : Language
T : Theory L
α : Type w
n : ℕ
M : Type w'
inst✝ : Structure L M
iM : Infinite M
κ : Cardinal
h1 : ℵ₀ ≤ κ
h2 : lift (card L) ≤ lift κ
h : lift κ ≤ lift (#M)
N : Bundled (Structure L)
hN1 : Nonempty (↑N ↪ₑ[L] M)
hN2 : (#↑N) = κ
⊢ ∃ N, (Nonempty (↑N ↪ₑ[L] M) ∨ Nonempty (M ↪ₑ[L] ↑N)) ∧ (#↑N) = κ

tactic: obtain ⟨N, hN1, hN2⟩ := exists_elementaryEmbedding_card_eq_of_ge L M κ h2 (le_of_lt h)
state_before: L : Language
T : Theory L
α : Type w
n : ℕ
M : Type w'
inst✝ : Structure L M
iM : Infinite M
κ : Cardinal
h1 : ℵ₀ ≤ κ
h2 : lift (card L) ≤ lift κ
h : lift κ > lift (#M)
⊢ ∃ N, (Nonempty (↑N ↪ₑ[L] M) ∨ Nonempty (M ↪ₑ[L] ↑N)) ∧ (#↑N) = κ

tactic: exact ⟨N, Or.inr hN1, hN2⟩
state_before: case intro.intro
L : Language
T : Theory L
α : Type w
n : ℕ
M : Type w'
inst✝ : Structure L M
iM : Infinite M
κ : Cardinal
h1 : ℵ₀ ≤ κ
h2 : lift (card L) ≤ lift κ
h : lift κ > lift (#M)
N : Bundled (Structure L)
hN1 : Nonempty (M ↪ₑ[L] ↑N)
hN2 : (#↑N) = κ
⊢ ∃ N, (Nonempty (↑N ↪ₑ[L] M) ∨ Nonempty (M ↪ₑ[L] ↑N)) ∧ (#↑N) = κ
Theorem: BoxIntegral.integralSum_biUnionTagged
File: Mathlib/Analysis/BoxIntegral/Basic.lean

tactic: refine (π.sum_biUnion_boxes _ _).trans <| sum_congr rfl fun J hJ => sum_congr rfl fun J' hJ' => ?_
state_before: ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π : Prepartition I
πi : (J : Box ι) → TaggedPrepartition J
⊢ integralSum f vol (Prepartition.biUnionTagged π πi) = ∑ J in π.boxes, integralSum f vol (πi J)

tactic: rw [π.tag_biUnionTagged hJ hJ']
state_before: ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π : Prepartition I
πi : (J : Box ι) → TaggedPrepartition J
J : Box ι
hJ : J ∈ π.boxes
J' : Box ι
hJ' : J' ∈ (πi J).boxes
⊢ ↑(↑vol J') (f (tag (Prepartition.biUnionTagged π πi) J')) = ↑(↑vol J') (f (tag (πi J) J'))
Theorem: Polynomial.Monic.natDegree_map
File: Mathlib/Data/Polynomial/Monic.lean

tactic: refine' le_antisymm (natDegree_map_le _ _) (le_natDegree_of_ne_zero _)
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝² : Semiring R
inst✝¹ : Semiring S
inst✝ : Nontrivial S
P : R[X]
hmo : Monic P
f : R →+* S
⊢ natDegree (Polynomial.map f P) = natDegree P

tactic: rw [coeff_map, Monic.coeff_natDegree hmo, RingHom.map_one]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝² : Semiring R
inst✝¹ : Semiring S
inst✝ : Nontrivial S
P : R[X]
hmo : Monic P
f : R →+* S
⊢ coeff (Polynomial.map f P) (natDegree 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
inst✝¹ : Semiring S
inst✝ : Nontrivial S
P : R[X]
hmo : Monic P
f : R →+* S
⊢ 1 ≠ 0
Theorem: Equiv.toFun_inducedStructureEquiv_Symm
File: Mathlib/ModelTheory/Basic.lean

tactic: letI : L.Structure N := inducedStructure e
state_before: L : Language
M : Type ?u.318087
N : Type ?u.318090
inst✝ : Structure L M
e : M ≃ N
⊢ (a : N) → (fun x => M) a

tactic: exact FunLike.coe (@inducedStructureEquiv L M N _ e).symm
state_before: L : Language
M : Type ?u.318087
N : Type ?u.318090
inst✝ : Structure L M
e : M ≃ N
this : Structure L N := inducedStructure e
⊢ (a : N) → (fun x => M) a
Theorem: ConformalAt.comp
File: Mathlib/Analysis/Calculus/Conformal/NormedSpace.lean

tactic: rcases hf with ⟨f', hf₁, cf⟩
state_before: X : Type u_3
Y : Type u_1
Z : Type u_2
inst✝⁵ : NormedAddCommGroup X
inst✝⁴ : NormedAddCommGroup Y
inst✝³ : NormedAddCommGroup Z
inst✝² : NormedSpace ℝ X
inst✝¹ : NormedSpace ℝ Y
inst✝ : NormedSpace ℝ Z
f : X → Y
g : Y → Z
x : X
hg : ConformalAt g (f x)
hf : ConformalAt f x
⊢ ConformalAt (g ∘ f) x

tactic: rcases hg with ⟨g', hg₁, cg⟩
state_before: case intro.intro
X : Type u_3
Y : Type u_1
Z : Type u_2
inst✝⁵ : NormedAddCommGroup X
inst✝⁴ : NormedAddCommGroup Y
inst✝³ : NormedAddCommGroup Z
inst✝² : NormedSpace ℝ X
inst✝¹ : NormedSpace ℝ Y
inst✝ : NormedSpace ℝ Z
f : X → Y
g : Y → Z
x : X
hg : ConformalAt g (f x)
f' : X →L[ℝ] Y
hf₁ : HasFDerivAt f f' x
cf : IsConformalMap f'
⊢ ConformalAt (g ∘ f) x

tactic: exact ⟨g'.comp f', hg₁.comp x hf₁, cg.comp cf⟩
state_before: case intro.intro.intro.intro
X : Type u_3
Y : Type u_1
Z : Type u_2
inst✝⁵ : NormedAddCommGroup X
inst✝⁴ : NormedAddCommGroup Y
inst✝³ : NormedAddCommGroup Z
inst✝² : NormedSpace ℝ X
inst✝¹ : NormedSpace ℝ Y
inst✝ : NormedSpace ℝ Z
f : X → Y
g : Y → Z
x : X
f' : X →L[ℝ] Y
hf₁ : HasFDerivAt f f' x
cf : IsConformalMap f'
g' : Y →L[ℝ] Z
hg₁ : HasFDerivAt g g' (f x)
cg : IsConformalMap g'
⊢ ConformalAt (g ∘ f) x
Theorem: Finsupp.antidiagonal_filter_snd_eq
File: Mathlib/Data/Finsupp/Antidiagonal.lean

tactic: ext ⟨a, b⟩
state_before: α : Type u
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = g)
⊢ Finset.filter (fun p => p.snd = g) (antidiagonal f) = if g ≤ f then {(f - g, g)} else ∅

tactic: suffices b = g → (a + b = f ↔ g ≤ f ∧ a = f - g) by
  simpa [apply_ite (fun f ↦ (a, b) ∈ f), mem_filter, mem_antidiagonal, mem_singleton,
    Prod.mk.inj_iff, ← and_assoc, and_congr_left_iff]
state_before: case a.mk
α : Type u
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = g)
a b : α →₀ ℕ
⊢ (a, b) ∈ Finset.filter (fun p => p.snd = g) (antidiagonal f) ↔ (a, b) ∈ if g ≤ f then {(f - g, g)} else ∅

tactic: rintro rfl
state_before: case a.mk
α : Type u
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = g)
a b : α →₀ ℕ
⊢ b = g → (a + b = f ↔ g ≤ f ∧ a = f - g)

tactic: constructor
state_before: case a.mk
α : Type u
f a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = b)
⊢ a + b = f ↔ b ≤ f ∧ a = f - b

tactic: simpa [apply_ite (fun f ↦ (a, b) ∈ f), mem_filter, mem_antidiagonal, mem_singleton,
  Prod.mk.inj_iff, ← and_assoc, and_congr_left_iff]
state_before: α : Type u
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = g)
a b : α →₀ ℕ
this : b = g → (a + b = f ↔ g ≤ f ∧ a = f - g)
⊢ (a, b) ∈ Finset.filter (fun p => p.snd = g) (antidiagonal f) ↔ (a, b) ∈ if g ≤ f then {(f - g, g)} else ∅

tactic: rintro rfl
state_before: case a.mk.mp
α : Type u
f a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = b)
⊢ a + b = f → b ≤ f ∧ a = f - b

tactic: exact ⟨le_add_left le_rfl, (add_tsub_cancel_right _ _).symm⟩
state_before: case a.mk.mp
α : Type u
a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = b)
⊢ b ≤ a + b ∧ a = a + b - b

tactic: rintro ⟨h, rfl⟩
state_before: case a.mk.mpr
α : Type u
f a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = b)
⊢ b ≤ f ∧ a = f - b → a + b = f

tactic: exact tsub_add_cancel_of_le h
state_before: case a.mk.mpr.intro
α : Type u
f b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = b)
h : b ≤ f
⊢ f - b + b = f
Theorem: Finset.prod_add_prod_le'
File: Mathlib/Algebra/BigOperators/Order.lean

tactic: classical
  simp_rw [prod_eq_mul_prod_diff_singleton hi]
  refine' le_trans _ (mul_le_mul_right' h2i _)
  rw [right_distrib]
  apply add_le_add <;> apply mul_le_mul_left' <;> apply prod_le_prod' <;>
          simp only [and_imp, mem_sdiff, mem_singleton] <;>
        intros <;>
      apply_assumption <;>
    assumption
state_before: ι : Type u_1
α : Type ?u.177392
β : Type ?u.177395
M : Type ?u.177398
N : Type ?u.177401
G : Type ?u.177404
k : Type ?u.177407
R : Type u_2
inst✝ : CanonicallyOrderedCommSemiring R
f g h : ι → R
s : Finset ι
i : ι
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
⊢ ∏ i in s, g i + ∏ i in s, h i ≤ ∏ i in s, f i

tactic: simp_rw [prod_eq_mul_prod_diff_singleton hi]
state_before: ι : Type u_1
α : Type ?u.177392
β : Type ?u.177395
M : Type ?u.177398
N : Type ?u.177401
G : Type ?u.177404
k : Type ?u.177407
R : Type u_2
inst✝ : CanonicallyOrderedCommSemiring R
f g h : ι → R
s : Finset ι
i : ι
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
⊢ ∏ i in s, g i + ∏ i in s, h i ≤ ∏ i in s, f i

tactic: refine' le_trans _ (mul_le_mul_right' h2i _)
state_before: ι : Type u_1
α : Type ?u.177392
β : Type ?u.177395
M : Type ?u.177398
N : Type ?u.177401
G : Type ?u.177404
k : Type ?u.177407
R : Type u_2
inst✝ : CanonicallyOrderedCommSemiring R
f g h : ι → R
s : Finset ι
i : ι
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
⊢ g i * ∏ i in s \ {i}, g i + h i * ∏ i in s \ {i}, h i ≤ f i * ∏ i in s \ {i}, f i

tactic: rw [right_distrib]
state_before: ι : Type u_1
α : Type ?u.177392
β : Type ?u.177395
M : Type ?u.177398
N : Type ?u.177401
G : Type ?u.177404
k : Type ?u.177407
R : Type u_2
inst✝ : CanonicallyOrderedCommSemiring R
f g h : ι → R
s : Finset ι
i : ι
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
⊢ g i * ∏ i in s \ {i}, g i + h i * ∏ i in s \ {i}, h i ≤ (g i + h i) * ∏ i in s \ {i}, f i

tactic: apply add_le_add <;> apply mul_le_mul_left' <;> apply prod_le_prod' <;>
        simp only [and_imp, mem_sdiff, mem_singleton] <;>
      intros <;>
    apply_assumption <;>
  assumption
state_before: ι : Type u_1
α : Type ?u.177392
β : Type ?u.177395
M : Type ?u.177398
N : Type ?u.177401
G : Type ?u.177404
k : Type ?u.177407
R : Type u_2
inst✝ : CanonicallyOrderedCommSemiring R
f g h : ι → R
s : Finset ι
i : ι
hi : i ∈ s
h2i : g i + h i ≤ f i
hgf : ∀ (j : ι), j ∈ s → j ≠ i → g j ≤ f j
hhf : ∀ (j : ι), j ∈ s → j ≠ i → h j ≤ f j
⊢ g i * ∏ i in s \ {i}, g i + h i * ∏ i in s \ {i}, h i ≤ g i * ∏ i in s \ {i}, f i + h i * ∏ i in s \ {i}, f i
Theorem: BoxIntegral.Prepartition.restrict_boxes_of_le
File: Mathlib/Analysis/BoxIntegral/Partition/Basic.lean

tactic: simp only [restrict, ofWithBot, eraseNone_eq_biUnion]
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π✝ π₁ π₂ : Prepartition I
x : ι → ℝ
πi πi₁ πi₂ : (J : Box ι) → Prepartition J
π : Prepartition I
h : I ≤ J
⊢ (restrict π J).boxes = π.boxes

tactic: refine' Finset.image_biUnion.trans _
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π✝ π₁ π₂ : Prepartition I
x : ι → ℝ
πi πi₁ πi₂ : (J : Box ι) → Prepartition J
π : Prepartition I
h : I ≤ J
⊢ Finset.biUnion (Finset.image (fun J' => ↑J ⊓ ↑J') π.boxes) Option.toFinset = π.boxes

tactic: refine' (Finset.biUnion_congr rfl _).trans Finset.biUnion_singleton_eq_self
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π✝ π₁ π₂ : Prepartition I
x : ι → ℝ
πi πi₁ πi₂ : (J : Box ι) → Prepartition J
π : Prepartition I
h : I ≤ J
⊢ (Finset.biUnion π.boxes fun a => Option.toFinset (↑J ⊓ ↑a)) = π.boxes

tactic: intro J' hJ'
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π✝ π₁ π₂ : Prepartition I
x : ι → ℝ
πi πi₁ πi₂ : (J : Box ι) → Prepartition J
π : Prepartition I
h : I ≤ J
⊢ ∀ (a : Box ι), a ∈ π.boxes → Option.toFinset (↑J ⊓ ↑a) = {a}

tactic: rw [inf_of_le_right, ← WithBot.some_eq_coe, Option.toFinset_some]
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π✝ π₁ π₂ : Prepartition I
x : ι → ℝ
πi πi₁ πi₂ : (J : Box ι) → Prepartition J
π : Prepartition I
h : I ≤ J
J' : Box ι
hJ' : J' ∈ π.boxes
⊢ Option.toFinset (↑J ⊓ ↑J') = {J'}

tactic: exact WithBot.coe_le_coe.2 ((π.le_of_mem hJ').trans h)
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π✝ π₁ π₂ : Prepartition I
x : ι → ℝ
πi πi₁ πi₂ : (J : Box ι) → Prepartition J
π : Prepartition I
h : I ≤ J
J' : Box ι
hJ' : J' ∈ π.boxes
⊢ ↑J' ≤ ↑J
Theorem: PGame.moveLeft_neg
File: Mathlib/SetTheory/Game/PGame.lean

tactic: cases x
state_before: x : PGame
i : RightMoves x
⊢ moveLeft (-x) (↑toLeftMovesNeg i) = -moveRight x i

tactic: rfl
state_before: case mk
α✝ β✝ : Type u_1
a✝¹ : α✝ → PGame
a✝ : β✝ → PGame
i : RightMoves (mk α✝ β✝ a✝¹ a✝)
⊢ moveLeft (-mk α✝ β✝ a✝¹ a✝) (↑toLeftMovesNeg i) = -moveRight (mk α✝ β✝ a✝¹ a✝) i
Theorem: CategoryTheory.SimplicialObject.δ_comp_σ_self'
File: Mathlib/AlgebraicTopology/SimplicialObject.lean

tactic: subst H
state_before: C : Type u
inst✝ : Category C
X : SimplicialObject C
n : ℕ
j : Fin (n + 2)
i : Fin (n + 1)
H : j = ↑Fin.castSucc i
⊢ σ X i ≫ δ X j = 𝟙 (X.obj [n].op)

tactic: rw [δ_comp_σ_self]
state_before: C : Type u
inst✝ : Category C
X : SimplicialObject C
n : ℕ
i : Fin (n + 1)
⊢ σ X i ≫ δ X (↑Fin.castSucc i) = 𝟙 (X.obj [n].op)
Theorem: Subsemigroup.mem_iSup_of_directed
File: Mathlib/GroupTheory/Subsemigroup/Membership.lean

tactic: refine' ⟨_, fun ⟨i, hi⟩ => (SetLike.le_def.1 <| le_iSup S i) hi⟩
state_before: ι : Sort u_2
M : Type u_1
A : Type ?u.35
B : Type ?u.38
inst✝ : Mul M
S : ι → Subsemigroup M
hS : Directed (fun x x_1 => x ≤ x_1) S
x : M
⊢ (x ∈ ⨆ (i : ι), S i) ↔ ∃ i, x ∈ S i

tactic: suffices x ∈ closure (⋃ i, (S i : Set M)) → ∃ i, x ∈ S i by
  simpa only [closure_iUnion, closure_eq (S _)] using this
state_before: ι : Sort u_2
M : Type u_1
A : Type ?u.35
B : Type ?u.38
inst✝ : Mul M
S : ι → Subsemigroup M
hS : Directed (fun x x_1 => x ≤ x_1) S
x : M
⊢ (x ∈ ⨆ (i : ι), S i) → ∃ i, x ∈ S i

tactic: refine' fun hx => closure_induction hx (fun y hy => mem_iUnion.mp hy) _
state_before: ι : Sort u_2
M : Type u_1
A : Type ?u.35
B : Type ?u.38
inst✝ : Mul M
S : ι → Subsemigroup M
hS : Directed (fun x x_1 => x ≤ x_1) S
x : M
⊢ x ∈ closure (⋃ (i : ι), ↑(S i)) → ∃ i, x ∈ S i

tactic: simpa only [closure_iUnion, closure_eq (S _)] using this
state_before: ι : Sort u_2
M : Type u_1
A : Type ?u.35
B : Type ?u.38
inst✝ : Mul M
S : ι → Subsemigroup M
hS : Directed (fun x x_1 => x ≤ x_1) S
x : M
this : x ∈ closure (⋃ (i : ι), ↑(S i)) → ∃ i, x ∈ S i
⊢ (x ∈ ⨆ (i : ι), S i) → ∃ i, x ∈ S i

tactic: rintro x y ⟨i, hi⟩ ⟨j, hj⟩
state_before: ι : Sort u_2
M : Type u_1
A : Type ?u.35
B : Type ?u.38
inst✝ : Mul M
S : ι → Subsemigroup M
hS : Directed (fun x x_1 => x ≤ x_1) S
x : M
hx : x ∈ closure (⋃ (i : ι), ↑(S i))
⊢ ∀ (x y : M), (∃ i, x ∈ S i) → (∃ i, y ∈ S i) → ∃ i, x * y ∈ S i

tactic: rcases hS i j with ⟨k, hki, hkj⟩
state_before: case intro.intro
ι : Sort u_2
M : Type u_1
A : Type ?u.35
B : Type ?u.38
inst✝ : Mul M
S : ι → Subsemigroup M
hS : Directed (fun x x_1 => x ≤ x_1) S
x✝ : M
hx : x✝ ∈ closure (⋃ (i : ι), ↑(S i))
x y : M
i : ι
hi : x ∈ S i
j : ι
hj : y ∈ S j
⊢ ∃ i, x * y ∈ S i

tactic: exact ⟨k, (S k).mul_mem (hki hi) (hkj hj)⟩
state_before: case intro.intro.intro.intro
ι : Sort u_2
M : Type u_1
A : Type ?u.35
B : Type ?u.38
inst✝ : Mul M
S : ι → Subsemigroup M
hS : Directed (fun x x_1 => x ≤ x_1) S
x✝ : M
hx : x✝ ∈ closure (⋃ (i : ι), ↑(S i))
x y : M
i : ι
hi : x ∈ S i
j : ι
hj : y ∈ S j
k : ι
hki : S i ≤ S k
hkj : S j ≤ S k
⊢ ∃ i, x * y ∈ S i
Theorem: CategoryTheory.Limits.MonoFactorisation.kernel_ι_comp
File: Mathlib/CategoryTheory/Limits/Shapes/Kernels.lean

tactic: rw [← cancel_mono F.m, zero_comp, Category.assoc, F.fac, kernel.condition]
state_before: C : Type u
inst✝² : Category C
inst✝¹ : HasZeroMorphisms C
X Y : C
f : X ⟶ Y
inst✝ : HasKernel f
F : MonoFactorisation f
⊢ kernel.ι f ≫ F.e = 0
Theorem: Submodule.orthogonal_orthogonal_eq_closure
File: Mathlib/Analysis/InnerProductSpace/Projection.lean

tactic: refine' le_antisymm _ _
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.781831
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ Kᗮᗮ = topologicalClosure K

tactic: convert Submodule.orthogonal_orthogonal_monotone K.le_topologicalClosure using 1
state_before: case refine'_1
𝕜 : Type u_2
E : Type u_1
F : Type ?u.781831
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ Kᗮᗮ ≤ topologicalClosure K

tactic: haveI : CompleteSpace K.topologicalClosure :=
  K.isClosed_topologicalClosure.completeSpace_coe
state_before: case h.e'_4
𝕜 : Type u_2
E : Type u_1
F : Type ?u.781831
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ topologicalClosure K = (topologicalClosure K)ᗮᗮ

tactic: rw [K.topologicalClosure.orthogonal_orthogonal]
state_before: case h.e'_4
𝕜 : Type u_2
E : Type u_1
F : Type ?u.781831
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
this : CompleteSpace { x // x ∈ topologicalClosure K }
⊢ topologicalClosure K = (topologicalClosure K)ᗮᗮ

tactic: exact K.topologicalClosure_minimal K.le_orthogonal_orthogonal Kᗮ.isClosed_orthogonal
state_before: case refine'_2
𝕜 : Type u_2
E : Type u_1
F : Type ?u.781831
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ topologicalClosure K ≤ Kᗮᗮ
Theorem: AlgebraicTopology.DoldKan.N₁Γ₀_hom_app_f_f
File: Mathlib/AlgebraicTopology/DoldKan/GammaCompN.lean

tactic: rw [N₁Γ₀_hom_app]
state_before: C : Type u_2
inst✝² : Category C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
n : ℕ
⊢ HomologicalComplex.Hom.f (N₁Γ₀.hom.app K).f n =
    HomologicalComplex.Hom.f (Splitting.toKaroubiNondegComplexIsoN₁ (Γ₀.splitting K)).inv.f n

tactic: apply comp_id
state_before: C : Type u_2
inst✝² : Category C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
n : ℕ
⊢ HomologicalComplex.Hom.f
      ((Splitting.toKaroubiNondegComplexIsoN₁ (Γ₀.splitting K)).inv ≫
          (toKaroubi (ChainComplex C ℕ)).map (Γ₀NondegComplexIso K).hom).f
      n =
    HomologicalComplex.Hom.f (Splitting.toKaroubiNondegComplexIsoN₁ (Γ₀.splitting K)).inv.f n
Theorem: mul_mul_mul_comm
File: Mathlib/Algebra/Group/Basic.lean

tactic: simp only [mul_left_comm, mul_assoc]
state_before: α : Type ?u.6182
β : Type ?u.6185
G : Type u_1
inst✝ : CommSemigroup G
a b c d : G
⊢ a * b * (c * d) = a * c * (b * d)
Theorem: compl_sdiff_compl
File: Mathlib/Order/BooleanAlgebra.lean

tactic: rw [sdiff_compl, sdiff_eq, inf_comm]
state_before: α : Type u
β : Type ?u.59519
w x y z : α
inst✝ : BooleanAlgebra α
⊢ xᶜ \ yᶜ = y \ x
Theorem: Metric.Bounded.mul
File: Mathlib/Analysis/Normed/Group/Pointwise.lean

tactic: obtain ⟨Rs, hRs⟩ : ∃ R, ∀ x ∈ s, ‖x‖ ≤ R := hs.exists_norm_le'
state_before: E : Type u_1
inst✝ : SeminormedGroup E
ε δ : ℝ
s t : Set E
x y : E
hs : Bounded s
ht : Bounded t
⊢ Bounded (s * t)

tactic: obtain ⟨Rt, hRt⟩ : ∃ R, ∀ x ∈ t, ‖x‖ ≤ R := ht.exists_norm_le'
state_before: case intro
E : Type u_1
inst✝ : SeminormedGroup E
ε δ : ℝ
s t : Set E
x y : E
hs : Bounded s
ht : Bounded t
Rs : ℝ
hRs : ∀ (x : E), x ∈ s → ‖x‖ ≤ Rs
⊢ Bounded (s * t)

tactic: refine' bounded_iff_forall_norm_le'.2 ⟨Rs + Rt, _⟩
state_before: case intro.intro
E : Type u_1
inst✝ : SeminormedGroup E
ε δ : ℝ
s t : Set E
x y : E
hs : Bounded s
ht : Bounded t
Rs : ℝ
hRs : ∀ (x : E), x ∈ s → ‖x‖ ≤ Rs
Rt : ℝ
hRt : ∀ (x : E), x ∈ t → ‖x‖ ≤ Rt
⊢ Bounded (s * t)

tactic: rintro z ⟨x, y, hx, hy, rfl⟩
state_before: case intro.intro
E : Type u_1
inst✝ : SeminormedGroup E
ε δ : ℝ
s t : Set E
x y : E
hs : Bounded s
ht : Bounded t
Rs : ℝ
hRs : ∀ (x : E), x ∈ s → ‖x‖ ≤ Rs
Rt : ℝ
hRt : ∀ (x : E), x ∈ t → ‖x‖ ≤ Rt
⊢ ∀ (x : E), x ∈ s * t → ‖x‖ ≤ Rs + Rt

tactic: exact norm_mul_le_of_le (hRs x hx) (hRt y hy)
state_before: case intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝ : SeminormedGroup E
ε δ : ℝ
s t : Set E
x✝ y✝ : E
hs : Bounded s
ht : Bounded t
Rs : ℝ
hRs : ∀ (x : E), x ∈ s → ‖x‖ ≤ Rs
Rt : ℝ
hRt : ∀ (x : E), x ∈ t → ‖x‖ ≤ Rt
x y : E
hx : x ∈ s
hy : y ∈ t
⊢ ‖(fun x x_1 => x * x_1) x y‖ ≤ Rs + Rt
Theorem: abs_max_sub_max_le_max
File: Mathlib/Algebra/Order/Group/MinMax.lean

tactic: refine' abs_sub_le_iff.2 ⟨_, _⟩
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
a✝ b✝ c✝ a b c d : α
⊢ abs (max a b - max c d) ≤ max (abs (a - c)) (abs (b - d))

tactic: exact (max_sub_max_le_max _ _ _ _).trans (max_le_max (le_abs_self _) (le_abs_self _))
state_before: case refine'_1
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
a✝ b✝ c✝ a b c d : α
⊢ max a b - max c d ≤ max (abs (a - c)) (abs (b - d))

tactic: rw [abs_sub_comm a c, abs_sub_comm b d]
state_before: case refine'_2
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
a✝ b✝ c✝ a b c d : α
⊢ max c d - max a b ≤ max (abs (a - c)) (abs (b - d))

tactic: exact (max_sub_max_le_max _ _ _ _).trans (max_le_max (le_abs_self _) (le_abs_self _))
state_before: case refine'_2
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
a✝ b✝ c✝ a b c d : α
⊢ max c d - max a b ≤ max (abs (c - a)) (abs (d - b))
Theorem: CategoryTheory.IsIso.inv_id
File: Mathlib/CategoryTheory/Iso.lean

tactic: apply inv_eq_of_hom_inv_id
state_before: C : Type u
inst✝ : Category C
X Y Z : C
f g : X ⟶ Y
h : Y ⟶ Z
⊢ inv (𝟙 X) = 𝟙 X

tactic: simp
state_before: case hom_inv_id
C : Type u
inst✝ : Category C
X Y Z : C
f g : X ⟶ Y
h : Y ⟶ Z
⊢ 𝟙 X ≫ 𝟙 X = 𝟙 X