Theorem: Composition.sizeUpTo_index_le
File: Mathlib/Combinatorics/Enumerative/Composition.lean

tactic: by_contra H
state_before: n : ℕ
c : Composition n
j : Fin n
⊢ c.sizeUpTo ↑(c.index j) ≤ ↑j
state_after: n : ℕ
c : Composition n
j : Fin n
H : ¬c.sizeUpTo ↑(c.index j) ≤ ↑j
⊢ False

tactic: set i := c.index j
state_before: n : ℕ
c : Composition n
j : Fin n
H : ¬c.sizeUpTo ↑(c.index j) ≤ ↑j
⊢ False
state_after: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ¬c.sizeUpTo ↑i ≤ ↑j
⊢ False

tactic: push_neg at H
state_before: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ¬c.sizeUpTo ↑i ≤ ↑j
⊢ False
state_after: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
⊢ False

tactic: have i_pos : (0 : ℕ) < i := by
  by_contra! i_pos
  revert H
  simp [nonpos_iff_eq_zero.1 i_pos, c.sizeUpTo_zero]
state_before: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
⊢ False
state_after: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
⊢ False

tactic: let i₁ := (i : ℕ).pred
state_before: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
⊢ False
state_after: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
i₁ : ℕ := (↑i).pred
⊢ False

tactic: have i₁_lt_i : i₁ < i := Nat.pred_lt (ne_of_gt i_pos)
state_before: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
i₁ : ℕ := (↑i).pred
⊢ False
state_after: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
i₁ : ℕ := (↑i).pred
i₁_lt_i : i₁ < ↑i
⊢ False

tactic: have i₁_succ : i₁ + 1 = i := Nat.succ_pred_eq_of_pos i_pos
state_before: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
i₁ : ℕ := (↑i).pred
i₁_lt_i : i₁ < ↑i
⊢ False
state_after: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
i₁ : ℕ := (↑i).pred
i₁_lt_i : i₁ < ↑i
i₁_succ : i₁ + 1 = ↑i
⊢ False

tactic: have := Nat.find_min (c.index_exists j.2) i₁_lt_i
state_before: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
i₁ : ℕ := (↑i).pred
i₁_lt_i : i₁ < ↑i
i₁_succ : i₁ + 1 = ↑i
⊢ False
state_after: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
i₁ : ℕ := (↑i).pred
i₁_lt_i : i₁ < ↑i
i₁_succ : i₁ + 1 = ↑i
this : ¬(↑j < c.sizeUpTo (i₁ + 1) ∧ i₁ < c.length)
⊢ False

tactic: simp [lt_trans i₁_lt_i (c.index j).2, i₁_succ] at this
state_before: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
i₁ : ℕ := (↑i).pred
i₁_lt_i : i₁ < ↑i
i₁_succ : i₁ + 1 = ↑i
this : ¬(↑j < c.sizeUpTo (i₁ + 1) ∧ i₁ < c.length)
⊢ False
state_after: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
i₁ : ℕ := (↑i).pred
i₁_lt_i : i₁ < ↑i
i₁_succ : i₁ + 1 = ↑i
this : c.sizeUpTo ↑i ≤ ↑j
⊢ False

tactic: exact Nat.lt_le_asymm H this
state_before: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : 0 < ↑i
i₁ : ℕ := (↑i).pred
i₁_lt_i : i₁ < ↑i
i₁_succ : i₁ + 1 = ↑i
this : c.sizeUpTo ↑i ≤ ↑j
⊢ False
state_after: no goals

tactic: by_contra! i_pos
state_before: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
⊢ 0 < ↑i
state_after: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : ↑i ≤ 0
⊢ False

tactic: revert H
state_before: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
H : ↑j < c.sizeUpTo ↑i
i_pos : ↑i ≤ 0
⊢ False
state_after: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
i_pos : ↑i ≤ 0
⊢ ↑j < c.sizeUpTo ↑i → False

tactic: simp [nonpos_iff_eq_zero.1 i_pos, c.sizeUpTo_zero]
state_before: n : ℕ
c : Composition n
j : Fin n
i : Fin c.length := c.index j
i_pos : ↑i ≤ 0
⊢ ↑j < c.sizeUpTo ↑i → False
state_after: no goals