Theorem: Pi.isAtom_iff
File: Mathlib/Order/Atoms.lean

tactic: classical
constructor
case mpr =>
  rintro ⟨i, ⟨hfi, hlt⟩, hbot⟩
  refine ⟨fun h => hfi ((Pi.eq_bot_iff.1 h) _), fun g hgf => Pi.eq_bot_iff.2 fun j => ?_⟩
  have ⟨hgf, k, hgfk⟩ := Pi.lt_def.1 hgf
  obtain rfl : i = k := of_not_not fun hki => by rw [hbot _ (Ne.symm hki)] at hgfk; simp at hgfk
  if hij : j = i then subst hij; refine hlt _ hgfk else
  exact eq_bot_iff.2 <| le_trans (hgf _) (eq_bot_iff.1 (hbot _ hij))
case mp =>
  rintro ⟨hbot, h⟩
  have ⟨i, hbot⟩ : ∃ i, f i ≠ ⊥ := by rw [ne_eq, Pi.eq_bot_iff, not_forall] at hbot; exact hbot
  refine ⟨i, ⟨hbot, ?c⟩, ?d⟩
  case c =>
    intro b hb
    have := h (Function.update ⊥ i b)
    simp only [lt_def, le_def, ge_iff_le, Pi.eq_bot_iff, and_imp, forall_exists_index] at this
    simpa using this
      (fun j => by by_cases h : j = i; { subst h; simpa using le_of_lt hb }; simp [h])
      i (by simpa using hb) i
  case d =>
    intro j hj
    have := h (Function.update ⊥ j (f j))
    simp only [lt_def, le_def, ge_iff_le, Pi.eq_bot_iff, and_imp, forall_exists_index] at this
    simpa using this (fun k => by by_cases h : k = j; { subst h; simp }; simp [h]) i
      (by rwa [Function.update_noteq (Ne.symm hj), bot_apply, bot_lt_iff_ne_bot]) j
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
⊢ IsAtom f ↔ ∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥
state_after: no goals

tactic: constructor
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
⊢ IsAtom f ↔ ∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥
state_after: case mp
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
⊢ IsAtom f → ∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥

case mpr
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
⊢ (∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥) → IsAtom f

tactic: case mpr =>
  rintro ⟨i, ⟨hfi, hlt⟩, hbot⟩
  refine ⟨fun h => hfi ((Pi.eq_bot_iff.1 h) _), fun g hgf => Pi.eq_bot_iff.2 fun j => ?_⟩
  have ⟨hgf, k, hgfk⟩ := Pi.lt_def.1 hgf
  obtain rfl : i = k := of_not_not fun hki => by rw [hbot _ (Ne.symm hki)] at hgfk; simp at hgfk
  if hij : j = i then subst hij; refine hlt _ hgfk else
  exact eq_bot_iff.2 <| le_trans (hgf _) (eq_bot_iff.1 (hbot _ hij))
state_before: case mp
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
⊢ IsAtom f → ∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥

case mpr
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
⊢ (∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥) → IsAtom f
state_after: case mp
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
⊢ IsAtom f → ∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥

tactic: case mp =>
  rintro ⟨hbot, h⟩
  have ⟨i, hbot⟩ : ∃ i, f i ≠ ⊥ := by rw [ne_eq, Pi.eq_bot_iff, not_forall] at hbot; exact hbot
  refine ⟨i, ⟨hbot, ?c⟩, ?d⟩
  case c =>
    intro b hb
    have := h (Function.update ⊥ i b)
    simp only [lt_def, le_def, ge_iff_le, Pi.eq_bot_iff, and_imp, forall_exists_index] at this
    simpa using this
      (fun j => by by_cases h : j = i; { subst h; simpa using le_of_lt hb }; simp [h])
      i (by simpa using hb) i
  case d =>
    intro j hj
    have := h (Function.update ⊥ j (f j))
    simp only [lt_def, le_def, ge_iff_le, Pi.eq_bot_iff, and_imp, forall_exists_index] at this
    simpa using this (fun k => by by_cases h : k = j; { subst h; simp }; simp [h]) i
      (by rwa [Function.update_noteq (Ne.symm hj), bot_apply, bot_lt_iff_ne_bot]) j
state_before: case mp
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
⊢ IsAtom f → ∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥
state_after: no goals

tactic: rintro ⟨i, ⟨hfi, hlt⟩, hbot⟩
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
⊢ (∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥) → IsAtom f
state_after: case intro.intro.intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
⊢ IsAtom f

