Theorem: Ordinal.blsub_nadd_of_mono
File: Mathlib/SetTheory/Ordinal/NaturalOps.lean

tactic: apply (blsub_le_iff.2 fun i h => _).antisymm (max_le _ _)
state_before: a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
⊢ blsub (a ♯ b) f =
    max (blsub a fun a' ha' => f (a' ♯ b) (_ : a' ♯ b < a ♯ b)) (blsub b fun b' hb' => f (a ♯ b') (_ : a ♯ b' < a ♯ b))

tactic: intro i h
state_before: a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
⊢ ∀ (i : Ordinal) (h : i < a ♯ b),
    f i h <
      max (blsub a fun a' ha' => f (a' ♯ b) (_ : a' ♯ b < a ♯ b))
        (blsub b fun b' hb' => f (a ♯ b') (_ : a ♯ b' < a ♯ b))

a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
⊢ (blsub a fun a' ha' => f (a' ♯ b) (_ : a' ♯ b < a ♯ b)) ≤ blsub (a ♯ b) f

a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
⊢ (blsub b fun b' hb' => f (a ♯ b') (_ : a ♯ b' < a ♯ b)) ≤ blsub (a ♯ b) f

tactic: all_goals
  apply blsub_le_of_brange_subset.{u, u, v}
  rintro c ⟨d, hd, rfl⟩
  apply mem_brange_self
state_before: a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
⊢ (blsub a fun a' ha' => f (a' ♯ b) (_ : a' ♯ b < a ♯ b)) ≤ blsub (a ♯ b) f

a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
⊢ (blsub b fun b' hb' => f (a ♯ b') (_ : a ♯ b' < a ♯ b)) ≤ blsub (a ♯ b) f

tactic: rcases lt_nadd_iff.1 h with (⟨a', ha', hi⟩ | ⟨b', hb', hi⟩)
state_before: a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
i : Ordinal
h : i < a ♯ b
⊢ f i h <
    max (blsub a fun a' ha' => f (a' ♯ b) (_ : a' ♯ b < a ♯ b)) (blsub b fun b' hb' => f (a ♯ b') (_ : a ♯ b' < a ♯ b))

tactic: exact lt_max_of_lt_left ((hf h (nadd_lt_nadd_right ha' b) hi).trans_lt (lt_blsub _ _ ha'))
state_before: case inl.intro.intro
a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
i : Ordinal
h : i < a ♯ b
a' : Ordinal
ha' : a' < a
hi : i ≤ a' ♯ b
⊢ f i h <
    max (blsub a fun a' ha' => f (a' ♯ b) (_ : a' ♯ b < a ♯ b)) (blsub b fun b' hb' => f (a ♯ b') (_ : a ♯ b' < a ♯ b))

tactic: exact lt_max_of_lt_right ((hf h (nadd_lt_nadd_left hb' a) hi).trans_lt (lt_blsub _ _ hb'))
state_before: case inr.intro.intro
a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
i : Ordinal
h : i < a ♯ b
b' : Ordinal
hb' : b' < b
hi : i ≤ a ♯ b'
⊢ f i h <
    max (blsub a fun a' ha' => f (a' ♯ b) (_ : a' ♯ b < a ♯ b)) (blsub b fun b' hb' => f (a ♯ b') (_ : a ♯ b' < a ♯ b))

tactic: apply blsub_le_of_brange_subset.{u, u, v}
state_before: a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
⊢ (blsub b fun b' hb' => f (a ♯ b') (_ : a ♯ b' < a ♯ b)) ≤ blsub (a ♯ b) f

tactic: rintro c ⟨d, hd, rfl⟩
state_before: a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
⊢ (brange b fun a_1 ha => (fun b' hb' => f (a ♯ b') (_ : a ♯ b' < a ♯ b)) a_1 ha) ⊆
    brange (a ♯ b) fun a_1 ha => f a_1 ha

tactic: apply mem_brange_self
state_before: case intro.intro
a b c : Ordinal
f : (c : Ordinal) → c < a ♯ b → Ordinal
hf : ∀ {i j : Ordinal} (hi : i < a ♯ b) (hj : j < a ♯ b), i ≤ j → f i hi ≤ f j hj
d : Ordinal
hd : d < b
⊢ (fun a_1 ha => (fun b' hb' => f (a ♯ b') (_ : a ♯ b' < a ♯ b)) a_1 ha) d hd ∈ brange (a ♯ b) fun a_1 ha => f a_1 ha