1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: HomologicalComplex.opcyclesMap_comp
File: Mathlib/Algebra/Homology/ShortComplex/HomologicalComplex.lean

tactic: dsimp [opcyclesMap]
state_before: C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : HasZeroMorphisms C
ι : Type u_2
c : ComplexShape ι
K L M : HomologicalComplex C c
φ : K ⟶ L
ψ : L ⟶ M
i j k : ι
inst✝² : K.HasHomology i
inst✝¹ : L.HasHomology i
inst✝ : M.HasHomology i
⊢ opcyclesMap (φ ≫ ψ) i = opcyclesMap φ i ≫ opcyclesMap ψ i
state_after: C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : HasZeroMorphisms C
ι : Type u_2
c : ComplexShape ι
K L M : HomologicalComplex C c
φ : K ⟶ L
ψ : L ⟶ M
i j k : ι
inst✝² : K.HasHomology i
inst✝¹ : L.HasHomology i
inst✝ : M.HasHomology i
⊢ ShortComplex.opcyclesMap ((shortComplexFunctor C c i).map (φ ≫ ψ)) =
    ShortComplex.opcyclesMap ((shortComplexFunctor C c i).map φ) ≫
      ShortComplex.opcyclesMap ((shortComplexFunctor C c i).map ψ)

tactic: rw [Functor.map_comp, ShortComplex.opcyclesMap_comp]
state_before: C : Type u_1
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : HasZeroMorphisms C
ι : Type u_2
c : ComplexShape ι
K L M : HomologicalComplex C c
φ : K ⟶ L
ψ : L ⟶ M
i j k : ι
inst✝² : K.HasHomology i
inst✝¹ : L.HasHomology i
inst✝ : M.HasHomology i
⊢ ShortComplex.opcyclesMap ((shortComplexFunctor C c i).map (φ ≫ ψ)) =
    ShortComplex.opcyclesMap ((shortComplexFunctor C c i).map φ) ≫
      ShortComplex.opcyclesMap ((shortComplexFunctor C c i).map ψ)
state_after: no goals
Theorem: SimplicialObject.Splitting.ι_desc
File: Mathlib/AlgebraicTopology/SplitSimplicialObject.lean

tactic: apply Cofan.IsColimit.fac
state_before: C : Type u_1
inst✝ : Category.{u_2, u_1} C
X Y : SimplicialObject C
s : Splitting X
Z : C
Δ : SimplexCategoryᵒᵖ
F : (A : IndexSet Δ) → s.N A.fst.unop.len ⟶ Z
A : IndexSet Δ
⊢ (s.cofan Δ).inj A ≫ s.desc Δ F = F A
state_after: no goals
Theorem: Set.ncard_eq_one
File: Mathlib/Data/Set/Card.lean

tactic: refine ⟨fun h ↦ ?_, by rintro ⟨a, rfl⟩; rw [ncard_singleton]⟩
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
⊢ s.ncard = 1 ↔ ∃ a, s = {a}
state_after: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
h : s.ncard = 1
⊢ ∃ a, s = {a}

tactic: have hft := (finite_of_ncard_ne_zero (ne_zero_of_eq_one h)).fintype
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
h : s.ncard = 1
⊢ ∃ a, s = {a}
state_after: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
h : s.ncard = 1
hft : Fintype ↑s
⊢ ∃ a, s = {a}

