Theorem: Ordnode.Valid'.balance'_lemma
File: Mathlib/Data/Ordmap/Ordset.lean

tactic: rcases H2 with (⟨hl, rfl⟩ | ⟨hr, rfl⟩) <;> rcases H1 with (h | ⟨_, h₂⟩)
state_before: α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
⊢ r.size ≤ 3 * (l.size + 1)
state_after: case inl.intro.inl
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
hl : l.size.dist l' ≤ 1
h : l' + r.size ≤ 1
⊢ r.size ≤ 3 * (l.size + 1)

case inl.intro.inr.intro
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
hl : l.size.dist l' ≤ 1
left✝ : l' ≤ delta * r.size
h₂ : r.size ≤ delta * l'
⊢ r.size ≤ 3 * (l.size + 1)

case inr.intro.inl
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l r : Ordnode α
r' : ℕ
hr : r.size.dist r' ≤ 1
h : l.size + r' ≤ 1
⊢ r.size ≤ 3 * (l.size + 1)

case inr.intro.inr.intro
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l r : Ordnode α
r' : ℕ
hr : r.size.dist r' ≤ 1
left✝ : l.size ≤ delta * r'
h₂ : r' ≤ delta * l.size
⊢ r.size ≤ 3 * (l.size + 1)

tactic: rcases Nat.eq_zero_or_pos (size l) with l0 | l0
state_before: α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
this : r.size ≤ 3 * (l.size + 1)
⊢ 2 * r.size ≤ 9 * l.size + 5 ∨ r.size ≤ 3
state_after: case inl
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
this : r.size ≤ 3 * (l.size + 1)
l0 : l.size = 0
⊢ 2 * r.size ≤ 9 * l.size + 5 ∨ r.size ≤ 3

case inr
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
this : r.size ≤ 3 * (l.size + 1)
l0 : l.size > 0
⊢ 2 * r.size ≤ 9 * l.size + 5 ∨ r.size ≤ 3

tactic: change 1 ≤ _ at l0
state_before: case inr
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
this : r.size ≤ 3 * (l.size + 1)
l0 : l.size > 0
⊢ 2 * r.size ≤ 9 * l.size + 5 ∨ r.size ≤ 3
state_after: case inr
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
this : r.size ≤ 3 * (l.size + 1)
l0 : 1 ≤ l.size
⊢ 2 * r.size ≤ 9 * l.size + 5 ∨ r.size ≤ 3

tactic: apply Or.inl
state_before: case inr
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
this : r.size ≤ 3 * (l.size + 1)
l0 : 1 ≤ l.size
⊢ 2 * r.size ≤ 9 * l.size + 5 ∨ r.size ≤ 3
state_after: case inr.h
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
this : r.size ≤ 3 * (l.size + 1)
l0 : 1 ≤ l.size
⊢ 2 * r.size ≤ 9 * l.size + 5

tactic: omega
state_before: case inr.h
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
this : r.size ≤ 3 * (l.size + 1)
l0 : 1 ≤ l.size
⊢ 2 * r.size ≤ 9 * l.size + 5
state_after: no goals

tactic: apply Or.inr
state_before: case inl
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
this : r.size ≤ 3 * (l.size + 1)
l0 : l.size = 0
⊢ 2 * r.size ≤ 9 * l.size + 5 ∨ r.size ≤ 3
state_after: case inl.h
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
this : r.size ≤ 3 * (l.size + 1)
l0 : l.size = 0
⊢ r.size ≤ 3

tactic: rwa [l0] at this
state_before: case inl.h
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
r' : ℕ
H1 : BalancedSz l' r'
H2 : l.size.dist l' ≤ 1 ∧ r.size = r' ∨ r.size.dist r' ≤ 1 ∧ l.size = l'
this : r.size ≤ 3 * (l.size + 1)
l0 : l.size = 0
⊢ r.size ≤ 3
state_after: no goals

tactic: exact le_trans (Nat.le_add_left _ _) (le_trans h (Nat.le_add_left _ _))
state_before: case inl.intro.inl
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
hl : l.size.dist l' ≤ 1
h : l' + r.size ≤ 1
⊢ r.size ≤ 3 * (l.size + 1)
state_after: no goals

tactic: exact
  le_trans h₂
    (Nat.mul_le_mul_left _ <| le_trans (Nat.dist_tri_right _ _) (Nat.add_le_add_left hl _))
state_before: case inl.intro.inr.intro
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l : Ordnode α
l' : ℕ
r : Ordnode α
hl : l.size.dist l' ≤ 1
left✝ : l' ≤ delta * r.size
h₂ : r.size ≤ delta * l'
⊢ r.size ≤ 3 * (l.size + 1)
state_after: no goals

tactic: exact
  le_trans (Nat.dist_tri_left' _ _)
    (le_trans (add_le_add hr (le_trans (Nat.le_add_left _ _) h)) (by omega))
state_before: case inr.intro.inl
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l r : Ordnode α
r' : ℕ
hr : r.size.dist r' ≤ 1
h : l.size + r' ≤ 1
⊢ r.size ≤ 3 * (l.size + 1)
state_after: no goals

tactic: omega
state_before: α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l r : Ordnode α
r' : ℕ
hr : r.size.dist r' ≤ 1
h : l.size + r' ≤ 1
⊢ 1 + 1 ≤ 3 * (l.size + 1)
state_after: no goals

tactic: rw [Nat.mul_succ]
state_before: case inr.intro.inr.intro
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l r : Ordnode α
r' : ℕ
hr : r.size.dist r' ≤ 1
left✝ : l.size ≤ delta * r'
h₂ : r' ≤ delta * l.size
⊢ r.size ≤ 3 * (l.size + 1)
state_after: case inr.intro.inr.intro
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l r : Ordnode α
r' : ℕ
hr : r.size.dist r' ≤ 1
left✝ : l.size ≤ delta * r'
h₂ : r' ≤ delta * l.size
⊢ r.size ≤ 3 * l.size + 3

tactic: exact le_trans (Nat.dist_tri_right' _ _) (add_le_add h₂ (le_trans hr (by decide)))
state_before: case inr.intro.inr.intro
α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l r : Ordnode α
r' : ℕ
hr : r.size.dist r' ≤ 1
left✝ : l.size ≤ delta * r'
h₂ : r' ≤ delta * l.size
⊢ r.size ≤ 3 * l.size + 3
state_after: no goals

tactic: decide
state_before: α✝ : Type u_1
inst✝ : Preorder α✝
α : Type u_2
l r : Ordnode α
r' : ℕ
hr : r.size.dist r' ≤ 1
left✝ : l.size ≤ delta * r'
h₂ : r' ≤ delta * l.size
⊢ 1 ≤ 3
state_after: no goals