tactic: refine ⟨fun h => hfi ((Pi.eq_bot_iff.1 h) _), fun g hgf => Pi.eq_bot_iff.2 fun j => ?_⟩
state_before: case intro.intro.intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
⊢ IsAtom f
state_after: case intro.intro.intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
g : (i : ι) → π i
hgf : g < f
j : ι
⊢ g j = ⊥

tactic: have ⟨hgf, k, hgfk⟩ := Pi.lt_def.1 hgf
state_before: case intro.intro.intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
g : (i : ι) → π i
hgf : g < f
j : ι
⊢ g j = ⊥
state_after: case intro.intro.intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
g : (i : ι) → π i
hgf✝ : g < f
j : ι
hgf : g ≤ f
k : ι
hgfk : g k < f k
⊢ g j = ⊥

tactic: obtain rfl : i = k := of_not_not fun hki => by rw [hbot _ (Ne.symm hki)] at hgfk; simp at hgfk
state_before: case intro.intro.intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
g : (i : ι) → π i
hgf✝ : g < f
j : ι
hgf : g ≤ f
k : ι
hgfk : g k < f k
⊢ g j = ⊥
state_after: case intro.intro.intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
g : (i : ι) → π i
hgf✝ : g < f
j : ι
hgf : g ≤ f
hgfk : g i < f i
⊢ g j = ⊥

tactic: if hij : j = i then subst hij; refine hlt _ hgfk else
exact eq_bot_iff.2 <| le_trans (hgf _) (eq_bot_iff.1 (hbot _ hij))
state_before: case intro.intro.intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
g : (i : ι) → π i
hgf✝ : g < f
j : ι
hgf : g ≤ f
hgfk : g i < f i
⊢ g j = ⊥
state_after: no goals

tactic: rw [hbot _ (Ne.symm hki)] at hgfk
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
g : (i : ι) → π i
hgf✝ : g < f
j : ι
hgf : g ≤ f
k : ι
hgfk : g k < f k
hki : ¬i = k
⊢ False
state_after: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
g : (i : ι) → π i
hgf✝ : g < f
j : ι
hgf : g ≤ f
k : ι
hgfk : g k < ⊥
hki : ¬i = k
⊢ False

tactic: simp at hgfk
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
g : (i : ι) → π i
hgf✝ : g < f
j : ι
hgf : g ≤ f
k : ι
hgfk : g k < ⊥
hki : ¬i = k
⊢ False
state_after: no goals

tactic: subst hij
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
g : (i : ι) → π i
hgf✝ : g < f
j : ι
hgf : g ≤ f
hgfk : g i < f i
hij : j = i
⊢ g j = ⊥
state_after: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
g : (i : ι) → π i
hgf✝ : g < f
j : ι
hgf : g ≤ f
hbot : ∀ (j_1 : ι), j_1 ≠ j → f j_1 = ⊥
hfi : f j ≠ ⊥
hlt : ∀ b < f j, b = ⊥
hgfk : g j < f j
⊢ g j = ⊥

tactic: refine hlt _ hgfk
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
g : (i : ι) → π i
hgf✝ : g < f
j : ι
hgf : g ≤ f
hbot : ∀ (j_1 : ι), j_1 ≠ j → f j_1 = ⊥
hfi : f j ≠ ⊥
hlt : ∀ b < f j, b = ⊥
hgfk : g j < f j
⊢ g j = ⊥
state_after: no goals

tactic: exact eq_bot_iff.2 <| le_trans (hgf _) (eq_bot_iff.1 (hbot _ hij))
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
i : ι
hbot : ∀ (j : ι), j ≠ i → f j = ⊥
hfi : f i ≠ ⊥
hlt : ∀ b < f i, b = ⊥
g : (i : ι) → π i
hgf✝ : g < f
j : ι
hgf : g ≤ f
hgfk : g i < f i
hij : ¬j = i
⊢ g j = ⊥
state_after: no goals

tactic: rintro ⟨hbot, h⟩
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
⊢ IsAtom f → ∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥
state_after: case intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot : f ≠ ⊥
h : ∀ b < f, b = ⊥
⊢ ∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥

tactic: have ⟨i, hbot⟩ : ∃ i, f i ≠ ⊥ := by rw [ne_eq, Pi.eq_bot_iff, not_forall] at hbot; exact hbot
state_before: case intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot : f ≠ ⊥
h : ∀ b < f, b = ⊥
⊢ ∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥
state_after: case intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
⊢ ∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥

