1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Filter.lift'_bot
File: Mathlib/Order/Filter/Lift.lean

tactic: rw [← principal_empty, lift'_principal hh]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
f f₁ f₂ : Filter α
h h₁ h₂ : Set α → Set β
hh : Monotone h
⊢ ⊥.lift' h = 𝓟 (h ∅)
state_after: no goals
Theorem: ciSup_neg
File: Mathlib/Order/ConditionallyCompleteLattice/Basic.lean

tactic: rw [iSup]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLattice α
s t : Set α
a b : α
p : Prop
f : p → α
hp : ¬p
⊢ ⨆ (h : p), f h = sSup ∅
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLattice α
s t : Set α
a b : α
p : Prop
f : p → α
hp : ¬p
⊢ sSup (range fun h => f h) = sSup ∅

tactic: congr
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLattice α
s t : Set α
a b : α
p : Prop
f : p → α
hp : ¬p
⊢ sSup (range fun h => f h) = sSup ∅
state_after: case e_a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLattice α
s t : Set α
a b : α
p : Prop
f : p → α
hp : ¬p
⊢ (range fun h => f h) = ∅

tactic: rwa [range_eq_empty_iff, isEmpty_Prop]
state_before: case e_a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLattice α
s t : Set α
a b : α
p : Prop
f : p → α
hp : ¬p
⊢ (range fun h => f h) = ∅
state_after: no goals
Theorem: Cardinal.aleph0_le_aleph'
File: Mathlib/SetTheory/Cardinal/Ordinal.lean

tactic: rw [← aleph'_omega, aleph'_le]
state_before: o : Ordinal.{u_1}
⊢ ℵ₀ ≤ aleph' o ↔ ω ≤ o
state_after: no goals
Theorem: Commute.list_sum_right
File: Mathlib/Algebra/BigOperators/Ring/List.lean

tactic: induction' l with x xs ih
state_before: ι : Type u_1
κ : Type u_2
M : Type u_3
M₀ : Type u_4
R : Type u_5
inst✝ : NonUnitalNonAssocSemiring R
a : R
l : List R
h : ∀ b ∈ l, Commute a b
⊢ Commute a l.sum
state_after: case nil
ι : Type u_1
κ : Type u_2
M : Type u_3
M₀ : Type u_4
R : Type u_5
inst✝ : NonUnitalNonAssocSemiring R
a : R
h : ∀ b ∈ [], Commute a b
⊢ Commute a [].sum

case cons
ι : Type u_1
κ : Type u_2
M : Type u_3
M₀ : Type u_4
R : Type u_5
inst✝ : NonUnitalNonAssocSemiring R
a x : R
xs : List R
ih : (∀ b ∈ xs, Commute a b) → Commute a xs.sum
h : ∀ b ∈ x :: xs, Commute a b
⊢ Commute a (x :: xs).sum

tactic: exact Commute.zero_right _
state_before: case nil
ι : Type u_1
κ : Type u_2
M : Type u_3
M₀ : Type u_4
R : Type u_5
inst✝ : NonUnitalNonAssocSemiring R
a : R
h : ∀ b ∈ [], Commute a b
⊢ Commute a [].sum
state_after: no goals

tactic: rw [List.sum_cons]
state_before: case cons
ι : Type u_1
κ : Type u_2
M : Type u_3
M₀ : Type u_4
R : Type u_5
inst✝ : NonUnitalNonAssocSemiring R
a x : R
xs : List R
ih : (∀ b ∈ xs, Commute a b) → Commute a xs.sum
h : ∀ b ∈ x :: xs, Commute a b
⊢ Commute a (x :: xs).sum
state_after: case cons
ι : Type u_1
κ : Type u_2
M : Type u_3
M₀ : Type u_4
R : Type u_5
inst✝ : NonUnitalNonAssocSemiring R
a x : R
xs : List R
ih : (∀ b ∈ xs, Commute a b) → Commute a xs.sum
h : ∀ b ∈ x :: xs, Commute a b
⊢ Commute a (x + xs.sum)

tactic: exact (h _ <| mem_cons_self _ _).add_right (ih fun j hj ↦ h _ <| mem_cons_of_mem _ hj)
state_before: case cons
ι : Type u_1
κ : Type u_2
M : Type u_3
M₀ : Type u_4
R : Type u_5
inst✝ : NonUnitalNonAssocSemiring R
a x : R
xs : List R
ih : (∀ b ∈ xs, Commute a b) → Commute a xs.sum
h : ∀ b ∈ x :: xs, Commute a b
⊢ Commute a (x + xs.sum)
state_after: no goals
Theorem: CategoryTheory.Preadditive.isCoseparator_iff
File: Mathlib/CategoryTheory/Preadditive/Generator.lean

tactic: simpa only [Limits.zero_comp] using hf
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
G : C
hG : IsCoseparator G
X Y : C
f : X ⟶ Y
hf : ∀ (h : Y ⟶ G), f ≫ h = 0
⊢ ∀ (h : Y ⟶ G), f ≫ h = 0 ≫ h
state_after: no goals

tactic: simpa only [Preadditive.sub_comp, sub_eq_zero] using hfg
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
G : C
hG : ∀ ⦃X Y : C⦄ (f : X ⟶ Y), (∀ (h : Y ⟶ G), f ≫ h = 0) → f = 0
X Y : C
f g : X ⟶ Y
hfg : ∀ (h : Y ⟶ G), f ≫ h = g ≫ h
⊢ ∀ (h : Y ⟶ G), (f - g) ≫ h = 0
state_after: no goals
Theorem: ENNReal.lt_add_of_sub_lt_left
File: Mathlib/Data/ENNReal/Operations.lean

tactic: obtain rfl | hb := eq_or_ne b ∞
state_before: a b c d : ℝ≥0∞
r p q : ℝ≥0
h : a ≠ ⊤ ∨ b ≠ ⊤
⊢ a - b < c → a < b + c
state_after: case inl
a c d : ℝ≥0∞
r p q : ℝ≥0
h : a ≠ ⊤ ∨ ⊤ ≠ ⊤
⊢ a - ⊤ < c → a < ⊤ + c

case inr
a b c d : ℝ≥0∞
r p q : ℝ≥0
h : a ≠ ⊤ ∨ b ≠ ⊤
hb : b ≠ ⊤
⊢ a - b < c → a < b + c

tactic: rw [top_add, lt_top_iff_ne_top]
state_before: case inl
a c d : ℝ≥0∞
r p q : ℝ≥0
h : a ≠ ⊤ ∨ ⊤ ≠ ⊤
⊢ a - ⊤ < c → a < ⊤ + c
state_after: case inl
a c d : ℝ≥0∞
r p q : ℝ≥0
h : a ≠ ⊤ ∨ ⊤ ≠ ⊤
⊢ a - ⊤ < c → a ≠ ⊤

tactic: exact fun _ => h.resolve_right (Classical.not_not.2 rfl)
state_before: case inl
a c d : ℝ≥0∞
r p q : ℝ≥0
h : a ≠ ⊤ ∨ ⊤ ≠ ⊤
⊢ a - ⊤ < c → a ≠ ⊤
state_after: no goals

tactic: exact (cancel_of_ne hb).lt_add_of_tsub_lt_left
state_before: case inr
a b c d : ℝ≥0∞
r p q : ℝ≥0
h : a ≠ ⊤ ∨ b ≠ ⊤
hb : b ≠ ⊤
⊢ a - b < c → a < b + c
state_after: no goals
Theorem: LinearIsometryEquiv.inner_map_eq_flip
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

tactic: conv_lhs => rw [← f.apply_symm_apply y, f.inner_map_map]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁸ : _root_.RCLike 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : InnerProductSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
ι : Type u_4
ι' : Type u_5
ι'' : Type u_6
E' : Type u_7
inst✝³ : NormedAddCommGroup E'
inst✝² : InnerProductSpace 𝕜 E'
E'' : Type u_8
inst✝¹ : NormedAddCommGroup E''
inst✝ : InnerProductSpace 𝕜 E''
f : E ≃ₗᵢ[𝕜] E'
x : E
y : E'
⊢ ⟪f x, y⟫_𝕜 = ⟪x, f.symm y⟫_𝕜
state_after: no goals
Theorem: LucasLehmer.X.ω_mul_ωb
File: Mathlib/NumberTheory/LucasLehmer.lean

tactic: dsimp [ω, ωb]
state_before: q✝ q : ℕ+
⊢ ω * ωb = 1
state_after: q✝ q : ℕ+
⊢ (2, 1) * (2, -1) = 1

tactic: ext <;> simp
state_before: q✝ q : ℕ+
⊢ (2, 1) * (2, -1) = 1
state_after: case h₁
q✝ q : ℕ+
⊢ 2 * 2 + -3 = 1

tactic: ring
state_before: case h₁
q✝ q : ℕ+
⊢ 2 * 2 + -3 = 1
state_after: no goals
Theorem: List.zipRight'_nil_left
File: Mathlib/Data/List/Basic.lean

tactic: cases bs <;> rfl
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a : α
as : List α
b : β
bs : List β
⊢ [].zipRight' bs = (map (fun b => (none, b)) bs, [])
state_after: no goals
Theorem: DirichletCharacter.Even.toUnitHom_eval_neg_one
File: Mathlib/NumberTheory/DirichletCharacter/Basic.lean

tactic: rw [← Units.eq_iff, MulChar.coe_toUnitHom]
state_before: R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
S : Type
inst✝ : CommRing S
m : ℕ
ψ : DirichletCharacter S m
hψ : ψ.Even
⊢ (toUnitHom ψ) (-1) = 1
state_after: R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
S : Type
inst✝ : CommRing S
m : ℕ
ψ : DirichletCharacter S m
hψ : ψ.Even
⊢ ψ ↑(-1) = ↑1

tactic: exact hψ
state_before: R : Type u_1
inst✝¹ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
S : Type
inst✝ : CommRing S
m : ℕ
ψ : DirichletCharacter S m
hψ : ψ.Even
⊢ ψ ↑(-1) = ↑1
state_after: no goals
Theorem: Sublattice.map_symm_eq_iff_eq_map
File: Mathlib/Order/Sublattice.lean

tactic: simp_rw [← coe_inj]
state_before: ι : Sort u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Lattice α
inst✝¹ : Lattice β
inst✝ : Lattice γ
L M✝ : Sublattice α
f : LatticeHom α β
s t : Set α
a : α
M : Sublattice β
e : β ≃o α
⊢ map { toFun := ⇑e.symm, map_sup' := ⋯, map_inf' := ⋯ } L = M ↔ L = map { toFun := ⇑e, map_sup' := ⋯, map_inf' := ⋯ } M
state_after: ι : Sort u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Lattice α
inst✝¹ : Lattice β
inst✝ : Lattice γ
L M✝ : Sublattice α
f : LatticeHom α β
s t : Set α
a : α
M : Sublattice β
e : β ≃o α
⊢ ↑(map { toFun := ⇑e.symm, map_sup' := ⋯, map_inf' := ⋯ } L) = ↑M ↔
    ↑L = ↑(map { toFun := ⇑e, map_sup' := ⋯, map_inf' := ⋯ } M)

tactic: exact (Equiv.eq_image_iff_symm_image_eq _ _ _).symm
state_before: ι : Sort u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Lattice α
inst✝¹ : Lattice β
inst✝ : Lattice γ
L M✝ : Sublattice α
f : LatticeHom α β
s t : Set α
a : α
M : Sublattice β
e : β ≃o α
⊢ ↑(map { toFun := ⇑e.symm, map_sup' := ⋯, map_inf' := ⋯ } L) = ↑M ↔
    ↑L = ↑(map { toFun := ⇑e, map_sup' := ⋯, map_inf' := ⋯ } M)
state_after: no goals
Theorem: Surreal.Multiplication.P4_neg_left
File: Mathlib/SetTheory/Surreal/Multiplication.lean

tactic: simp_rw [P4, PGame.neg_lt_neg_iff, moveLeft_neg', ← P3_neg]
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ P4 x₁ x₂ y ↔ P4 (-x₂) (-x₁) y
state_after: no goals
Theorem: Acc.rank_eq
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: change (Acc.intro a fun _ => h.inv).rank = _
state_before: α : Type u
r : α → α → Prop
a b : α
h : Acc r a
⊢ h.rank = sup fun b => succ ⋯.rank
state_after: α : Type u
r : α → α → Prop
a b : α
h : Acc r a
⊢ ⋯.rank = sup fun b => succ ⋯.rank

tactic: rfl
state_before: α : Type u
r : α → α → Prop
a b : α
h : Acc r a
⊢ ⋯.rank = sup fun b => succ ⋯.rank
state_after: no goals
Theorem: Set.encard_le_one_iff
File: Mathlib/Data/Set/Card.lean

tactic: rw [encard_le_one_iff_eq, or_iff_not_imp_left, ← Ne, ← nonempty_iff_ne_empty]
state_before: α : Type u_1
β : Type u_2
s t : Set α
⊢ s.encard ≤ 1 ↔ ∀ (a b : α), a ∈ s → b ∈ s → a = b
state_after: α : Type u_1
β : Type u_2
s t : Set α
⊢ (s.Nonempty → ∃ x, s = {x}) ↔ ∀ (a b : α), a ∈ s → b ∈ s → a = b

tactic: refine ⟨fun h a b has hbs ↦ ?_,
  fun h ⟨x, hx⟩ ↦ ⟨x, ((singleton_subset_iff.2 hx).antisymm' (fun y hy ↦ h _ _ hy hx))⟩⟩
state_before: α : Type u_1
β : Type u_2
s t : Set α
⊢ (s.Nonempty → ∃ x, s = {x}) ↔ ∀ (a b : α), a ∈ s → b ∈ s → a = b
state_after: α : Type u_1
β : Type u_2
s t : Set α
h : s.Nonempty → ∃ x, s = {x}
a b : α
has : a ∈ s
hbs : b ∈ s
⊢ a = b

tactic: obtain ⟨x, rfl⟩ := h ⟨_, has⟩
state_before: α : Type u_1
β : Type u_2
s t : Set α
h : s.Nonempty → ∃ x, s = {x}
a b : α
has : a ∈ s
hbs : b ∈ s
⊢ a = b
state_after: case intro
α : Type u_1
β : Type u_2
t : Set α
a b x : α
h : {x}.Nonempty → ∃ x_1, {x} = {x_1}
has : a ∈ {x}
hbs : b ∈ {x}
⊢ a = b

tactic: rw [(has : a = x), (hbs : b = x)]
state_before: case intro
α : Type u_1
β : Type u_2
t : Set α
a b x : α
h : {x}.Nonempty → ∃ x_1, {x} = {x_1}
has : a ∈ {x}
hbs : b ∈ {x}
⊢ a = b
state_after: no goals
Theorem: Set.encard_diff_add_encard
File: Mathlib/Data/Set/Card.lean

tactic: rw [← encard_union_eq disjoint_sdiff_left, diff_union_self]
state_before: α : Type u_1
β : Type u_2
s✝ t✝ s t : Set α
⊢ (s \ t).encard + t.encard = (s ∪ t).encard
state_after: no goals
Theorem: Set.ncard_insert_of_not_mem
File: Mathlib/Data/Set/Card.lean

tactic: rw [← Nat.cast_inj (R := ℕ∞), (hs.insert a).cast_ncard_eq, Nat.cast_add, Nat.cast_one,
  hs.cast_ncard_eq, encard_insert_of_not_mem h]
state_before: α : Type u_1
β : Type u_2
s t : Set α
a : α
h : a ∉ s
hs : autoParam s.Finite _auto✝
⊢ (insert a s).ncard = s.ncard + 1
state_after: no goals
Theorem: Associates.quot_out
File: Mathlib/Algebra/Associated.lean

tactic: rw [← quot_mk_eq_mk, Quot.out_eq]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : Monoid α
a : Associates α
⊢ Associates.mk (Quot.out a) = a
state_after: no goals
Theorem: Turing.Tape.mk'_left_right₀
File: Mathlib/Computability/TuringMachine.lean

tactic: cases T
state_before: Γ : Type u_1
inst✝ : Inhabited Γ
T : Tape Γ
⊢ mk' T.left T.right₀ = T
state_after: case mk
Γ : Type u_1
inst✝ : Inhabited Γ
head✝ : Γ
left✝ right✝ : ListBlank Γ
⊢ mk' { head := head✝, left := left✝, right := right✝ }.left { head := head✝, left := left✝, right := right✝ }.right₀ =
    { head := head✝, left := left✝, right := right✝ }

tactic: simp only [Tape.right₀, Tape.mk', ListBlank.head_cons, ListBlank.tail_cons, eq_self_iff_true,
  and_self_iff]
state_before: case mk
Γ : Type u_1
inst✝ : Inhabited Γ
head✝ : Γ
left✝ right✝ : ListBlank Γ
⊢ mk' { head := head✝, left := left✝, right := right✝ }.left { head := head✝, left := left✝, right := right✝ }.right₀ =
    { head := head✝, left := left✝, right := right✝ }
state_after: no goals
Theorem: Nat.succ_dvd_centralBinom
File: Mathlib/Data/Nat/Choose/Central.lean

tactic: have h_s : (n + 1).Coprime (2 * n + 1) := by
  rw [two_mul, add_assoc, coprime_add_self_right, coprime_self_add_left]
  exact coprime_one_left n
state_before: n : ℕ
⊢ n + 1 ∣ n.centralBinom
state_after: n : ℕ
h_s : (n + 1).Coprime (2 * n + 1)
⊢ n + 1 ∣ n.centralBinom

tactic: apply h_s.dvd_of_dvd_mul_left
state_before: n : ℕ
h_s : (n + 1).Coprime (2 * n + 1)
⊢ n + 1 ∣ n.centralBinom
state_after: n : ℕ
h_s : (n + 1).Coprime (2 * n + 1)
⊢ n + 1 ∣ (2 * n + 1) * n.centralBinom

tactic: apply Nat.dvd_of_mul_dvd_mul_left zero_lt_two
state_before: n : ℕ
h_s : (n + 1).Coprime (2 * n + 1)
⊢ n + 1 ∣ (2 * n + 1) * n.centralBinom
state_after: n : ℕ
h_s : (n + 1).Coprime (2 * n + 1)
⊢ 2 * (n + 1) ∣ 2 * ((2 * n + 1) * n.centralBinom)

tactic: rw [← mul_assoc, ← succ_mul_centralBinom_succ, mul_comm]
state_before: n : ℕ
h_s : (n + 1).Coprime (2 * n + 1)
⊢ 2 * (n + 1) ∣ 2 * ((2 * n + 1) * n.centralBinom)
state_after: n : ℕ
h_s : (n + 1).Coprime (2 * n + 1)
⊢ (n + 1) * 2 ∣ (n + 1) * (n + 1).centralBinom

tactic: exact mul_dvd_mul_left _ (two_dvd_centralBinom_succ n)
state_before: n : ℕ
h_s : (n + 1).Coprime (2 * n + 1)
⊢ (n + 1) * 2 ∣ (n + 1) * (n + 1).centralBinom
state_after: no goals

tactic: rw [two_mul, add_assoc, coprime_add_self_right, coprime_self_add_left]
state_before: n : ℕ
⊢ (n + 1).Coprime (2 * n + 1)
state_after: n : ℕ
⊢ Coprime 1 n

tactic: exact coprime_one_left n
state_before: n : ℕ
⊢ Coprime 1 n
state_after: no goals
Theorem: abs_eq_iff_mul_self_eq
File: Mathlib/Algebra/Order/Ring/Abs.lean

tactic: rw [← abs_mul_abs_self, ← abs_mul_abs_self b]
state_before: α : Type u_1
inst✝ : LinearOrderedRing α
n : ℕ
a b c : α
⊢ |a| = |b| ↔ a * a = b * b
state_after: α : Type u_1
inst✝ : LinearOrderedRing α
n : ℕ
a b c : α
⊢ |a| = |b| ↔ |a| * |a| = |b| * |b|

tactic: exact (mul_self_inj (abs_nonneg a) (abs_nonneg b)).symm
state_before: α : Type u_1
inst✝ : LinearOrderedRing α
n : ℕ
a b c : α
⊢ |a| = |b| ↔ |a| * |a| = |b| * |b|
state_after: no goals
Theorem: CategoryTheory.ShortComplex.RightHomologyData.rightHomologyIso_inv_comp_rightHomologyι
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

tactic: dsimp only [rightHomologyι, rightHomologyIso, opcyclesIso, rightHomologyMapIso',
  opcyclesMapIso', Iso.refl]
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.RightHomologyData
inst✝ : S.HasRightHomology
⊢ h.rightHomologyIso.inv ≫ S.rightHomologyι = h.ι ≫ h.opcyclesIso.inv
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.RightHomologyData
inst✝ : S.HasRightHomology
⊢ rightHomologyMap' (𝟙 S) h S.rightHomologyData ≫ S.rightHomologyData.ι = h.ι ≫ opcyclesMap' (𝟙 S) h S.rightHomologyData

tactic: rw [rightHomologyι_naturality']
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.RightHomologyData
inst✝ : S.HasRightHomology
⊢ rightHomologyMap' (𝟙 S) h S.rightHomologyData ≫ S.rightHomologyData.ι = h.ι ≫ opcyclesMap' (𝟙 S) h S.rightHomologyData
state_after: no goals
Theorem: JordanHolderLattice.second_iso_of_eq
File: Mathlib/Order/JordanHolder.lean

tactic: substs a b
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
x y a b : X
hm : IsMaximal x a
ha : x ⊔ y = a
hb : x ⊓ y = b
⊢ Iso (x, a) (b, y)
state_after: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
x y : X
hm : IsMaximal x (x ⊔ y)
⊢ Iso (x, x ⊔ y) (x ⊓ y, y)

tactic: exact second_iso hm
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
x y : X
hm : IsMaximal x (x ⊔ y)
⊢ Iso (x, x ⊔ y) (x ⊓ y, y)
state_after: no goals
Theorem: Ordinal.IsNormal.sup
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: rw [sup_le_iff]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{max u v} → Ordinal.{max u w}
H : IsNormal f
ι : Type u
g : ι → Ordinal.{max u v}
inst✝ : Nonempty ι
a : Ordinal.{max u w}
⊢ f (Ordinal.sup g) ≤ a ↔ Ordinal.sup (f ∘ g) ≤ a
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{max u v} → Ordinal.{max u w}
H : IsNormal f
ι : Type u
g : ι → Ordinal.{max u v}
inst✝ : Nonempty ι
a : Ordinal.{max u w}
⊢ f (Ordinal.sup g) ≤ a ↔ ∀ (i : ι), (f ∘ g) i ≤ a

tactic: simp only [comp]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{max u v} → Ordinal.{max u w}
H : IsNormal f
ι : Type u
g : ι → Ordinal.{max u v}
inst✝ : Nonempty ι
a : Ordinal.{max u w}
⊢ f (Ordinal.sup g) ≤ a ↔ ∀ (i : ι), (f ∘ g) i ≤ a
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{max u v} → Ordinal.{max u w}
H : IsNormal f
ι : Type u
g : ι → Ordinal.{max u v}
inst✝ : Nonempty ι
a : Ordinal.{max u w}
⊢ f (Ordinal.sup g) ≤ a ↔ ∀ (i : ι), f (g i) ≤ a

tactic: rw [H.le_set' Set.univ Set.univ_nonempty g] <;>
simp [sup_le_iff]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{max u v} → Ordinal.{max u w}
H : IsNormal f
ι : Type u
g : ι → Ordinal.{max u v}
inst✝ : Nonempty ι
a : Ordinal.{max u w}
⊢ f (Ordinal.sup g) ≤ a ↔ ∀ (i : ι), f (g i) ≤ a
state_after: no goals
Theorem: ProbabilityTheory.poissonPMFReal_pos
File: Mathlib/Probability/Distributions/Poisson.lean

tactic: rw [poissonPMFReal]
state_before: r : ℝ≥0
n : ℕ
hr : 0 < r
⊢ 0 < poissonPMFReal r n
state_after: r : ℝ≥0
n : ℕ
hr : 0 < r
⊢ 0 < rexp (-↑r) * ↑r ^ n / ↑n !

tactic: positivity
state_before: r : ℝ≥0
n : ℕ
hr : 0 < r
⊢ 0 < rexp (-↑r) * ↑r ^ n / ↑n !
state_after: no goals
Theorem: Relation.ReflTransGen.trans
File: Mathlib/Logic/Relation.lean

tactic: induction hbc with
| refl => assumption
| tail _ hcd hac => exact hac.tail hcd
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r : α → α → Prop
a b c d : α
hab : ReflTransGen r a b
hbc : ReflTransGen r b c
⊢ ReflTransGen r a c
state_after: no goals

tactic: assumption
state_before: case refl
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r : α → α → Prop
a b c d : α
hab : ReflTransGen r a b
⊢ ReflTransGen r a b
state_after: no goals

tactic: exact hac.tail hcd
state_before: case tail
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r : α → α → Prop
a b c d : α
hab : ReflTransGen r a b
b✝ c✝ : α
a✝ : ReflTransGen r b b✝
hcd : r b✝ c✝
hac : ReflTransGen r a b✝
⊢ ReflTransGen r a c✝
state_after: no goals
Theorem: ContinuousMap.embedding_sigmaMk_comp
File: Mathlib/Topology/ContinuousFunction/Sigma.lean

tactic: rintro ⟨i, g⟩ ⟨i', g'⟩ h
state_before: X : Type u_1
ι : Type u_2
Y : ι → Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : (i : ι) → TopologicalSpace (Y i)
inst✝ : Nonempty X
⊢ Function.Injective fun g => (sigmaMk g.fst).comp g.snd
state_after: case mk.mk
X : Type u_1
ι : Type u_2
Y : ι → Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : (i : ι) → TopologicalSpace (Y i)
inst✝ : Nonempty X
i : ι
g : C(X, Y i)
i' : ι
g' : C(X, Y i')
h : (fun g => (sigmaMk g.fst).comp g.snd) ⟨i, g⟩ = (fun g => (sigmaMk g.fst).comp g.snd) ⟨i', g'⟩
⊢ ⟨i, g⟩ = ⟨i', g'⟩

tactic: obtain ⟨rfl, hg⟩ : i = i' ∧ HEq (⇑g) (⇑g') :=
  Function.eq_of_sigmaMk_comp <| congr_arg DFunLike.coe h
state_before: case mk.mk
X : Type u_1
ι : Type u_2
Y : ι → Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : (i : ι) → TopologicalSpace (Y i)
inst✝ : Nonempty X
i : ι
g : C(X, Y i)
i' : ι
g' : C(X, Y i')
h : (fun g => (sigmaMk g.fst).comp g.snd) ⟨i, g⟩ = (fun g => (sigmaMk g.fst).comp g.snd) ⟨i', g'⟩
⊢ ⟨i, g⟩ = ⟨i', g'⟩
state_after: case mk.mk.intro
X : Type u_1
ι : Type u_2
Y : ι → Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : (i : ι) → TopologicalSpace (Y i)
inst✝ : Nonempty X
i : ι
g g' : C(X, Y i)
h : (fun g => (sigmaMk g.fst).comp g.snd) ⟨i, g⟩ = (fun g => (sigmaMk g.fst).comp g.snd) ⟨i, g'⟩
hg : HEq ⇑g ⇑g'
⊢ ⟨i, g⟩ = ⟨i, g'⟩

tactic: simpa using hg
state_before: case mk.mk.intro
X : Type u_1
ι : Type u_2
Y : ι → Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : (i : ι) → TopologicalSpace (Y i)
inst✝ : Nonempty X
i : ι
g g' : C(X, Y i)
h : (fun g => (sigmaMk g.fst).comp g.snd) ⟨i, g⟩ = (fun g => (sigmaMk g.fst).comp g.snd) ⟨i, g'⟩
hg : HEq ⇑g ⇑g'
⊢ ⟨i, g⟩ = ⟨i, g'⟩
state_after: no goals
Theorem: NormedAddGroupHom.Equalizer.comm_sq₂
File: Mathlib/Analysis/Normed/Group/Hom.lean

tactic: rw [comp_assoc, hf, ← comp_assoc, hf', comp_assoc]
state_before: V : Type u_1
W : Type u_2
V₁ : Type u_3
V₂ : Type u_4
V₃ : Type u_5
inst✝⁷ : SeminormedAddCommGroup V
inst✝⁶ : SeminormedAddCommGroup W
inst✝⁵ : SeminormedAddCommGroup V₁
inst✝⁴ : SeminormedAddCommGroup V₂
inst✝³ : SeminormedAddCommGroup V₃
f : NormedAddGroupHom V W
W₁ : Type u_6
W₂ : Type u_7
W₃ : Type u_8
inst✝² : SeminormedAddCommGroup W₁
inst✝¹ : SeminormedAddCommGroup W₂
inst✝ : SeminormedAddCommGroup W₃
g : NormedAddGroupHom V W
f₁ g₁ : NormedAddGroupHom V₁ W₁
f₂ g₂ : NormedAddGroupHom V₂ W₂
f₃ g₃ : NormedAddGroupHom V₃ W₃
φ : NormedAddGroupHom V₁ V₂
ψ : NormedAddGroupHom W₁ W₂
φ' : NormedAddGroupHom V₂ V₃
ψ' : NormedAddGroupHom W₂ W₃
hf : ψ.comp f₁ = f₂.comp φ
hf' : ψ'.comp f₂ = f₃.comp φ'
⊢ (ψ'.comp ψ).comp f₁ = f₃.comp (φ'.comp φ)
state_after: no goals
Theorem: Orientation.eq_rotation_self_iff
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Rotation.lean

tactic: rw [← rotation_eq_self_iff, eq_comm]
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
θ : Real.Angle
⊢ x = (o.rotation θ) x ↔ x = 0 ∨ θ = 0
state_after: no goals
Theorem: Function.Injective.of_comp_right
File: Mathlib/Logic/Function/Basic.lean

tactic: obtain ⟨x, rfl⟩ := hg x
state_before: α : Sort u_1
β : Sort u_2
γ : Sort u_3
f : α → β
g : γ → α
I : Injective (f ∘ g)
hg : Surjective g
x y : α
h : f x = f y
⊢ x = y
state_after: case intro
α : Sort u_1
β : Sort u_2
γ : Sort u_3
f : α → β
g : γ → α
I : Injective (f ∘ g)
hg : Surjective g
y : α
x : γ
h : f (g x) = f y
⊢ g x = y

tactic: obtain ⟨y, rfl⟩ := hg y
state_before: case intro
α : Sort u_1
β : Sort u_2
γ : Sort u_3
f : α → β
g : γ → α
I : Injective (f ∘ g)
hg : Surjective g
y : α
x : γ
h : f (g x) = f y
⊢ g x = y
state_after: case intro.intro
α : Sort u_1
β : Sort u_2
γ : Sort u_3
f : α → β
g : γ → α
I : Injective (f ∘ g)
hg : Surjective g
x y : γ
h : f (g x) = f (g y)
⊢ g x = g y

tactic: exact congr_arg g (I h)
state_before: case intro.intro
α : Sort u_1
β : Sort u_2
γ : Sort u_3
f : α → β
g : γ → α
I : Injective (f ∘ g)
hg : Surjective g
x y : γ
h : f (g x) = f (g y)
⊢ g x = g y
state_after: no goals
Theorem: Filter.HasBasis.eventuallyConst_iff
File: Mathlib/Order/Filter/EventuallyConst.lean

tactic: simp only [Set.Subsingleton, forall_mem_image]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
l : Filter α
f : α → β
ι : Sort u_5
p : ι → Prop
s : ι → Set α
h : l.HasBasis p s
⊢ (∃ i, p i ∧ (f '' s i).Subsingleton) ↔ ∃ i, p i ∧ ∀ x ∈ s i, ∀ y ∈ s i, f x = f y
state_after: no goals
Theorem: Real.exp_zero
File: Mathlib/Data/Complex/Exponential.lean

tactic: simp [Real.exp]
state_before: x y : ℝ
⊢ rexp 0 = 1
state_after: no goals