tactic: simp_rw [ncard_eq_toFinset_card', @Finset.card_eq_one _ (toFinset s)] at h
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
h : s.ncard = 1
hft : Fintype ↑s
⊢ ∃ a, s = {a}
state_after: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hft : Fintype ↑s
h : ∃ a, s.toFinset = {a}
⊢ ∃ a, s = {a}

tactic: refine h.imp fun a ha ↦ ?_
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hft : Fintype ↑s
h : ∃ a, s.toFinset = {a}
⊢ ∃ a, s = {a}
state_after: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hft : Fintype ↑s
h : ∃ a, s.toFinset = {a}
a : α
ha : s.toFinset = {a}
⊢ s = {a}

tactic: simp_rw [Set.ext_iff, mem_singleton_iff]
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hft : Fintype ↑s
h : ∃ a, s.toFinset = {a}
a : α
ha : s.toFinset = {a}
⊢ s = {a}
state_after: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hft : Fintype ↑s
h : ∃ a, s.toFinset = {a}
a : α
ha : s.toFinset = {a}
⊢ ∀ (x : α), x ∈ s ↔ x = a

tactic: simp only [Finset.ext_iff, mem_toFinset, Finset.mem_singleton] at ha
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hft : Fintype ↑s
h : ∃ a, s.toFinset = {a}
a : α
ha : s.toFinset = {a}
⊢ ∀ (x : α), x ∈ s ↔ x = a
state_after: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hft : Fintype ↑s
h : ∃ a, s.toFinset = {a}
a : α
ha : ∀ (a_1 : α), a_1 ∈ s ↔ a_1 = a
⊢ ∀ (x : α), x ∈ s ↔ x = a

tactic: exact ha
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
hft : Fintype ↑s
h : ∃ a, s.toFinset = {a}
a : α
ha : ∀ (a_1 : α), a_1 ∈ s ↔ a_1 = a
⊢ ∀ (x : α), x ∈ s ↔ x = a
state_after: no goals

tactic: rintro ⟨a, rfl⟩
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
⊢ (∃ a, s = {a}) → s.ncard = 1
state_after: case intro
α : Type u_1
β : Type u_2
t : Set α
f : α → β
a : α
⊢ {a}.ncard = 1

tactic: rw [ncard_singleton]
state_before: case intro
α : Type u_1
β : Type u_2
t : Set α
f : α → β
a : α
⊢ {a}.ncard = 1
state_after: no goals
Theorem: BoxIntegral.Prepartition.iUnion_single
File: Mathlib/Analysis/BoxIntegral/Partition/Basic.lean

tactic: simp [iUnion_def]
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
h : J ≤ I
⊢ (single I J h).iUnion = ↑J
state_after: no goals
Theorem: Orthonormal.exists_hilbertBasis_extension
File: Mathlib/Analysis/InnerProductSpace/l2Space.lean

tactic: simpa only [Subtype.range_coe_subtype, Set.setOf_mem_eq,
maximal_orthonormal_iff_orthogonalComplement_eq_bot hw_ortho] using hw_max
state_before: ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
v : ι → E
hv : Orthonormal 𝕜 v
s : Set E
hs : Orthonormal 𝕜 Subtype.val
w : Set E
hws : w ⊇ s
hw_ortho : Orthonormal 𝕜 Subtype.val
hw_max : ∀ u ⊇ w, Orthonormal 𝕜 Subtype.val → u = w
⊢ (span 𝕜 (Set.range Subtype.val))ᗮ = ⊥
state_after: no goals
Theorem: Cardinal.mk_list_eq_sum_pow
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: simp
state_before: α✝ β : Type u
c : Cardinal.{?u.187299}
α : Type u
⊢ #((n : ℕ) × Vector α n) = sum fun n => #α ^ n
state_after: no goals
Theorem: List.Perm.union_right
File: .lake/packages/batteries/Batteries/Data/List/Perm.lean

tactic: induction h with
| nil => rfl
| cons a _ ih => exact ih.insert a
| swap => apply perm_insert_swap
| trans _ _ ih_1 ih_2 => exact ih_1.trans ih_2
state_before: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ t₁ : List α
h : l₁ ~ l₂
⊢ l₁ ∪ t₁ ~ l₂ ∪ t₁
state_after: no goals

tactic: rfl
state_before: case nil
α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ t₁ : List α
⊢ [] ∪ t₁ ~ [] ∪ t₁
state_after: no goals

tactic: exact ih.insert a
state_before: case cons
α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ t₁ : List α
a : α
l₁✝ l₂✝ : List α
a✝ : l₁✝ ~ l₂✝
ih : l₁✝ ∪ t₁ ~ l₂✝ ∪ t₁
⊢ a :: l₁✝ ∪ t₁ ~ a :: l₂✝ ∪ t₁
state_after: no goals

tactic: apply perm_insert_swap
state_before: case swap
α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ t₁ : List α
x✝ y✝ : α
l✝ : List α
⊢ y✝ :: x✝ :: l✝ ∪ t₁ ~ x✝ :: y✝ :: l✝ ∪ t₁
state_after: no goals

tactic: exact ih_1.trans ih_2
state_before: case trans
α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ t₁ l₁✝ l₂✝ l₃✝ : List α
a✝¹ : l₁✝ ~ l₂✝
a✝ : l₂✝ ~ l₃✝
ih_1 : l₁✝ ∪ t₁ ~ l₂✝ ∪ t₁
ih_2 : l₂✝ ∪ t₁ ~ l₃✝ ∪ t₁
⊢ l₁✝ ∪ t₁ ~ l₃✝ ∪ t₁
state_after: no goals
Theorem: WittVector.ghostFun_neg
File: Mathlib/RingTheory/WittVector/Basic.lean

tactic: ghost_fun_tac -X 0, ![x.coeff]
state_before: p : ℕ
R : Type u_1
S : Type u_2
T : Type u_3
hp : Fact (Nat.Prime p)
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing T
α : Type u_4
β : Type u_5
x y : 𝕎 R
⊢ WittVector.ghostFun (-x) = -WittVector.ghostFun x
state_after: no goals
Theorem: pow_right_mono
File: Mathlib/Algebra/Order/Ring/Basic.lean

tactic: rw [pow_succ']
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
n✝ m : ℕ
h : 1 ≤ a
n : ℕ
⊢ a ^ n ≤ a ^ (n + 1)
state_after: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
n✝ m : ℕ
h : 1 ≤ a
n : ℕ
⊢ a ^ n ≤ a * a ^ n

tactic: exact le_mul_of_one_le_left (pow_nonneg (zero_le_one.trans h) _) h
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
n✝ m : ℕ
h : 1 ≤ a
n : ℕ
⊢ a ^ n ≤ a * a ^ n
state_after: no goals
Theorem: BoxIntegral.Prepartition.iUnion_biUnion
File: Mathlib/Analysis/BoxIntegral/Partition/Basic.lean

tactic: simp [Prepartition.iUnion]
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
πi✝ πi₁ πi₂ πi : (J : Box ι) → Prepartition J
⊢ (π.biUnion πi).iUnion = ⋃ J ∈ π, (πi J).iUnion
state_after: no goals
Theorem: List.dProdIndex_eq_map_sum
File: Mathlib/Algebra/GradedMonoid.lean

tactic: match l with
| [] => simp
| head::tail => simp [List.dProdIndex_eq_map_sum tail fι]
state_before: ι : Type u_1
α : Type u_2
A : ι → Type u_3
inst✝¹ : AddMonoid ι
inst✝ : GradedMonoid.GMonoid A
l : List α
fι : α → ι
⊢ l.dProdIndex fι = (map fι l).sum
state_after: no goals

tactic: simp
state_before: ι : Type u_1
α : Type u_2
A : ι → Type u_3
inst✝¹ : AddMonoid ι
inst✝ : GradedMonoid.GMonoid A
l : List α
fι : α → ι
⊢ [].dProdIndex fι = (map fι []).sum
state_after: no goals

tactic: simp [List.dProdIndex_eq_map_sum tail fι]
state_before: ι : Type u_1
α : Type u_2
A : ι → Type u_3
inst✝¹ : AddMonoid ι
inst✝ : GradedMonoid.GMonoid A
l : List α
fι : α → ι
head : α
tail : List α
⊢ (head :: tail).dProdIndex fι = (map fι (head :: tail)).sum
state_after: no goals
Theorem: frontier_univ
File: Mathlib/Topology/Basic.lean

tactic: simp [frontier]
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
⊢ frontier univ = ∅
state_after: no goals
Theorem: OreLocalization.mul_one
File: Mathlib/RingTheory/OreLocalization/Basic.lean

tactic: induction' x with r s
state_before: R : Type u_1
inst✝² : Monoid R
S : Submonoid R
inst✝¹ : OreSet S
X : Type ?u.89601
inst✝ : MulAction R X
x : OreLocalization S R
⊢ x * 1 = x
state_after: case c
R : Type u_1
inst✝² : Monoid R
S : Submonoid R
inst✝¹ : OreSet S
X : Type ?u.89601
inst✝ : MulAction R X
r : R
s : ↥S
⊢ r /ₒ s * 1 = r /ₒ s

tactic: simp [OreLocalization.one_def, oreDiv_mul_char r (1 : R) s (1 : S) r 1 (by simp)]
state_before: case c
R : Type u_1
inst✝² : Monoid R
S : Submonoid R
inst✝¹ : OreSet S
X : Type ?u.89601
inst✝ : MulAction R X
r : R
s : ↥S
⊢ r /ₒ s * 1 = r /ₒ s
state_after: no goals

tactic: simp
state_before: R : Type u_1
inst✝² : Monoid R
S : Submonoid R
inst✝¹ : OreSet S
X : Type ?u.89601
inst✝ : MulAction R X
r : R
s : ↥S
⊢ ↑1 * r = r * ↑1
state_after: no goals
Theorem: Fintype.exists_unique_iff_card_one
File: Mathlib/Data/Fintype/Card.lean

tactic: rw [Finset.card_eq_one]
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : Fintype α✝
inst✝² : Fintype β
α : Type u_4
inst✝¹ : Fintype α
p : α → Prop
inst✝ : DecidablePred p
⊢ (∃! a, p a) ↔ (filter p univ).card = 1
state_after: α✝ : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : Fintype α✝
inst✝² : Fintype β
α : Type u_4
inst✝¹ : Fintype α
p : α → Prop
inst✝ : DecidablePred p
⊢ (∃! a, p a) ↔ ∃ a, filter p univ = {a}

tactic: refine exists_congr fun x => ?_
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : Fintype α✝
inst✝² : Fintype β
α : Type u_4
inst✝¹ : Fintype α
p : α → Prop
inst✝ : DecidablePred p
⊢ (∃! a, p a) ↔ ∃ a, filter p univ = {a}
state_after: α✝ : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : Fintype α✝
inst✝² : Fintype β
α : Type u_4
inst✝¹ : Fintype α
p : α → Prop
inst✝ : DecidablePred p
x : α
⊢ ((fun a => p a) x ∧ ∀ (y : α), (fun a => p a) y → y = x) ↔ filter p univ = {x}

tactic: simp only [forall_true_left, Subset.antisymm_iff, subset_singleton_iff', singleton_subset_iff,
    true_and, and_comm, mem_univ, mem_filter]
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : Fintype α✝
inst✝² : Fintype β
α : Type u_4
inst✝¹ : Fintype α
p : α → Prop
inst✝ : DecidablePred p
x : α
⊢ ((fun a => p a) x ∧ ∀ (y : α), (fun a => p a) y → y = x) ↔ filter p univ = {x}
state_after: no goals
Theorem: Algebraic.cardinal_mk_le_mul
File: Mathlib/Algebra/AlgebraicCard.lean

tactic: rw [← lift_id #_, ← lift_id #R[X]]
state_before: R A : Type u
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : IsDomain A
inst✝¹ : Algebra R A
inst✝ : NoZeroSMulDivisors R A
⊢ #{ x // IsAlgebraic R x } ≤ #R[X] * ℵ₀
state_after: R A : Type u
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : IsDomain A
inst✝¹ : Algebra R A
inst✝ : NoZeroSMulDivisors R A
⊢ lift.{u, u} #{ x // IsAlgebraic R x } ≤ lift.{u, u} #R[X] * ℵ₀

tactic: exact cardinal_mk_lift_le_mul R A
state_before: R A : Type u
inst✝⁴ : CommRing R
inst✝³ : CommRing A
inst✝² : IsDomain A
inst✝¹ : Algebra R A
inst✝ : NoZeroSMulDivisors R A
⊢ lift.{u, u} #{ x // IsAlgebraic R x } ≤ lift.{u, u} #R[X] * ℵ₀
state_after: no goals
Theorem: sdiff_eq_sdiff_iff_inf_eq_inf
File: Mathlib/Order/BooleanAlgebra.lean

tactic: rw [inf_inf_sdiff, h, inf_inf_sdiff]
state_before: α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : y \ x = y \ z
⊢ y ⊓ x ⊓ ?m.22226 h = y ⊓ z ⊓ ?m.22226 h
state_after: no goals

tactic: rw [sup_inf_sdiff, h, sup_inf_sdiff]
state_before: α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : y \ x = y \ z
⊢ y ⊓ x ⊔ y \ x = y ⊓ z ⊔ y \ x
state_after: no goals

tactic: rw [← sdiff_inf_self_right, ← sdiff_inf_self_right z y, inf_comm, h, inf_comm]
state_before: α : Type u
β : Type u_1
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
h : y ⊓ x = y ⊓ z
⊢ y \ x = y \ z
state_after: no goals
Theorem: MeasureTheory.SignedMeasure.toMeasureOfLEZero_toSignedMeasure
File: Mathlib/MeasureTheory/Measure/VectorMeasure.lean

tactic: ext i hi
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
s : SignedMeasure α
i j : Set α
hs : VectorMeasure.restrict s univ ≤ VectorMeasure.restrict 0 univ
⊢ (s.toMeasureOfLEZero univ ⋯ hs).toSignedMeasure = -s
state_after: case h
α : Type u_1
β : Type u_2
m : MeasurableSpace α
s : SignedMeasure α
i✝ j : Set α
hs : VectorMeasure.restrict s univ ≤ VectorMeasure.restrict 0 univ
i : Set α
hi : MeasurableSet i
⊢ ↑(s.toMeasureOfLEZero univ ⋯ hs).toSignedMeasure i = ↑(-s) i

tactic: simp [hi, toMeasureOfLEZero_apply _ _ _ hi]
state_before: case h
α : Type u_1
β : Type u_2
m : MeasurableSpace α
s : SignedMeasure α
i✝ j : Set α
hs : VectorMeasure.restrict s univ ≤ VectorMeasure.restrict 0 univ
i : Set α
hi : MeasurableSet i
⊢ ↑(s.toMeasureOfLEZero univ ⋯ hs).toSignedMeasure i = ↑(-s) i
state_after: no goals
Theorem: CategoryTheory.ShortComplex.rightHomologyMap'_neg
File: Mathlib/Algebra/Homology/ShortComplex/Preadditive.lean

tactic: have γ : RightHomologyMapData φ h₁ h₂ := default
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
S₁ S₂ S₃ : ShortComplex C
φ φ' : S₁ ⟶ S₂
h₁ : S₁.RightHomologyData
h₂ : S₂.RightHomologyData
⊢ rightHomologyMap' (-φ) h₁ h₂ = -rightHomologyMap' φ h₁ h₂
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
S₁ S₂ S₃ : ShortComplex C
φ φ' : S₁ ⟶ S₂
h₁ : S₁.RightHomologyData
h₂ : S₂.RightHomologyData
γ : RightHomologyMapData φ h₁ h₂
⊢ rightHomologyMap' (-φ) h₁ h₂ = -rightHomologyMap' φ h₁ h₂

tactic: simp only [γ.rightHomologyMap'_eq, γ.neg.rightHomologyMap'_eq, RightHomologyMapData.neg_φH]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
S₁ S₂ S₃ : ShortComplex C
φ φ' : S₁ ⟶ S₂
h₁ : S₁.RightHomologyData
h₂ : S₂.RightHomologyData
γ : RightHomologyMapData φ h₁ h₂
⊢ rightHomologyMap' (-φ) h₁ h₂ = -rightHomologyMap' φ h₁ h₂
state_after: no goals
Theorem: Language.mem_kstar_iff_exists_nonempty
File: Mathlib/Computability/Language.lean

tactic: constructor
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x✝ x : List α
⊢ x ∈ l∗ ↔ ∃ S, x = S.join ∧ ∀ y ∈ S, y ∈ l ∧ y ≠ []
state_after: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x✝ x : List α
⊢ x ∈ l∗ → ∃ S, x = S.join ∧ ∀ y ∈ S, y ∈ l ∧ y ≠ []

case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x✝ x : List α
⊢ (∃ S, x = S.join ∧ ∀ y ∈ S, y ∈ l ∧ y ≠ []) → x ∈ l∗

tactic: rintro ⟨S, rfl, h⟩
state_before: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x✝ x : List α
⊢ x ∈ l∗ → ∃ S, x = S.join ∧ ∀ y ∈ S, y ∈ l ∧ y ≠ []
state_after: case mp.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x : List α
S : List (List α)
h : ∀ y ∈ S, y ∈ l
⊢ ∃ S_1, S.join = S_1.join ∧ ∀ y ∈ S_1, y ∈ l ∧ y ≠ []

tactic: refine ⟨S.filter fun l ↦ !List.isEmpty l, by simp, fun y hy ↦ ?_⟩
state_before: case mp.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x : List α
S : List (List α)
h : ∀ y ∈ S, y ∈ l
⊢ ∃ S_1, S.join = S_1.join ∧ ∀ y ∈ S_1, y ∈ l ∧ y ≠ []
state_after: case mp.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x : List α
S : List (List α)
h : ∀ y ∈ S, y ∈ l
y : List α
hy : y ∈ filter (fun l => !l.isEmpty) S
⊢ y ∈ l ∧ y ≠ []

tactic: rw [mem_filter, Bool.not_eq_true', ← Bool.bool_iff_false, isEmpty_iff_eq_nil] at hy
state_before: case mp.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x : List α
S : List (List α)
h : ∀ y ∈ S, y ∈ l
y : List α
hy : y ∈ filter (fun l => !l.isEmpty) S
⊢ y ∈ l ∧ y ≠ []
state_after: case mp.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x : List α
S : List (List α)
h : ∀ y ∈ S, y ∈ l
y : List α
hy : y ∈ S ∧ ¬y = []
⊢ y ∈ l ∧ y ≠ []

tactic: exact ⟨h y hy.1, hy.2⟩
state_before: case mp.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x : List α
S : List (List α)
h : ∀ y ∈ S, y ∈ l
y : List α
hy : y ∈ S ∧ ¬y = []
⊢ y ∈ l ∧ y ≠ []
state_after: no goals

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x : List α
S : List (List α)
h : ∀ y ∈ S, y ∈ l
⊢ S.join = (filter (fun l => !l.isEmpty) S).join
state_after: no goals

tactic: rintro ⟨S, hx, h⟩
state_before: case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x✝ x : List α
⊢ (∃ S, x = S.join ∧ ∀ y ∈ S, y ∈ l ∧ y ≠ []) → x ∈ l∗
state_after: case mpr.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x✝ x : List α
S : List (List α)
hx : x = S.join
h : ∀ y ∈ S, y ∈ l ∧ y ≠ []
⊢ x ∈ l∗

tactic: exact ⟨S, hx, fun y hy ↦ (h y hy).1⟩
state_before: case mpr.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
l m : Language α
a b x✝ x : List α
S : List (List α)
hx : x = S.join
h : ∀ y ∈ S, y ∈ l ∧ y ≠ []
⊢ x ∈ l∗
state_after: no goals
Theorem: Real.logb_nonneg_iff
File: Mathlib/Analysis/SpecialFunctions/Log/Base.lean

tactic: rw [← not_lt, logb_neg_iff hb hx, not_lt]
state_before: b x y : ℝ
hb : 1 < b
hx : 0 < x
⊢ 0 ≤ logb b x ↔ 1 ≤ x
state_after: no goals
Theorem: Finset.subset_mulSpan
File: Mathlib/Combinatorics/Additive/Dissociation.lean

tactic: obtain rfl | hab := eq_or_ne a b <;> simp [*]
state_before: α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a✝ : α
d : ℕ
a : α
ha : a ∈ s
b : α
⊢ Pi.single a 1 b = -1 ∨ Pi.single a 1 b = 0 ∨ Pi.single a 1 b = 1
state_after: no goals

tactic: simp [Pi.single, Function.update, pow_ite, ha]
state_before: α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a✝ : α
d : ℕ
a : α
ha : a ∈ s
⊢ ∏ a_1 ∈ s, a_1 ^ Pi.single a 1 a_1 = a
state_after: no goals
Theorem: Ordinal.mul_add_div
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: apply le_antisymm
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
b0 : b ≠ 0
c : Ordinal.{u_4}
⊢ (b * a + c) / b = a + c / b
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
b0 : b ≠ 0
c : Ordinal.{u_4}
⊢ (b * a + c) / b ≤ a + c / b

case a
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
b0 : b ≠ 0
c : Ordinal.{u_4}
⊢ a + c / b ≤ (b * a + c) / b

tactic: apply (div_le b0).2
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
b0 : b ≠ 0
c : Ordinal.{u_4}
⊢ (b * a + c) / b ≤ a + c / b
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
b0 : b ≠ 0
c : Ordinal.{u_4}
⊢ b * a + c < b * succ (a + c / b)

tactic: rw [mul_succ, mul_add, add_assoc, add_lt_add_iff_left]
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
b0 : b ≠ 0
c : Ordinal.{u_4}
⊢ b * a + c < b * succ (a + c / b)
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
b0 : b ≠ 0
c : Ordinal.{u_4}
⊢ c < b * (c / b) + b

tactic: apply lt_mul_div_add _ b0
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
b0 : b ≠ 0
c : Ordinal.{u_4}
⊢ c < b * (c / b) + b
state_after: no goals

tactic: rw [le_div b0, mul_add, add_le_add_iff_left]
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
b0 : b ≠ 0
c : Ordinal.{u_4}
⊢ a + c / b ≤ (b * a + c) / b
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
b0 : b ≠ 0
c : Ordinal.{u_4}
⊢ b * (c / b) ≤ c

tactic: apply mul_div_le
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
b0 : b ≠ 0
c : Ordinal.{u_4}
⊢ b * (c / b) ≤ c
state_after: no goals
Theorem: IsLocalization.isNoetherianRing
File: Mathlib/RingTheory/Localization/Submodule.lean

tactic: rw [isNoetherianRing_iff, isNoetherian_iff_wellFounded] at h ⊢
state_before: R : Type u_1
inst✝⁷ : CommRing R
M : Submonoid R
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
P : Type u_3
inst✝⁴ : CommRing P
g : R →+* P
T : Submonoid P
hy : M ≤ Submonoid.comap g T
Q : Type u_4
inst✝³ : CommRing Q
inst✝² : Algebra P Q
inst✝¹ : IsLocalization T Q
inst✝ : IsLocalization M S
h : IsNoetherianRing R
⊢ IsNoetherianRing S
state_after: R : Type u_1
inst✝⁷ : CommRing R
M : Submonoid R
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
P : Type u_3
inst✝⁴ : CommRing P
g : R →+* P
T : Submonoid P
hy : M ≤ Submonoid.comap g T
Q : Type u_4
inst✝³ : CommRing Q
inst✝² : Algebra P Q
inst✝¹ : IsLocalization T Q
inst✝ : IsLocalization M S
h : WellFounded fun x x_1 => x > x_1
⊢ WellFounded fun x x_1 => x > x_1

tactic: exact OrderEmbedding.wellFounded (IsLocalization.orderEmbedding M S).dual h
state_before: R : Type u_1
inst✝⁷ : CommRing R
M : Submonoid R
S : Type u_2
inst✝⁶ : CommRing S
inst✝⁵ : Algebra R S
P : Type u_3
inst✝⁴ : CommRing P
g : R →+* P
T : Submonoid P
hy : M ≤ Submonoid.comap g T
Q : Type u_4
inst✝³ : CommRing Q
inst✝² : Algebra P Q
inst✝¹ : IsLocalization T Q
inst✝ : IsLocalization M S
h : WellFounded fun x x_1 => x > x_1
⊢ WellFounded fun x x_1 => x > x_1
state_after: no goals
Theorem: IsPerfectClosure.equiv_comp_equiv_apply_eq_self
File: Mathlib/FieldTheory/IsPerfectClosure.lean

tactic: rw [equiv_comp_equiv_apply, equiv_self_apply]
state_before: K : Type u_1
L : Type u_2
M : Type u_3
N : Type u_4
inst✝¹³ : CommRing K
inst✝¹² : CommRing L
inst✝¹¹ : CommRing M
inst✝¹⁰ : CommRing N
i : K →+* L
j : K →+* M
k : K →+* N
f : L →+* M
g : L →+* N
p : ℕ
inst✝⁹ : ExpChar K p
inst✝⁸ : ExpChar L p
inst✝⁷ : ExpChar M p
inst✝⁶ : ExpChar N p
inst✝⁵ : PerfectRing L p
inst✝⁴ : IsPerfectClosure i p
inst✝³ : PerfectRing M p
inst✝² : IsPerfectClosure j p
inst✝¹ : PerfectRing N p
inst✝ : IsPerfectClosure k p
x : L
⊢ (equiv j i p) ((equiv i j p) x) = x
state_after: no goals
Theorem: Set.image_mul_right
File: Mathlib/Data/Set/Pointwise/Basic.lean

tactic: rw [image_eq_preimage_of_inverse] <;> intro c <;> simp
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝ : Group α
s t : Set α
a b : α
⊢ (fun x => x * b) '' t = (fun x => x * b⁻¹) ⁻¹' t
state_after: no goals
Theorem: CategoryTheory.shift_shiftFunctorCompIsoId_neg_add_self_inv_app
File: Mathlib/CategoryTheory/Shift/Basic.lean

tactic: apply shift_shiftFunctorCompIsoId_inv_app
state_before: C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddGroup A
inst✝ : HasShift C A
X✝ Y : C
f : X✝ ⟶ Y
n : A
X : C
⊢ (shiftFunctor C (-n)).map ((shiftFunctorCompIsoId C (-n) n ⋯).inv.app X) =
    (shiftFunctorCompIsoId C n (-n) ⋯).inv.app ((shiftFunctor C (-n)).obj X)
state_after: no goals