tactic: refine ⟨i, ⟨hbot, ?c⟩, ?d⟩
state_before: case intro
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
⊢ ∃ i, IsAtom (f i) ∧ ∀ (j : ι), j ≠ i → f j = ⊥
state_after: case c
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
⊢ ∀ b < f i, b = ⊥

case d
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
⊢ ∀ (j : ι), j ≠ i → f j = ⊥

tactic: case c =>
  intro b hb
  have := h (Function.update ⊥ i b)
  simp only [lt_def, le_def, ge_iff_le, Pi.eq_bot_iff, and_imp, forall_exists_index] at this
  simpa using this
    (fun j => by by_cases h : j = i; { subst h; simpa using le_of_lt hb }; simp [h])
    i (by simpa using hb) i
state_before: case c
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
⊢ ∀ b < f i, b = ⊥

case d
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
⊢ ∀ (j : ι), j ≠ i → f j = ⊥
state_after: case d
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
⊢ ∀ (j : ι), j ≠ i → f j = ⊥

tactic: case d =>
  intro j hj
  have := h (Function.update ⊥ j (f j))
  simp only [lt_def, le_def, ge_iff_le, Pi.eq_bot_iff, and_imp, forall_exists_index] at this
  simpa using this (fun k => by by_cases h : k = j; { subst h; simp }; simp [h]) i
    (by rwa [Function.update_noteq (Ne.symm hj), bot_apply, bot_lt_iff_ne_bot]) j
state_before: case d
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
⊢ ∀ (j : ι), j ≠ i → f j = ⊥
state_after: no goals

tactic: rw [ne_eq, Pi.eq_bot_iff, not_forall] at hbot
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot : f ≠ ⊥
h : ∀ b < f, b = ⊥
⊢ ∃ i, f i ≠ ⊥
state_after: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot : ∃ x, ¬f x = ⊥
h : ∀ b < f, b = ⊥
⊢ ∃ i, f i ≠ ⊥

tactic: exact hbot
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot : ∃ x, ¬f x = ⊥
h : ∀ b < f, b = ⊥
⊢ ∃ i, f i ≠ ⊥
state_after: no goals

tactic: intro b hb
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
⊢ ∀ b < f i, b = ⊥
state_after: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
⊢ b = ⊥

tactic: have := h (Function.update ⊥ i b)
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
⊢ b = ⊥
state_after: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this : Function.update ⊥ i b < f → Function.update ⊥ i b = ⊥
⊢ b = ⊥

tactic: simp only [lt_def, le_def, ge_iff_le, Pi.eq_bot_iff, and_imp, forall_exists_index] at this
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this : Function.update ⊥ i b < f → Function.update ⊥ i b = ⊥
⊢ b = ⊥
state_after: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this :
  (∀ (i_1 : ι), Function.update ⊥ i b i_1 ≤ f i_1) →
    ∀ (x : ι), Function.update ⊥ i b x < f x → ∀ (i_1 : ι), Function.update ⊥ i b i_1 = ⊥
⊢ b = ⊥

tactic: simpa using this
  (fun j => by by_cases h : j = i; { subst h; simpa using le_of_lt hb }; simp [h])
  i (by simpa using hb) i
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this :
  (∀ (i_1 : ι), Function.update ⊥ i b i_1 ≤ f i_1) →
    ∀ (x : ι), Function.update ⊥ i b x < f x → ∀ (i_1 : ι), Function.update ⊥ i b i_1 = ⊥
⊢ b = ⊥
state_after: no goals

tactic: by_cases h : j = i
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this :
  (∀ (i_1 : ι), Function.update ⊥ i b i_1 ≤ f i_1) →
    ∀ (x : ι), Function.update ⊥ i b x < f x → ∀ (i_1 : ι), Function.update ⊥ i b i_1 = ⊥
j : ι
⊢ Function.update ⊥ i b j ≤ f j
state_after: case pos
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this :
  (∀ (i_1 : ι), Function.update ⊥ i b i_1 ≤ f i_1) →
    ∀ (x : ι), Function.update ⊥ i b x < f x → ∀ (i_1 : ι), Function.update ⊥ i b i_1 = ⊥
j : ι
h : j = i
⊢ Function.update ⊥ i b j ≤ f j

