1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: List.map_permutationsAux2
File: Mathlib/Data/List/Permutation.lean

tactic: rw [map_permutationsAux2' id, map_id, map_id]
state_before: α : Type u_1
β : Type u_2
t : α
ts ys : List α
f : List α → β
⊢ map f (permutationsAux2 t ts [] ys id).2 = (permutationsAux2 t ts [] ys f).2
state_after: α : Type u_1
β : Type u_2
t : α
ts ys : List α
f : List α → β
⊢ (permutationsAux2 (id t) ts (map f []) ys ?f').2 = (permutationsAux2 t ts [] ys f).2

case f'
α : Type u_1
β : Type u_2
t : α
ts ys : List α
f : List α → β
⊢ List α → β

case H
α : Type u_1
β : Type u_2
t : α
ts ys : List α
f : List α → β
⊢ ∀ (a : List α), f (id a) = ?f' (map id a)

tactic: simp
state_before: case H
α : Type u_1
β : Type u_2
t : α
ts ys : List α
f : List α → β
⊢ ∀ (a : List α), f (id a) = f (map id a)
state_after: no goals

tactic: rfl
state_before: α : Type u_1
β : Type u_2
t : α
ts ys : List α
f : List α → β
⊢ (permutationsAux2 (id t) ts (map f []) ys ?f').2 = (permutationsAux2 t ts [] ys f).2
state_after: no goals
Theorem: inf_left_idem
File: Mathlib/Order/Lattice.lean

tactic: simp
state_before: α : Type u
β : Type v
inst✝ : SemilatticeInf α
a✝ b✝ c d a b : α
⊢ a ⊓ (a ⊓ b) = a ⊓ b
state_after: no goals
Theorem: isOpenMap_quotient_mk'_mul
File: Mathlib/Topology/Algebra/ConstMulAction.lean

tactic: rw [isOpen_coinduced, MulAction.quotient_preimage_image_eq_union_mul U]
state_before: M : Type u_1
α : Type u_2
β : Type u_3
Γ : Type u_4
inst✝³ : Group Γ
T : Type u_5
inst✝² : TopologicalSpace T
inst✝¹ : MulAction Γ T
inst✝ : ContinuousConstSMul Γ T
U : Set T
hU : IsOpen U
⊢ IsOpen (Quotient.mk' '' U)
state_after: M : Type u_1
α : Type u_2
β : Type u_3
Γ : Type u_4
inst✝³ : Group Γ
T : Type u_5
inst✝² : TopologicalSpace T
inst✝¹ : MulAction Γ T
inst✝ : ContinuousConstSMul Γ T
U : Set T
hU : IsOpen U
⊢ IsOpen (⋃ g, (fun x => g • x) '' U)

tactic: exact isOpen_iUnion fun γ => isOpenMap_smul γ U hU
state_before: M : Type u_1
α : Type u_2
β : Type u_3
Γ : Type u_4
inst✝³ : Group Γ
T : Type u_5
inst✝² : TopologicalSpace T
inst✝¹ : MulAction Γ T
inst✝ : ContinuousConstSMul Γ T
U : Set T
hU : IsOpen U
⊢ IsOpen (⋃ g, (fun x => g • x) '' U)
state_after: no goals
Theorem: Real.logb_nonpos_iff'
File: Mathlib/Analysis/SpecialFunctions/Log/Base.lean

tactic: rcases hx.eq_or_lt with (rfl | hx)
state_before: b x y : ℝ
hb : 1 < b
hx : 0 ≤ x
⊢ logb b x ≤ 0 ↔ x ≤ 1
state_after: case inl
b y : ℝ
hb : 1 < b
hx : 0 ≤ 0
⊢ logb b 0 ≤ 0 ↔ 0 ≤ 1

case inr
b x y : ℝ
hb : 1 < b
hx✝ : 0 ≤ x
hx : 0 < x
⊢ logb b x ≤ 0 ↔ x ≤ 1

tactic: exact logb_nonpos_iff hb hx
state_before: case inr
b x y : ℝ
hb : 1 < b
hx✝ : 0 ≤ x
hx : 0 < x
⊢ logb b x ≤ 0 ↔ x ≤ 1
state_after: no goals

tactic: simp [le_refl, zero_le_one]
state_before: case inl
b y : ℝ
hb : 1 < b
hx : 0 ≤ 0
⊢ logb b 0 ≤ 0 ↔ 0 ≤ 1
state_after: no goals
Theorem: dist_div_eq_dist_mul_right
File: Mathlib/Analysis/Normed/Group/Uniform.lean

tactic: rw [← dist_mul_right _ _ c, div_mul_cancel]
state_before: 𝓕 : Type u_1
α : Type u_2
E : Type u_3
F : Type u_4
inst✝¹ : SeminormedGroup E
inst✝ : SeminormedGroup F
s : Set E
a✝ a₁ a₂ b✝ b₁ b₂ : E
r r₁ r₂ : ℝ
a b c : E
⊢ dist a (b / c) = dist (a * c) b
state_after: no goals
Theorem: IsCompl.bihimp_eq_bot
File: Mathlib/Order/SymmDiff.lean

tactic: rw [h.eq_compl, compl_bihimp_self]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : HeytingAlgebra α
a✝ a b : α
h : IsCompl a b
⊢ a ⇔ b = ⊥
state_after: no goals
Theorem: nnnorm_prod_le
File: Mathlib/Analysis/Normed/Group/Basic.lean

tactic: push_cast
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝¹ : SeminormedCommGroup E
inst✝ : SeminormedCommGroup F
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
s : Finset ι
f : ι → E
⊢ ↑‖∏ a ∈ s, f a‖₊ ≤ ↑(∑ a ∈ s, ‖f a‖₊)
state_after: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝¹ : SeminormedCommGroup E
inst✝ : SeminormedCommGroup F
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
s : Finset ι
f : ι → E
⊢ ‖∏ a ∈ s, f a‖ ≤ ∑ x ∈ s, ‖f x‖

tactic: exact norm_prod_le _ _
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝¹ : SeminormedCommGroup E
inst✝ : SeminormedCommGroup F
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
s : Finset ι
f : ι → E
⊢ ‖∏ a ∈ s, f a‖ ≤ ∑ x ∈ s, ‖f x‖
state_after: no goals
Theorem: Filter.mem_inf_principal
File: Mathlib/Order/Filter/Basic.lean

tactic: simp only [mem_inf_principal', imp_iff_not_or, setOf_or, compl_def, setOf_mem_eq]
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
f✝ g : Filter α
s✝ t✝ : Set α
f : Filter α
s t : Set α
⊢ s ∈ f ⊓ 𝓟 t ↔ {x | x ∈ t → x ∈ s} ∈ f
state_after: no goals
Theorem: homTensorHomEquiv_toLinearMap
File: Mathlib/LinearAlgebra/Contraction.lean

tactic: ext m n
state_before: ι : Type w
R : Type u
M : Type v₁
N : Type v₂
P : Type v₃
Q : Type v₄
inst✝¹³ : CommRing R
inst✝¹² : AddCommGroup M
inst✝¹¹ : AddCommGroup N
inst✝¹⁰ : AddCommGroup P
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Free R M
inst✝³ : Module.Finite R M
inst✝² : Free R N
inst✝¹ : Module.Finite R N
inst✝ : Nontrivial R
⊢ ↑(homTensorHomEquiv R M N P Q) = homTensorHomMap R M N P Q
state_after: case H.h.h.H.h.h
ι : Type w
R : Type u
M : Type v₁
N : Type v₂
P : Type v₃
Q : Type v₄
inst✝¹³ : CommRing R
inst✝¹² : AddCommGroup M
inst✝¹¹ : AddCommGroup N
inst✝¹⁰ : AddCommGroup P
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Free R M
inst✝³ : Module.Finite R M
inst✝² : Free R N
inst✝¹ : Module.Finite R N
inst✝ : Nontrivial R
m : M →ₗ[R] P
n : N →ₗ[R] Q
x✝¹ : M
x✝ : N
⊢ (((TensorProduct.mk R M N).compr₂
          ((((TensorProduct.mk R (M →ₗ[R] P) (N →ₗ[R] Q)).compr₂ ↑(homTensorHomEquiv R M N P Q)) m) n))
        x✝¹)
      x✝ =
    (((TensorProduct.mk R M N).compr₂
          ((((TensorProduct.mk R (M →ₗ[R] P) (N →ₗ[R] Q)).compr₂ (homTensorHomMap R M N P Q)) m) n))
        x✝¹)
      x✝

tactic: simp only [homTensorHomEquiv, compr₂_apply, mk_apply, LinearEquiv.coe_toLinearMap,
  LinearEquiv.trans_apply, lift.equiv_apply, LinearEquiv.arrowCongr_apply, LinearEquiv.refl_symm,
  LinearEquiv.refl_apply, rTensorHomEquivHomRTensor_apply, lTensorHomEquivHomLTensor_apply,
  lTensorHomToHomLTensor_apply, rTensorHomToHomRTensor_apply, homTensorHomMap_apply,
  map_tmul]
state_before: case H.h.h.H.h.h
ι : Type w
R : Type u
M : Type v₁
N : Type v₂
P : Type v₃
Q : Type v₄
inst✝¹³ : CommRing R
inst✝¹² : AddCommGroup M
inst✝¹¹ : AddCommGroup N
inst✝¹⁰ : AddCommGroup P
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Free R M
inst✝³ : Module.Finite R M
inst✝² : Free R N
inst✝¹ : Module.Finite R N
inst✝ : Nontrivial R
m : M →ₗ[R] P
n : N →ₗ[R] Q
x✝¹ : M
x✝ : N
⊢ (((TensorProduct.mk R M N).compr₂
          ((((TensorProduct.mk R (M →ₗ[R] P) (N →ₗ[R] Q)).compr₂ ↑(homTensorHomEquiv R M N P Q)) m) n))
        x✝¹)
      x✝ =
    (((TensorProduct.mk R M N).compr₂
          ((((TensorProduct.mk R (M →ₗ[R] P) (N →ₗ[R] Q)).compr₂ (homTensorHomMap R M N P Q)) m) n))
        x✝¹)
      x✝
state_after: no goals
Theorem: Submodule.comap_unop_mul
File: Mathlib/Algebra/Algebra/Operations.lean

tactic: simp_rw [← map_equiv_eq_comap_symm, map_op_mul]
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
⊢ comap (↑(opLinearEquiv R).symm) (M * N) = comap (↑(opLinearEquiv R).symm) N * comap (↑(opLinearEquiv R).symm) M
state_after: no goals
Theorem: LieSubmodule.ucs_le_of_normalizer_eq_self
File: Mathlib/Algebra/Lie/Nilpotent.lean

tactic: rw [← ucs_eq_self_of_normalizer_eq_self h k]
state_before: R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
k✝ : ℕ
N N₁ N₂ : LieSubmodule R L M
h : N₁.normalizer = N₁
k : ℕ
⊢ ucs k ⊥ ≤ N₁
state_after: R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
k✝ : ℕ
N N₁ N₂ : LieSubmodule R L M
h : N₁.normalizer = N₁
k : ℕ
⊢ ucs k ⊥ ≤ ucs k N₁

tactic: gcongr
state_before: R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
k✝ : ℕ
N N₁ N₂ : LieSubmodule R L M
h : N₁.normalizer = N₁
k : ℕ
⊢ ucs k ⊥ ≤ ucs k N₁
state_after: case h
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
k✝ : ℕ
N N₁ N₂ : LieSubmodule R L M
h : N₁.normalizer = N₁
k : ℕ
⊢ ⊥ ≤ N₁

tactic: simp
state_before: case h
R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
k✝ : ℕ
N N₁ N₂ : LieSubmodule R L M
h : N₁.normalizer = N₁
k : ℕ
⊢ ⊥ ≤ N₁
state_after: no goals
Theorem: CategoryTheory.Over.w
File: Mathlib/CategoryTheory/Comma/Over.lean

tactic: have := f.w
state_before: T : Type u₁
inst✝ : Category.{v₁, u₁} T
X : T
A B : Over X
f : A ⟶ B
⊢ f.left ≫ B.hom = A.hom
state_after: T : Type u₁
inst✝ : Category.{v₁, u₁} T
X : T
A B : Over X
f : A ⟶ B
this : (𝟭 T).map f.left ≫ B.hom = A.hom ≫ (Functor.fromPUnit X).map f.right
⊢ f.left ≫ B.hom = A.hom

tactic: aesop_cat
state_before: T : Type u₁
inst✝ : Category.{v₁, u₁} T
X : T
A B : Over X
f : A ⟶ B
this : (𝟭 T).map f.left ≫ B.hom = A.hom ≫ (Functor.fromPUnit X).map f.right
⊢ f.left ≫ B.hom = A.hom
state_after: no goals
Theorem: CompleteLattice.Independent.comp'
File: Mathlib/Order/SupIndep.lean

tactic: intro i
state_before: α : Type u_1
β : Type u_2
ι✝ : Type u_3
ι'✝ : Type u_4
inst✝ : CompleteLattice α
s : Set α
hs : SetIndependent s
t✝ : ι✝ → α
ht✝ : Independent t✝
ι : Sort u_5
ι' : Sort u_6
t : ι → α
f : ι' → ι
ht : Independent (t ∘ f)
hf : Surjective f
⊢ Independent t
state_after: α : Type u_1
β : Type u_2
ι✝ : Type u_3
ι'✝ : Type u_4
inst✝ : CompleteLattice α
s : Set α
hs : SetIndependent s
t✝ : ι✝ → α
ht✝ : Independent t✝
ι : Sort u_5
ι' : Sort u_6
t : ι → α
f : ι' → ι
ht : Independent (t ∘ f)
hf : Surjective f
i : ι
⊢ Disjoint (t i) (⨆ j, ⨆ (_ : j ≠ i), t j)

tactic: obtain ⟨i', rfl⟩ := hf i
state_before: α : Type u_1
β : Type u_2
ι✝ : Type u_3
ι'✝ : Type u_4
inst✝ : CompleteLattice α
s : Set α
hs : SetIndependent s
t✝ : ι✝ → α
ht✝ : Independent t✝
ι : Sort u_5
ι' : Sort u_6
t : ι → α
f : ι' → ι
ht : Independent (t ∘ f)
hf : Surjective f
i : ι
⊢ Disjoint (t i) (⨆ j, ⨆ (_ : j ≠ i), t j)
state_after: case intro
α : Type u_1
β : Type u_2
ι✝ : Type u_3
ι'✝ : Type u_4
inst✝ : CompleteLattice α
s : Set α
hs : SetIndependent s
t✝ : ι✝ → α
ht✝ : Independent t✝
ι : Sort u_5
ι' : Sort u_6
t : ι → α
f : ι' → ι
ht : Independent (t ∘ f)
hf : Surjective f
i' : ι'
⊢ Disjoint (t (f i')) (⨆ j, ⨆ (_ : j ≠ f i'), t j)

tactic: rw [← hf.iSup_comp]
state_before: case intro
α : Type u_1
β : Type u_2
ι✝ : Type u_3
ι'✝ : Type u_4
inst✝ : CompleteLattice α
s : Set α
hs : SetIndependent s
t✝ : ι✝ → α
ht✝ : Independent t✝
ι : Sort u_5
ι' : Sort u_6
t : ι → α
f : ι' → ι
ht : Independent (t ∘ f)
hf : Surjective f
i' : ι'
⊢ Disjoint (t (f i')) (⨆ j, ⨆ (_ : j ≠ f i'), t j)
state_after: case intro
α : Type u_1
β : Type u_2
ι✝ : Type u_3
ι'✝ : Type u_4
inst✝ : CompleteLattice α
s : Set α
hs : SetIndependent s
t✝ : ι✝ → α
ht✝ : Independent t✝
ι : Sort u_5
ι' : Sort u_6
t : ι → α
f : ι' → ι
ht : Independent (t ∘ f)
hf : Surjective f
i' : ι'
⊢ Disjoint (t (f i')) (⨆ x, ⨆ (_ : f x ≠ f i'), t (f x))

tactic: exact (ht i').mono_right (biSup_mono fun j' hij => mt (congr_arg f) hij)
state_before: case intro
α : Type u_1
β : Type u_2
ι✝ : Type u_3
ι'✝ : Type u_4
inst✝ : CompleteLattice α
s : Set α
hs : SetIndependent s
t✝ : ι✝ → α
ht✝ : Independent t✝
ι : Sort u_5
ι' : Sort u_6
t : ι → α
f : ι' → ι
ht : Independent (t ∘ f)
hf : Surjective f
i' : ι'
⊢ Disjoint (t (f i')) (⨆ x, ⨆ (_ : f x ≠ f i'), t (f x))
state_after: no goals
Theorem: Complex.hasSum_sinh
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Series.lean

tactic: simpa [mul_assoc, sin_mul_I, neg_pow z, pow_add, pow_mul, neg_mul, neg_div]
  using (hasSum_sin' (z * I)).mul_right (-I)
state_before: z : ℂ
⊢ HasSum (fun n => z ^ (2 * n + 1) / ↑(2 * n + 1)!) (sinh z)
state_after: no goals
Theorem: IsSquare.div
File: Mathlib/Algebra/Group/Even.lean

tactic: rw [div_eq_mul_inv]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
inst✝ : DivisionCommMonoid α
a b : α
ha : IsSquare a
hb : IsSquare b
⊢ IsSquare (a / b)
state_after: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
inst✝ : DivisionCommMonoid α
a b : α
ha : IsSquare a
hb : IsSquare b
⊢ IsSquare (a * b⁻¹)

tactic: exact ha.mul hb.inv
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
inst✝ : DivisionCommMonoid α
a b : α
ha : IsSquare a
hb : IsSquare b
⊢ IsSquare (a * b⁻¹)
state_after: no goals
Theorem: MeasureTheory.mul_integral_upcrossingsBefore_le_integral_pos_part_aux
File: Mathlib/Probability/Martingale/Upcrossing.lean

tactic: refine le_trans (le_of_eq ?_)
  (integral_mul_upcrossingsBefore_le_integral (hf.sub_martingale (martingale_const _ _ _)).pos
    (fun ω => posPart_nonneg _)
    (fun ω => posPart_nonneg _) (sub_pos.2 hab))
state_before: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
inst✝ : IsFiniteMeasure μ
hf : Submartingale f ℱ μ
hab : a < b
⊢ (b - a) * ∫ (x : Ω), ↑(upcrossingsBefore a b f N x) ∂μ ≤ ∫ (x : Ω), (fun ω => (f N ω - a)⁺) x ∂μ
state_after: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
inst✝ : IsFiniteMeasure μ
hf : Submartingale f ℱ μ
hab : a < b
⊢ (b - a) * ∫ (x : Ω), ↑(upcrossingsBefore a b f N x) ∂μ =
    (b - a - 0) * ∫ (x : Ω), ↑(upcrossingsBefore 0 (b - a) (f - fun x x => a)⁺ N x) ∂μ

tactic: simp_rw [sub_zero, ← upcrossingsBefore_pos_eq hab]
state_before: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
inst✝ : IsFiniteMeasure μ
hf : Submartingale f ℱ μ
hab : a < b
⊢ (b - a) * ∫ (x : Ω), ↑(upcrossingsBefore a b f N x) ∂μ =
    (b - a - 0) * ∫ (x : Ω), ↑(upcrossingsBefore 0 (b - a) (f - fun x x => a)⁺ N x) ∂μ
state_after: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
inst✝ : IsFiniteMeasure μ
hf : Submartingale f ℱ μ
hab : a < b
⊢ (b - a) * ∫ (x : Ω), ↑(upcrossingsBefore 0 (b - a) (fun n ω => (f n ω - a)⁺) N x) ∂μ =
    (b - a) * ∫ (x : Ω), ↑(upcrossingsBefore 0 (b - a) (f - fun x x => a)⁺ N x) ∂μ

tactic: rfl
state_before: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
inst✝ : IsFiniteMeasure μ
hf : Submartingale f ℱ μ
hab : a < b
⊢ (b - a) * ∫ (x : Ω), ↑(upcrossingsBefore 0 (b - a) (fun n ω => (f n ω - a)⁺) N x) ∂μ =
    (b - a) * ∫ (x : Ω), ↑(upcrossingsBefore 0 (b - a) (f - fun x x => a)⁺ N x) ∂μ
state_after: no goals
Theorem: AEMeasurable.prod_swap
File: Mathlib/MeasureTheory/Constructions/Prod/Basic.lean

tactic: rw [← Measure.prod_swap] at hf
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
E : Type u_6
inst✝⁷ : MeasurableSpace α
inst✝⁶ : MeasurableSpace α'
inst✝⁵ : MeasurableSpace β
inst✝⁴ : MeasurableSpace β'
inst✝³ : MeasurableSpace γ
μ μ' : Measure α
ν ν' : Measure β
τ : Measure γ
inst✝² : NormedAddCommGroup E
inst✝¹ : SFinite μ
inst✝ : SFinite ν
f : β × α → γ
hf : AEMeasurable f (ν.prod μ)
⊢ AEMeasurable (fun z => f z.swap) (μ.prod ν)
state_after: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
E : Type u_6
inst✝⁷ : MeasurableSpace α
inst✝⁶ : MeasurableSpace α'
inst✝⁵ : MeasurableSpace β
inst✝⁴ : MeasurableSpace β'
inst✝³ : MeasurableSpace γ
μ μ' : Measure α
ν ν' : Measure β
τ : Measure γ
inst✝² : NormedAddCommGroup E
inst✝¹ : SFinite μ
inst✝ : SFinite ν
f : β × α → γ
hf : AEMeasurable f (map Prod.swap (μ.prod ν))
⊢ AEMeasurable (fun z => f z.swap) (μ.prod ν)

tactic: exact hf.comp_measurable measurable_swap
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
E : Type u_6
inst✝⁷ : MeasurableSpace α
inst✝⁶ : MeasurableSpace α'
inst✝⁵ : MeasurableSpace β
inst✝⁴ : MeasurableSpace β'
inst✝³ : MeasurableSpace γ
μ μ' : Measure α
ν ν' : Measure β
τ : Measure γ
inst✝² : NormedAddCommGroup E
inst✝¹ : SFinite μ
inst✝ : SFinite ν
f : β × α → γ
hf : AEMeasurable f (map Prod.swap (μ.prod ν))
⊢ AEMeasurable (fun z => f z.swap) (μ.prod ν)
state_after: no goals
Theorem: Multiset.prod_singleton
File: Mathlib/Algebra/BigOperators/Group/Multiset.lean

tactic: simp only [mul_one, prod_cons, ← cons_zero, eq_self_iff_true, prod_zero]
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : CommMonoid α
inst✝ : CommMonoid β
s t : Multiset α
a✝ : α
m : Multiset ι
f g : ι → α
a : α
⊢ {a}.prod = a
state_after: no goals
Theorem: ZMod.valMinAbs_natCast_eq_self
File: Mathlib/Data/ZMod/Basic.lean

tactic: refine ⟨fun ha => ?_, valMinAbs_natCast_of_le_half⟩
state_before: n a : ℕ
inst✝ : NeZero n
⊢ (↑a).valMinAbs = ↑a ↔ a ≤ n / 2
state_after: n a : ℕ
inst✝ : NeZero n
ha : (↑a).valMinAbs = ↑a
⊢ a ≤ n / 2

tactic: rw [← Int.natAbs_ofNat a, ← ha]
state_before: n a : ℕ
inst✝ : NeZero n
ha : (↑a).valMinAbs = ↑a
⊢ a ≤ n / 2
state_after: n a : ℕ
inst✝ : NeZero n
ha : (↑a).valMinAbs = ↑a
⊢ (↑a).valMinAbs.natAbs ≤ n / 2

tactic: exact natAbs_valMinAbs_le a
state_before: n a : ℕ
inst✝ : NeZero n
ha : (↑a).valMinAbs = ↑a
⊢ (↑a).valMinAbs.natAbs ≤ n / 2
state_after: no goals
Theorem: matPolyEquiv_map_C
File: Mathlib/RingTheory/PolynomialAlgebra.lean

tactic: rw [← matPolyEquiv_symm_C, AlgEquiv.apply_symm_apply]
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
n : Type w
inst✝¹ : DecidableEq n
inst✝ : Fintype n
M : Matrix n n R
⊢ matPolyEquiv (M.map ⇑C) = C M
state_after: no goals
Theorem: Pell.eq_pow_of_pell_lem
File: Mathlib/NumberTheory/PellMatiyasevic.lean

tactic: rw [sub_sq, mul_one, one_pow, sub_add, sub_sub_cancel, two_mul, sub_sub, ← add_sub,
  le_add_iff_nonneg_right, sub_nonneg, Int.add_one_le_iff]
state_before: a y k : ℕ
hy0 : y ≠ 0
hk0 : k ≠ 0
hyk : y ^ k < a
hya : y < a
⊢ ↑a ≤ ↑a ^ 2 - (↑a - 1) ^ 2 - 1
state_after: a y k : ℕ
hy0 : y ≠ 0
hk0 : k ≠ 0
hyk : y ^ k < a
hya : y < a
⊢ 1 < ↑a

tactic: norm_cast
state_before: a y k : ℕ
hy0 : y ≠ 0
hk0 : k ≠ 0
hyk : y ^ k < a
hya : y < a
⊢ 1 < ↑a
state_after: a y k : ℕ
hy0 : y ≠ 0
hk0 : k ≠ 0
hyk : y ^ k < a
hya : y < a
⊢ 1 < a

tactic: exact lt_of_le_of_lt (Nat.succ_le_of_lt (Nat.pos_of_ne_zero hy0)) hya
state_before: a y k : ℕ
hy0 : y ≠ 0
hk0 : k ≠ 0
hyk : y ^ k < a
hya : y < a
⊢ 1 < a
state_after: no goals

tactic: have := hya.le
state_before: a y k : ℕ
hy0 : y ≠ 0
hk0 : k ≠ 0
hyk : y ^ k < a
hya : y < a
⊢ ↑a ^ 2 - (↑a - 1) ^ 2 - 1 ≤ ↑a ^ 2 - (↑a - ↑y) ^ 2 - 1
state_after: a y k : ℕ
hy0 : y ≠ 0
hk0 : k ≠ 0
hyk : y ^ k < a
hya : y < a
this : y ≤ a
⊢ ↑a ^ 2 - (↑a - 1) ^ 2 - 1 ≤ ↑a ^ 2 - (↑a - ↑y) ^ 2 - 1

tactic: gcongr <;> norm_cast <;> omega
state_before: a y k : ℕ
hy0 : y ≠ 0
hk0 : k ≠ 0
hyk : y ^ k < a
hya : y < a
this : y ≤ a
⊢ ↑a ^ 2 - (↑a - 1) ^ 2 - 1 ≤ ↑a ^ 2 - (↑a - ↑y) ^ 2 - 1
state_after: no goals

tactic: ring
state_before: a y k : ℕ
hy0 : y ≠ 0
hk0 : k ≠ 0
hyk : y ^ k < a
hya : y < a
⊢ ↑a ^ 2 - (↑a - ↑y) ^ 2 - 1 = 2 * ↑a * ↑y - ↑y * ↑y - 1
state_after: no goals
Theorem: List.perm_mergeSort
File: Mathlib/Data/List/Sort.lean

tactic: simp [mergeSort]
state_before: α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
⊢ mergeSort r [] ~ []
state_after: no goals

tactic: simp [mergeSort]
state_before: α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a : α
⊢ mergeSort r [a] ~ [a]
state_after: no goals

tactic: cases' e : split (a :: b :: l) with l₁ l₂
state_before: α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l : List α
⊢ mergeSort r (a :: b :: l) ~ a :: b :: l
state_after: case mk
α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l l₁ l₂ : List α
e : (a :: b :: l).split = (l₁, l₂)
⊢ mergeSort r (a :: b :: l) ~ a :: b :: l

tactic: cases' length_split_lt e with h₁ h₂
state_before: case mk
α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l l₁ l₂ : List α
e : (a :: b :: l).split = (l₁, l₂)
⊢ mergeSort r (a :: b :: l) ~ a :: b :: l
state_after: case mk.intro
α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l l₁ l₂ : List α
e : (a :: b :: l).split = (l₁, l₂)
h₁ : l₁.length < (a :: b :: l).length
h₂ : l₂.length < (a :: b :: l).length
⊢ mergeSort r (a :: b :: l) ~ a :: b :: l

tactic: rw [mergeSort_cons_cons r e]
state_before: case mk.intro
α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l l₁ l₂ : List α
e : (a :: b :: l).split = (l₁, l₂)
h₁ : l₁.length < (a :: b :: l).length
h₂ : l₂.length < (a :: b :: l).length
⊢ mergeSort r (a :: b :: l) ~ a :: b :: l
state_after: case mk.intro
α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l l₁ l₂ : List α
e : (a :: b :: l).split = (l₁, l₂)
h₁ : l₁.length < (a :: b :: l).length
h₂ : l₂.length < (a :: b :: l).length
⊢ merge (fun x x_1 => decide (r x x_1)) (mergeSort r l₁) (mergeSort r l₂) ~ a :: b :: l

tactic: exact
  ((perm_mergeSort l₁).append (perm_mergeSort l₂)).trans (perm_split e).symm
state_before: case mk.intro
α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l l₁ l₂ : List α
e : (a :: b :: l).split = (l₁, l₂)
h₁ : l₁.length < (a :: b :: l).length
h₂ : l₂.length < (a :: b :: l).length
⊢ mergeSort r l₁ ++ mergeSort r l₂ ~ a :: b :: l
state_after: no goals
Theorem: groupoid_of_pregroupoid_le
File: Mathlib/Geometry/Manifold/ChartedSpace.lean

tactic: refine StructureGroupoid.le_iff.2 fun e he ↦ ?_
state_before: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝ : TopologicalSpace H
PG₁ PG₂ : Pregroupoid H
h : ∀ (f : H → H) (s : Set H), PG₁.property f s → PG₂.property f s
⊢ PG₁.groupoid ≤ PG₂.groupoid
state_after: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝ : TopologicalSpace H
PG₁ PG₂ : Pregroupoid H
h : ∀ (f : H → H) (s : Set H), PG₁.property f s → PG₂.property f s
e : PartialHomeomorph H H
he : e ∈ PG₁.groupoid
⊢ e ∈ PG₂.groupoid

tactic: rw [mem_groupoid_of_pregroupoid] at he ⊢
state_before: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝ : TopologicalSpace H
PG₁ PG₂ : Pregroupoid H
h : ∀ (f : H → H) (s : Set H), PG₁.property f s → PG₂.property f s
e : PartialHomeomorph H H
he : e ∈ PG₁.groupoid
⊢ e ∈ PG₂.groupoid
state_after: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝ : TopologicalSpace H
PG₁ PG₂ : Pregroupoid H
h : ∀ (f : H → H) (s : Set H), PG₁.property f s → PG₂.property f s
e : PartialHomeomorph H H
he : PG₁.property (↑e) e.source ∧ PG₁.property (↑e.symm) e.target
⊢ PG₂.property (↑e) e.source ∧ PG₂.property (↑e.symm) e.target

tactic: exact ⟨h _ _ he.1, h _ _ he.2⟩
state_before: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝ : TopologicalSpace H
PG₁ PG₂ : Pregroupoid H
h : ∀ (f : H → H) (s : Set H), PG₁.property f s → PG₂.property f s
e : PartialHomeomorph H H
he : PG₁.property (↑e) e.source ∧ PG₁.property (↑e.symm) e.target
⊢ PG₂.property (↑e) e.source ∧ PG₂.property (↑e.symm) e.target
state_after: no goals