case neg
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this :
  (∀ (i_1 : ι), Function.update ⊥ i b i_1 ≤ f i_1) →
    ∀ (x : ι), Function.update ⊥ i b x < f x → ∀ (i_1 : ι), Function.update ⊥ i b i_1 = ⊥
j : ι
h : ¬j = i
⊢ Function.update ⊥ i b j ≤ f j

tactic: { subst h; simpa using le_of_lt hb }
state_before: case pos
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this :
  (∀ (i_1 : ι), Function.update ⊥ i b i_1 ≤ f i_1) →
    ∀ (x : ι), Function.update ⊥ i b x < f x → ∀ (i_1 : ι), Function.update ⊥ i b i_1 = ⊥
j : ι
h : j = i
⊢ Function.update ⊥ i b j ≤ f j

case neg
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this :
  (∀ (i_1 : ι), Function.update ⊥ i b i_1 ≤ f i_1) →
    ∀ (x : ι), Function.update ⊥ i b x < f x → ∀ (i_1 : ι), Function.update ⊥ i b i_1 = ⊥
j : ι
h : ¬j = i
⊢ Function.update ⊥ i b j ≤ f j
state_after: case neg
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this :
  (∀ (i_1 : ι), Function.update ⊥ i b i_1 ≤ f i_1) →
    ∀ (x : ι), Function.update ⊥ i b x < f x → ∀ (i_1 : ι), Function.update ⊥ i b i_1 = ⊥
j : ι
h : ¬j = i
⊢ Function.update ⊥ i b j ≤ f j

tactic: simp [h]
state_before: case neg
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this :
  (∀ (i_1 : ι), Function.update ⊥ i b i_1 ≤ f i_1) →
    ∀ (x : ι), Function.update ⊥ i b x < f x → ∀ (i_1 : ι), Function.update ⊥ i b i_1 = ⊥
j : ι
h : ¬j = i
⊢ Function.update ⊥ i b j ≤ f j
state_after: no goals

tactic: subst h
state_before: case pos
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this :
  (∀ (i_1 : ι), Function.update ⊥ i b i_1 ≤ f i_1) →
    ∀ (x : ι), Function.update ⊥ i b x < f x → ∀ (i_1 : ι), Function.update ⊥ i b i_1 = ⊥
j : ι
h : j = i
⊢ Function.update ⊥ i b j ≤ f j
state_after: case pos
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
j : ι
hbot : f j ≠ ⊥
b : π j
hb : b < f j
this :
  (∀ (i : ι), Function.update ⊥ j b i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j b x < f x → ∀ (i : ι), Function.update ⊥ j b i = ⊥
⊢ Function.update ⊥ j b j ≤ f j

tactic: simpa using le_of_lt hb
state_before: case pos
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
j : ι
hbot : f j ≠ ⊥
b : π j
hb : b < f j
this :
  (∀ (i : ι), Function.update ⊥ j b i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j b x < f x → ∀ (i : ι), Function.update ⊥ j b i = ⊥
⊢ Function.update ⊥ j b j ≤ f j
state_after: no goals

tactic: simpa using hb
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
b : π i
hb : b < f i
this :
  (∀ (i_1 : ι), Function.update ⊥ i b i_1 ≤ f i_1) →
    ∀ (x : ι), Function.update ⊥ i b x < f x → ∀ (i_1 : ι), Function.update ⊥ i b i_1 = ⊥
⊢ Function.update ⊥ i b i < f i
state_after: no goals

tactic: intro j hj
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
⊢ ∀ (j : ι), j ≠ i → f j = ⊥
state_after: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
⊢ f j = ⊥

tactic: have := h (Function.update ⊥ j (f j))
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
⊢ f j = ⊥
state_after: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this : Function.update ⊥ j (f j) < f → Function.update ⊥ j (f j) = ⊥
⊢ f j = ⊥

tactic: simp only [lt_def, le_def, ge_iff_le, Pi.eq_bot_iff, and_imp, forall_exists_index] at this
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this : Function.update ⊥ j (f j) < f → Function.update ⊥ j (f j) = ⊥
⊢ f j = ⊥
state_after: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this :
  (∀ (i : ι), Function.update ⊥ j (f j) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j (f j) x < f x → ∀ (i : ι), Function.update ⊥ j (f j) i = ⊥
⊢ f j = ⊥

tactic: simpa using this (fun k => by by_cases h : k = j; { subst h; simp }; simp [h]) i
  (by rwa [Function.update_noteq (Ne.symm hj), bot_apply, bot_lt_iff_ne_bot]) j
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this :
  (∀ (i : ι), Function.update ⊥ j (f j) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j (f j) x < f x → ∀ (i : ι), Function.update ⊥ j (f j) i = ⊥
⊢ f j = ⊥
state_after: no goals

tactic: by_cases h : k = j
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this :
  (∀ (i : ι), Function.update ⊥ j (f j) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j (f j) x < f x → ∀ (i : ι), Function.update ⊥ j (f j) i = ⊥
k : ι
⊢ Function.update ⊥ j (f j) k ≤ f k
state_after: case pos
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this :
  (∀ (i : ι), Function.update ⊥ j (f j) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j (f j) x < f x → ∀ (i : ι), Function.update ⊥ j (f j) i = ⊥
k : ι
h : k = j
⊢ Function.update ⊥ j (f j) k ≤ f k

case neg
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this :
  (∀ (i : ι), Function.update ⊥ j (f j) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j (f j) x < f x → ∀ (i : ι), Function.update ⊥ j (f j) i = ⊥
k : ι
h : ¬k = j
⊢ Function.update ⊥ j (f j) k ≤ f k

tactic: { subst h; simp }
state_before: case pos
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this :
  (∀ (i : ι), Function.update ⊥ j (f j) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j (f j) x < f x → ∀ (i : ι), Function.update ⊥ j (f j) i = ⊥
k : ι
h : k = j
⊢ Function.update ⊥ j (f j) k ≤ f k

case neg
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this :
  (∀ (i : ι), Function.update ⊥ j (f j) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j (f j) x < f x → ∀ (i : ι), Function.update ⊥ j (f j) i = ⊥
k : ι
h : ¬k = j
⊢ Function.update ⊥ j (f j) k ≤ f k
state_after: case neg
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this :
  (∀ (i : ι), Function.update ⊥ j (f j) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j (f j) x < f x → ∀ (i : ι), Function.update ⊥ j (f j) i = ⊥
k : ι
h : ¬k = j
⊢ Function.update ⊥ j (f j) k ≤ f k

tactic: simp [h]
state_before: case neg
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this :
  (∀ (i : ι), Function.update ⊥ j (f j) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j (f j) x < f x → ∀ (i : ι), Function.update ⊥ j (f j) i = ⊥
k : ι
h : ¬k = j
⊢ Function.update ⊥ j (f j) k ≤ f k
state_after: no goals

tactic: subst h
state_before: case pos
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h✝ : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this :
  (∀ (i : ι), Function.update ⊥ j (f j) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j (f j) x < f x → ∀ (i : ι), Function.update ⊥ j (f j) i = ⊥
k : ι
h : k = j
⊢ Function.update ⊥ j (f j) k ≤ f k
state_after: case pos
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
k : ι
hj : k ≠ i
this :
  (∀ (i : ι), Function.update ⊥ k (f k) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ k (f k) x < f x → ∀ (i : ι), Function.update ⊥ k (f k) i = ⊥
⊢ Function.update ⊥ k (f k) k ≤ f k

tactic: simp
state_before: case pos
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
k : ι
hj : k ≠ i
this :
  (∀ (i : ι), Function.update ⊥ k (f k) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ k (f k) x < f x → ∀ (i : ι), Function.update ⊥ k (f k) i = ⊥
⊢ Function.update ⊥ k (f k) k ≤ f k
state_after: no goals

tactic: rwa [Function.update_noteq (Ne.symm hj), bot_apply, bot_lt_iff_ne_bot]
state_before: ι✝ : Sort u_1
α : Type u_2
β : Type u_3
ι : Type u_4
π : ι → Type u
f : (i : ι) → π i
inst✝¹ : (i : ι) → PartialOrder (π i)
inst✝ : (i : ι) → OrderBot (π i)
hbot✝ : f ≠ ⊥
h : ∀ b < f, b = ⊥
i : ι
hbot : f i ≠ ⊥
j : ι
hj : j ≠ i
this :
  (∀ (i : ι), Function.update ⊥ j (f j) i ≤ f i) →
    ∀ (x : ι), Function.update ⊥ j (f j) x < f x → ∀ (i : ι), Function.update ⊥ j (f j) i = ⊥
⊢ Function.update ⊥ j (f j) i < f i
state_after: no goals